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
88
89
90
|
# File 'lib/json_api/resources/resource_loader.rb', line 88
def self.active_storage_blob?(model_class)
defined?(::ActiveStorage) && model_class == ::ActiveStorage::Blob
end
|
.build_resource_class_name(resource_type, namespace) ⇒ Object
43
44
45
46
47
48
|
# File 'lib/json_api/resources/resource_loader.rb', line 43
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
|
.candidates_for_class(model_class, namespace) ⇒ Object
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
# File 'lib/json_api/resources/resource_loader.rb', line 64
def self.candidates_for_class(model_class, namespace)
resource_type = model_class.name.demodulize.underscore.pluralize
candidates = []
candidates << build_resource_class_name(resource_type, namespace) if namespace
candidates << "#{model_class.name.gsub("::", "")}Resource" if model_class.name.include?("::")
candidates << build_resource_class_name(resource_type, nil)
candidates
end
|
96
97
98
99
|
# File 'lib/json_api/resources/resource_loader.rb', line 96
def self.(model_class)
parts = model_class.name.deconstantize
parts.presence&.underscore
end
|
.find(resource_type, namespace: nil) ⇒ Object
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
# File 'lib/json_api/resources/resource_loader.rb', line 19
def self.find(resource_type, namespace: nil)
candidates = []
candidates << build_resource_class_name(resource_type, namespace) if namespace
if !namespace || JSONAPI.configuration.namespace_fallback
candidates << build_resource_class_name(resource_type,
nil,)
end
resolve(candidates) || raise(MissingResourceClass.new(resource_type, namespace:))
end
|
.find_for_model(model_class, namespace: nil) ⇒ Object
34
35
36
37
38
39
40
41
|
# File 'lib/json_api/resources/resource_loader.rb', line 34
def self.find_for_model(model_class, namespace: nil)
return ActiveStorageBlobResource if active_storage_blob?(model_class)
effective_namespace = namespace || (model_class)
candidates = model_candidates(model_class, effective_namespace)
resolve(candidates) || raise(MissingResourceClass.new(model_class.name, namespace: effective_namespace))
end
|
.model_candidates(model_class, namespace) ⇒ Object
Builds an ordered list of candidate class names for a model, including STI base class candidates as a fallback.
52
53
54
55
56
57
58
59
60
61
62
|
# File 'lib/json_api/resources/resource_loader.rb', line 52
def self.model_candidates(model_class, namespace)
candidates = candidates_for_class(model_class, namespace)
if sti_subclass?(model_class)
base = model_class.base_class
base_ns = (base) || namespace
candidates.concat(candidates_for_class(base, base_ns))
end
candidates
end
|
.resolve(candidates) ⇒ Object
80
81
82
83
84
85
86
|
# File 'lib/json_api/resources/resource_loader.rb', line 80
def self.resolve(candidates)
candidates.each do |name|
klass = name.safe_constantize
return klass if klass
end
nil
end
|
.sti_subclass?(model_class) ⇒ Boolean
92
93
94
|
# File 'lib/json_api/resources/resource_loader.rb', line 92
def self.sti_subclass?(model_class)
model_class.respond_to?(:base_class) && model_class.base_class != model_class
end
|