Module: ArcWeld::Relationship::ClassMethods

Defined in:
lib/arc_weld/relationship.rb

Instance Method Summary collapse

Instance Method Details

#class_relationship_typesObject



52
53
54
# File 'lib/arc_weld/relationship.rb', line 52

def class_relationship_types
  class_variable_get :@@RELATIONSHIPS
end

#has_relationship(*args) ⇒ Object



38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/arc_weld/relationship.rb', line 38

def has_relationship(*args)
  #puts format('defining relationship on %s', self.name)
  options=case args[-1]
    when Hash
      args.pop
    else
      Hash.new(false)
  end

  args.each do |sym|
    register_relationship(sym,options[:multiple])
  end
end

#register_relationship(name, multiple = false) ⇒ Object



56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# File 'lib/arc_weld/relationship.rb', line 56

def register_relationship(name, multiple=false)
  unless class_relationship_types.include?(name)
    class_relationship_types << name

    if ArcWeld::Relationships.const_defined? constantize(name)
      self.class_eval "include ArcWeld::Relationships::#{constantize(name)}"
    end
    # TODO: this is a horrible mess
    unless self.method_defined? name
      if multiple
        self.class_eval do
          define_method("#{name}") do
            val = self.instance_variable_get("@#{name}")
            if val.nil?
              self.instance_variable_set("@#{name}",[])
            end
            self.instance_variable_get("@#{name}")
          end
        end
      else
        self.class_eval do
          define_method("#{name}") do
            self.instance_variable_get("@#{name}")
          end
        end
      end
    end
    unless self.method_defined? "#{name}="
      self.class_eval do
        define_method("#{name}=") do |val|
          self.instance_variable_set("@#{name}",val)
        end
      end
    end


  end
end