Module: ActiveFedora::Reflection::ClassMethods

Defined in:
lib/active_fedora/reflection.rb

Instance Method Summary collapse

Instance Method Details

#_reflect_on_association(association) ⇒ Object

Returns the AssociationReflection object for the association (use the symbol).

Account._reflect_on_association(:owner)             # returns the owner AssociationReflection
Invoice._reflect_on_association(:line_items).macro  # returns :has_many


124
125
126
127
128
129
130
131
132
# File 'lib/active_fedora/reflection.rb', line 124

def _reflect_on_association(association)
  val = reflections[association].is_a?(AssociationReflection) ? reflections[association] : nil
  unless val
    # When a has_many is paired with a has_and_belongs_to_many the assocation will have a plural name
    association = association.to_s.pluralize.to_sym
    val = reflections[association].is_a?(AssociationReflection) ? reflections[association] : nil
  end
  val
end

#child_resource_reflectionsObject



111
112
113
# File 'lib/active_fedora/reflection.rb', line 111

def child_resource_reflections
  reflect_on_all_associations(:has_subresource).select { |_, reflection| reflection.klass <= ActiveFedora::File }
end

#clear_reflections_cacheObject

:nodoc:



138
139
140
# File 'lib/active_fedora/reflection.rb', line 138

def clear_reflections_cache # :nodoc:
  @__reflections = nil
end

#contained_rdf_source_reflectionsObject



115
116
117
# File 'lib/active_fedora/reflection.rb', line 115

def contained_rdf_source_reflections
  reflect_on_all_associations(:has_subresource).select { |_, reflection| !(reflection.klass <= ActiveFedora::File) }
end

#outgoing_reflectionsObject



107
108
109
# File 'lib/active_fedora/reflection.rb', line 107

def outgoing_reflections
  reflections.select { |_, reflection| reflection.is_a? RDFPropertyReflection }
end

#reflect_on_all_associations(macro = nil) ⇒ Object

Returns an array of AssociationReflection objects for all the associations in the class. If you only want to reflect on a certain association type, pass in the symbol (:has_many, :has_one, :belongs_to) as the first parameter.

Example:

Account.reflect_on_all_associations             # returns an array of all associations
Account.reflect_on_all_associations(:has_many)  # returns an array of all has_many associations


92
93
94
95
96
# File 'lib/active_fedora/reflection.rb', line 92

def reflect_on_all_associations(macro = nil)
  association_reflections = reflections.dup
  association_reflections.select! { |_k, reflection| reflection.macro == macro } if macro
  association_reflections
end

#reflect_on_all_autosave_associationsObject



134
135
136
# File 'lib/active_fedora/reflection.rb', line 134

def reflect_on_all_autosave_associations
  reflections.values.select { |reflection| reflection.options[:autosave] }
end

#reflect_on_association(association) ⇒ Object

Returns the AssociationReflection object for the association (use the symbol).

Account.reflect_on_association(:owner)             # returns the owner AssociationReflection
Invoice.reflect_on_association(:line_items).macro  # returns :has_many


103
104
105
# File 'lib/active_fedora/reflection.rb', line 103

def reflect_on_association(association)
  _reflect_on_association(association)
end

#reflectionsObject

Returns a hash containing all AssociationReflection objects for the current class. Example:

Invoice.reflections
Account.reflections


63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/active_fedora/reflection.rb', line 63

def reflections
  @__reflections ||= begin
    ref = {}

    _reflections.each do |name, reflection|
      parent_reflection = reflection.parent_reflection

      if parent_reflection
        parent_name = parent_reflection.name
        ref[parent_name.to_s] = parent_reflection
      else
        ref[name] = reflection
      end
    end

    ref
  end
end