class HttpApiTools::ExpandedRelationIncludes

Attributes

relation_includes[R]
serializer_class[R]

Public Class Methods

new(relation_includes, serializer_class) click to toggle source
# File lib/http_api_tools/expanded_relation_includes.rb, line 6
def initialize(relation_includes, serializer_class)
  @relation_includes = relation_includes
  @serializer_class = serializer_class
end

Public Instance Methods

to_a() click to toggle source
# File lib/http_api_tools/expanded_relation_includes.rb, line 11
def to_a
  @expanded_includes ||= begin
    expanded_includes = []
    expand_includes(serializer_class, relation_includes, expanded_includes)
    expanded_includes
  end
end

Private Instance Methods

append_has_many_includes(related_serializer, base_includes, expanded_includes) click to toggle source
# File lib/http_api_tools/expanded_relation_includes.rb, line 67
def append_has_many_includes(related_serializer, base_includes, expanded_includes)

  related_serializer.has_manys.each do |has_many_attr|
    expanded_includes << has_many_attr unless RelationIncludes.new(*base_includes).find(has_many_attr)
  end

end
expand_includes(target_serializer_class, base_includes, expanded_includes) click to toggle source
# File lib/http_api_tools/expanded_relation_includes.rb, line 23
def expand_includes(target_serializer_class, base_includes, expanded_includes)

  append_has_many_includes(target_serializer_class, base_includes, expanded_includes)

  base_includes.each do |include_item|
    if include_item.kind_of?(Symbol)
      expand_includes_for_symbol(include_item, target_serializer_class, expanded_includes)
    elsif include_item.kind_of?(Hash)
      expand_includes_for_hash(include_item, target_serializer_class, expanded_includes)
    end
  end

end
expand_includes_for_hash(include_item, target_serializer_class, expanded_includes) click to toggle source
# File lib/http_api_tools/expanded_relation_includes.rb, line 53
def expand_includes_for_hash(include_item, target_serializer_class, expanded_includes)

  nested_include_key = include_item.keys.first
  nested_includes = include_item[nested_include_key]

  related_type = target_serializer_class.serializable_type.reflections[nested_include_key].class_name.constantize
  related_serializer = SerializerRegistry.instance.get(target_serializer_class.serializer_type, related_type)
  new_nested_includes = []

  expanded_includes << { nested_include_key => new_nested_includes }
  expand_includes(related_serializer, nested_includes, new_nested_includes)

end
expand_includes_for_symbol(include_item, target_serializer_class, expanded_includes) click to toggle source
# File lib/http_api_tools/expanded_relation_includes.rb, line 37
def expand_includes_for_symbol(include_item, target_serializer_class, expanded_includes)

  related_type = target_serializer_class.serializable_type.reflections[include_item].class_name.constantize
  related_serializer = SerializerRegistry.instance.get(target_serializer_class.serializer_type, related_type)
  new_nested_includes = []

  append_has_many_includes(related_serializer, [], new_nested_includes)

  if new_nested_includes.empty?
    expanded_includes << include_item
  else
    expanded_includes << { include_item => new_nested_includes }
  end

end