mongoid-app_settings 0.1.0 → 1.0.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.
- data/README.markdown +27 -3
- data/VERSION +1 -1
- data/lib/mongoid-app_settings.rb +21 -0
- data/mongoid-app_settings.gemspec +2 -2
- data/spec/mongoid-app_settings_spec.rb +121 -72
- metadata +15 -15
data/README.markdown
CHANGED
@@ -1,6 +1,14 @@
|
|
1
|
-
# mongoid-
|
1
|
+
# mongoid-app\_settings
|
2
2
|
|
3
|
-
[](http://travis-ci.org/marten/mongoid-
|
3
|
+
[](http://travis-ci.org/marten/mongoid-app\_settings)
|
4
|
+
|
5
|
+
This is a fairly simple gem to let you work with application configuration
|
6
|
+
that's stored in Mongoid. It's inspired by a similar project called
|
7
|
+
[rails-settings](https://github.com/ledermann/rails-settings), except this
|
8
|
+
stores it in MongoDB using Mongoid.
|
9
|
+
|
10
|
+
It's a little more explicit in that it requires you to define a list of
|
11
|
+
settings beforehand.
|
4
12
|
|
5
13
|
## Usage
|
6
14
|
|
@@ -26,7 +34,23 @@ Then you can do things like:
|
|
26
34
|
MySettings.something_else
|
27
35
|
=> "FooBar"
|
28
36
|
|
29
|
-
|
37
|
+
You can unset a value (reverting it to the default if given):
|
38
|
+
|
39
|
+
MySettings.reset(:enable_my_feature)
|
40
|
+
MySettings.enable_my_feature
|
41
|
+
=> true
|
42
|
+
|
43
|
+
You can get a list of all values:
|
44
|
+
|
45
|
+
MySettings.all
|
46
|
+
=> {:enable_my_feature => true, :something_else => "FooBar"}
|
47
|
+
|
48
|
+
You can get a list of defaults:
|
49
|
+
|
50
|
+
MySettings.defaults
|
51
|
+
=> {:enable_my_feature => true, :something_else => nil}
|
52
|
+
|
53
|
+
# Contributing to mongoid-app\_settings
|
30
54
|
|
31
55
|
* Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet
|
32
56
|
* Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
1.0.0
|
data/lib/mongoid-app_settings.rb
CHANGED
@@ -48,6 +48,27 @@ module Mongoid
|
|
48
48
|
@record = nil
|
49
49
|
end
|
50
50
|
|
51
|
+
# Unsets a set value, resetting it to its default
|
52
|
+
def delete(setting)
|
53
|
+
@record.unset(setting)
|
54
|
+
end
|
55
|
+
|
56
|
+
def all
|
57
|
+
{}.tap do |result|
|
58
|
+
settings.each do |setting, options|
|
59
|
+
result[setting.to_sym] = self.send(setting)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def defaults
|
65
|
+
{}.tap do |result|
|
66
|
+
settings.each do |setting, options|
|
67
|
+
result[setting.to_sym] = options[:default]
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
51
72
|
protected
|
52
73
|
|
53
74
|
def settings # :nodoc:
|
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "mongoid-app_settings"
|
8
|
-
s.version = "
|
8
|
+
s.version = "1.0.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Marten Veldthuis"]
|
12
|
-
s.date = "
|
12
|
+
s.date = "2012-01-02"
|
13
13
|
s.description = "Mongoid::AppSettings allows you to store settings in MongoDB, and access them easily"
|
14
14
|
s.email = "marten@veldthuis.com"
|
15
15
|
s.extra_rdoc_files = [
|
@@ -13,81 +13,130 @@ describe "Mongoid::AppSettings" do
|
|
13
13
|
other_settings
|
14
14
|
end
|
15
15
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
16
|
+
describe "defining settings" do
|
17
|
+
it "should be possible to define a setting" do
|
18
|
+
settings.instance_eval { setting :something }
|
19
|
+
settings.something.should be_nil
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should be possible to specify default values" do
|
23
|
+
settings.instance_eval { setting :foo, :default => "bar" }
|
24
|
+
settings.foo.should == "bar"
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should be possible to use defaults of other settings in defaults" do
|
28
|
+
settings.instance_eval { setting :foo, :default => "bar"
|
29
|
+
setting :baz, :default => "#{foo} quux" }
|
30
|
+
settings.baz.should == "bar quux"
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should be possible to use values of other settings in defaults" do
|
34
|
+
settings.instance_eval { setting :foo, :default => "bar" }
|
35
|
+
settings.foo = "baz"
|
36
|
+
settings.instance_eval { setting :qux, :default => "#{foo} quux" }
|
37
|
+
settings.qux.should === "baz quux"
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should define fields on the record" do
|
41
|
+
settings.instance_eval { setting :something }
|
42
|
+
expect {
|
43
|
+
settings.send(:record).something
|
44
|
+
}.not_to raise_error(NoMethodError)
|
45
|
+
end
|
20
46
|
end
|
21
47
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
settings.
|
26
|
-
|
48
|
+
describe "setting values" do
|
49
|
+
it "should be possible to save a setting" do
|
50
|
+
settings.instance_eval { setting :something }
|
51
|
+
settings.something = "some nice value"
|
52
|
+
settings.something.should == "some nice value"
|
53
|
+
end
|
54
|
+
|
55
|
+
it "should save settings to mongodb" do
|
56
|
+
settings.instance_eval { setting :something }
|
57
|
+
other_settings.instance_eval { setting :something }
|
58
|
+
|
59
|
+
settings.something = "some nice value"
|
60
|
+
other_settings.something.should == "some nice value"
|
61
|
+
end
|
62
|
+
|
63
|
+
it "should be possible to overwrite a default value" do
|
64
|
+
settings.instance_eval { setting :foo, :default => "bar" }
|
65
|
+
settings.foo = "baz"
|
66
|
+
settings.foo.should == "baz"
|
67
|
+
end
|
68
|
+
|
69
|
+
it "should be possible to overwrite a value with something else" do
|
70
|
+
settings.instance_eval { setting :foo, :default => "bar" }
|
71
|
+
settings.foo = "baz"
|
72
|
+
settings.foo = "quux"
|
73
|
+
settings.foo.should == "quux"
|
74
|
+
end
|
75
|
+
|
76
|
+
it "should be possible to unset a value, reverting to default" do
|
77
|
+
settings.instance_eval { setting :foo, :default => "bar" }
|
78
|
+
settings.foo = "baz"
|
79
|
+
settings.delete(:foo)
|
80
|
+
settings.foo.should == "bar"
|
81
|
+
end
|
82
|
+
|
83
|
+
it "should be possible to get a hash of all settings and their values" do
|
84
|
+
settings.instance_eval { setting :one, :default => "One" }
|
85
|
+
settings.instance_eval { setting :two, :default => "Two" }
|
86
|
+
settings.instance_eval { setting :three, :default => "Three" }
|
87
|
+
|
88
|
+
settings.two = "My value"
|
89
|
+
settings.three = nil
|
90
|
+
settings.all.should == {:one => "One", :two => "My value", :three => nil}
|
91
|
+
end
|
92
|
+
|
93
|
+
it "should be possible to get a hash of all settings and their defaults" do
|
94
|
+
settings.instance_eval { setting :one, :default => "One" }
|
95
|
+
settings.instance_eval { setting :two, :default => "Two" }
|
96
|
+
settings.instance_eval { setting :three}
|
97
|
+
|
98
|
+
settings.two = "My value"
|
99
|
+
settings.three = nil
|
100
|
+
settings.defaults.should == {:one => "One", :two => "Two", :three => nil}
|
101
|
+
end
|
102
|
+
|
103
|
+
it "should be possible to overwrite a value with false" do
|
104
|
+
# At one point, Mongoid didn't support Record#set with nil/false
|
105
|
+
# This spec is here to prevent regression
|
106
|
+
settings.instance_eval { setting :foo, :default => "bar" }
|
107
|
+
settings.foo = "baz"
|
108
|
+
settings.foo = false
|
109
|
+
settings.foo.should == false
|
110
|
+
end
|
111
|
+
|
112
|
+
it "should be possible to overwrite a value with false" do
|
113
|
+
# At one point, Mongoid didn't support Record#set with nil/false
|
114
|
+
# This spec is here to prevent regression
|
115
|
+
settings.instance_eval { setting :foo, :default => "bar" }
|
116
|
+
settings.foo = "baz"
|
117
|
+
settings.foo = nil
|
118
|
+
settings.foo.should == nil
|
119
|
+
end
|
27
120
|
end
|
28
121
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
it "should be possible to use values of other settings in defaults" do
|
49
|
-
settings.instance_eval { setting :foo, :default => "bar" }
|
50
|
-
settings.foo = "baz"
|
51
|
-
settings.instance_eval { setting :qux, :default => "#{foo} quux" }
|
52
|
-
settings.qux.should === "baz quux"
|
53
|
-
end
|
54
|
-
|
55
|
-
it "should be possible to overwrite a default value" do
|
56
|
-
settings.instance_eval { setting :foo, :default => "bar" }
|
57
|
-
settings.foo = "baz"
|
58
|
-
settings.foo.should == "baz"
|
59
|
-
end
|
60
|
-
|
61
|
-
it "should be possible to overwrite a value with something else" do
|
62
|
-
settings.instance_eval { setting :foo, :default => "bar" }
|
63
|
-
settings.foo = "baz"
|
64
|
-
settings.foo = "quux"
|
65
|
-
settings.foo.should == "quux"
|
66
|
-
end
|
67
|
-
|
68
|
-
it "should be possible to overwrite a value with something falsey" do
|
69
|
-
settings.instance_eval { setting :foo, :default => "bar" }
|
70
|
-
settings.foo = "baz"
|
71
|
-
settings.foo = false
|
72
|
-
settings.foo.should == false
|
73
|
-
end
|
74
|
-
|
75
|
-
it "should not constantly reload" do
|
76
|
-
settings.instance_eval { setting :foo }
|
77
|
-
other_settings.instance_eval { setting :foo }
|
78
|
-
other_settings.foo # force other_settings to load the record
|
79
|
-
|
80
|
-
settings.foo = "bar"
|
81
|
-
other_settings.foo.should be_nil
|
82
|
-
end
|
83
|
-
|
84
|
-
it "should be possible to reload" do
|
85
|
-
settings.instance_eval { setting :foo }
|
86
|
-
other_settings.instance_eval { setting :foo }
|
87
|
-
other_settings.foo # force other_settings to load the record
|
88
|
-
|
89
|
-
settings.foo = "bar"
|
90
|
-
other_settings.reload
|
91
|
-
other_settings.foo.should == "bar"
|
122
|
+
describe "reload behaviour" do
|
123
|
+
it "should not reload for every call" do
|
124
|
+
settings.instance_eval { setting :foo }
|
125
|
+
other_settings.instance_eval { setting :foo }
|
126
|
+
other_settings.foo # force other_settings to load the record
|
127
|
+
|
128
|
+
settings.foo = "bar"
|
129
|
+
other_settings.foo.should be_nil
|
130
|
+
end
|
131
|
+
|
132
|
+
it "should be possible to reload" do
|
133
|
+
settings.instance_eval { setting :foo }
|
134
|
+
other_settings.instance_eval { setting :foo }
|
135
|
+
other_settings.foo # force other_settings to load the record
|
136
|
+
|
137
|
+
settings.foo = "bar"
|
138
|
+
other_settings.reload
|
139
|
+
other_settings.foo.should == "bar"
|
140
|
+
end
|
92
141
|
end
|
93
142
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongoid-app_settings
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.0.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2012-01-02 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: mongoid
|
16
|
-
requirement: &
|
16
|
+
requirement: &11653860 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *11653860
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: activesupport
|
27
|
-
requirement: &
|
27
|
+
requirement: &11652580 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *11652580
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: database_cleaner
|
38
|
-
requirement: &
|
38
|
+
requirement: &11651400 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *11651400
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: rspec
|
49
|
-
requirement: &
|
49
|
+
requirement: &11650500 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *11650500
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: jeweler
|
60
|
-
requirement: &
|
60
|
+
requirement: &11649380 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ~>
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: 1.6.4
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *11649380
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rcov
|
71
|
-
requirement: &
|
71
|
+
requirement: &11648700 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,7 +76,7 @@ dependencies:
|
|
76
76
|
version: '0'
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *11648700
|
80
80
|
description: Mongoid::AppSettings allows you to store settings in MongoDB, and access
|
81
81
|
them easily
|
82
82
|
email: marten@veldthuis.com
|
@@ -113,7 +113,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
113
113
|
version: '0'
|
114
114
|
segments:
|
115
115
|
- 0
|
116
|
-
hash:
|
116
|
+
hash: 4007270136377991358
|
117
117
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
118
118
|
none: false
|
119
119
|
requirements:
|