提交 cce26c36 编写于 作者: J Jean Boussier

Namespace association extension modules under the owner model

上级 730a7a1b
......@@ -22,9 +22,9 @@ def self.define_callbacks(model, reflection)
def self.define_extensions(model, name, &block)
if block_given?
extension_module_name = "#{model.name.demodulize}#{name.to_s.camelize}AssociationExtension"
extension_module_name = "#{name.to_s.camelize}AssociationExtension"
extension = Module.new(&block)
model.module_parent.const_set(extension_module_name, extension)
model.const_set(extension_module_name, extension)
end
end
......
......@@ -70,8 +70,8 @@ def test_extension_name
extend!(Developer)
extend!(MyApplication::Business::Developer)
assert Object.const_get "DeveloperAssociationNameAssociationExtension"
assert MyApplication::Business.const_get "DeveloperAssociationNameAssociationExtension"
assert Developer.const_get "AssociationNameAssociationExtension"
assert MyApplication::Business::Developer.const_get "AssociationNameAssociationExtension"
end
def test_proxy_association_after_scoped
......
......@@ -2,13 +2,13 @@
require "ostruct"
module DeveloperProjectsAssociationExtension2
def find_least_recent
order("id ASC").first
class Developer < ActiveRecord::Base
module ProjectsAssociationExtension2
def find_least_recent
order("id ASC").first
end
end
end
class Developer < ActiveRecord::Base
self.ignored_columns = %w(first_name last_name)
has_and_belongs_to_many :projects do
......@@ -24,19 +24,19 @@ def find_most_recent
has_and_belongs_to_many :shared_computers, class_name: "Computer"
has_and_belongs_to_many :projects_extended_by_name,
-> { extending(DeveloperProjectsAssociationExtension) },
-> { extending(ProjectsAssociationExtension) },
class_name: "Project",
join_table: "developers_projects",
association_foreign_key: "project_id"
has_and_belongs_to_many :projects_extended_by_name_twice,
-> { extending(DeveloperProjectsAssociationExtension, DeveloperProjectsAssociationExtension2) },
-> { extending(ProjectsAssociationExtension, ProjectsAssociationExtension2) },
class_name: "Project",
join_table: "developers_projects",
association_foreign_key: "project_id"
has_and_belongs_to_many :projects_extended_by_name_and_block,
-> { extending(DeveloperProjectsAssociationExtension) },
-> { extending(ProjectsAssociationExtension) },
class_name: "Project",
join_table: "developers_projects",
association_foreign_key: "project_id" do
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册