Class | DataMapper::Associations::HasNAssociation |
In: |
lib/data_mapper/associations/has_n_association.rb
lib/data_mapper/associations/has_n_association.rb |
Parent: | Object |
OPTIONS | = | [ :class, :class_name, :foreign_key, :dependent |
OPTIONS | = | [ :class, :class_name, :foreign_key, :dependent |
complementary_association | [RW] | |
complementary_association | [RW] | |
options | [R] | |
options | [R] |
# 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
# 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
# File lib/data_mapper/associations/has_n_association.rb, line 138 138: def activate!(force = false) 139: foreign_key_column 140: end
# File lib/data_mapper/associations/has_n_association.rb, line 138 138: def activate!(force = false) 139: foreign_key_column 140: end
# 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
# 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
# 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
# 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
# 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
# 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
# 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
# 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
# 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
# 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
# File lib/data_mapper/associations/has_n_association.rb, line 56 56: def constant 57: @constant 58: end
# File lib/data_mapper/associations/has_n_association.rb, line 56 56: def constant 57: @constant 58: end
# 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
# 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
# File lib/data_mapper/associations/has_n_association.rb, line 88 88: def foreign_key_column 89: @foreign_key_column 90: end
# File lib/data_mapper/associations/has_n_association.rb, line 88 88: def foreign_key_column 89: @foreign_key_column 90: end
# 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
# 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
# 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
# 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
# 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
# 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
# File lib/data_mapper/associations/has_n_association.rb, line 52 52: def name 53: @association_name 54: end
# File lib/data_mapper/associations/has_n_association.rb, line 52 52: def name 53: @association_name 54: end
# 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
# 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