Skip to content

Commit 9c03cd9

Browse files
committed
Writing configs_from and tests for application configuration.
1 parent 9b34ae4 commit 9c03cd9

File tree

2 files changed

+61
-0
lines changed

2 files changed

+61
-0
lines changed

activerecord/lib/active_record/application_configuration.rb

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,13 @@ module ApplicationConfiguration
33
extend ActiveSupport::Concern
44

55
module ClassMethods
6+
def configs_from(mod)
7+
app_record = self
8+
define_singleton_method(:application_record) { |klass = nil| app_record }
9+
10+
mod.define_singleton_method(:application_record) { |klass = nil| app_record }
11+
end
12+
613
def application_record(klass = nil)
714
return base_app_record unless klass
815

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
require 'cases/helper'
2+
3+
module SomeNamespace
4+
class ApplicationRecord < ::ApplicationRecord
5+
configs_from(SomeNamespace)
6+
end
7+
8+
class SomeModel < ApplicationRecord
9+
end
10+
end
11+
12+
class AnotherModel < ApplicationRecord
13+
end
14+
15+
class ApplicationConfigurationTest < ActiveRecord::TestCase
16+
def test_base_application_record
17+
assert_equal ApplicationRecord, ActiveRecord::Base.application_record
18+
end
19+
20+
def test_application_record_method_on_namespace
21+
assert_equal SomeNamespace::ApplicationRecord, SomeNamespace::ApplicationRecord.application_record
22+
assert_equal ApplicationRecord, ApplicationRecord.application_record
23+
assert_nothing_raised do
24+
assert_equal SomeNamespace::ApplicationRecord, SomeNamespace::ApplicationRecord.application_record('some_object')
25+
assert_equal ApplicationRecord, ApplicationRecord.application_record('some_object')
26+
end
27+
end
28+
29+
def test_application_record_method_on_model
30+
assert_equal SomeNamespace::ApplicationRecord, SomeNamespace::SomeModel.application_record
31+
assert_equal ApplicationRecord, AnotherModel.application_record
32+
33+
assert_nothing_raised do
34+
assert_equal SomeNamespace::ApplicationRecord, SomeNamespace::SomeModel.application_record('another_object')
35+
assert_equal ApplicationRecord, AnotherModel.application_record('another_object')
36+
end
37+
end
38+
39+
def test_application_record_method_on_module
40+
assert_equal SomeNamespace::ApplicationRecord, SomeNamespace.application_record
41+
assert_nothing_raised do
42+
assert_equal SomeNamespace::ApplicationRecord, SomeNamespace.application_record('one_more_object')
43+
end
44+
end
45+
46+
def test_arguments_passed_into_application_record_on_ar_base
47+
assert_equal SomeNamespace::ApplicationRecord, ActiveRecord::Base.application_record(SomeNamespace)
48+
assert_equal SomeNamespace::ApplicationRecord, ActiveRecord::Base.application_record(SomeNamespace::SomeModel)
49+
assert_equal SomeNamespace::ApplicationRecord, ActiveRecord::Base.application_record(SomeNamespace::ApplicationRecord)
50+
51+
assert_equal ApplicationRecord, ActiveRecord::Base.application_record(AnotherModel)
52+
assert_equal ApplicationRecord, ActiveRecord::Base.application_record(ApplicationRecord)
53+
end
54+
end

0 commit comments

Comments
 (0)