setting_accessors 1.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.travis.yml +13 -0
- data/CHANGELOG.md +8 -0
- data/README.md +1 -0
- data/gemfiles/rails_4.2.gemfile.lock +20 -1
- data/gemfiles/rails_5.0.gemfile.lock +19 -1
- data/gemfiles/rails_5.1.gemfile.lock +19 -1
- data/gemfiles/rails_5.2.gemfile.lock +19 -1
- data/lib/setting_accessors.rb +4 -0
- data/lib/setting_accessors/helpers.rb +2 -5
- data/lib/setting_accessors/internal.rb +1 -1
- data/lib/setting_accessors/setting_scaffold.rb +20 -5
- data/lib/setting_accessors/setting_set.rb +49 -28
- data/lib/setting_accessors/version.rb +1 -1
- data/setting_accessors.gemspec +3 -0
- metadata +44 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3fcd820da4c83ab5b7b6d428304289e115ac09a35570be868f53091d441dbfa5
|
4
|
+
data.tar.gz: cdcb83249a2196a0878200171edc82a51780a82b3d081cf480c2fc161d38b192
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5b6e63ac875a54ea5280fb1c8e605c27dcaf6d9c3f7964c4cfaf2dfca5ba04539c00a14f341047d2e696832c35947b06325132e28b9e92e097e9251f65d35d32
|
7
|
+
data.tar.gz: 1ecf896390e1b251b08d2458677613a50a510c3bf764ad088ee0c43d06d1a3882127b11d6cbe57e4f60dae06516fa3f6845be1da4caa77048cf59cdddae34514
|
data/.travis.yml
CHANGED
@@ -1,6 +1,10 @@
|
|
1
1
|
language: ruby
|
2
2
|
cache: bundler
|
3
3
|
|
4
|
+
env:
|
5
|
+
global:
|
6
|
+
- CC_TEST_REPORTER_ID=6dc7db591131b55839297349c4a843ee7d7d9b28731c6bb4f1db9d42fa86c7b6
|
7
|
+
|
4
8
|
rvm:
|
5
9
|
- 2.3.0
|
6
10
|
- 2.3.3
|
@@ -16,8 +20,17 @@ gemfile:
|
|
16
20
|
- gemfiles/rails_5.2.gemfile
|
17
21
|
|
18
22
|
before_install: 'gem install bundler'
|
23
|
+
|
24
|
+
before_script:
|
25
|
+
- curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
|
26
|
+
- chmod +x ./cc-test-reporter
|
27
|
+
- ./cc-test-reporter before-build
|
28
|
+
|
19
29
|
script: 'bundle exec rake'
|
20
30
|
|
31
|
+
after_script:
|
32
|
+
- ./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT
|
33
|
+
|
21
34
|
notifications:
|
22
35
|
email:
|
23
36
|
on_failure: change
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,13 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## 1.1.0
|
4
|
+
|
5
|
+
A bugfix and slight refactoring release which takes care of several issues regarding
|
6
|
+
changing setting-values in-place without actually setting them before. (#13)
|
7
|
+
|
8
|
+
* More and better specs
|
9
|
+
* Better handling of non-existent settings through exception handling rather than multiple error prone tests
|
10
|
+
|
3
11
|
## 1.0.0
|
4
12
|
|
5
13
|
This is almost a complete refactoring of the gem which also removes some not really needed functionality.
|
data/README.md
CHANGED
@@ -4,6 +4,7 @@ SettingAccessors
|
|
4
4
|
[](http://badge.fury.io/rb/setting_accessors)
|
5
5
|
[](https://travis-ci.org/Stex/setting_accessors)
|
6
6
|
[](https://codeclimate.com/github/Stex/setting_accessors/maintainability)
|
7
|
+
[](https://codeclimate.com/github/codeclimate/codeclimate/test_coverage)
|
7
8
|
|
8
9
|
Sometimes it's handy to keep track of various settings or attributes in ActiveRecord instances and persist them through various requests (and sessions). An example would be to store a items-per-page value for multiple tables in the application per user or probably also set default sorting directions.
|
9
10
|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: ..
|
3
3
|
specs:
|
4
|
-
setting_accessors (1.
|
4
|
+
setting_accessors (1.1.0)
|
5
5
|
activemodel (>= 4.2, <= 5.2)
|
6
6
|
activerecord (>= 4.2, <= 5.2)
|
7
7
|
activesupport (>= 4.2, <= 5.2)
|
@@ -50,9 +50,12 @@ GEM
|
|
50
50
|
arel (6.0.4)
|
51
51
|
ast (2.4.0)
|
52
52
|
builder (3.2.3)
|
53
|
+
byebug (10.0.2)
|
54
|
+
coderay (1.1.2)
|
53
55
|
concurrent-ruby (1.1.3)
|
54
56
|
crass (1.0.4)
|
55
57
|
diff-lcs (1.3)
|
58
|
+
docile (1.1.5)
|
56
59
|
erubis (2.7.0)
|
57
60
|
generator_spec (0.9.4)
|
58
61
|
activesupport (>= 3.0.0)
|
@@ -62,11 +65,13 @@ GEM
|
|
62
65
|
i18n (0.9.5)
|
63
66
|
concurrent-ruby (~> 1.0)
|
64
67
|
jaro_winkler (1.5.1-x86_64-darwin-17)
|
68
|
+
json (2.1.0)
|
65
69
|
loofah (2.2.3)
|
66
70
|
crass (~> 1.0.2)
|
67
71
|
nokogiri (>= 1.5.9)
|
68
72
|
mail (2.7.1)
|
69
73
|
mini_mime (>= 0.1.1)
|
74
|
+
method_source (0.9.2)
|
70
75
|
mini_mime (1.0.1)
|
71
76
|
mini_portile2 (2.3.0)
|
72
77
|
minitest (5.11.3)
|
@@ -76,6 +81,12 @@ GEM
|
|
76
81
|
parser (2.5.3.0)
|
77
82
|
ast (~> 2.4.0)
|
78
83
|
powerpack (0.1.2)
|
84
|
+
pry (0.12.2)
|
85
|
+
coderay (~> 1.1.0)
|
86
|
+
method_source (~> 0.9.0)
|
87
|
+
pry-byebug (3.6.0)
|
88
|
+
byebug (~> 10.0)
|
89
|
+
pry (~> 0.10)
|
79
90
|
rack (1.6.11)
|
80
91
|
rack-test (0.6.3)
|
81
92
|
rack (>= 1.0)
|
@@ -127,6 +138,11 @@ GEM
|
|
127
138
|
ruby-progressbar (~> 1.7)
|
128
139
|
unicode-display_width (~> 1.4.0)
|
129
140
|
ruby-progressbar (1.10.0)
|
141
|
+
simplecov (0.16.1)
|
142
|
+
docile (~> 1.1)
|
143
|
+
json (>= 1.8, < 3)
|
144
|
+
simplecov-html (~> 0.10.0)
|
145
|
+
simplecov-html (0.10.2)
|
130
146
|
sprockets (3.7.2)
|
131
147
|
concurrent-ruby (~> 1.0)
|
132
148
|
rack (> 1, < 3)
|
@@ -150,11 +166,14 @@ DEPENDENCIES
|
|
150
166
|
appraisal (~> 2.2)
|
151
167
|
bundler (~> 1.6)
|
152
168
|
generator_spec (~> 0.9)
|
169
|
+
pry (~> 0.12)
|
170
|
+
pry-byebug (~> 3.6)
|
153
171
|
rails (~> 4.2.0)
|
154
172
|
rake (~> 10.4)
|
155
173
|
rspec (~> 3.8)
|
156
174
|
rubocop (~> 0.60)
|
157
175
|
setting_accessors!
|
176
|
+
simplecov (~> 0.16)
|
158
177
|
sqlite3 (~> 1.3)
|
159
178
|
with_model (~> 2.1)
|
160
179
|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: ..
|
3
3
|
specs:
|
4
|
-
setting_accessors (1.
|
4
|
+
setting_accessors (1.1.0)
|
5
5
|
activemodel (>= 4.2, <= 5.2)
|
6
6
|
activerecord (>= 4.2, <= 5.2)
|
7
7
|
activesupport (>= 4.2, <= 5.2)
|
@@ -53,9 +53,12 @@ GEM
|
|
53
53
|
arel (7.1.4)
|
54
54
|
ast (2.4.0)
|
55
55
|
builder (3.2.3)
|
56
|
+
byebug (10.0.2)
|
57
|
+
coderay (1.1.2)
|
56
58
|
concurrent-ruby (1.1.3)
|
57
59
|
crass (1.0.4)
|
58
60
|
diff-lcs (1.3)
|
61
|
+
docile (1.1.5)
|
59
62
|
erubis (2.7.0)
|
60
63
|
generator_spec (0.9.4)
|
61
64
|
activesupport (>= 3.0.0)
|
@@ -65,6 +68,7 @@ GEM
|
|
65
68
|
i18n (1.0.1)
|
66
69
|
concurrent-ruby (~> 1.0)
|
67
70
|
jaro_winkler (1.5.1-x86_64-darwin-17)
|
71
|
+
json (2.1.0)
|
68
72
|
loofah (2.2.3)
|
69
73
|
crass (~> 1.0.2)
|
70
74
|
nokogiri (>= 1.5.9)
|
@@ -81,6 +85,12 @@ GEM
|
|
81
85
|
parser (2.5.3.0)
|
82
86
|
ast (~> 2.4.0)
|
83
87
|
powerpack (0.1.2)
|
88
|
+
pry (0.12.2)
|
89
|
+
coderay (~> 1.1.0)
|
90
|
+
method_source (~> 0.9.0)
|
91
|
+
pry-byebug (3.6.0)
|
92
|
+
byebug (~> 10.0)
|
93
|
+
pry (~> 0.10)
|
84
94
|
rack (2.0.6)
|
85
95
|
rack-test (0.6.3)
|
86
96
|
rack (>= 1.0)
|
@@ -131,6 +141,11 @@ GEM
|
|
131
141
|
ruby-progressbar (~> 1.7)
|
132
142
|
unicode-display_width (~> 1.4.0)
|
133
143
|
ruby-progressbar (1.10.0)
|
144
|
+
simplecov (0.16.1)
|
145
|
+
docile (~> 1.1)
|
146
|
+
json (>= 1.8, < 3)
|
147
|
+
simplecov-html (~> 0.10.0)
|
148
|
+
simplecov-html (0.10.2)
|
134
149
|
sprockets (3.7.2)
|
135
150
|
concurrent-ruby (~> 1.0)
|
136
151
|
rack (> 1, < 3)
|
@@ -157,11 +172,14 @@ DEPENDENCIES
|
|
157
172
|
appraisal (~> 2.2)
|
158
173
|
bundler (~> 1.6)
|
159
174
|
generator_spec (~> 0.9)
|
175
|
+
pry (~> 0.12)
|
176
|
+
pry-byebug (~> 3.6)
|
160
177
|
rails (~> 5.0.0)
|
161
178
|
rake (~> 10.4)
|
162
179
|
rspec (~> 3.8)
|
163
180
|
rubocop (~> 0.60)
|
164
181
|
setting_accessors!
|
182
|
+
simplecov (~> 0.16)
|
165
183
|
sqlite3 (~> 1.3)
|
166
184
|
with_model (~> 2.1)
|
167
185
|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: ..
|
3
3
|
specs:
|
4
|
-
setting_accessors (1.
|
4
|
+
setting_accessors (1.1.0)
|
5
5
|
activemodel (>= 4.2, <= 5.2)
|
6
6
|
activerecord (>= 4.2, <= 5.2)
|
7
7
|
activesupport (>= 4.2, <= 5.2)
|
@@ -53,9 +53,12 @@ GEM
|
|
53
53
|
arel (8.0.0)
|
54
54
|
ast (2.4.0)
|
55
55
|
builder (3.2.3)
|
56
|
+
byebug (10.0.2)
|
57
|
+
coderay (1.1.2)
|
56
58
|
concurrent-ruby (1.1.3)
|
57
59
|
crass (1.0.4)
|
58
60
|
diff-lcs (1.3)
|
61
|
+
docile (1.1.5)
|
59
62
|
erubi (1.7.1)
|
60
63
|
generator_spec (0.9.4)
|
61
64
|
activesupport (>= 3.0.0)
|
@@ -65,6 +68,7 @@ GEM
|
|
65
68
|
i18n (1.1.1)
|
66
69
|
concurrent-ruby (~> 1.0)
|
67
70
|
jaro_winkler (1.5.1)
|
71
|
+
json (2.1.0)
|
68
72
|
loofah (2.2.3)
|
69
73
|
crass (~> 1.0.2)
|
70
74
|
nokogiri (>= 1.5.9)
|
@@ -81,6 +85,12 @@ GEM
|
|
81
85
|
parser (2.5.3.0)
|
82
86
|
ast (~> 2.4.0)
|
83
87
|
powerpack (0.1.2)
|
88
|
+
pry (0.12.2)
|
89
|
+
coderay (~> 1.1.0)
|
90
|
+
method_source (~> 0.9.0)
|
91
|
+
pry-byebug (3.6.0)
|
92
|
+
byebug (~> 10.0)
|
93
|
+
pry (~> 0.10)
|
84
94
|
rack (2.0.6)
|
85
95
|
rack-test (1.1.0)
|
86
96
|
rack (>= 1.0, < 3)
|
@@ -131,6 +141,11 @@ GEM
|
|
131
141
|
ruby-progressbar (~> 1.7)
|
132
142
|
unicode-display_width (~> 1.4.0)
|
133
143
|
ruby-progressbar (1.10.0)
|
144
|
+
simplecov (0.16.1)
|
145
|
+
docile (~> 1.1)
|
146
|
+
json (>= 1.8, < 3)
|
147
|
+
simplecov-html (~> 0.10.0)
|
148
|
+
simplecov-html (0.10.2)
|
134
149
|
sprockets (3.7.2)
|
135
150
|
concurrent-ruby (~> 1.0)
|
136
151
|
rack (> 1, < 3)
|
@@ -157,11 +172,14 @@ DEPENDENCIES
|
|
157
172
|
appraisal (~> 2.2)
|
158
173
|
bundler (~> 1.6)
|
159
174
|
generator_spec (~> 0.9)
|
175
|
+
pry (~> 0.12)
|
176
|
+
pry-byebug (~> 3.6)
|
160
177
|
rails (~> 5.1.0)
|
161
178
|
rake (~> 10.4)
|
162
179
|
rspec (~> 3.8)
|
163
180
|
rubocop (~> 0.60)
|
164
181
|
setting_accessors!
|
182
|
+
simplecov (~> 0.16)
|
165
183
|
sqlite3 (~> 1.3)
|
166
184
|
with_model (~> 2.1)
|
167
185
|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: ..
|
3
3
|
specs:
|
4
|
-
setting_accessors (1.
|
4
|
+
setting_accessors (1.1.0)
|
5
5
|
activemodel (>= 4.2, <= 5.2)
|
6
6
|
activerecord (>= 4.2, <= 5.2)
|
7
7
|
activesupport (>= 4.2, <= 5.2)
|
@@ -57,9 +57,12 @@ GEM
|
|
57
57
|
arel (9.0.0)
|
58
58
|
ast (2.4.0)
|
59
59
|
builder (3.2.3)
|
60
|
+
byebug (10.0.2)
|
61
|
+
coderay (1.1.2)
|
60
62
|
concurrent-ruby (1.1.3)
|
61
63
|
crass (1.0.4)
|
62
64
|
diff-lcs (1.3)
|
65
|
+
docile (1.1.5)
|
63
66
|
erubi (1.7.1)
|
64
67
|
generator_spec (0.9.4)
|
65
68
|
activesupport (>= 3.0.0)
|
@@ -69,6 +72,7 @@ GEM
|
|
69
72
|
i18n (1.1.1)
|
70
73
|
concurrent-ruby (~> 1.0)
|
71
74
|
jaro_winkler (1.5.1)
|
75
|
+
json (2.1.0)
|
72
76
|
loofah (2.2.3)
|
73
77
|
crass (~> 1.0.2)
|
74
78
|
nokogiri (>= 1.5.9)
|
@@ -88,6 +92,12 @@ GEM
|
|
88
92
|
parser (2.5.3.0)
|
89
93
|
ast (~> 2.4.0)
|
90
94
|
powerpack (0.1.2)
|
95
|
+
pry (0.12.2)
|
96
|
+
coderay (~> 1.1.0)
|
97
|
+
method_source (~> 0.9.0)
|
98
|
+
pry-byebug (3.6.0)
|
99
|
+
byebug (~> 10.0)
|
100
|
+
pry (~> 0.10)
|
91
101
|
rack (2.0.6)
|
92
102
|
rack-test (1.1.0)
|
93
103
|
rack (>= 1.0, < 3)
|
@@ -139,6 +149,11 @@ GEM
|
|
139
149
|
ruby-progressbar (~> 1.7)
|
140
150
|
unicode-display_width (~> 1.4.0)
|
141
151
|
ruby-progressbar (1.10.0)
|
152
|
+
simplecov (0.16.1)
|
153
|
+
docile (~> 1.1)
|
154
|
+
json (>= 1.8, < 3)
|
155
|
+
simplecov-html (~> 0.10.0)
|
156
|
+
simplecov-html (0.10.2)
|
142
157
|
sprockets (3.7.2)
|
143
158
|
concurrent-ruby (~> 1.0)
|
144
159
|
rack (> 1, < 3)
|
@@ -165,11 +180,14 @@ DEPENDENCIES
|
|
165
180
|
appraisal (~> 2.2)
|
166
181
|
bundler (~> 1.6)
|
167
182
|
generator_spec (~> 0.9)
|
183
|
+
pry (~> 0.12)
|
184
|
+
pry-byebug (~> 3.6)
|
168
185
|
rails (~> 5.2.0)
|
169
186
|
rake (~> 10.4)
|
170
187
|
rspec (~> 3.8)
|
171
188
|
rubocop (~> 0.60)
|
172
189
|
setting_accessors!
|
190
|
+
simplecov (~> 0.16)
|
173
191
|
sqlite3 (~> 1.3)
|
174
192
|
with_model (~> 2.1)
|
175
193
|
|
data/lib/setting_accessors.rb
CHANGED
@@ -21,6 +21,10 @@ ActiveRecord::Base.class_eval do
|
|
21
21
|
end
|
22
22
|
|
23
23
|
module SettingAccessors
|
24
|
+
class Error < StandardError; end
|
25
|
+
class NestedHashKeyNotFoundError < Error; end
|
26
|
+
class SettingNotFoundError < Error; end
|
27
|
+
|
24
28
|
def self.setting_class
|
25
29
|
setting_class_name.constantize
|
26
30
|
end
|
@@ -2,9 +2,6 @@
|
|
2
2
|
|
3
3
|
module SettingAccessors
|
4
4
|
module Helpers
|
5
|
-
class Error < StandardError; end
|
6
|
-
class NestedHashKeyNotFoundException < Error; end
|
7
|
-
|
8
5
|
def ensure_nested_hash!(hash, *keys)
|
9
6
|
h = hash
|
10
7
|
keys.each do |key|
|
@@ -14,11 +11,11 @@ module SettingAccessors
|
|
14
11
|
end
|
15
12
|
|
16
13
|
def lookup_nested_hash(hash, *keys)
|
17
|
-
fail
|
14
|
+
fail NestedHashKeyNotFoundError if hash.nil?
|
18
15
|
|
19
16
|
h = hash
|
20
17
|
keys.each do |key|
|
21
|
-
fail
|
18
|
+
fail NestedHashKeyNotFoundError unless h.key?(key)
|
22
19
|
|
23
20
|
h = h[key]
|
24
21
|
end
|
@@ -62,7 +62,7 @@ module SettingAccessors
|
|
62
62
|
#
|
63
63
|
def self.get_class_setting(klass, setting_name)
|
64
64
|
lookup_nested_hash(class_settings, klass.to_s, setting_name.to_s)
|
65
|
-
rescue
|
65
|
+
rescue NestedHashKeyNotFoundError
|
66
66
|
nil
|
67
67
|
end
|
68
68
|
|
@@ -37,6 +37,15 @@ module SettingAccessors
|
|
37
37
|
setting_record(name, assignable).try(:value)
|
38
38
|
end
|
39
39
|
|
40
|
+
#
|
41
|
+
# Like #get, but will raise an exception if the requested setting doesn't exist in the database
|
42
|
+
#
|
43
|
+
def get!(name, assignable = nil)
|
44
|
+
setting_record!(name, assignable).value
|
45
|
+
rescue ActiveRecord::RecordNotFound
|
46
|
+
raise ::SettingAccessors::SettingNotFoundError
|
47
|
+
end
|
48
|
+
|
40
49
|
alias [] get
|
41
50
|
|
42
51
|
#
|
@@ -46,11 +55,9 @@ module SettingAccessors
|
|
46
55
|
# This only works for class-wise settings, meaning that an assignable has to be present.
|
47
56
|
#
|
48
57
|
def get_or_default(name, assignable)
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
val
|
53
|
-
end
|
58
|
+
get!(name, assignable)
|
59
|
+
rescue ::SettingAccessors::SettingNotFoundError
|
60
|
+
get_default_value(name, assignable)
|
54
61
|
end
|
55
62
|
|
56
63
|
#
|
@@ -108,6 +115,14 @@ module SettingAccessors
|
|
108
115
|
find_by(name: name.to_s, assignable: assignable)
|
109
116
|
end
|
110
117
|
|
118
|
+
#
|
119
|
+
# Like #setting_record, but will raise an ActiveRecord::RecordNotFound exception
|
120
|
+
# if the record doesn't exist yet
|
121
|
+
#
|
122
|
+
def setting_record!(name, assignable = nil)
|
123
|
+
setting_record(name, assignable) || raise(ActiveRecord::RecordNotFound)
|
124
|
+
end
|
125
|
+
|
111
126
|
#
|
112
127
|
# Makes accessing settings a little easier.
|
113
128
|
# Examples:
|
@@ -22,22 +22,12 @@ module SettingAccessors
|
|
22
22
|
# If a setting hasn't been read by this record (instance) before, its value
|
23
23
|
# is stored in the local read set.
|
24
24
|
#
|
25
|
-
|
26
|
-
|
27
|
-
# User2: Update Setting X
|
28
|
-
# User1: Read Setting X -> Gets old value from temp settings.
|
29
|
-
# This shouldn't be too dangerous as the system state will be refreshed with every request though.
|
30
|
-
#
|
31
|
-
# @param [Boolean] skip_cached
|
32
|
-
# If set to +true+, the setting value is freshly loaded from the database,
|
33
|
-
# even if a value that's not yet persisted exists.
|
34
|
-
#
|
35
|
-
def get(key, skip_cached: false)
|
36
|
-
return @temp_settings[key.to_sym] if !skip_cached && key?(key)
|
25
|
+
def get(key)
|
26
|
+
return @temp_settings[key.to_sym] if key?(key)
|
37
27
|
|
38
|
-
|
39
|
-
|
40
|
-
|
28
|
+
@temp_settings[key.to_sym] = current_database_value!(key)
|
29
|
+
rescue SettingNotFoundError
|
30
|
+
nil
|
41
31
|
end
|
42
32
|
|
43
33
|
alias [] get
|
@@ -66,15 +56,11 @@ module SettingAccessors
|
|
66
56
|
# If set to +true+, the setting's default value is written to the temporary settings
|
67
57
|
# for faster access. Otherwise, a database lookup is performed every time.
|
68
58
|
#
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
#
|
73
|
-
def get_or_default(key, store_default: true, skip_cached: false)
|
74
|
-
result = get(key, skip_cached: skip_cached)
|
75
|
-
return result if result || (key?(key) && !skip_cached)
|
59
|
+
def get_or_default(key, store_default: true)
|
60
|
+
result = get(key)
|
61
|
+
return result if key?(key) # If no key is found here, we didn't have a setting in the database
|
76
62
|
|
77
|
-
try_dup(
|
63
|
+
try_dup(default_value(key)).tap do |value|
|
78
64
|
set(key, value) if store_default
|
79
65
|
end
|
80
66
|
end
|
@@ -95,26 +81,57 @@ module SettingAccessors
|
|
95
81
|
#
|
96
82
|
def value_was(key)
|
97
83
|
lookup_nested_hash(@old_values, key.to_s)
|
98
|
-
rescue
|
99
|
-
|
84
|
+
rescue NestedHashKeyNotFoundError
|
85
|
+
current_database_value(key)
|
100
86
|
end
|
101
87
|
|
88
|
+
#
|
89
|
+
# @return [Boolean] +true+ if the value for the given setting differs from the database or default value
|
90
|
+
#
|
102
91
|
def value_changed?(key)
|
103
92
|
get(key) != value_was(key)
|
104
93
|
end
|
105
94
|
|
95
|
+
#
|
96
|
+
# @return [Object] The raw value passed to this setting before it was casted to the correct type
|
97
|
+
#
|
106
98
|
def value_before_type_cast(key)
|
107
99
|
lookup_nested_hash(@values_before_type_casts, key.to_s)
|
108
|
-
rescue
|
100
|
+
rescue NestedHashKeyNotFoundError
|
109
101
|
get(key)
|
110
102
|
end
|
111
103
|
|
104
|
+
#
|
105
|
+
# @return [Hash] the settings which were actually changed since the last persist!
|
106
|
+
#
|
112
107
|
def changed_settings
|
113
108
|
@temp_settings.select { |k, _| value_changed?(k) }
|
114
109
|
end
|
115
110
|
|
116
111
|
protected
|
117
112
|
|
113
|
+
#
|
114
|
+
# @return [Object] the current setting value from the database or +nil+ if the setting does not exist yet.
|
115
|
+
#
|
116
|
+
def current_database_value(key)
|
117
|
+
SettingAccessors.setting_class.get(key, record)
|
118
|
+
end
|
119
|
+
|
120
|
+
#
|
121
|
+
# Like #current_database_value, but will raise a SettingNotFound exception
|
122
|
+
# if there is no current database value
|
123
|
+
#
|
124
|
+
def current_database_value!(key)
|
125
|
+
SettingAccessors.setting_class.get!(key, record)
|
126
|
+
end
|
127
|
+
|
128
|
+
#
|
129
|
+
# @return [Object] the default value for the given setting
|
130
|
+
#
|
131
|
+
def default_value(key)
|
132
|
+
SettingAccessors.setting_class.get_default_value(key, record)
|
133
|
+
end
|
134
|
+
|
118
135
|
#
|
119
136
|
# Keeps a record of the originally set value for a setting before it was
|
120
137
|
# automatically converted.
|
@@ -132,7 +149,11 @@ module SettingAccessors
|
|
132
149
|
@old_values ||= {}
|
133
150
|
|
134
151
|
unless @old_values.key?(key.to_s)
|
135
|
-
@old_values[key.to_s] =
|
152
|
+
@old_values[key.to_s] = begin
|
153
|
+
current_database_value!(key)
|
154
|
+
rescue SettingNotFoundError
|
155
|
+
default_value(key)
|
156
|
+
end
|
136
157
|
end
|
137
158
|
end
|
138
159
|
|
@@ -153,7 +174,7 @@ module SettingAccessors
|
|
153
174
|
# validations itself.
|
154
175
|
#
|
155
176
|
def persist!
|
156
|
-
|
177
|
+
changed_settings.each do |key, value|
|
157
178
|
Setting.set(key, value, assignable: record)
|
158
179
|
end
|
159
180
|
flush!
|
data/setting_accessors.gemspec
CHANGED
@@ -28,9 +28,12 @@ Gem::Specification.new do |spec|
|
|
28
28
|
spec.add_development_dependency 'appraisal', '~> 2.2'
|
29
29
|
spec.add_development_dependency 'bundler', '~> 1.6'
|
30
30
|
spec.add_development_dependency 'generator_spec', '~> 0.9'
|
31
|
+
spec.add_development_dependency 'pry', '~> 0.12'
|
32
|
+
spec.add_development_dependency 'pry-byebug', '~> 3.6'
|
31
33
|
spec.add_development_dependency 'rake', '~> 10.4'
|
32
34
|
spec.add_development_dependency 'rspec', '~> 3.8'
|
33
35
|
spec.add_development_dependency 'rubocop', '~> 0.60'
|
36
|
+
spec.add_development_dependency 'simplecov', '~> 0.16'
|
34
37
|
spec.add_development_dependency 'sqlite3', '~> 1.3'
|
35
38
|
spec.add_development_dependency 'with_model', '~> 2.1'
|
36
39
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: setting_accessors
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stefan Exner
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-11-
|
11
|
+
date: 2018-11-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: appraisal
|
@@ -52,6 +52,34 @@ dependencies:
|
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0.9'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: pry
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0.12'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0.12'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: pry-byebug
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '3.6'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '3.6'
|
55
83
|
- !ruby/object:Gem::Dependency
|
56
84
|
name: rake
|
57
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -94,6 +122,20 @@ dependencies:
|
|
94
122
|
- - "~>"
|
95
123
|
- !ruby/object:Gem::Version
|
96
124
|
version: '0.60'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: simplecov
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0.16'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0.16'
|
97
139
|
- !ruby/object:Gem::Dependency
|
98
140
|
name: sqlite3
|
99
141
|
requirement: !ruby/object:Gem::Requirement
|