module Flapjack::Gateways::JSONAPI::Methods::ResourceGet
Public Class Methods
registered(app)
click to toggle source
# File lib/flapjack/gateways/jsonapi/methods/resource_get.rb, line 11 def self.registered(app) app.helpers Flapjack::Gateways::JSONAPI::Helpers::Headers app.helpers Flapjack::Gateways::JSONAPI::Helpers::Miscellaneous app.helpers Flapjack::Gateways::JSONAPI::Helpers::Resources app.helpers Flapjack::Gateways::JSONAPI::Helpers::Serialiser Flapjack::Gateways::JSONAPI::RESOURCE_CLASSES.each do |resource_class| jsonapi_method = resource_class.jsonapi_methods[:get] unless jsonapi_method.nil? resource = resource_class.short_model_name.plural app.class_eval do single = resource_class.short_model_name.singular model_type = resource_class.short_model_name.name model_type_plural = model_type.pluralize model_type_data = "data_#{model_type}".to_sym model_type_data_plural = "data_#{model_type_plural}".to_sym swagger_path "/#{resource}" do operation :get do key :description, jsonapi_method.descriptions[:multiple] key :operationId, "get_all_#{resource}" key :produces, [Flapjack::Gateways::JSONAPI.media_type_produced] parameter do key :name, :fields key :in, :query key :description, 'Comma-separated list of fields to return' key :required, false key :type, :string end parameter do key :name, :sort key :in, :query key :description, '' key :required, false key :type, :string end parameter do key :name, :filter key :in, :query key :description, '' key :required, false key :type, :array key :collectionFormat, :multi items do key :type, :string key :format, :filter end end parameter do key :name, :include key :in, :query key :description, '' key :required, false key :type, :string end parameter do key :name, :page key :in, :query key :description, 'Page number' key :required, false key :type, :integer end parameter do key :name, :per_page key :in, :query key :description, "Number of #{resource} per page" key :required, false key :type, :integer end response 200 do key :description, "GET #{resource} success" schema do key :'$ref', model_type_data_plural end end end end swagger_path "/#{resource}/{#{single}_id}" do operation :get do key :description, jsonapi_method.descriptions[:singular] key :operationId, "get_#{single}" key :produces, [Flapjack::Gateways::JSONAPI.media_type_produced] parameter do key :name, "#{single}_id".to_sym key :in, :path key :description, "Id of a #{single}" key :required, true key :type, :string key :format, :uuid end parameter do key :name, :fields key :in, :query key :description, 'Comma-separated list of fields to return' key :required, false key :type, :string end response 200 do key :description, "GET #{single} response" schema do key :'$ref', model_type_data end end response 404 do key :description, "Not Found" schema do key :'$ref', :Errors end end end end end # FIXME return 400 if any 'include' param path not recognised app.get %r{^/#{resource}(?:/(.+))?$} do resource_id = params[:captures].nil? ? nil : params[:captures].first incl = params[:include].nil? ? nil : params[:include].split(',') locks = (incl.nil? || incl.empty?) ? [] : lock_for_include_clause(resource_class, :include => incl.dup) status 200 json_data = {} resource_class.jsonapi_lock_method(:get, locks) do resources, links, meta = if resource_id.nil? scoped = resource_filter_sort(resource_class, :filter => params[:filter], :sort => params[:sort]) paginate_get(scoped, :page => params[:page], :per_page => params[:per_page]) else [resource_class.intersect(:id => Set.new([resource_id])), {}, {}] end links[:self] = request_url json_data[:links] = links if resources.empty? if resource_id.nil? json_data[:data] = [] else raise ::Zermelo::Records::Errors::RecordNotFound.new(resource_class, resource_id) end else d = as_jsonapi(resource_class, resources, (resource_id.nil? ? resources.ids : Set.new([resource_id])), :fields => params[:fields], :include => incl, :unwrap => !resource_id.nil?, :query_type => :resource) json_data[:data] = d[:data] unless d[:included].nil? || d[:included].empty? json_data[:included] = d[:included] end json_data[:meta] = meta unless meta.nil? || meta.empty? end end Flapjack.dump_json(json_data) end end end end