Class: JsonApi::Resources::Discovery
- Inherits:
-
Object
- Object
- JsonApi::Resources::Discovery
- Defined in:
- lib/json_api_ruby/resources/discovery.rb
Class Method Summary collapse
- .resource_class(model_name, namespace:, parent:) ⇒ Object
- .resource_for_name(model, options = {}) ⇒ Object
- .resource_path(model_name, parent) ⇒ Object
Class Method Details
.resource_class(model_name, namespace:, parent:) ⇒ Object
30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/json_api_ruby/resources/discovery.rb', line 30 def self.resource_class(model_name, namespace:, parent:) if namespace klass = [ namespace.to_s.underscore, "#{model_name.to_s.underscore}_resource" ].join('/').classify else klass = resource_path(model_name, parent).join.classify end klass end |
.resource_for_name(model, options = {}) ⇒ Object
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
# File 'lib/json_api_ruby/resources/discovery.rb', line 4 def self.resource_for_name(model, ={}) @discovered_classes ||= {} klass = .fetch(:resource_class, nil) # Duck typing. If klass responds to :new, we assume it's a class return klass if klass.respond_to?(:new) namespace = .fetch(:namespace, nil) parent = .fetch(:parent_resource, nil) if klass.blank? cached_class = @discovered_classes[model.class.to_s] if cached_class.blank? klass = resource_class(model.class.to_s.underscore, namespace: namespace, parent: parent) else return cached_class end end const = Object.const_get(klass) @discovered_classes[model.class.to_s] ||= const const rescue NameError fail ::JsonApi::ResourceNotFound.new("Could not find resource class `#{klass}'") end |
.resource_path(model_name, parent) ⇒ Object
42 43 44 45 46 47 48 |
# File 'lib/json_api_ruby/resources/discovery.rb', line 42 def self.resource_path(model_name, parent) current_namespace = parent.class.to_s.underscore.split('/') current_namespace.pop current_namespace << '/' if current_namespace.present? current_namespace << "#{model_name.to_s}_resource" current_namespace end |