Module: RestPack::Serializer::SideLoading::ClassMethods
- Defined in:
- lib/restpack_serializer/serializable/side_loading.rb
Instance Method Summary collapse
- #associations ⇒ Object
- #can_include(*includes) ⇒ Object
- #can_includes ⇒ Object
- #has_associations? ⇒ Boolean
- #links ⇒ Object
- #side_loads(models, options) ⇒ Object
Instance Method Details
#associations ⇒ Object
51 52 53 54 55 56 57 |
# File 'lib/restpack_serializer/serializable/side_loading.rb', line 51 def associations return [] unless has_associations? can_includes.map do |include| association = association_from_include(include) association if supported_association?(association.macro) end.compact end |
#can_include(*includes) ⇒ Object
21 22 23 24 |
# File 'lib/restpack_serializer/serializable/side_loading.rb', line 21 def can_include(*includes) @can_includes ||= [] @can_includes += includes end |
#can_includes ⇒ Object
17 18 19 |
# File 'lib/restpack_serializer/serializable/side_loading.rb', line 17 def can_includes @can_includes || [] end |
#has_associations? ⇒ Boolean
47 48 49 |
# File 'lib/restpack_serializer/serializable/side_loading.rb', line 47 def has_associations? @can_includes end |
#links ⇒ Object
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/restpack_serializer/serializable/side_loading.rb', line 26 def links {}.tap do |links| associations.each do |association| if association.macro == :belongs_to link_key = "#{self.key}.#{association.name}" href = "/#{association.plural_name}/{#{link_key}}" elsif association.macro.to_s.match(/has_/) singular_key = self.key.to_s.singularize link_key = "#{self.key}.#{association.plural_name}" href = "/#{association.plural_name}?#{singular_key}_id={#{key}.id}" end links.merge!(link_key => { :href => href_prefix + href, :type => association.plural_name.to_sym } ) end end end |
#side_loads(models, options) ⇒ Object
5 6 7 8 9 10 11 12 13 14 15 |
# File 'lib/restpack_serializer/serializable/side_loading.rb', line 5 def side_loads(models, ) { meta: { } }.tap do |side_loads| return side_loads if models.empty? || .include.nil? .include.each do |include| side_load_data = side_load(include, models, ) side_loads[:meta].merge!(side_load_data[:meta] || {}) side_loads.merge! side_load_data.except(:meta) end end end |