module SnFoil::Configuration::LazyJsonapiSerializer
Public Class Methods
belongs_to(relationship_name, options = {}, &block)
click to toggle source
Calls superclass method
# File lib/sn_foil/configuration/lazy_jsonapi_serializer.rb, line 9 def belongs_to(relationship_name, options = {}, &block) block = belongs_to_optimized_block(relationship_name, options, &block) super(relationship_name, options, &block) end
has_many(relationship_name, options = {}, &block)
click to toggle source
Calls superclass method
# File lib/sn_foil/configuration/lazy_jsonapi_serializer.rb, line 18 def has_many(relationship_name, options = {}, &block) # rubocop:disable Naming/PredicateName reason: method override super(relationship_name, has_relation_optimized_options(relationship_name, options), &block) end
has_one(relationship_name, options = {}, &block)
click to toggle source
Calls superclass method
# File lib/sn_foil/configuration/lazy_jsonapi_serializer.rb, line 14 def has_one(relationship_name, options = {}, &block) # rubocop:disable Naming/PredicateName reason: method override super(relationship_name, has_relation_optimized_options(relationship_name, options), &block) end
Private Class Methods
belongs_to_optimized_block(relationship_name, options = {}, &block)
click to toggle source
# File lib/sn_foil/configuration/lazy_jsonapi_serializer.rb, line 46 def belongs_to_optimized_block(relationship_name, options = {}, &block) return block if options[:skip_optimization] == true || block proc do |record, params| if params && params[:include] lookup_full_object(record_for_belongs_to, relationship_name, options, params) else create_substitute_object_for_belongs_to(record, relationship_name, options) end end end
create_if_proc_for_has_relation(if_proc, included_proc)
click to toggle source
# File lib/sn_foil/configuration/lazy_jsonapi_serializer.rb, line 68 def create_if_proc_for_has_relation(if_proc, included_proc) if if_proc.present? proc do |record, params| FastJsonapi.call_proc(included_proc, record, params) && FastJsonapi.call_proc(if_proc, record, params) end else included_proc end end
create_included_proc_for_has_relation(relationship_name)
click to toggle source
# File lib/sn_foil/configuration/lazy_jsonapi_serializer.rb, line 58 def create_included_proc_for_has_relation(relationship_name) proc do |_record, params| if params && params[:include] parse_include(params).include?(relationship_name.to_s.dasherize) else false end end end
create_substitute_object_for_belongs_to(record, relationship_name, options)
click to toggle source
# File lib/sn_foil/configuration/lazy_jsonapi_serializer.rb, line 41 def create_substitute_object_for_belongs_to(record, relationship_name, options) relationship_id = options[:id_method_name] || "#{relationship_name}_id".to_sym OpenStruct.new(id: record.send(relationship_id)) end
has_relation_optimized_options(relationship_name, options)
click to toggle source
# File lib/sn_foil/configuration/lazy_jsonapi_serializer.rb, line 78 def has_relation_optimized_options(relationship_name, options) # rubocop:disable Naming/PredicateName reason: method override return options if options[:skip_optimization] == true options[:if] = create_if_proc_for_has_relation(options[:if], create_included_proc_for_has_relation(relationship_name)) options end
lookup_full_object_for_belongs_to(record, relationship_name, options, params)
click to toggle source
# File lib/sn_foil/configuration/lazy_jsonapi_serializer.rb, line 35 def lookup_full_object_for_belongs_to(record, relationship_name, options, params) return unless parse_include(params).include?(relationship_name.to_s.dasherize) record.send(options[:object_method_name] || relationship_name) end
parse_include(params)
click to toggle source
We need to parse the include block because FastJsonAPI does not allow access to the pre-parsed includes
# File lib/sn_foil/configuration/lazy_jsonapi_serializer.rb, line 25 def parse_include(params) return [] unless params[:include] if params[:include].is_a?(String) params[:include].split(',') else params[:include] end.map { |r| r.to_s.dasherize }.join(',') end