mongoid-app_settings 0.0.0 → 0.0.1

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
@@ -7,7 +7,8 @@ Simply create some class and include `Mongoid::AppSettings`.
7
7
  class MySettings
8
8
  include Mongoid::AppSettings
9
9
 
10
- default :enable_my_feature, true
10
+ setting :enable_my_feature, default: true
11
+ setting :something_else
11
12
  end
12
13
 
13
14
  Then you can do things like:
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.0
1
+ 0.0.1
@@ -4,46 +4,68 @@ module Mongoid
4
4
  module AppSettings
5
5
  extend ActiveSupport::Concern
6
6
 
7
- class Record
7
+ class Record #:nodoc:
8
8
  include Mongoid::Document
9
9
  identity type: String
10
+ store_in :settings
10
11
  end
11
12
 
12
13
  module ClassMethods
13
- def method_missing(name, *args, &block)
14
- if name.to_s =~ /^(.*)=$/
15
- set_value($1, args[0])
14
+ # Defines a setting. Options can include:
15
+ #
16
+ # * default -- Specify a default value
17
+ #
18
+ # Example usage:
19
+ #
20
+ # class MySettings
21
+ # include Mongoid::AppSettings
22
+ # setting :organization_name, :default => "demo"
23
+ # end
24
+ def setting(name, options = {})
25
+ settings[name.to_s] = options
26
+ end
27
+
28
+ # Force a reload from the database
29
+ def reload
30
+ @record = nil
31
+ end
32
+
33
+ protected
34
+
35
+ def method_missing(name, *args, &block) # :nodoc:
36
+ if name.to_s =~ /^(.*)=$/ and setting_defined?($1)
37
+ self[$1] = args[0]
38
+ elsif setting_defined?(name.to_s)
39
+ self[name.to_s]
16
40
  else
17
- get_value(name.to_s)
41
+ super
18
42
  end
19
43
  end
20
44
 
21
- def defaults
22
- @defaults ||= {}
45
+ def settings # :nodoc:
46
+ @settings ||= {}
23
47
  end
24
48
 
25
- def default(name, value)
26
- defaults[name.to_s] = value
49
+ def setting_defined?(name) # :nodoc:
50
+ settings.include?(name)
27
51
  end
28
-
29
- def record
52
+
53
+ def record # :nodoc:
30
54
  return @record if @record
31
55
  @record = Record.find_or_create_by(id: "settings")
32
56
  end
33
57
 
34
- def get_value(name)
58
+ def [](name) # :nodoc:
35
59
  if record.attributes.include?(name)
36
60
  record.read_attribute(name)
37
61
  else
38
- defaults[name]
62
+ settings[name][:default]
39
63
  end
40
64
  end
41
65
 
42
- def set_value(name, value)
43
- record.write_attribute(name, value)
44
- record.save
66
+ def []=(name, value) # :nodoc:
67
+ record.set(name, value)
45
68
  end
46
69
  end
47
-
48
70
  end
49
71
  end
@@ -0,0 +1,69 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = "mongoid-app_settings"
8
+ s.version = "0.0.1"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Marten Veldthuis"]
12
+ s.date = "2011-10-26"
13
+ s.description = "Mongoid::AppSettings allows you to store settings in MongoDB, and access them easily"
14
+ s.email = "marten@veldthuis.com"
15
+ s.extra_rdoc_files = [
16
+ "LICENSE.txt",
17
+ "README.markdown"
18
+ ]
19
+ s.files = [
20
+ ".document",
21
+ ".rspec",
22
+ "Gemfile",
23
+ "Gemfile.lock",
24
+ "LICENSE.txt",
25
+ "README.markdown",
26
+ "Rakefile",
27
+ "VERSION",
28
+ "lib/mongoid-app_settings.rb",
29
+ "mongoid-app_settings.gemspec",
30
+ "spec/mongoid-app_settings_spec.rb",
31
+ "spec/spec_helper.rb"
32
+ ]
33
+ s.homepage = "http://github.com/marten/mongoid-app_settings"
34
+ s.licenses = ["MIT"]
35
+ s.require_paths = ["lib"]
36
+ s.rubygems_version = "1.8.10"
37
+ s.summary = "Store settings for your application in MongoDB"
38
+
39
+ if s.respond_to? :specification_version then
40
+ s.specification_version = 3
41
+
42
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
43
+ s.add_runtime_dependency(%q<mongoid>, [">= 0"])
44
+ s.add_runtime_dependency(%q<activesupport>, [">= 0"])
45
+ s.add_development_dependency(%q<database_cleaner>, [">= 0"])
46
+ s.add_development_dependency(%q<bson_ext>, ["= 1.4.1"])
47
+ s.add_development_dependency(%q<rspec>, ["~> 2.3.0"])
48
+ s.add_development_dependency(%q<jeweler>, ["~> 1.6.4"])
49
+ s.add_development_dependency(%q<rcov>, [">= 0"])
50
+ else
51
+ s.add_dependency(%q<mongoid>, [">= 0"])
52
+ s.add_dependency(%q<activesupport>, [">= 0"])
53
+ s.add_dependency(%q<database_cleaner>, [">= 0"])
54
+ s.add_dependency(%q<bson_ext>, ["= 1.4.1"])
55
+ s.add_dependency(%q<rspec>, ["~> 2.3.0"])
56
+ s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
57
+ s.add_dependency(%q<rcov>, [">= 0"])
58
+ end
59
+ else
60
+ s.add_dependency(%q<mongoid>, [">= 0"])
61
+ s.add_dependency(%q<activesupport>, [">= 0"])
62
+ s.add_dependency(%q<database_cleaner>, [">= 0"])
63
+ s.add_dependency(%q<bson_ext>, ["= 1.4.1"])
64
+ s.add_dependency(%q<rspec>, ["~> 2.3.0"])
65
+ s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
66
+ s.add_dependency(%q<rcov>, [">= 0"])
67
+ end
68
+ end
69
+
@@ -7,28 +7,53 @@ describe "Mongoid::AppSettings" do
7
7
  settings
8
8
  end
9
9
 
10
+ let(:other_settings) do
11
+ other_settings = Class.new
12
+ other_settings.instance_eval { include Mongoid::AppSettings }
13
+ other_settings
14
+ end
15
+
10
16
  it "should be possible to save a setting" do
17
+ settings.instance_eval { setting :something }
11
18
  settings.something = "some nice value"
12
19
  settings.something.should == "some nice value"
13
20
  end
14
21
 
15
22
  it "should save settings outside of itself" do
23
+ settings.instance_eval { setting :something }
24
+ other_settings.instance_eval { setting :something }
25
+
16
26
  settings.something = "some nice value"
17
- fresh_settings = Class.new
18
- fresh_settings.instance_eval { include Mongoid::AppSettings }
19
- fresh_settings.something.should == "some nice value"
27
+ other_settings.something.should == "some nice value"
20
28
  end
21
29
 
22
30
  it "should be possible to specify default values" do
23
- settings.instance_eval do
24
- default :foo, "bar"
25
- end
31
+ settings.instance_eval { setting :foo, :default => "bar" }
26
32
  settings.foo.should == "bar"
27
33
  end
28
34
 
29
35
  it "should be possible to overwrite a default value" do
30
- settings.instance_eval { default :foo, "bar" }
36
+ settings.instance_eval { setting :foo, :default => "bar" }
31
37
  settings.foo = "baz"
32
38
  settings.foo.should == "baz"
33
39
  end
40
+
41
+ it "should not constantly reload" do
42
+ settings.instance_eval { setting :foo }
43
+ other_settings.instance_eval { setting :foo }
44
+ other_settings.foo # force other_settings to load the record
45
+
46
+ settings.foo = "bar"
47
+ other_settings.foo.should be_nil
48
+ end
49
+
50
+ it "should be possible to reload" do
51
+ settings.instance_eval { setting :foo }
52
+ other_settings.instance_eval { setting :foo }
53
+ other_settings.foo # force other_settings to load the record
54
+
55
+ settings.foo = "bar"
56
+ other_settings.reload
57
+ other_settings.foo.should == "bar"
58
+ end
34
59
  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.0.0
4
+ version: 0.0.1
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-10-25 00:00:00.000000000Z
12
+ date: 2011-10-26 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: mongoid
16
- requirement: &16903940 !ruby/object:Gem::Requirement
16
+ requirement: &18436980 !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: *16903940
24
+ version_requirements: *18436980
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: activesupport
27
- requirement: &16903000 !ruby/object:Gem::Requirement
27
+ requirement: &18433280 !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: *16903000
35
+ version_requirements: *18433280
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: database_cleaner
38
- requirement: &16901940 !ruby/object:Gem::Requirement
38
+ requirement: &18429820 !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: *16901940
46
+ version_requirements: *18429820
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: bson_ext
49
- requirement: &16900960 !ruby/object:Gem::Requirement
49
+ requirement: &18428000 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - =
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: 1.4.1
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *16900960
57
+ version_requirements: *18428000
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: rspec
60
- requirement: &16899860 !ruby/object:Gem::Requirement
60
+ requirement: &18426040 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ~>
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: 2.3.0
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *16899860
68
+ version_requirements: *18426040
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: jeweler
71
- requirement: &16898960 !ruby/object:Gem::Requirement
71
+ requirement: &18328300 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ~>
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: 1.6.4
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *16898960
79
+ version_requirements: *18328300
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: rcov
82
- requirement: &16897980 !ruby/object:Gem::Requirement
82
+ requirement: &18327440 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ! '>='
@@ -87,7 +87,7 @@ dependencies:
87
87
  version: '0'
88
88
  type: :development
89
89
  prerelease: false
90
- version_requirements: *16897980
90
+ version_requirements: *18327440
91
91
  description: Mongoid::AppSettings allows you to store settings in MongoDB, and access
92
92
  them easily
93
93
  email: marten@veldthuis.com
@@ -106,6 +106,7 @@ files:
106
106
  - Rakefile
107
107
  - VERSION
108
108
  - lib/mongoid-app_settings.rb
109
+ - mongoid-app_settings.gemspec
109
110
  - spec/mongoid-app_settings_spec.rb
110
111
  - spec/spec_helper.rb
111
112
  homepage: http://github.com/marten/mongoid-app_settings
@@ -123,7 +124,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
123
124
  version: '0'
124
125
  segments:
125
126
  - 0
126
- hash: 1976003032920280521
127
+ hash: -2074041831265364692
127
128
  required_rubygems_version: !ruby/object:Gem::Requirement
128
129
  none: false
129
130
  requirements: