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 CHANGED
@@ -1,6 +1,14 @@
1
- # mongoid-app_settings
1
+ # mongoid-app\_settings
2
2
 
3
- [![Build Status](https://secure.travis-ci.org/marten/mongoid-app_settings.png)](http://travis-ci.org/marten/mongoid-app_settings)
3
+ [![Build Status](https://secure.travis-ci.org/marten/mongoid-app_settings.png)](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
- # Contributing to mongoid-app_settings
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
- 0.1.0
1
+ 1.0.0
@@ -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 = "0.1.0"
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 = "2011-12-22"
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
- it "should be possible to save a setting" do
17
- settings.instance_eval { setting :something }
18
- settings.something = "some nice value"
19
- settings.something.should == "some nice value"
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
- it "should define fields on the record" do
23
- settings.instance_eval { setting :something }
24
- expect {
25
- settings.send(:record).something
26
- }.not_to raise_error(NoMethodError)
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
- it "should save settings outside of itself" do
30
- settings.instance_eval { setting :something }
31
- other_settings.instance_eval { setting :something }
32
-
33
- settings.something = "some nice value"
34
- other_settings.something.should == "some nice value"
35
- end
36
-
37
- it "should be possible to specify default values" do
38
- settings.instance_eval { setting :foo, :default => "bar" }
39
- settings.foo.should == "bar"
40
- end
41
-
42
- it "should be possible to use defaults of other settings in defaults" do
43
- settings.instance_eval { setting :foo, :default => "bar"
44
- setting :baz, :default => "#{foo} quux" }
45
- settings.baz.should == "bar quux"
46
- end
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: 0.1.0
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: 2011-12-22 00:00:00.000000000 Z
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: &19040800 !ruby/object:Gem::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: *19040800
24
+ version_requirements: *11653860
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: activesupport
27
- requirement: &19039820 !ruby/object:Gem::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: *19039820
35
+ version_requirements: *11652580
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: database_cleaner
38
- requirement: &19038280 !ruby/object:Gem::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: *19038280
46
+ version_requirements: *11651400
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rspec
49
- requirement: &19037040 !ruby/object:Gem::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: *19037040
57
+ version_requirements: *11650500
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: jeweler
60
- requirement: &19035620 !ruby/object:Gem::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: *19035620
68
+ version_requirements: *11649380
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rcov
71
- requirement: &19034560 !ruby/object:Gem::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: *19034560
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: 3872212591673506427
116
+ hash: 4007270136377991358
117
117
  required_rubygems_version: !ruby/object:Gem::Requirement
118
118
  none: false
119
119
  requirements: