Class: JSONAPI::ResourceLoader
- Inherits:
-
Object
- Object
- JSONAPI::ResourceLoader
show all
- Defined in:
- lib/json_api/resources/resource_loader.rb
Defined Under Namespace
Classes: MissingResourceClass
Class Method Summary
collapse
Class Method Details
.active_storage_blob?(model_class) ⇒ Boolean
90
91
92
|
# File 'lib/json_api/resources/resource_loader.rb', line 90
def self.active_storage_blob?(model_class)
defined?(::ActiveStorage) && model_class == ::ActiveStorage::Blob
end
|
.build_resource_class_name(resource_type, namespace) ⇒ Object
59
60
61
62
63
64
|
# File 'lib/json_api/resources/resource_loader.rb', line 59
def self.build_resource_class_name(resource_type, namespace)
base = "#{resource_type.singularize.classify}Resource"
return base unless namespace.present?
"#{namespace.to_s.camelize}::#{base}"
end
|
.clear_cache! ⇒ Object
26
27
28
29
|
# File 'lib/json_api/resources/resource_loader.rb', line 26
def clear_cache!
@find_cache = {}
@model_cache = {}
end
|
98
99
100
101
|
# File 'lib/json_api/resources/resource_loader.rb', line 98
def self.(model_class)
parts = model_class.name.deconstantize
parts.presence&.underscore
end
|
.find(resource_type, namespace: nil) ⇒ Object
32
33
34
35
|
# File 'lib/json_api/resources/resource_loader.rb', line 32
def self.find(resource_type, namespace: nil)
cache_key = "#{namespace}::#{resource_type}"
@find_cache[cache_key] ||= find_uncached(resource_type, namespace:)
end
|
.find_base_class_resource(model_class, effective_namespace) ⇒ Object
82
83
84
85
86
87
88
|
# File 'lib/json_api/resources/resource_loader.rb', line 82
def self.find_base_class_resource(model_class, effective_namespace)
raise MissingResourceClass, model_class.name unless sti_subclass?(model_class)
base_resource_type = model_class.base_class.name.demodulize.underscore.pluralize
base_namespace = (model_class.base_class) || effective_namespace
find(base_resource_type, namespace: base_namespace)
end
|
.find_flat(resource_type, namespace) ⇒ Object
52
53
54
55
56
57
|
# File 'lib/json_api/resources/resource_loader.rb', line 52
def self.find_flat(resource_type, namespace)
flat_class = build_resource_class_name(resource_type, nil)
flat_class.constantize
rescue NameError
raise MissingResourceClass.new(resource_type, namespace:)
end
|
.find_for_model(model_class, namespace: nil) ⇒ Object
66
67
68
69
70
71
|
# File 'lib/json_api/resources/resource_loader.rb', line 66
def self.find_for_model(model_class, namespace: nil)
return ActiveStorageBlobResource if active_storage_blob?(model_class)
cache_key = "#{namespace}::#{model_class.name}"
@model_cache[cache_key] ||= find_resource_for_model(model_class, namespace)
end
|
.find_namespaced(resource_type, namespace) ⇒ Object
43
44
45
46
47
48
49
50
|
# File 'lib/json_api/resources/resource_loader.rb', line 43
def self.find_namespaced(resource_type, namespace)
namespaced_class = build_resource_class_name(resource_type, namespace)
namespaced_class.constantize
rescue NameError
raise MissingResourceClass.new(resource_type, namespace:) unless JSONAPI.configuration.namespace_fallback
find_flat(resource_type, namespace)
end
|
.find_resource_for_model(model_class, namespace) ⇒ Object
73
74
75
76
77
78
79
80
|
# File 'lib/json_api/resources/resource_loader.rb', line 73
def self.find_resource_for_model(model_class, namespace)
effective_namespace = namespace || (model_class)
resource_type = model_class.name.demodulize.underscore.pluralize
find(resource_type, namespace: effective_namespace)
rescue MissingResourceClass
find_base_class_resource(model_class, effective_namespace)
end
|
.find_uncached(resource_type, namespace: nil) ⇒ Object
37
38
39
40
41
|
# File 'lib/json_api/resources/resource_loader.rb', line 37
def self.find_uncached(resource_type, namespace: nil)
return find_namespaced(resource_type, namespace) if namespace.present?
find_flat(resource_type, namespace)
end
|
.sti_subclass?(model_class) ⇒ Boolean
94
95
96
|
# File 'lib/json_api/resources/resource_loader.rb', line 94
def self.sti_subclass?(model_class)
model_class.respond_to?(:base_class) && model_class.base_class != model_class
end
|