提交 2ea49a85 编写于 作者: B Bogdan Gusiev

Removed useless utility classes inside HABTM association builder

上级 433a3122
......@@ -2,39 +2,6 @@
module ActiveRecord::Associations::Builder # :nodoc:
class HasAndBelongsToMany # :nodoc:
class JoinTableResolver # :nodoc:
KnownTable = Struct.new :join_table
class KnownClass # :nodoc:
def initialize(lhs_class, rhs_class_name)
@lhs_class = lhs_class
@rhs_class_name = rhs_class_name
@join_table = nil
end
def join_table
@join_table ||= [@lhs_class.table_name, klass.table_name].sort.join("\0").gsub(/^(.*[._])(.+)\0\1(.+)/, '\1\2_\3').tr("\0", "_")
end
private
def klass
@lhs_class.send(:compute_type, @rhs_class_name)
end
end
def self.build(lhs_class, name, options)
if options[:join_table]
KnownTable.new options[:join_table].to_s
else
class_name = options.fetch(:class_name) {
name.to_s.camelize.singularize
}
KnownClass.new lhs_class, class_name.to_s
end
end
end
attr_reader :lhs_model, :association_name, :options
def initialize(association_name, lhs_model, options)
......@@ -44,8 +11,6 @@ def initialize(association_name, lhs_model, options)
end
def through_model
habtm = JoinTableResolver.build lhs_model, association_name, options
join_model = Class.new(ActiveRecord::Base) {
class << self
attr_accessor :left_model
......@@ -56,7 +21,9 @@ class << self
end
def self.table_name
table_name_resolver.join_table
# Table name needs to be resolved lazily
# because RHS class might not have been loaded
@table_name ||= table_name_resolver.call
end
def self.compute_type(class_name)
......@@ -86,7 +53,7 @@ def self.suppress_composite_primary_key(pk)
}
join_model.name = "HABTM_#{association_name.to_s.camelize}"
join_model.table_name_resolver = habtm
join_model.table_name_resolver = -> { table_name }
join_model.left_model = lhs_model
join_model.add_left_association :left_side, anonymous_class: lhs_model
......@@ -117,6 +84,18 @@ def middle_options(join_model)
middle_options
end
def table_name
if options[:join_table]
options[:join_table].to_s
else
class_name = options.fetch(:class_name) {
association_name.to_s.camelize.singularize
}
klass = lhs_model.send(:compute_type, class_name.to_s)
[lhs_model.table_name, klass.table_name].sort.join("\0").gsub(/^(.*[._])(.+)\0\1(.+)/, '\1\2_\3').tr("\0", "_")
end
end
def belongs_to_options(options)
rhs_options = {}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册