settingson 1.6.1 → 1.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +11 -8
- data/app/models/concerns/settingson/base.rb +1 -1
- data/lib/settingson/store.rb +55 -9
- data/lib/settingson/utils.rb +0 -0
- data/lib/settingson/version.rb +1 -1
- data/spec/models/settings_spec.rb +44 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 35ba5f07c92b264c30cc01ae57b5d27dccd3976e
|
4
|
+
data.tar.gz: 5a260c492f899e609313ffff799a3bf772747124
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 31ee2d331f97bf54a69da8892e32ca847e035443556754238f82df806593213c30e8dcd0f21a5028bbd9ea89401854c43882f759cd0eab9ae903208082b2b769
|
7
|
+
data.tar.gz: 292dc86a675178fd6aeba5365851e41bc3f8fc7b49fc09b4530e2578357ceb584ebd5012f7cce7e3b364e7e2e47f14585bb5524d7d639867da9216e85efcbb21
|
data/README.md
CHANGED
@@ -66,15 +66,21 @@ Settings.from_hash({hello: :world})
|
|
66
66
|
Settings.hello # => :world
|
67
67
|
Settings.hello? # => true
|
68
68
|
|
69
|
-
Settings.
|
70
|
-
Settings.
|
69
|
+
Settings[:greeting].welcome.message = 'Hello'
|
70
|
+
Settings[:greeting].welcome.message # => 'Hello'
|
71
|
+
Settings.greeting[:welcome].message # => 'Hello'
|
72
|
+
Settings.greeting.welcome[:message] # => 'Hello'
|
73
|
+
Settings.greeting.welcome['message'] # => 'Hello'
|
74
|
+
|
75
|
+
Settings.not_found.to_s # => ""
|
76
|
+
Settings.not_found.to_i # => 0
|
71
77
|
Settings.not_found.nil? # => true
|
72
78
|
Settings.not_found.empty? # => true
|
73
79
|
Settings.not_found.blank? # => true
|
74
80
|
Settings.not_found.present? # => false
|
75
81
|
|
76
82
|
# but
|
77
|
-
Settings.not_found.class # =>
|
83
|
+
Settings.not_found.class # => Settingson::Store
|
78
84
|
|
79
85
|
Settings.all # =>
|
80
86
|
# [#<Settings id: 1, key: "server.host", value: "127.0.0.1", created_at: "2015-12-08 15:17:56", updated_at: "2015-12-08 15:17:56">,
|
@@ -109,18 +115,15 @@ end
|
|
109
115
|
```
|
110
116
|
|
111
117
|
## The initial values
|
112
|
-
New way:
|
113
118
|
in config/initializers/settingson.rb
|
114
119
|
```ruby
|
115
120
|
Settings.defaults do |conf|
|
116
121
|
conf.server.smtp.host = 'host'
|
117
122
|
conf.server.smtp.port = 25
|
118
123
|
end
|
119
|
-
```
|
120
124
|
|
121
|
-
|
122
|
-
|
123
|
-
conf.server.smtp.port # => 25
|
125
|
+
Settings.server.smtp.host # => 'host'
|
126
|
+
Settings.server.smtp.port # => 25
|
124
127
|
```
|
125
128
|
|
126
129
|
## Contributing
|
@@ -53,7 +53,7 @@ module Settingson::Base
|
|
53
53
|
def method_missing(symbol, *args)
|
54
54
|
super
|
55
55
|
rescue NameError, NoMethodError
|
56
|
-
Settingson::Store.new(klass: self).send(symbol, args
|
56
|
+
Settingson::Store.new(klass: self).send(symbol, *args)
|
57
57
|
end
|
58
58
|
|
59
59
|
end # module ClassMethods
|
data/lib/settingson/store.rb
CHANGED
@@ -6,25 +6,30 @@ class Settingson::Store
|
|
6
6
|
end
|
7
7
|
|
8
8
|
def to_s
|
9
|
-
|
9
|
+
''
|
10
10
|
end
|
11
11
|
|
12
12
|
def to_i
|
13
|
-
|
13
|
+
0
|
14
14
|
end
|
15
15
|
|
16
16
|
def nil?
|
17
|
-
|
17
|
+
true
|
18
|
+
end
|
19
|
+
|
20
|
+
def to_a
|
21
|
+
[]
|
18
22
|
end
|
19
23
|
|
20
24
|
alias empty? nil?
|
25
|
+
alias to_ary to_a
|
21
26
|
|
22
27
|
def method_missing(symbol, *args)
|
23
|
-
__rescue_action(symbol.to_s, args
|
28
|
+
__rescue_action(symbol.to_s, args)
|
24
29
|
end # method_missing
|
25
30
|
|
26
31
|
protected
|
27
|
-
|
32
|
+
# TODO: move all methods to support class
|
28
33
|
def __debug(message)
|
29
34
|
message = sprintf("%s#%-32s: %s",
|
30
35
|
self.class.name,
|
@@ -34,12 +39,20 @@ class Settingson::Store
|
|
34
39
|
end
|
35
40
|
|
36
41
|
def __rescue_action(key, value)
|
42
|
+
__debug("key: #{key}:#{key.class} value: #{value}:#{value.class} " +
|
43
|
+
"path: '#{@__path}'")
|
37
44
|
case key
|
45
|
+
when '[]' # object reference
|
46
|
+
__debug("reference '#{value.first}'")
|
47
|
+
__get( __reference(value.first) )
|
48
|
+
when '[]=' # object reference setter
|
49
|
+
__debug("reference setter '#{value.first}' '#{value.last}'")
|
50
|
+
__set( __reference(value.first), value.last )
|
38
51
|
when /(.+)=/ # setter
|
39
|
-
__debug("set '#{$1}' value '#{value}'
|
40
|
-
__set($1, value)
|
41
|
-
else
|
42
|
-
__debug("get '#{key}'
|
52
|
+
__debug("set '#{$1}' value '#{value.first}'")
|
53
|
+
__set($1, value.first)
|
54
|
+
else # returns values or self
|
55
|
+
__debug("get '#{key}'")
|
43
56
|
__get(key)
|
44
57
|
end
|
45
58
|
end
|
@@ -68,6 +81,39 @@ class Settingson::Store
|
|
68
81
|
end
|
69
82
|
end
|
70
83
|
|
84
|
+
# @profile = Profile.first # any ActiveRecord::Base object
|
85
|
+
# Settings[@profile].some.host = 'value'
|
86
|
+
def __reference(key)
|
87
|
+
case key
|
88
|
+
when String
|
89
|
+
key
|
90
|
+
when Symbol
|
91
|
+
key.to_s
|
92
|
+
when ActiveRecord::Base
|
93
|
+
class_name = __underscore(key.class)
|
94
|
+
ref_id = __reference_id(key)
|
95
|
+
"#{class_name}_#{ref_id || 'new'}"
|
96
|
+
else
|
97
|
+
raise ArgumentError.new(
|
98
|
+
'String/Symbol/ActiveRecord::Base variable required'
|
99
|
+
)
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
def __underscore(camel_cased_word)
|
104
|
+
word = camel_cased_word.to_s.dup
|
105
|
+
word.gsub!(/::/, '_')
|
106
|
+
word.gsub!(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
|
107
|
+
word.gsub!(/([a-z\d])([A-Z])/, '\1_\2')
|
108
|
+
word.tr!('-', '_')
|
109
|
+
word.downcase!
|
110
|
+
word
|
111
|
+
end
|
112
|
+
|
113
|
+
def __reference_id(key)
|
114
|
+
key.try(:to_key).try(:join, '_') || key.id
|
115
|
+
end
|
116
|
+
|
71
117
|
def __update_search_path(key)
|
72
118
|
@__path = [@__path, key].compact.join('.')
|
73
119
|
end
|
File without changes
|
data/lib/settingson/version.rb
CHANGED
@@ -42,8 +42,14 @@ describe Settings do
|
|
42
42
|
Settings.number = 100
|
43
43
|
expect( Settings.number ).to eq(100)
|
44
44
|
end
|
45
|
-
it '
|
45
|
+
it 'pass simple checks' do
|
46
|
+
expect( Settings.not_found.to_s ).to eq("")
|
46
47
|
expect( Settings.not_found.to_i ).to eq(0)
|
48
|
+
expect( Settings.not_found.to_a ).to eq([])
|
49
|
+
expect( Settings.not_found.nil? ).to eq(true)
|
50
|
+
expect( Settings.not_found.empty? ).to eq(true)
|
51
|
+
expect( Settings.not_found.blank? ).to eq(true)
|
52
|
+
expect( Settings.not_found.present? ).to eq(false)
|
47
53
|
end
|
48
54
|
it 'returns same String' do
|
49
55
|
word = Faker::Lorem.word
|
@@ -125,4 +131,41 @@ describe Settings do
|
|
125
131
|
end
|
126
132
|
end
|
127
133
|
|
134
|
+
describe '::[]' do
|
135
|
+
it 'raises error with unknown class' do
|
136
|
+
expect{ Settings[Time.new] }.to raise_error(ArgumentError)
|
137
|
+
end
|
138
|
+
it 'returns Settingson::Store instance' do
|
139
|
+
expect( Settings['hello'] ).to be_a(Settingson::Store)
|
140
|
+
end
|
141
|
+
it 'returns instance with search path "hello" for simple' do
|
142
|
+
settings = Settings['hello']
|
143
|
+
expect( settings.instance_variable_get(:@__path) ).to eq('hello')
|
144
|
+
end
|
145
|
+
it 'returns instance with search path "hello.message" for complex #1' do
|
146
|
+
settings = Settings[:hello].message
|
147
|
+
expect( settings.instance_variable_get(:@__path) ).to eq('hello.message')
|
148
|
+
end
|
149
|
+
|
150
|
+
it 'Settings[:say] form' do
|
151
|
+
Settings[:say] = 'hello'
|
152
|
+
expect( Settings.say ).to eq('hello')
|
153
|
+
end
|
154
|
+
it 'Settings[:say].hello == Settings.say[:hello]' do
|
155
|
+
Settings[:say].hello = 'hello'
|
156
|
+
expect( Settings.say[:hello] ).to eq('hello')
|
157
|
+
end
|
158
|
+
it 'works with complex check' do
|
159
|
+
Settings[:greeting].welcome.message = 'Hello'
|
160
|
+
expect( Settings[:greeting].welcome.message ).to eq('Hello')
|
161
|
+
expect( Settings.greeting[:welcome].message ).to eq('Hello')
|
162
|
+
expect( Settings.greeting.welcome[:message] ).to eq('Hello')
|
163
|
+
expect( Settings.greeting.welcome['message'] ).to eq('Hello')
|
164
|
+
end
|
165
|
+
it 'returns instance with search path "settings_1"' do
|
166
|
+
s = Settings.create(key: 'hello', value: 'world')
|
167
|
+
expect( Settings[s].instance_variable_get(:@__path) ).to eq("settings_1")
|
168
|
+
end
|
169
|
+
end
|
170
|
+
|
128
171
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: settingson
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- dan
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-09-
|
11
|
+
date: 2016-09-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -179,6 +179,7 @@ files:
|
|
179
179
|
- lib/settingson/config.rb
|
180
180
|
- lib/settingson/engine.rb
|
181
181
|
- lib/settingson/store.rb
|
182
|
+
- lib/settingson/utils.rb
|
182
183
|
- lib/settingson/version.rb
|
183
184
|
- settingson.gemspec
|
184
185
|
- spec/dummy/README.rdoc
|