Module: Prim::ClassMethods

Includes:
Helpers
Defined in:
lib/prim.rb

Instance Method Summary collapse

Methods included from Helpers

#plural_sym, #singular_sym

Instance Method Details

#has_primary(name, options = {}) ⇒ Object

TODO: allow multiple singular names in one call.



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/prim.rb', line 19

def has_primary name, options = {}
  singular_name    = name.to_sym
  association_name = plural_sym(singular_name)

  self.prim_relationships = self.prim_relationships.try(:dup) || Hash.new
  self.prim_relationships[ singular_name ] = Prim::Relationship.new(association_name, self, options)

  # Store this configuration for global access.
  Prim.configured_primaries << self.prim_relationships[ singular_name ]

  # Create dynamic methods for getting and setting the
  # primary Collection member.
  define_method "primary_#{ singular_name }" do
    prim_collection_for(singular_name).primary
  end

  define_method "primary_#{ singular_name }=" do |instance|
    prim_collection_for(singular_name).primary = instance
  end

  # We alias the association's method chain so the original can be accessed.
  # IS THIS IMPORTANT?!
  define_method "#{ association_name }_with_primaries" do
    prim_collection_for(singular_name).all
  end

  alias_method_chain association_name, :primaries
end