Module: JSONAPIonify::Api::Base::ClassMethods
- Included in:
- JSONAPIonify::Api::Base
- Defined in:
- lib/jsonapionify/api/base/class_methods.rb
Class Method Summary collapse
Instance Method Summary collapse
- #cache(store, *args) ⇒ Object
- #cache_store ⇒ Object
- #cache_store=(store) ⇒ Object
- #eager_load ⇒ Object
- #fields ⇒ Object
- #http_error(error, request, &block) ⇒ Object
- #load_resources ⇒ Object
- #process_index(request) ⇒ Object
- #resource_files ⇒ Object
- #resource_signature ⇒ Object
- #resources_loaded? ⇒ Boolean
- #root_url(request) ⇒ Object
- #signature ⇒ Object
Class Method Details
.extended(klass) ⇒ Object
6 7 8 |
# File 'lib/jsonapionify/api/base/class_methods.rb', line 6 def self.extended(klass) klass.class_attribute :load_path, :load_file end |
Instance Method Details
#cache(store, *args) ⇒ Object
74 75 76 |
# File 'lib/jsonapionify/api/base/class_methods.rb', line 74 def cache(store, *args) self.cache_store = ActiveSupport::Cache.lookup_store(store, *args) end |
#cache_store ⇒ Object
86 87 88 |
# File 'lib/jsonapionify/api/base/class_methods.rb', line 86 def cache_store @cache_store ||= JSONAPIonify.cache_store end |
#cache_store=(store) ⇒ Object
78 79 80 |
# File 'lib/jsonapionify/api/base/class_methods.rb', line 78 def cache_store=(store) @cache_store = store end |
#eager_load ⇒ Object
82 83 84 |
# File 'lib/jsonapionify/api/base/class_methods.rb', line 82 def eager_load resources.each(&:eager_load) end |
#fields ⇒ Object
68 69 70 71 72 |
# File 'lib/jsonapionify/api/base/class_methods.rb', line 68 def fields resources.each_with_object({}) do |resource, fields| fields[resource.type.to_sym] = resource.fields end end |
#http_error(error, request, &block) ⇒ Object
38 39 40 |
# File 'lib/jsonapionify/api/base/class_methods.rb', line 38 def http_error(error, request, &block) Action.error(error, &block).call(resource_class, request) end |
#load_resources ⇒ Object
23 24 25 26 27 28 29 30 31 32 |
# File 'lib/jsonapionify/api/base/class_methods.rb', line 23 def load_resources return if !load_path || resources_loaded? superclass.load_resources if superclass.respond_to? :load_resources @documentation_output = nil @last_signature = resource_signature $".delete_if { |s| s.start_with? load_path } resource_files.each do |file| require file end end |
#process_index(request) ⇒ Object
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/jsonapionify/api/base/class_methods.rb', line 49 def process_index(request) headers = resource_class.new(request: request).exec { |c| c.response_headers } obj = JSONAPIonify.new_object obj[:meta] = { resources: {} } obj[:links] = { self: request.url } obj[:meta][:documentation] = File.join(request.root_url, 'docs') obj[:meta][:resources] = resources.each_with_object({}) do |resource, hash| if resource.actions.any? { |action| action.name == :list } hash[resource.type] = resource.get_url(root_url(request)) end end Rack::Response.new.tap do |response| response.status = 200 headers.each { |k, v| response[k] = v } response['content-type'] = 'application/vnd.api+json' response.write obj.to_json end.finish end |
#resource_files ⇒ Object
10 11 12 13 |
# File 'lib/jsonapionify/api/base/class_methods.rb', line 10 def resource_files files = Dir.glob(File.join(load_path, '**/*.rb')) files.concat(superclass < JSONAPIonify::Api::Base ? superclass.resource_files : []).sort end |
#resource_signature ⇒ Object
15 16 17 |
# File 'lib/jsonapionify/api/base/class_methods.rb', line 15 def resource_signature Digest::SHA2.hexdigest [*resource_files, load_file].map { |file| File.read file }.join end |
#resources_loaded? ⇒ Boolean
34 35 36 |
# File 'lib/jsonapionify/api/base/class_methods.rb', line 34 def resources_loaded? @last_signature == resource_signature end |
#root_url(request) ⇒ Object
42 43 44 45 46 47 |
# File 'lib/jsonapionify/api/base/class_methods.rb', line 42 def root_url(request) URI.parse(request.root_url).tap do |uri| sticky_params = sticky_params(request.params) uri.query = sticky_params.to_param if sticky_params.present? end.to_s end |
#signature ⇒ Object
19 20 21 |
# File 'lib/jsonapionify/api/base/class_methods.rb', line 19 def signature [name, resource_signature].join('@') end |