tunable 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/Gemfile +1 -1
- data/README.md +10 -2
- data/Rakefile +7 -1
- data/lib/tunable/model.rb +4 -4
- data/lib/tunable/normalizer.rb +10 -0
- data/lib/tunable/version.rb +1 -1
- data/spec/spec_helper.rb +1 -1
- data/spec/tunable/defaults_spec.rb +2 -2
- data/spec/tunable/normalization_spec.rb +4 -7
- data/tunable.gemspec +5 -5
- metadata +15 -33
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: f225cd943a46e53efac5f09ab990d51e4fd27e593f682ebeca3b63801ebbf218
|
4
|
+
data.tar.gz: 7f7ada6810840be255a3092d8373edb56009dc39bc3ca272b1bcec7fabdb8731
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9a8cbc09565c8b2d0aa675fde53896bc684875bbedab4c49d3c8c4f442c97b7f5249db92492fdc0d91990cede6ab78c61dcaf920f29957adc33443ebae62416e
|
7
|
+
data.tar.gz: e74e60a6d936dac6c23f5aab964011801eab15f01a230c381550a5d9df1bce6a1bd7f4d7bb24717a25022026b79abc581a4d432ec10a76bcb8fb452b515e125d
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,7 +1,16 @@
|
|
1
1
|
Tunable
|
2
2
|
=======
|
3
3
|
|
4
|
-
A simple gem that provides scoped, pluggable settings for your AR 4+ models.
|
4
|
+
A simple gem that provides scoped, pluggable settings for your AR 4+ models. Lets you keep things simple in your models by moving all customizable settings into a separate table, using a polymorphic Settings model.
|
5
|
+
|
6
|
+
Install
|
7
|
+
-------
|
8
|
+
|
9
|
+
In your Gemfile:
|
10
|
+
|
11
|
+
```
|
12
|
+
gem 'tunable'
|
13
|
+
```
|
5
14
|
|
6
15
|
The code
|
7
16
|
--------
|
@@ -94,7 +103,6 @@ class User < ActiveRecord::Base
|
|
94
103
|
main_settings :layout_type => {
|
95
104
|
:default => lambda { |user| user.is_admin? ? 'advanced' : 'simple' }
|
96
105
|
}
|
97
|
-
|
98
106
|
end
|
99
107
|
```
|
100
108
|
|
data/Rakefile
CHANGED
data/lib/tunable/model.rb
CHANGED
@@ -109,7 +109,7 @@ module Tunable
|
|
109
109
|
|
110
110
|
if value === current
|
111
111
|
# puts 'Value is same as current'
|
112
|
-
|
112
|
+
@changed_attributes.delete(field) # in case we had set if before
|
113
113
|
return
|
114
114
|
end
|
115
115
|
|
@@ -180,14 +180,14 @@ module Tunable
|
|
180
180
|
|
181
181
|
def queue_setting_for_update(context, key, val)
|
182
182
|
if self.class.main_settings_list.include?(key.to_sym)
|
183
|
-
|
183
|
+
@changed_attributes[key.to_sym] = val if changed_attributes.include?(key.to_sym)
|
184
184
|
end
|
185
185
|
(modified_settings[context.to_sym] ||= {})[key.to_sym] = val
|
186
186
|
end
|
187
187
|
|
188
188
|
def queue_setting_for_deletion(context, key)
|
189
189
|
if self.class.main_settings_list.include?(key)
|
190
|
-
|
190
|
+
@changed_attributes[key.to_sym] = nil if changed_attributes.include?(key.to_sym)
|
191
191
|
end
|
192
192
|
(deleted_settings[context.to_sym] ||= []) << key.to_sym
|
193
193
|
end
|
@@ -201,7 +201,7 @@ module Tunable
|
|
201
201
|
else
|
202
202
|
current = main_settings[field.to_sym]
|
203
203
|
return current if current.present? or !use_default
|
204
|
-
|
204
|
+
|
205
205
|
if default = self.class.default_settings(:main)[field.to_sym]
|
206
206
|
return default.is_a?(Proc) ? default.call(self) : default
|
207
207
|
end
|
data/lib/tunable/normalizer.rb
CHANGED
@@ -8,6 +8,7 @@ module Tunable
|
|
8
8
|
def normalize_value(val)
|
9
9
|
return 1 if TRUTHIES.include?(val.to_s)
|
10
10
|
return 0 if FALSIES.include?(val.to_s)
|
11
|
+
return Integer(val) if is_integer?(val)
|
11
12
|
return if val.blank? # false.blank? returns true so this needs to go after the 0 line
|
12
13
|
val
|
13
14
|
end
|
@@ -29,6 +30,15 @@ module Tunable
|
|
29
30
|
end
|
30
31
|
end
|
31
32
|
|
33
|
+
private
|
34
|
+
|
35
|
+
def is_integer?(val)
|
36
|
+
Integer(val)
|
37
|
+
true
|
38
|
+
rescue
|
39
|
+
false
|
40
|
+
end
|
41
|
+
|
32
42
|
end
|
33
43
|
|
34
44
|
end
|
data/lib/tunable/version.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
@@ -100,7 +100,7 @@ describe 'defaults' do
|
|
100
100
|
|
101
101
|
TEST_SETTINGS.each do |key, val|
|
102
102
|
it "#{key} equals new val" do
|
103
|
-
@foo.main_settings[key].should
|
103
|
+
@foo.main_settings[key].should === @new_settings[key]
|
104
104
|
end
|
105
105
|
end
|
106
106
|
|
@@ -110,7 +110,7 @@ describe 'defaults' do
|
|
110
110
|
|
111
111
|
TEST_SETTINGS.each do |key, val|
|
112
112
|
it "#{key} equals new val" do
|
113
|
-
@foo.get_main_setting(key).should
|
113
|
+
@foo.get_main_setting(key).should === @new_settings[key]
|
114
114
|
end
|
115
115
|
end
|
116
116
|
end
|
@@ -18,7 +18,7 @@ describe 'normalization' do
|
|
18
18
|
:numbers => {
|
19
19
|
:number_0 => '0',
|
20
20
|
:number_1 => '1',
|
21
|
-
:number_of_the_beast =>
|
21
|
+
:number_of_the_beast => 666
|
22
22
|
},
|
23
23
|
:onoffs => {
|
24
24
|
:on => 'on',
|
@@ -57,7 +57,7 @@ describe 'normalization' do
|
|
57
57
|
sql = "select `value` from `settings` where `settable_id` = #{id} and `context` = '#{context}' and `key` = '#{key}';"
|
58
58
|
res = ActiveRecord::Base.connection.execute(sql)
|
59
59
|
# puts res.inspect
|
60
|
-
res[0]['value']
|
60
|
+
res[0] ? res[0]['value'] : nil
|
61
61
|
end
|
62
62
|
|
63
63
|
describe 'creating a new setting directly' do
|
@@ -188,10 +188,7 @@ describe 'normalization' do
|
|
188
188
|
describe 'using settings relationship' do
|
189
189
|
|
190
190
|
before :all do
|
191
|
-
|
192
|
-
@model.update_attributes({
|
193
|
-
:settings => VALUE_TYPES
|
194
|
-
})
|
191
|
+
@model.update_attributes(:settings => VALUE_TYPES)
|
195
192
|
end
|
196
193
|
|
197
194
|
after :all do
|
@@ -292,7 +289,7 @@ describe 'normalization' do
|
|
292
289
|
end
|
293
290
|
|
294
291
|
it 'keeps 666 as 666' do
|
295
|
-
get_value_from_model(:numbers, :number_of_the_beast).should ==
|
292
|
+
get_value_from_model(:numbers, :number_of_the_beast).should == 666
|
296
293
|
end
|
297
294
|
|
298
295
|
it 'keeps foo as foo' do
|
data/tunable.gemspec
CHANGED
@@ -14,12 +14,12 @@ Gem::Specification.new do |s|
|
|
14
14
|
s.required_rubygems_version = ">= 1.3.6"
|
15
15
|
# s.rubyforge_project = "tunable"
|
16
16
|
|
17
|
-
s.add_runtime_dependency "activerecord", "~> 4.
|
18
|
-
s.add_runtime_dependency "activesupport", "~> 4.
|
17
|
+
s.add_runtime_dependency "activerecord", "~> 4.2.x"
|
18
|
+
s.add_runtime_dependency "activesupport", "~> 4.2.x"
|
19
19
|
|
20
|
-
s.add_development_dependency "bundler"
|
21
|
-
s.add_development_dependency "rspec"
|
22
|
-
s.add_development_dependency "sqlite3", '
|
20
|
+
s.add_development_dependency "bundler" #, '~> 1.0', '>= 1.0.0'
|
21
|
+
s.add_development_dependency "rspec" #, '~> 3.0', '>= 3.0.0'
|
22
|
+
s.add_development_dependency "sqlite3", '< 1.4.x'
|
23
23
|
|
24
24
|
s.files = `git ls-files`.split("\n")
|
25
25
|
s.executables = `git ls-files`.split("\n").map{|f| f =~ /^bin\/(.*)/ ? $1 : nil}.compact
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tunable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tomás Pollak
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-03-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -16,88 +16,70 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 4.
|
19
|
+
version: 4.2.x
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 4.
|
26
|
+
version: 4.2.x
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: activesupport
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 4.
|
33
|
+
version: 4.2.x
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 4.
|
40
|
+
version: 4.2.x
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: bundler
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "~>"
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '1.0'
|
48
45
|
- - ">="
|
49
46
|
- !ruby/object:Gem::Version
|
50
|
-
version:
|
47
|
+
version: '0'
|
51
48
|
type: :development
|
52
49
|
prerelease: false
|
53
50
|
version_requirements: !ruby/object:Gem::Requirement
|
54
51
|
requirements:
|
55
|
-
- - "~>"
|
56
|
-
- !ruby/object:Gem::Version
|
57
|
-
version: '1.0'
|
58
52
|
- - ">="
|
59
53
|
- !ruby/object:Gem::Version
|
60
|
-
version:
|
54
|
+
version: '0'
|
61
55
|
- !ruby/object:Gem::Dependency
|
62
56
|
name: rspec
|
63
57
|
requirement: !ruby/object:Gem::Requirement
|
64
58
|
requirements:
|
65
|
-
- - "~>"
|
66
|
-
- !ruby/object:Gem::Version
|
67
|
-
version: '3.0'
|
68
59
|
- - ">="
|
69
60
|
- !ruby/object:Gem::Version
|
70
|
-
version:
|
61
|
+
version: '0'
|
71
62
|
type: :development
|
72
63
|
prerelease: false
|
73
64
|
version_requirements: !ruby/object:Gem::Requirement
|
74
65
|
requirements:
|
75
|
-
- - "~>"
|
76
|
-
- !ruby/object:Gem::Version
|
77
|
-
version: '3.0'
|
78
66
|
- - ">="
|
79
67
|
- !ruby/object:Gem::Version
|
80
|
-
version:
|
68
|
+
version: '0'
|
81
69
|
- !ruby/object:Gem::Dependency
|
82
70
|
name: sqlite3
|
83
71
|
requirement: !ruby/object:Gem::Requirement
|
84
72
|
requirements:
|
85
|
-
- - "
|
86
|
-
- !ruby/object:Gem::Version
|
87
|
-
version: '1.0'
|
88
|
-
- - ">="
|
73
|
+
- - "<"
|
89
74
|
- !ruby/object:Gem::Version
|
90
|
-
version: 1.
|
75
|
+
version: 1.4.x
|
91
76
|
type: :development
|
92
77
|
prerelease: false
|
93
78
|
version_requirements: !ruby/object:Gem::Requirement
|
94
79
|
requirements:
|
95
|
-
- - "
|
96
|
-
- !ruby/object:Gem::Version
|
97
|
-
version: '1.0'
|
98
|
-
- - ">="
|
80
|
+
- - "<"
|
99
81
|
- !ruby/object:Gem::Version
|
100
|
-
version: 1.
|
82
|
+
version: 1.4.x
|
101
83
|
description: Pluggable settings for your AR models.
|
102
84
|
email:
|
103
85
|
- tomas@forkhq.com
|
@@ -145,7 +127,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
145
127
|
version: 1.3.6
|
146
128
|
requirements: []
|
147
129
|
rubyforge_project:
|
148
|
-
rubygems_version: 2.
|
130
|
+
rubygems_version: 2.7.3
|
149
131
|
signing_key:
|
150
132
|
specification_version: 4
|
151
133
|
summary: Pluggable settings for your AR models.
|