ledermann-rails-settings 2.5.0 → 2.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/main.yml +39 -0
- data/MIT-LICENSE +1 -1
- data/README.md +5 -9
- data/Rakefile +1 -1
- data/{ci/Gemfile-rails-6-0 → gemfiles/rails_6_1.gemfile} +1 -1
- data/gemfiles/rails_7_0.gemfile +6 -0
- data/gemfiles/rails_7_1.gemfile +6 -0
- data/lib/generators/rails_settings/migration/migration_generator.rb +5 -4
- data/lib/generators/rails_settings/migration/templates/migration.rb +6 -12
- data/lib/rails-settings/base.rb +19 -10
- data/lib/rails-settings/configuration.rb +23 -10
- data/lib/rails-settings/scopes.rb +10 -11
- data/lib/rails-settings/setting_object.rb +40 -11
- data/lib/rails-settings/version.rb +1 -1
- data/rails-settings.gemspec +15 -14
- data/spec/configuration_spec.rb +54 -53
- data/spec/database.yml +1 -1
- data/spec/queries_spec.rb +9 -17
- data/spec/scopes_spec.rb +18 -10
- data/spec/serialize_spec.rb +13 -11
- data/spec/setting_object_spec.rb +64 -45
- data/spec/settings_spec.rb +106 -47
- data/spec/spec_helper.rb +28 -22
- data/spec/support/matchers/perform_queries.rb +5 -4
- data/spec/support/query_counter.rb +2 -1
- metadata +15 -17
- data/.travis.yml +0 -17
- data/ci/Gemfile-rails-4-2 +0 -7
- data/ci/Gemfile-rails-5-0 +0 -6
- data/ci/Gemfile-rails-5-1 +0 -6
- data/ci/Gemfile-rails-5-2 +0 -6
data/spec/configuration_spec.rb
CHANGED
@@ -5,115 +5,116 @@ module RailsSettings
|
|
5
5
|
end
|
6
6
|
|
7
7
|
describe Configuration, 'successful' do
|
8
|
-
it
|
8
|
+
it 'should define single key' do
|
9
9
|
Configuration.new(Dummy, :dashboard)
|
10
10
|
|
11
|
-
expect(Dummy.default_settings).to eq({ :
|
12
|
-
expect(Dummy.setting_object_class_name).to eq(
|
11
|
+
expect(Dummy.default_settings).to eq({ dashboard: {} })
|
12
|
+
expect(Dummy.setting_object_class_name).to eq(
|
13
|
+
'RailsSettings::SettingObject',
|
14
|
+
)
|
13
15
|
end
|
14
16
|
|
15
|
-
it
|
17
|
+
it 'should define multiple keys' do
|
16
18
|
Configuration.new(Dummy, :dashboard, :calendar)
|
17
19
|
|
18
|
-
expect(Dummy.default_settings).to eq({ :
|
19
|
-
expect(Dummy.setting_object_class_name).to eq(
|
20
|
+
expect(Dummy.default_settings).to eq({ dashboard: {}, calendar: {} })
|
21
|
+
expect(Dummy.setting_object_class_name).to eq(
|
22
|
+
'RailsSettings::SettingObject',
|
23
|
+
)
|
20
24
|
end
|
21
25
|
|
22
|
-
it
|
23
|
-
Configuration.new(Dummy, :dashboard, :
|
24
|
-
expect(Dummy.default_settings).to eq({ :
|
26
|
+
it 'should define single key with class_name' do
|
27
|
+
Configuration.new(Dummy, :dashboard, class_name: 'MyClass')
|
28
|
+
expect(Dummy.default_settings).to eq({ dashboard: {} })
|
25
29
|
expect(Dummy.setting_object_class_name).to eq('MyClass')
|
26
30
|
end
|
27
31
|
|
28
|
-
it
|
29
|
-
Configuration.new(Dummy, :dashboard, :calendar, :
|
32
|
+
it 'should define multiple keys with class_name' do
|
33
|
+
Configuration.new(Dummy, :dashboard, :calendar, class_name: 'MyClass')
|
30
34
|
|
31
|
-
expect(Dummy.default_settings).to eq({ :
|
35
|
+
expect(Dummy.default_settings).to eq({ dashboard: {}, calendar: {} })
|
32
36
|
expect(Dummy.setting_object_class_name).to eq('MyClass')
|
33
37
|
end
|
34
38
|
|
35
|
-
it
|
39
|
+
it 'should define using block' do
|
36
40
|
Configuration.new(Dummy) do |c|
|
37
41
|
c.key :dashboard
|
38
42
|
c.key :calendar
|
39
43
|
end
|
40
44
|
|
41
|
-
expect(Dummy.default_settings).to eq({ :
|
42
|
-
expect(Dummy.setting_object_class_name).to eq(
|
45
|
+
expect(Dummy.default_settings).to eq({ dashboard: {}, calendar: {} })
|
46
|
+
expect(Dummy.setting_object_class_name).to eq(
|
47
|
+
'RailsSettings::SettingObject',
|
48
|
+
)
|
43
49
|
end
|
44
50
|
|
45
|
-
it
|
51
|
+
it 'should define using block with defaults' do
|
46
52
|
Configuration.new(Dummy) do |c|
|
47
|
-
c.key :dashboard, :
|
48
|
-
c.key :calendar, :
|
53
|
+
c.key :dashboard, defaults: { theme: 'red' }
|
54
|
+
c.key :calendar, defaults: { scope: 'all' }
|
49
55
|
end
|
50
56
|
|
51
|
-
expect(Dummy.default_settings).to eq(
|
52
|
-
|
57
|
+
expect(Dummy.default_settings).to eq(
|
58
|
+
{ dashboard: { 'theme' => 'red' }, calendar: { 'scope' => 'all' } },
|
59
|
+
)
|
60
|
+
expect(Dummy.setting_object_class_name).to eq(
|
61
|
+
'RailsSettings::SettingObject',
|
62
|
+
)
|
53
63
|
end
|
54
64
|
|
55
|
-
it
|
56
|
-
Configuration.new(Dummy, :
|
65
|
+
it 'should define using block and class_name' do
|
66
|
+
Configuration.new(Dummy, class_name: 'MyClass') do |c|
|
57
67
|
c.key :dashboard
|
58
68
|
c.key :calendar
|
59
69
|
end
|
60
70
|
|
61
|
-
expect(Dummy.default_settings).to eq({ :
|
71
|
+
expect(Dummy.default_settings).to eq({ dashboard: {}, calendar: {} })
|
62
72
|
expect(Dummy.setting_object_class_name).to eq('MyClass')
|
63
73
|
end
|
64
74
|
|
65
75
|
context 'persistent' do
|
66
|
-
it
|
67
|
-
Configuration.new(Dummy, :
|
68
|
-
c.key :dashboard, :
|
76
|
+
it 'should keep settings between multiple configurations initialization' do
|
77
|
+
Configuration.new(Dummy, persistent: true) do |c|
|
78
|
+
c.key :dashboard, defaults: { theme: 'red' }
|
69
79
|
end
|
70
80
|
|
71
|
-
Configuration.new(Dummy, :calendar, :
|
81
|
+
Configuration.new(Dummy, :calendar, persistent: true)
|
72
82
|
|
73
|
-
expect(Dummy.default_settings).to eq(
|
83
|
+
expect(Dummy.default_settings).to eq(
|
84
|
+
{ dashboard: { 'theme' => 'red' }, calendar: {} },
|
85
|
+
)
|
74
86
|
end
|
75
87
|
end
|
76
88
|
end
|
77
89
|
|
78
90
|
describe Configuration, 'failure' do
|
79
|
-
it
|
80
|
-
expect {
|
81
|
-
Configuration.new
|
82
|
-
}.to raise_error(ArgumentError)
|
91
|
+
it 'should fail without args' do
|
92
|
+
expect { Configuration.new }.to raise_error(ArgumentError)
|
83
93
|
end
|
84
94
|
|
85
|
-
it
|
86
|
-
expect {
|
87
|
-
Configuration.new(Dummy)
|
88
|
-
}.to raise_error(ArgumentError)
|
95
|
+
it 'should fail without keys' do
|
96
|
+
expect { Configuration.new(Dummy) }.to raise_error(ArgumentError)
|
89
97
|
end
|
90
98
|
|
91
|
-
it
|
92
|
-
expect {
|
93
|
-
Configuration.new(Dummy) do |c|
|
94
|
-
end
|
95
|
-
}.to raise_error(ArgumentError)
|
99
|
+
it 'should fail without keys in block' do
|
100
|
+
expect { Configuration.new(Dummy) { |c| } }.to raise_error(ArgumentError)
|
96
101
|
end
|
97
102
|
|
98
|
-
it
|
99
|
-
expect {
|
100
|
-
|
101
|
-
|
103
|
+
it 'should fail with keys not being symbols' do
|
104
|
+
expect { Configuration.new(Dummy, 42, 'string') }.to raise_error(
|
105
|
+
ArgumentError,
|
106
|
+
)
|
102
107
|
end
|
103
108
|
|
104
|
-
it
|
109
|
+
it 'should fail with keys not being symbols' do
|
105
110
|
expect {
|
106
|
-
Configuration.new(Dummy)
|
107
|
-
c.key 42, "string"
|
108
|
-
end
|
111
|
+
Configuration.new(Dummy) { |c| c.key 42, 'string' }
|
109
112
|
}.to raise_error(ArgumentError)
|
110
113
|
end
|
111
114
|
|
112
|
-
it
|
115
|
+
it 'should fail with unknown option' do
|
113
116
|
expect {
|
114
|
-
Configuration.new(Dummy)
|
115
|
-
c.key :dashboard, :foo => {}
|
116
|
-
end
|
117
|
+
Configuration.new(Dummy) { |c| c.key :dashboard, foo: {} }
|
117
118
|
}.to raise_error(ArgumentError)
|
118
119
|
end
|
119
120
|
end
|
data/spec/database.yml
CHANGED
data/spec/queries_spec.rb
CHANGED
@@ -2,12 +2,10 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe 'Queries performed' do
|
4
4
|
context 'New record' do
|
5
|
-
let!(:user) { User.new :
|
5
|
+
let!(:user) { User.new name: 'Mr. Pink' }
|
6
6
|
|
7
7
|
it 'should be saved by one SQL query' do
|
8
|
-
expect {
|
9
|
-
user.save!
|
10
|
-
}.to perform_queries(1)
|
8
|
+
expect { user.save! }.to perform_queries(1)
|
11
9
|
end
|
12
10
|
|
13
11
|
it 'should be saved with settings for one key by two SQL queries' do
|
@@ -29,12 +27,10 @@ describe 'Queries performed' do
|
|
29
27
|
end
|
30
28
|
|
31
29
|
context 'Existing record without settings' do
|
32
|
-
let!(:user) { User.create! :
|
30
|
+
let!(:user) { User.create! name: 'Mr. Pink' }
|
33
31
|
|
34
32
|
it 'should be saved without SQL queries' do
|
35
|
-
expect {
|
36
|
-
user.save!
|
37
|
-
}.to perform_queries(0)
|
33
|
+
expect { user.save! }.to perform_queries(0)
|
38
34
|
end
|
39
35
|
|
40
36
|
it 'should be saved with settings for one key by two SQL queries' do
|
@@ -57,16 +53,14 @@ describe 'Queries performed' do
|
|
57
53
|
|
58
54
|
context 'Existing record with settings' do
|
59
55
|
let!(:user) do
|
60
|
-
User.create! :
|
56
|
+
User.create! name: 'Mr. Pink' do |user|
|
61
57
|
user.settings(:dashboard).theme = 'pink'
|
62
58
|
user.settings(:calendar).scope = 'all'
|
63
59
|
end
|
64
60
|
end
|
65
61
|
|
66
62
|
it 'should be saved without SQL queries' do
|
67
|
-
expect {
|
68
|
-
user.save!
|
69
|
-
}.to perform_queries(0)
|
63
|
+
expect { user.save! }.to perform_queries(0)
|
70
64
|
end
|
71
65
|
|
72
66
|
it 'should be saved with settings for one key by one SQL queries' do
|
@@ -87,14 +81,12 @@ describe 'Queries performed' do
|
|
87
81
|
end
|
88
82
|
|
89
83
|
it 'should be destroyed by two SQL queries' do
|
90
|
-
expect {
|
91
|
-
user.destroy
|
92
|
-
}.to perform_queries(2)
|
84
|
+
expect { user.destroy }.to perform_queries(2)
|
93
85
|
end
|
94
86
|
|
95
|
-
it
|
87
|
+
it 'should update settings by one SQL query' do
|
96
88
|
expect {
|
97
|
-
user.settings(:dashboard).update! :
|
89
|
+
user.settings(:dashboard).update! foo: 'bar'
|
98
90
|
}.to perform_queries(1)
|
99
91
|
end
|
100
92
|
end
|
data/spec/scopes_spec.rb
CHANGED
@@ -1,31 +1,39 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe 'scopes' do
|
4
|
-
let!(:user1)
|
5
|
-
|
4
|
+
let!(:user1) do
|
5
|
+
User.create! name: 'Mr. White' do |user|
|
6
|
+
user.settings(:dashboard).theme = 'white'
|
7
|
+
end
|
8
|
+
end
|
9
|
+
let!(:user2) { User.create! name: 'Mr. Blue' }
|
6
10
|
|
7
|
-
it
|
11
|
+
it 'should find objects with existing settings' do
|
8
12
|
expect(User.with_settings).to eq([user1])
|
9
13
|
end
|
10
14
|
|
11
|
-
it
|
15
|
+
it 'should find objects with settings for key' do
|
12
16
|
expect(User.with_settings_for(:dashboard)).to eq([user1])
|
13
17
|
expect(User.with_settings_for(:foo)).to eq([])
|
14
18
|
end
|
15
19
|
|
16
|
-
it
|
20
|
+
it 'should records without settings' do
|
17
21
|
expect(User.without_settings).to eq([user2])
|
18
22
|
end
|
19
23
|
|
20
|
-
it
|
24
|
+
it 'should records without settings for key' do
|
21
25
|
expect(User.without_settings_for(:foo)).to eq([user1, user2])
|
22
26
|
expect(User.without_settings_for(:dashboard)).to eq([user2])
|
23
27
|
end
|
24
28
|
|
25
|
-
it
|
26
|
-
[
|
27
|
-
expect { User.without_settings_for(invalid_key) }.to raise_error(
|
28
|
-
|
29
|
+
it 'should require symbol as key' do
|
30
|
+
[nil, 'string', 42].each do |invalid_key|
|
31
|
+
expect { User.without_settings_for(invalid_key) }.to raise_error(
|
32
|
+
ArgumentError,
|
33
|
+
)
|
34
|
+
expect { User.with_settings_for(invalid_key) }.to raise_error(
|
35
|
+
ArgumentError,
|
36
|
+
)
|
29
37
|
end
|
30
38
|
end
|
31
39
|
end
|
data/spec/serialize_spec.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe
|
3
|
+
describe 'Serialization' do
|
4
4
|
let!(:user) do
|
5
|
-
User.create! :
|
5
|
+
User.create! name: 'Mr. White' do |user|
|
6
6
|
user.settings(:dashboard).theme = 'white'
|
7
7
|
user.settings(:calendar).scope = 'all'
|
8
8
|
end
|
@@ -12,29 +12,31 @@ describe "Serialization" do
|
|
12
12
|
it 'should be serialized' do
|
13
13
|
user.reload
|
14
14
|
|
15
|
-
dashboard_settings = user.setting_objects.where(:
|
16
|
-
calendar_settings = user.setting_objects.where(:
|
15
|
+
dashboard_settings = user.setting_objects.where(var: 'dashboard').first
|
16
|
+
calendar_settings = user.setting_objects.where(var: 'calendar').first
|
17
17
|
|
18
18
|
expect(dashboard_settings.var).to eq('dashboard')
|
19
|
-
expect(dashboard_settings.value).to eq({'theme' => 'white'})
|
19
|
+
expect(dashboard_settings.value).to eq({ 'theme' => 'white' })
|
20
20
|
|
21
21
|
expect(calendar_settings.var).to eq('calendar')
|
22
|
-
expect(calendar_settings.value).to eq({'scope' => 'all'})
|
22
|
+
expect(calendar_settings.value).to eq({ 'scope' => 'all' })
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
26
26
|
describe 'updated settings' do
|
27
27
|
it 'should be serialized' do
|
28
|
-
user.settings(:dashboard).update! :
|
28
|
+
user.settings(:dashboard).update! smart: true
|
29
29
|
|
30
|
-
dashboard_settings = user.setting_objects.where(:
|
31
|
-
calendar_settings = user.setting_objects.where(:
|
30
|
+
dashboard_settings = user.setting_objects.where(var: 'dashboard').first
|
31
|
+
calendar_settings = user.setting_objects.where(var: 'calendar').first
|
32
32
|
|
33
33
|
expect(dashboard_settings.var).to eq('dashboard')
|
34
|
-
expect(dashboard_settings.value).to eq(
|
34
|
+
expect(dashboard_settings.value).to eq(
|
35
|
+
{ 'theme' => 'white', 'smart' => true },
|
36
|
+
)
|
35
37
|
|
36
38
|
expect(calendar_settings.var).to eq('calendar')
|
37
|
-
expect(calendar_settings.value).to eq({'scope' => 'all'})
|
39
|
+
expect(calendar_settings.value).to eq({ 'scope' => 'all' })
|
38
40
|
end
|
39
41
|
end
|
40
42
|
end
|
data/spec/setting_object_spec.rb
CHANGED
@@ -1,78 +1,97 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe RailsSettings::SettingObject do
|
4
|
-
let(:user) { User.create! :
|
4
|
+
let(:user) { User.create! name: 'Mr. Pink' }
|
5
5
|
|
6
6
|
if RailsSettings.can_protect_attributes?
|
7
|
-
let(:new_setting_object)
|
8
|
-
|
7
|
+
let(:new_setting_object) do
|
8
|
+
user.setting_objects.build({ var: 'dashboard' }, without_protection: true)
|
9
|
+
end
|
10
|
+
let(:saved_setting_object) do
|
11
|
+
user.setting_objects.create!(
|
12
|
+
{ var: 'dashboard', value: { 'theme' => 'pink', 'filter' => false } },
|
13
|
+
without_protection: true,
|
14
|
+
)
|
15
|
+
end
|
9
16
|
else
|
10
|
-
let(:new_setting_object)
|
11
|
-
|
17
|
+
let(:new_setting_object) do
|
18
|
+
user.setting_objects.build({ var: 'dashboard' })
|
19
|
+
end
|
20
|
+
let(:saved_setting_object) do
|
21
|
+
user.setting_objects.create!(
|
22
|
+
{ var: 'dashboard', value: { 'theme' => 'pink', 'filter' => false } },
|
23
|
+
)
|
24
|
+
end
|
12
25
|
end
|
13
26
|
|
14
|
-
describe
|
15
|
-
it
|
27
|
+
describe 'serialization' do
|
28
|
+
it 'should have a hash default' do
|
16
29
|
expect(RailsSettings::SettingObject.new.value).to eq({})
|
17
30
|
end
|
18
31
|
end
|
19
32
|
|
20
|
-
describe
|
21
|
-
context
|
22
|
-
it
|
33
|
+
describe 'Getter and Setter' do
|
34
|
+
context 'on unsaved settings' do
|
35
|
+
it 'should respond to setters' do
|
23
36
|
expect(new_setting_object).to respond_to(:foo=)
|
24
37
|
expect(new_setting_object).to respond_to(:bar=)
|
38
|
+
expect(new_setting_object).to respond_to(:x=)
|
25
39
|
end
|
26
40
|
|
27
|
-
it
|
41
|
+
it 'should not respond to some getters' do
|
28
42
|
expect { new_setting_object.foo! }.to raise_error(NoMethodError)
|
29
43
|
expect { new_setting_object.foo? }.to raise_error(NoMethodError)
|
30
44
|
end
|
31
45
|
|
32
|
-
it
|
33
|
-
expect {
|
34
|
-
new_setting_object.foo do
|
35
|
-
end
|
36
|
-
}.to raise_error(NoMethodError)
|
46
|
+
it 'should not respond if a block is given' do
|
47
|
+
expect { new_setting_object.foo {} }.to raise_error(NoMethodError)
|
37
48
|
end
|
38
49
|
|
39
|
-
it
|
50
|
+
it 'should not respond if params are given' do
|
40
51
|
expect { new_setting_object.foo(42) }.to raise_error(NoMethodError)
|
41
|
-
expect { new_setting_object.foo(42,43) }.to raise_error(NoMethodError)
|
52
|
+
expect { new_setting_object.foo(42, 43) }.to raise_error(NoMethodError)
|
42
53
|
end
|
43
54
|
|
44
|
-
it
|
55
|
+
it 'should return nil for unknown attribute' do
|
45
56
|
expect(new_setting_object.foo).to eq(nil)
|
46
57
|
expect(new_setting_object.bar).to eq(nil)
|
58
|
+
expect(new_setting_object.c).to eq(nil)
|
47
59
|
end
|
48
60
|
|
49
|
-
it
|
61
|
+
it 'should return defaults' do
|
50
62
|
expect(new_setting_object.theme).to eq('blue')
|
51
63
|
expect(new_setting_object.view).to eq('monthly')
|
52
64
|
expect(new_setting_object.filter).to eq(true)
|
65
|
+
expect(new_setting_object.a).to eq('b')
|
53
66
|
end
|
54
67
|
|
55
|
-
it
|
68
|
+
it 'should return defaults when using `try`' do
|
56
69
|
expect(new_setting_object.try(:theme)).to eq('blue')
|
57
70
|
expect(new_setting_object.try(:view)).to eq('monthly')
|
58
71
|
expect(new_setting_object.try(:filter)).to eq(true)
|
59
72
|
end
|
60
73
|
|
61
|
-
it
|
74
|
+
it 'should return value from target method if proc is a default value' do
|
75
|
+
expect(new_setting_object.owner_name).to eq('Mr. Pink')
|
76
|
+
end
|
77
|
+
|
78
|
+
it 'should store different objects to value hash' do
|
62
79
|
new_setting_object.integer = 42
|
63
|
-
new_setting_object.float
|
64
|
-
new_setting_object.string
|
65
|
-
new_setting_object.array
|
66
|
-
new_setting_object.symbol
|
67
|
-
|
68
|
-
expect(new_setting_object.value).to eq(
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
80
|
+
new_setting_object.float = 1.234
|
81
|
+
new_setting_object.string = 'Hello, World!'
|
82
|
+
new_setting_object.array = [1, 2, 3]
|
83
|
+
new_setting_object.symbol = :foo
|
84
|
+
|
85
|
+
expect(new_setting_object.value).to eq(
|
86
|
+
'integer' => 42,
|
87
|
+
'float' => 1.234,
|
88
|
+
'string' => 'Hello, World!',
|
89
|
+
'array' => [1, 2, 3],
|
90
|
+
'symbol' => :foo,
|
91
|
+
)
|
73
92
|
end
|
74
93
|
|
75
|
-
it
|
94
|
+
it 'should set and return attributes' do
|
76
95
|
new_setting_object.theme = 'pink'
|
77
96
|
new_setting_object.foo = 42
|
78
97
|
new_setting_object.bar = 'hello'
|
@@ -82,30 +101,30 @@ describe RailsSettings::SettingObject do
|
|
82
101
|
expect(new_setting_object.bar).to eq('hello')
|
83
102
|
end
|
84
103
|
|
85
|
-
it
|
104
|
+
it 'should set dirty trackers on change' do
|
86
105
|
new_setting_object.theme = 'pink'
|
87
106
|
expect(new_setting_object).to be_value_changed
|
88
107
|
expect(new_setting_object).to be_changed
|
89
108
|
end
|
90
109
|
end
|
91
110
|
|
92
|
-
context
|
93
|
-
it
|
111
|
+
context 'on saved settings' do
|
112
|
+
it 'should not set dirty trackers on setting same value' do
|
94
113
|
saved_setting_object.theme = 'pink'
|
95
114
|
expect(saved_setting_object).not_to be_value_changed
|
96
115
|
expect(saved_setting_object).not_to be_changed
|
97
116
|
end
|
98
117
|
|
99
|
-
it
|
118
|
+
it 'should delete key on assigning nil' do
|
100
119
|
saved_setting_object.theme = nil
|
101
120
|
expect(saved_setting_object.value).to eq({ 'filter' => false })
|
102
121
|
end
|
103
122
|
end
|
104
123
|
end
|
105
124
|
|
106
|
-
describe
|
125
|
+
describe 'update' do
|
107
126
|
it 'should save' do
|
108
|
-
expect(new_setting_object.update(:
|
127
|
+
expect(new_setting_object.update(foo: 42, bar: 'string')).to be_truthy
|
109
128
|
new_setting_object.reload
|
110
129
|
|
111
130
|
expect(new_setting_object.foo).to eq(42)
|
@@ -120,7 +139,7 @@ describe RailsSettings::SettingObject do
|
|
120
139
|
|
121
140
|
if RailsSettings.can_protect_attributes?
|
122
141
|
it 'should not allow changing protected attributes' do
|
123
|
-
new_setting_object.update!(:
|
142
|
+
new_setting_object.update!(var: 'calendar', foo: 42)
|
124
143
|
|
125
144
|
expect(new_setting_object.var).to eq('dashboard')
|
126
145
|
expect(new_setting_object.foo).to eq(42)
|
@@ -128,8 +147,8 @@ describe RailsSettings::SettingObject do
|
|
128
147
|
end
|
129
148
|
end
|
130
149
|
|
131
|
-
describe
|
132
|
-
it
|
150
|
+
describe 'save' do
|
151
|
+
it 'should save' do
|
133
152
|
new_setting_object.foo = 42
|
134
153
|
new_setting_object.bar = 'string'
|
135
154
|
expect(new_setting_object.save).to be_truthy
|
@@ -142,9 +161,9 @@ describe RailsSettings::SettingObject do
|
|
142
161
|
end
|
143
162
|
end
|
144
163
|
|
145
|
-
describe
|
146
|
-
it
|
147
|
-
new_setting_object.var =
|
164
|
+
describe 'validation' do
|
165
|
+
it 'should not validate for unknown var' do
|
166
|
+
new_setting_object.var = 'unknown-var'
|
148
167
|
|
149
168
|
expect(new_setting_object).not_to be_valid
|
150
169
|
expect(new_setting_object.errors[:var]).to be_present
|