setting_accessors 1.0.0 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
[![Gem Version](https://badge.fury.io/rb/setting_accessors.svg)](http://badge.fury.io/rb/setting_accessors)
|
5
5
|
[![Build Status](https://travis-ci.org/Stex/setting_accessors.svg?branch=master)](https://travis-ci.org/Stex/setting_accessors)
|
6
6
|
[![Maintainability](https://api.codeclimate.com/v1/badges/78becd1d005aab2d1409/maintainability)](https://codeclimate.com/github/Stex/setting_accessors/maintainability)
|
7
|
+
[![Test Coverage](https://api.codeclimate.com/v1/badges/a99a88d28ad37a79dbf6/test_coverage)](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
|