class HaveAPI::Resource
Attributes
Public Class Methods
Source
# File lib/haveapi/resource.rb, line 18 def self.action_defined(klass) @actions ||= [] @actions << klass end
Source
# File lib/haveapi/resource.rb, line 32 def self.actions(&) (@actions || []).each(&) end
Source
# File lib/haveapi/resource.rb, line 119 def self.define_action(name, superclass: Action, &) return false if const_defined?(name) cls = Class.new(superclass) const_set(name, cls) cls.resource = self cls.action_name = name superclass.delayed_inherited(cls) cls.class_exec(&) end
Source
# File lib/haveapi/resource.rb, line 109 def self.define_resource(name, superclass: Resource, &block) return false if const_defined?(name) && self != HaveAPI::Resource cls = Class.new(superclass) const_set(name, cls) if self != HaveAPI::Resource cls.resource_name = name cls.class_exec(&block) if block cls end
Source
# File lib/haveapi/resource.rb, line 82 def self.describe(hash, context) ret = { description: desc, actions: {}, resources: {} } context.resource = self orig_resource_path = context.resource_path context.resource_path = context.resource_path + [resource_name.underscore] hash[:actions].each do |action, path| context.action = action context.path = path a_name = action.action_name.underscore a_desc = action.describe(context) ret[:actions][a_name] = a_desc if a_desc end hash[:resources].each do |resource, children| ret[:resources][resource.resource_name.underscore] = resource.describe(children, context) end context.resource_path = orig_resource_path ret end
Source
# File lib/haveapi/resource.rb, line 13 def self.inherited(subclass) super subclass.instance_variable_set(:@obj_type, obj_type) end
Calls superclass method
Source
# File lib/haveapi/resource.rb, line 23 def self.params(name, &block) if block @params ||= {} @params[name] = block else @params[name] end end
Source
# File lib/haveapi/resource.rb, line 50 def self.resource_name (@resource_name ? @resource_name.to_s : to_s).demodulize end
Source
# File lib/haveapi/resource.rb, line 36 def self.resources constants.select do |c| obj = const_get(c) begin if obj.obj_type == :resource yield obj end rescue NoMethodError next end end end
Source
# File lib/haveapi/resource.rb, line 58 def self.rest_name singular ? resource_name.singularize.underscore : resource_name.tableize end
Source
# File lib/haveapi/resource.rb, line 62 def self.routes(prefix = '/', resource_path: []) ret = [] prefix = "#{prefix}#{@route || rest_name}/" new_resource_path = resource_path + [resource_name.underscore] actions do |a| # Call used_by for selected model adapters. It is safe to do # only when all classes are loaded. a.initialize ret << Route.new(a.build_route(prefix).chomp('/'), a, new_resource_path) end resources do |r| ret << { r => r.routes(prefix, resource_path: new_resource_path) } end ret end