module Restful::Jsonapi::RestifyParam
Public Instance Methods
restify_param(param_key)
click to toggle source
# File lib/restful/jsonapi/restify_param.rb, line 6 def restify_param(param_key) ActionController::Parameters.new(param_key => restify_data(param_key)) end
Private Instance Methods
data_is_present?(data)
click to toggle source
# File lib/restful/jsonapi/restify_param.rb, line 75 def data_is_present?(data) data.is_a? Array or data.present? end
restify_belongs_to(relationship_name, relationship_data)
click to toggle source
# File lib/restful/jsonapi/restify_param.rb, line 42 def restify_belongs_to(relationship_name, relationship_data) if relationship_data[:data].present? and relationship_data[:data].values_at(:attributes,:relationships).compact.length > 0 relationship_key = relationship_name.to_s.underscore+"_attributes" {relationship_key => restify_data(relationship_name,relationship_data[:data])} else if relationship_data[:data].nil? || relationship_data[:data].empty? {"#{relationship_name.underscore}_id" => nil} else {"#{relationship_name.underscore}_id" => relationship_data[:data][:id]} end end end
restify_data(param_key, value = params)
click to toggle source
# File lib/restful/jsonapi/restify_param.rb, line 12 def restify_data(param_key, value = params) if value == params value = params.clone[:data] # leave params alone end new_params = ActionController::Parameters.new return new_params if value.nil? value.delete(:type) # relationships if value.has_key? :relationships value.delete(:relationships).each do |relationship_name, relationship_data| new_data = restify_relationship(relationship_name, relationship_data) new_params = new_params.merge(new_data.to_h) if new_data.present? end end # attributes attributes = value.has_key?(:attributes) ? value[:attributes] : value attributes = attributes.merge(id: value[:id]) if value[:id] attributes.transform_keys!(&:underscore) new_params = new_params.merge(attributes.to_unsafe_h) new_params end
restify_has_many(relationship_name, relationship_data)
click to toggle source
# File lib/restful/jsonapi/restify_param.rb, line 55 def restify_has_many(relationship_name, relationship_data) if data_is_present?(relationship_data[:data]) if relationship_data[:data].select{|d|d[:attributes]||d[:relationships]}.blank? relationship_key = relationship_name.to_s.singularize.underscore+"_ids" relationship = [] relationship_data[:data].each do |vv| relationship.push vv[:id] end {relationship_key => relationship} else relationship_key = relationship_name.to_s.underscore+"_attributes" relationship = [] relationship_data[:data].each do |vv| relationship.push restify_data(relationship_name,vv) end {relationship_key => relationship} end end end
restify_relationship(relationship_name, relationship_data)
click to toggle source
# File lib/restful/jsonapi/restify_param.rb, line 34 def restify_relationship(relationship_name, relationship_data) if data_is_present?(relationship_data[:data]) && relationship_data[:data].is_a?(Array) restify_has_many(relationship_name, relationship_data) elsif relationship_data.present? && relationship_data.has_key?(:data) restify_belongs_to(relationship_name, relationship_data) end end