Module: JSONAPIonify::Api::Base::ResourceDefinitions
- Included in:
- JSONAPIonify::Api::Base
- Defined in:
- lib/jsonapionify/api/base/resource_definitions.rb
Class Method Summary collapse
Instance Method Summary collapse
- #define_resource(name, extend: nil, &block) ⇒ Object
- #resource(type) ⇒ Object
- #resource_defined?(name) ⇒ Boolean
- #resources ⇒ Object
Class Method Details
.extended(klass) ⇒ Object
3 4 5 6 7 8 |
# File 'lib/jsonapionify/api/base/resource_definitions.rb', line 3 def self.extended(klass) klass.class_eval do extend JSONAPIonify::InheritedAttributes inherited_hash_attribute :resource_definitions end end |
Instance Method Details
#define_resource(name, extend: nil, &block) ⇒ Object
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/jsonapionify/api/base/resource_definitions.rb', line 36 def define_resource(name, extend: nil, &block) resource_definitions[name.to_sym] = if extend sup = superclass cur = self proc do extend_def = if name.to_sym == extend.to_sym && sup.respond_to?(:resource) sup.resource(extend) sup.resource_definitions[extend.to_sym] else cur.resource(extend) cur.resource_definitions[extend.to_sym] end class_eval &extend_def class_eval &block end else block end const_name = name.to_s.camelcase + 'Resource' remove_const(const_name) if const_defined? const_name, false name end |
#resource(type) ⇒ Object
10 11 12 13 14 15 16 17 18 19 20 21 22 |
# File 'lib/jsonapionify/api/base/resource_definitions.rb', line 10 def resource(type) raise ArgumentError, 'type required' if type.nil? type = type.to_sym const_name = type.to_s.camelcase + 'Resource' return const_get(const_name, false) if const_defined?(const_name, false) raise Errors::ResourceNotFound, "Resource not defined: #{type}" unless resource_defined?(type) klass = Class.new(resource_class, &resource_definitions[type]).set_type(type) param(:fields, type) const_set const_name, klass rescue NameError => e raise e unless e.instance_of?(NameError) raise Errors::ResourceNotFound, "Resource not defined: #{type}" end |
#resource_defined?(name) ⇒ Boolean
24 25 26 27 |
# File 'lib/jsonapionify/api/base/resource_definitions.rb', line 24 def resource_defined?(name) load_resources !!resource_definitions[name] end |
#resources ⇒ Object
29 30 31 32 33 34 |
# File 'lib/jsonapionify/api/base/resource_definitions.rb', line 29 def resources load_resources resource_definitions.map do |name, _| resource(name) end end |