class Hat::Nesting::Relationloader
Attributes
has_manys[R]
has_ones[R]
relation_includes[R]
serializable[R]
Public Class Methods
new(opts = {})
click to toggle source
# File lib/hat/nesting/relation_loader.rb, line 5 def initialize(opts = {}) @serializable = opts[:serializable] @has_ones = opts[:has_ones] @has_manys = opts[:has_manys] @relation_includes = opts[:relation_includes] end
Public Instance Methods
relation_hash()
click to toggle source
# File lib/hat/nesting/relation_loader.rb, line 12 def relation_hash has_one_hash.merge(has_many_hash) end
Private Instance Methods
has_many_hash()
click to toggle source
# File lib/hat/nesting/relation_loader.rb, line 41 def has_many_hash has_manys.inject({}) { |has_many_hash, attr_name| serialize_has_many_relations(has_many_hash, attr_name) } end
has_one_hash()
click to toggle source
# File lib/hat/nesting/relation_loader.rb, line 20 def has_one_hash has_ones.inject({}) { |has_one_hash, attr_name| serialize_has_one_relation(has_one_hash, attr_name) } end
includes_for_attr(attr_name)
click to toggle source
# File lib/hat/nesting/relation_loader.rb, line 71 def includes_for_attr(attr_name) relation_includes.nested_includes_for(attr_name) || [] end
relation_for(attr_name)
click to toggle source
# File lib/hat/nesting/relation_loader.rb, line 59 def relation_for(attr_name) serializable.send(attr_name) if relation_includes.includes_relation?(attr_name) end
serialize_has_many_relations(has_many_hash, attr_name)
click to toggle source
# File lib/hat/nesting/relation_loader.rb, line 45 def serialize_has_many_relations(has_many_hash, attr_name) if related_items = relation_for(attr_name) has_many_hash[attr_name] = related_items.map do |related_item| serialize_nested_item_with_includes(related_item, includes_for_attr(attr_name)) end else has_many_relation = serializable.send(attr_name) || [] has_many_hash["#{attr_name.to_s.singularize}_ids"] = has_many_relation.map(&:id) end has_many_hash end
serialize_has_one_relation(has_one_hash, attr_name)
click to toggle source
# File lib/hat/nesting/relation_loader.rb, line 24 def serialize_has_one_relation(has_one_hash, attr_name) id_attr = "#{attr_name}_id" if related_item = relation_for(attr_name) has_one_hash[attr_name] = serialize_nested_item_with_includes(related_item, includes_for_attr(attr_name)) elsif serializable.respond_to?(id_attr) has_one_hash[id_attr] = serializable.send(id_attr) else has_one_hash[id_attr] = serializable.send(attr_name).try(:id) end has_one_hash end
serialize_nested_item_with_includes(serializable_item, includes)
click to toggle source
# File lib/hat/nesting/relation_loader.rb, line 63 def serialize_nested_item_with_includes(serializable_item, includes) serializer = serializer_for(serializable_item) serializer.includes(*includes).serialize end
serializer_class_for(serializable)
click to toggle source
# File lib/hat/nesting/relation_loader.rb, line 83 def serializer_class_for(serializable) Hat::SerializerRegistry.instance.get(:nesting, serializable.class) end
serializer_for(serializable_item)
click to toggle source
# File lib/hat/nesting/relation_loader.rb, line 75 def serializer_for(serializable_item) serializer_class_for(serializable_item).new(serializable_item, { result: {} }) end