Class DataMapper::Associations::HasNAssociation
In: lib/data_mapper/associations/has_n_association.rb
lib/data_mapper/associations/has_n_association.rb
Parent: Object

Methods

Constants

OPTIONS = [ :class, :class_name, :foreign_key, :dependent
OPTIONS = [ :class, :class_name, :foreign_key, :dependent

Attributes

complementary_association  [RW] 
complementary_association  [RW] 
options  [R] 
options  [R] 

Public Class methods

[Source]

    # File lib/data_mapper/associations/has_n_association.rb, line 19
19:       def initialize(klass, association_name, options)
20:         @constant = klass
21:         @adapter = database.adapter
22:         @table = @adapter.table(klass)
23:         @association_name = association_name.to_sym
24:         @options = options || Hash.new
25:         
26:         define_accessor(klass)
27:         
28:         Persistence::dependencies.add(associated_constant_name) do |klass|
29:           @foreign_key_column = associated_table[foreign_key_name]
30:           
31:           unless @foreign_key_column
32:             associated_constant.property(foreign_key_name, foreign_key_type)
33:           
34:             @foreign_key_column = associated_table[foreign_key_name]
35:           
36:             if @foreign_key_column.nil?
37:               raise ForeignKeyNotFoundError.new("key_table => \#{key_table.inspect},\nassociation_table => \#{associated_table.inspect},\nassociation_name => \#{name},\nforeign_key_name => \#{foreign_key_name.inspect},\nforeign_key_type => \#{foreign_key_type.inspect},\nconstant => \#{constant.inspect},\nassociated_constant => \#{associated_constant.inspect}\n".compress_lines)
38:             end
39:           end
40:         end
41:       end

[Source]

    # File lib/data_mapper/associations/has_n_association.rb, line 19
19:       def initialize(klass, association_name, options)
20:         @constant = klass
21:         @adapter = database.adapter
22:         @table = @adapter.table(klass)
23:         @association_name = association_name.to_sym
24:         @options = options || Hash.new
25:         
26:         define_accessor(klass)
27:         
28:         Persistence::dependencies.add(associated_constant_name) do |klass|
29:           @foreign_key_column = associated_table[foreign_key_name]
30:           
31:           unless @foreign_key_column
32:             associated_constant.property(foreign_key_name, foreign_key_type)
33:           
34:             @foreign_key_column = associated_table[foreign_key_name]
35:           
36:             if @foreign_key_column.nil?
37:               raise ForeignKeyNotFoundError.new("key_table => \#{key_table.inspect},\nassociation_table => \#{associated_table.inspect},\nassociation_name => \#{name},\nforeign_key_name => \#{foreign_key_name.inspect},\nforeign_key_type => \#{foreign_key_type.inspect},\nconstant => \#{constant.inspect},\nassociated_constant => \#{associated_constant.inspect}\n".compress_lines)
38:             end
39:           end
40:         end
41:       end

Public Instance methods

[Source]

     # File lib/data_mapper/associations/has_n_association.rb, line 138
138:       def activate!(force = false)
139:         foreign_key_column
140:       end

[Source]

     # File lib/data_mapper/associations/has_n_association.rb, line 138
138:       def activate!(force = false)
139:         foreign_key_column
140:       end

[Source]

     # File lib/data_mapper/associations/has_n_association.rb, line 108
108:       def associated_columns
109:         associated_table.columns.reject { |column| column.lazy? }
110:       end

[Source]

     # File lib/data_mapper/associations/has_n_association.rb, line 108
108:       def associated_columns
109:         associated_table.columns.reject { |column| column.lazy? }
110:       end

[Source]

    # File lib/data_mapper/associations/has_n_association.rb, line 60
60:       def associated_constant
61:         @associated_constant || @associated_constant = Kernel.const_get(associated_constant_name)
62:       end

[Source]

    # File lib/data_mapper/associations/has_n_association.rb, line 60
60:       def associated_constant
61:         @associated_constant || @associated_constant = Kernel.const_get(associated_constant_name)
62:       end

[Source]

    # File lib/data_mapper/associations/has_n_association.rb, line 64
64:       def associated_constant_name
65:         @associated_constant_name || begin
66:           
67:           if @options.has_key?(:class) || @options.has_key?(:class_name)
68:             @associated_constant_name = (@options[:class] || @options[:class_name])
69:             
70:             if @associated_constant_name.kind_of?(String)
71:               @associated_constant_name = Inflector.classify(@associated_constant_name)
72:             elsif @associated_constant_name.kind_of?(Class)
73:               @associated_constant_name = @associated_constant_name.name
74:             end  
75:           else
76:             @associated_constant_name = Inflector.classify(@association_name)
77:           end
78:           
79:           @associated_constant_name
80:         end
81:         
82:       end

[Source]

    # File lib/data_mapper/associations/has_n_association.rb, line 64
64:       def associated_constant_name
65:         @associated_constant_name || begin
66:           
67:           if @options.has_key?(:class) || @options.has_key?(:class_name)
68:             @associated_constant_name = (@options[:class] || @options[:class_name])
69:             
70:             if @associated_constant_name.kind_of?(String)
71:               @associated_constant_name = Inflector.classify(@associated_constant_name)
72:             elsif @associated_constant_name.kind_of?(Class)
73:               @associated_constant_name = @associated_constant_name.name
74:             end  
75:           else
76:             @associated_constant_name = Inflector.classify(@association_name)
77:           end
78:           
79:           @associated_constant_name
80:         end
81:         
82:       end

[Source]

     # File lib/data_mapper/associations/has_n_association.rb, line 104
104:       def associated_table
105:         @association_table || @association_table = @adapter.table(associated_constant)
106:       end

[Source]

     # File lib/data_mapper/associations/has_n_association.rb, line 104
104:       def associated_table
105:         @association_table || @association_table = @adapter.table(associated_constant)
106:       end

[Source]

     # File lib/data_mapper/associations/has_n_association.rb, line 112
112:       def complementary_association
113:         @complementary_association || begin
114:           @complementary_association = associated_table.associations.find do |mapping|
115:             mapping.is_a?(BelongsToAssociation) && 
116:             mapping.foreign_key_column == foreign_key_column &&
117:             mapping.key_table.name == key_table.name
118:           end
119:           
120:           if @complementary_association
121:             class << self
122:               attr_accessor :complementary_association
123:             end
124:           end
125:           
126:           return @complementary_association
127:         end
128:       end

[Source]

     # File lib/data_mapper/associations/has_n_association.rb, line 112
112:       def complementary_association
113:         @complementary_association || begin
114:           @complementary_association = associated_table.associations.find do |mapping|
115:             mapping.is_a?(BelongsToAssociation) && 
116:             mapping.foreign_key_column == foreign_key_column &&
117:             mapping.key_table.name == key_table.name
118:           end
119:           
120:           if @complementary_association
121:             class << self
122:               attr_accessor :complementary_association
123:             end
124:           end
125:           
126:           return @complementary_association
127:         end
128:       end

[Source]

    # File lib/data_mapper/associations/has_n_association.rb, line 56
56:       def constant
57:         @constant
58:       end

[Source]

    # File lib/data_mapper/associations/has_n_association.rb, line 56
56:       def constant
57:         @constant
58:       end

[Source]

     # File lib/data_mapper/associations/has_n_association.rb, line 130
130:       def finder_options
131:         @finder_options || @finder_options = @options.reject { |k,v| self.class::OPTIONS.include?(k) }
132:       end

[Source]

     # File lib/data_mapper/associations/has_n_association.rb, line 130
130:       def finder_options
131:         @finder_options || @finder_options = @options.reject { |k,v| self.class::OPTIONS.include?(k) }
132:       end

[Source]

    # File lib/data_mapper/associations/has_n_association.rb, line 88
88:       def foreign_key_column
89:         @foreign_key_column
90:       end

[Source]

    # File lib/data_mapper/associations/has_n_association.rb, line 88
88:       def foreign_key_column
89:         @foreign_key_column
90:       end

[Source]

    # File lib/data_mapper/associations/has_n_association.rb, line 92
92:       def foreign_key_name
93:         @foreign_key_name || @foreign_key_name = (@options[:foreign_key] || key_table.default_foreign_key)
94:       end

[Source]

    # File lib/data_mapper/associations/has_n_association.rb, line 92
92:       def foreign_key_name
93:         @foreign_key_name || @foreign_key_name = (@options[:foreign_key] || key_table.default_foreign_key)
94:       end

[Source]

    # File lib/data_mapper/associations/has_n_association.rb, line 96
96:       def foreign_key_type
97:         @foreign_key_type || @foreign_key_type = key_table.key.type
98:       end

[Source]

    # File lib/data_mapper/associations/has_n_association.rb, line 96
96:       def foreign_key_type
97:         @foreign_key_type || @foreign_key_type = key_table.key.type
98:       end

[Source]

     # File lib/data_mapper/associations/has_n_association.rb, line 100
100:       def key_table
101:         @key_table || @key_table = @adapter.table(constant)
102:       end

[Source]

     # File lib/data_mapper/associations/has_n_association.rb, line 100
100:       def key_table
101:         @key_table || @key_table = @adapter.table(constant)
102:       end

[Source]

    # File lib/data_mapper/associations/has_n_association.rb, line 52
52:       def name
53:         @association_name
54:       end

[Source]

    # File lib/data_mapper/associations/has_n_association.rb, line 52
52:       def name
53:         @association_name
54:       end

[Source]

    # File lib/data_mapper/associations/has_n_association.rb, line 84
84:       def primary_key_column
85:         @primary_key_column || @primary_key_column = key_table.key
86:       end

[Source]

    # File lib/data_mapper/associations/has_n_association.rb, line 84
84:       def primary_key_column
85:         @primary_key_column || @primary_key_column = key_table.key
86:       end

[Source]

     # File lib/data_mapper/associations/has_n_association.rb, line 134
134:       def to_sql
135:         "JOIN #{associated_table.to_sql} ON #{foreign_key_column.to_sql(true)} = #{primary_key_column.to_sql(true)}"
136:       end

[Source]

     # File lib/data_mapper/associations/has_n_association.rb, line 134
134:       def to_sql
135:         "JOIN #{associated_table.to_sql} ON #{foreign_key_column.to_sql(true)} = #{primary_key_column.to_sql(true)}"
136:       end

[Validate]