configr 0.2.0 → 0.8.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/LICENSE +1 -1
- data/Rakefile +2 -2
- data/VERSION +1 -1
- data/configr.gemspec +67 -0
- data/examples/all.rb +12 -10
- data/lib/configr/configuration.rb +20 -15
- data/lib/configr/configuration_block.rb +1 -1
- data/lib/configr/hash.rb +6 -5
- data/readme.rdoc +52 -14
- data/spec/lib/configuration_block_spec.rb +2 -0
- data/spec/lib/configuration_spec.rb +51 -42
- data/spec/lib/errors_spec.rb +2 -3
- data/spec/lib/hash_spec.rb +17 -2
- metadata +5 -3
data/.gitignore
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
pkg/*
|
data/LICENSE
CHANGED
data/Rakefile
CHANGED
@@ -5,8 +5,8 @@ begin
|
|
5
5
|
require 'jeweler'
|
6
6
|
Jeweler::Tasks.new do |gem|
|
7
7
|
gem.name = "configr"
|
8
|
-
gem.summary = "A more
|
9
|
-
gem.description = "Configr aims to provide a
|
8
|
+
gem.summary = "A more elegant approach to creating and accessing configuration values."
|
9
|
+
gem.description = "Configr aims to provide a clean interface to configuring and reading a set of configuration values. The idea evolved from using a standard hash as a configuration store into a more elegant way to declare and read values from within a hash. "
|
10
10
|
gem.email = "josh@josh-nesbitt.net"
|
11
11
|
gem.homepage = "http://github.com/joshnesbitt/configr"
|
12
12
|
gem.authors = ["Josh Nesbitt"]
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.8.0
|
data/configr.gemspec
ADDED
@@ -0,0 +1,67 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = %q{configr}
|
8
|
+
s.version = "0.8.0"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Josh Nesbitt"]
|
12
|
+
s.date = %q{2010-02-26}
|
13
|
+
s.description = %q{Configr aims to provide a clean interface to configuring and reading a set of configuration values. The idea evolved from using a standard hash as a configuration store into a more elegant way to declare and read values from within a hash. }
|
14
|
+
s.email = %q{josh@josh-nesbitt.net}
|
15
|
+
s.extra_rdoc_files = [
|
16
|
+
"LICENSE"
|
17
|
+
]
|
18
|
+
s.files = [
|
19
|
+
".gitignore",
|
20
|
+
"LICENSE",
|
21
|
+
"Rakefile",
|
22
|
+
"VERSION",
|
23
|
+
"configr.gemspec",
|
24
|
+
"examples/all.rb",
|
25
|
+
"lib/configr.rb",
|
26
|
+
"lib/configr/configuration.rb",
|
27
|
+
"lib/configr/configuration_block.rb",
|
28
|
+
"lib/configr/errors.rb",
|
29
|
+
"lib/configr/hash.rb",
|
30
|
+
"readme.rdoc",
|
31
|
+
"spec/fixtures/configuration.yml",
|
32
|
+
"spec/lib/configuration_block_spec.rb",
|
33
|
+
"spec/lib/configuration_spec.rb",
|
34
|
+
"spec/lib/errors_spec.rb",
|
35
|
+
"spec/lib/hash_spec.rb",
|
36
|
+
"spec/spec_helper.rb",
|
37
|
+
"spec/watch.rb"
|
38
|
+
]
|
39
|
+
s.homepage = %q{http://github.com/joshnesbitt/configr}
|
40
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
41
|
+
s.require_paths = ["lib"]
|
42
|
+
s.rubygems_version = %q{1.3.5}
|
43
|
+
s.summary = %q{A more elegant approach to creating and accessing configuration values.}
|
44
|
+
s.test_files = [
|
45
|
+
"spec/lib/configuration_block_spec.rb",
|
46
|
+
"spec/lib/configuration_spec.rb",
|
47
|
+
"spec/lib/errors_spec.rb",
|
48
|
+
"spec/lib/hash_spec.rb",
|
49
|
+
"spec/spec_helper.rb",
|
50
|
+
"spec/watch.rb",
|
51
|
+
"examples/all.rb"
|
52
|
+
]
|
53
|
+
|
54
|
+
if s.respond_to? :specification_version then
|
55
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
56
|
+
s.specification_version = 3
|
57
|
+
|
58
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
59
|
+
s.add_development_dependency(%q<rspec>, [">= 1.2.9"])
|
60
|
+
else
|
61
|
+
s.add_dependency(%q<rspec>, [">= 1.2.9"])
|
62
|
+
end
|
63
|
+
else
|
64
|
+
s.add_dependency(%q<rspec>, [">= 1.2.9"])
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
data/examples/all.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib', 'configr'))
|
2
2
|
|
3
|
+
|
3
4
|
# Standalone (without YAML)
|
4
5
|
|
5
6
|
configuration = Configr::Configuration.configure do |config|
|
@@ -54,20 +55,21 @@ puts configuration.example_two
|
|
54
55
|
puts configuration.example_three
|
55
56
|
puts configuration.example_four
|
56
57
|
|
57
|
-
#
|
58
|
+
# Example of real world usage
|
58
59
|
|
59
|
-
|
60
|
-
config.
|
61
|
-
config.
|
60
|
+
Configuration = Configr::Configuration.configure do |config|
|
61
|
+
config.email.from_address = "goaway@example.com"
|
62
|
+
config.email.from_name = "Someone"
|
62
63
|
|
63
64
|
config.twitter.screen_name = "someone"
|
64
65
|
config.twitter.password = "somepass"
|
66
|
+
|
67
|
+
config.wiki_url = "wiki.example.com"
|
65
68
|
end
|
66
69
|
|
67
|
-
puts
|
68
|
-
puts
|
69
|
-
puts
|
70
|
-
puts Config.twitter[:password]
|
70
|
+
puts Configuration.wiki_url
|
71
|
+
puts Configuration.twitter[:screen_name]
|
72
|
+
puts Configuration.twitter[:password]
|
71
73
|
|
72
|
-
puts
|
73
|
-
puts
|
74
|
+
puts Configuration.email.from_address
|
75
|
+
puts Configuration.email.from_name
|
@@ -5,6 +5,21 @@ require 'configuration_block'
|
|
5
5
|
|
6
6
|
module Configr
|
7
7
|
class Configuration
|
8
|
+
|
9
|
+
class << self
|
10
|
+
def configure(yaml=nil)
|
11
|
+
instance = self.new(yaml)
|
12
|
+
|
13
|
+
yield instance.base if block_given?
|
14
|
+
|
15
|
+
instance.attributes = instance.base.attributes
|
16
|
+
instance.merge_configurations!
|
17
|
+
instance.attributes.recursive_normalize!
|
18
|
+
|
19
|
+
instance
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
8
23
|
attr_accessor :base, :attributes, :yaml
|
9
24
|
|
10
25
|
def initialize(yaml=nil)
|
@@ -12,20 +27,6 @@ module Configr
|
|
12
27
|
self.yaml = yaml
|
13
28
|
end
|
14
29
|
|
15
|
-
def self.configure(yaml=nil)
|
16
|
-
instance = self.new(yaml)
|
17
|
-
|
18
|
-
yield instance.base if block_given?
|
19
|
-
|
20
|
-
instance.attributes = instance.base.attributes
|
21
|
-
|
22
|
-
instance.merge_configurations!
|
23
|
-
|
24
|
-
instance.attributes.recursive_normalize!
|
25
|
-
|
26
|
-
instance
|
27
|
-
end
|
28
|
-
|
29
30
|
def [](value)
|
30
31
|
self.attributes[value]
|
31
32
|
end
|
@@ -35,7 +36,7 @@ module Configr
|
|
35
36
|
|
36
37
|
case
|
37
38
|
when name.include?("=")
|
38
|
-
raise ConfigurationLocked, "
|
39
|
+
raise ConfigurationLocked, "Configuration is locked from configuring values after the configuration has been run."
|
39
40
|
when name.include?("?")
|
40
41
|
!self.attributes[name.gsub("?", "").to_sym].nil?
|
41
42
|
else
|
@@ -46,12 +47,16 @@ module Configr
|
|
46
47
|
def merge_configurations!
|
47
48
|
return unless self.yaml
|
48
49
|
|
50
|
+
self.yaml = self.yaml.to_s
|
51
|
+
|
49
52
|
hash = if File.exists?(self.yaml)
|
50
53
|
YAML.load_file(self.yaml)
|
51
54
|
else
|
52
55
|
YAML.load(self.yaml)
|
53
56
|
end
|
54
57
|
|
58
|
+
return unless hash
|
59
|
+
|
55
60
|
hash = Hash.new(hash)
|
56
61
|
hash.recursive_symbolize_keys!
|
57
62
|
|
data/lib/configr/hash.rb
CHANGED
@@ -1,15 +1,16 @@
|
|
1
1
|
module Configr
|
2
2
|
module HashExtensions
|
3
3
|
def symbolize_keys!
|
4
|
-
|
5
|
-
self.delete(k.to_s)
|
4
|
+
each do |k, v|
|
5
|
+
self.delete(k.to_s)
|
6
6
|
self[k.to_sym] = v
|
7
|
-
|
7
|
+
end
|
8
8
|
end
|
9
9
|
|
10
10
|
def recursive_symbolize_keys!
|
11
|
-
|
12
|
-
|
11
|
+
symbolize_keys!
|
12
|
+
|
13
|
+
values.select { |value|
|
13
14
|
value.is_a?(::Hash) || value.is_a?(Hash)
|
14
15
|
}.each{ |hash|
|
15
16
|
hash.recursive_symbolize_keys!
|
data/readme.rdoc
CHANGED
@@ -4,17 +4,24 @@
|
|
4
4
|
* Installation
|
5
5
|
* Usage
|
6
6
|
* Usage (within frameworks)
|
7
|
+
* Locking
|
8
|
+
* Bugs
|
7
9
|
* Contributors
|
8
10
|
|
11
|
+
|
9
12
|
== Overview
|
10
13
|
|
11
14
|
Configr aims to provide a more Ruby-like interface to configuring and reading a set of configuration values. The idea evolved from using a standard hash as a configuration store into a more elegant way to declare and read values from within a hash.
|
12
15
|
|
16
|
+
|
17
|
+
|
13
18
|
== Installation
|
14
19
|
|
15
20
|
The project is hosted on rubygems.org. Getting it is simple:
|
16
21
|
|
17
|
-
gem install
|
22
|
+
gem install configr
|
23
|
+
|
24
|
+
|
18
25
|
|
19
26
|
== Usage
|
20
27
|
|
@@ -23,10 +30,11 @@ There are a variety of ways in which you can use Configr:
|
|
23
30
|
* Standalone block
|
24
31
|
* From inline YAML
|
25
32
|
* From a YAML file
|
26
|
-
* A mixture of YAML and block configuration
|
33
|
+
* A mixture of a YAML and block configuration
|
27
34
|
|
28
35
|
The following examples can also be found and run in examples/all.rb.
|
29
36
|
|
37
|
+
|
30
38
|
=== Standalone Block
|
31
39
|
|
32
40
|
configuration = Configr::Configuration.configure do |config|
|
@@ -37,7 +45,7 @@ The following examples can also be found and run in examples/all.rb.
|
|
37
45
|
puts configuration.example_one
|
38
46
|
puts configuration.example_two
|
39
47
|
|
40
|
-
Conceptually you could continue to nest configuration blocks as far as you wish. They exist to enable you to
|
48
|
+
Conceptually you could continue to nest configuration blocks as far as you wish. They exist to enable you to separate your configuration values into contexts. Take for example a set of email configuration values:
|
41
49
|
|
42
50
|
Configr::Configuration.configure do |config|
|
43
51
|
config.email.from_address = "hello@example.com"
|
@@ -45,6 +53,10 @@ Conceptually you could continue to nest configuration blocks as far as you wish.
|
|
45
53
|
config.email.reply_address = "reply@example.com"
|
46
54
|
end
|
47
55
|
|
56
|
+
puts configuration.email.from_address
|
57
|
+
puts configuration.email.from_name
|
58
|
+
puts configuration.email.reply_address
|
59
|
+
|
48
60
|
=== From an inline YAML string
|
49
61
|
|
50
62
|
yaml = <<YAML
|
@@ -59,6 +71,7 @@ Conceptually you could continue to nest configuration blocks as far as you wish.
|
|
59
71
|
puts configuration.example_one
|
60
72
|
puts configuration.example_two
|
61
73
|
|
74
|
+
|
62
75
|
=== From a YAML file
|
63
76
|
|
64
77
|
configuration = Configr::Configuration.configure("/path/to/file.yml")
|
@@ -66,35 +79,41 @@ Conceptually you could continue to nest configuration blocks as far as you wish.
|
|
66
79
|
puts configuration.value_one
|
67
80
|
puts configuration.value_two
|
68
81
|
|
82
|
+
|
69
83
|
=== A mixture of any of the above
|
70
84
|
|
71
85
|
yaml = <<YAML
|
72
86
|
|
73
|
-
example_three: "
|
74
|
-
example_four: "
|
75
|
-
|
87
|
+
example_three: "three"
|
88
|
+
example_four: "four"
|
89
|
+
|
76
90
|
YAML
|
77
91
|
|
78
92
|
configuration = Configr::Configuration.configure(yaml) do |config|
|
79
|
-
config.example_one = "
|
80
|
-
config.example_two = "
|
93
|
+
config.example_one = "one"
|
94
|
+
config.example_two = "two"
|
81
95
|
end
|
82
|
-
|
96
|
+
|
83
97
|
puts configuration.example_one
|
84
98
|
puts configuration.example_two
|
85
99
|
puts configuration.example_three
|
86
100
|
puts configuration.example_four
|
87
101
|
|
102
|
+
|
103
|
+
|
88
104
|
== Usage (within frameworks)
|
89
105
|
|
90
|
-
Configr is intended to be framework agnostic, but it's easy to get it going
|
106
|
+
Configr is intended to be framework agnostic, but it's easy to get it going inside of Rails/Sinatra/Hot New Framework.
|
107
|
+
|
91
108
|
|
92
109
|
=== Rails
|
93
110
|
|
94
|
-
You can use Configr within Rails quite easily. I don't
|
111
|
+
You can use Configr within Rails quite easily. I don't plan to provide any "out of the box" way to hook Configr into Rails but it's quite easy to implement:
|
95
112
|
|
96
113
|
# In config/configuration.rb
|
97
|
-
|
114
|
+
yaml_file = Rails.root.join("config", "environments", "#{Rails.env}.yml")
|
115
|
+
|
116
|
+
Configuration = Configr::Configuration.configure(yaml_file) do |config|
|
98
117
|
config.my.configuration.value = "value"
|
99
118
|
end
|
100
119
|
|
@@ -102,26 +121,43 @@ You can use Configr within Rails quite easily. I don't really plan to provide an
|
|
102
121
|
require Rails.root.join("config", "configuration.rb")
|
103
122
|
|
104
123
|
# Anywhere in your Rails app
|
105
|
-
|
124
|
+
Configuration.my.configuration.value
|
106
125
|
|
107
126
|
By requiring a different YAML file based on the environment it is easy to override global values with environment specific values.
|
108
127
|
|
128
|
+
|
109
129
|
=== Sinatra
|
110
130
|
|
111
131
|
A quick and dirty solution would be to pop it in a configure block:
|
112
132
|
|
113
133
|
configure do
|
114
|
-
|
134
|
+
Configuration = Configr::Configuration.configure("config/file.yml") do |config|
|
115
135
|
config.something = "value"
|
116
136
|
end
|
117
137
|
end
|
118
138
|
|
119
139
|
Again, by requiring a different YAML file based on the environment it is easy to override global values with environment specific values.
|
120
140
|
|
141
|
+
|
142
|
+
|
143
|
+
== A note about locking
|
144
|
+
|
145
|
+
By design a configuration value is not meant to be edited or created after the configuration block has been run (if you do you will run into a Configr::ConfigurationLocked error when assigning a value on the top level). In my opinion configurations such as those created in Configr are meant to be read-only during the lifetime of the application. Configr could however be altered to allow this with a patch should it be required.
|
146
|
+
|
147
|
+
|
148
|
+
|
149
|
+
== Bugs
|
150
|
+
|
151
|
+
If you have any problems with Configr, please file an issue at http://github.com/joshnesbitt/configr/issues.
|
152
|
+
|
153
|
+
|
154
|
+
|
121
155
|
== Contributors
|
122
156
|
|
123
157
|
* Thomas Williams for the concept of nested configuration blocks.
|
124
158
|
|
159
|
+
|
160
|
+
|
125
161
|
== Note on Patches/Pull Requests
|
126
162
|
|
127
163
|
* Fork the project.
|
@@ -132,6 +168,8 @@ Again, by requiring a different YAML file based on the environment it is easy to
|
|
132
168
|
(if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
|
133
169
|
* Send me a pull request. Bonus points for topic branches.
|
134
170
|
|
171
|
+
|
172
|
+
|
135
173
|
== Copyright
|
136
174
|
|
137
175
|
Copyright (c) 2010 Josh Nesbitt <josh@josh-nesbitt.net>. See LICENSE for details.
|
@@ -1,5 +1,6 @@
|
|
1
1
|
module Configr
|
2
2
|
describe ConfigurationBlock do
|
3
|
+
|
3
4
|
before do
|
4
5
|
@hash = { :one => "one", :two => "two" }
|
5
6
|
@block = ConfigurationBlock.new(@hash)
|
@@ -48,5 +49,6 @@ module Configr
|
|
48
49
|
@block.five.six.class.should == ConfigurationBlock
|
49
50
|
@block.five.six.seven.class.should == ConfigurationBlock
|
50
51
|
end
|
52
|
+
|
51
53
|
end
|
52
54
|
end
|
@@ -1,110 +1,114 @@
|
|
1
1
|
module Configr
|
2
2
|
describe Configuration do
|
3
|
-
|
3
|
+
|
4
4
|
it "should have the #configure class method to instantiate the configuration" do
|
5
5
|
Configuration.should respond_to(:configure)
|
6
6
|
end
|
7
|
-
|
7
|
+
|
8
8
|
it "should return nil when a value is not set" do
|
9
9
|
configuration = Configuration.configure do |config|
|
10
10
|
config.key = "value"
|
11
11
|
end
|
12
|
-
|
12
|
+
|
13
13
|
configuration.other_key.should be_nil
|
14
14
|
end
|
15
|
-
|
16
|
-
it "should return a value for a key
|
15
|
+
|
16
|
+
it "should return a value for a key thats been set" do
|
17
17
|
configuration = Configuration.configure do |config|
|
18
18
|
config.key = "value"
|
19
19
|
end
|
20
|
-
|
20
|
+
|
21
21
|
configuration.key.should == "value"
|
22
22
|
end
|
23
|
-
|
24
|
-
it "should
|
23
|
+
|
24
|
+
it "should return true on a value being present when using the #method?" do
|
25
25
|
configuration = Configuration.configure do |config|
|
26
26
|
config.key = "value"
|
27
27
|
end
|
28
|
-
|
29
|
-
|
28
|
+
|
29
|
+
configuration.key?.should == true
|
30
|
+
configuration.other_value?.should == false
|
30
31
|
end
|
31
|
-
|
32
|
-
it "should
|
32
|
+
|
33
|
+
it "should raise an error when an existing value attempts to be updated once configuration has been run" do
|
33
34
|
configuration = Configuration.configure do |config|
|
34
35
|
config.key = "value"
|
35
36
|
end
|
36
|
-
|
37
|
-
configuration.key
|
38
|
-
configuration.other_value?.should == false
|
37
|
+
|
38
|
+
lambda { configuration.key = "othervalue" }.should raise_error(Configr::ConfigurationLocked)
|
39
39
|
end
|
40
|
-
|
41
|
-
it "should load a configuration from a YAML string" do
|
40
|
+
|
41
|
+
it "should load a configuration hash from a YAML string" do
|
42
42
|
yaml = <<-YAML
|
43
43
|
first_name: Josh
|
44
44
|
location: Leeds
|
45
45
|
YAML
|
46
|
-
|
46
|
+
|
47
47
|
configuration = Configuration.configure(yaml)
|
48
|
-
|
48
|
+
|
49
49
|
configuration.first_name.should == "Josh"
|
50
50
|
configuration.location.should == "Leeds"
|
51
51
|
end
|
52
|
-
|
53
|
-
it "should load a configuration from a YAML string and a block" do
|
52
|
+
|
53
|
+
it "should load a configuration hash from a YAML string and a block" do
|
54
54
|
yaml = <<-YAML
|
55
55
|
first_name: Josh
|
56
56
|
location: Leeds
|
57
57
|
YAML
|
58
|
-
|
58
|
+
|
59
59
|
configuration = Configuration.configure(yaml) do |config|
|
60
60
|
config.from_block = "value"
|
61
61
|
end
|
62
|
-
|
62
|
+
|
63
63
|
configuration.first_name.should == "Josh"
|
64
64
|
configuration.location.should == "Leeds"
|
65
65
|
configuration.from_block.should == "value"
|
66
66
|
end
|
67
|
-
|
68
|
-
it "should load a configation from a YAML file" do
|
67
|
+
|
68
|
+
it "should load a configation hash from a YAML file" do
|
69
69
|
file = File.expand_path(File.join('spec', 'fixtures', 'configuration.yml'))
|
70
|
-
|
70
|
+
|
71
71
|
configuration = Configuration.configure(file)
|
72
|
-
|
72
|
+
|
73
73
|
configuration.first_name.should == "Bob"
|
74
74
|
configuration.location.should == "Somewhere else"
|
75
75
|
end
|
76
|
-
|
77
|
-
it "should load a configation from a YAML file and a block" do
|
76
|
+
|
77
|
+
it "should load a configation hash from a YAML file and a block" do
|
78
78
|
file = File.expand_path(File.join('spec', 'fixtures', 'configuration.yml'))
|
79
|
-
|
79
|
+
|
80
80
|
configuration = Configuration.configure(file) do |config|
|
81
81
|
config.hello = "value"
|
82
82
|
end
|
83
|
-
|
83
|
+
|
84
84
|
configuration.first_name.should == "Bob"
|
85
85
|
configuration.location.should == "Somewhere else"
|
86
86
|
configuration.hello.should == "value"
|
87
87
|
end
|
88
|
-
|
89
|
-
it "should allow a value from YAML to have precedence over the block" do
|
88
|
+
|
89
|
+
it "should allow a value from YAML to have precedence over the block value" do
|
90
90
|
file = File.expand_path(File.join('spec', 'fixtures', 'configuration.yml'))
|
91
|
-
|
91
|
+
|
92
92
|
configuration = Configuration.configure(file) do |config|
|
93
93
|
config.first_name = "Billy"
|
94
94
|
end
|
95
|
-
|
95
|
+
|
96
96
|
configuration.first_name.should == "Bob"
|
97
97
|
end
|
98
98
|
|
99
|
-
it "should allow
|
99
|
+
it "should allow more than one value to be assigned within the same namespace" do
|
100
100
|
configuration = Configuration.configure do |config|
|
101
|
-
config.one.two.
|
101
|
+
config.one.two.variable_one = "value one"
|
102
|
+
config.one.two.variable_two = "value two"
|
103
|
+
config.one.two.variable_three = "value three"
|
102
104
|
end
|
103
105
|
|
104
|
-
configuration.one[:two][:
|
106
|
+
configuration.one[:two][:variable_one].should == "value one"
|
107
|
+
configuration.one[:two][:variable_two].should == "value two"
|
108
|
+
configuration.one[:two][:variable_three].should == "value three"
|
105
109
|
end
|
106
110
|
|
107
|
-
it "should allow
|
111
|
+
it "should allow standard hash based access to attributes" do
|
108
112
|
configuration = Configuration.configure do |config|
|
109
113
|
config.one.two.three.var1 = "value one"
|
110
114
|
config.one.two.three.var2 = "value two"
|
@@ -116,12 +120,17 @@ module Configr
|
|
116
120
|
configuration.one[:two][:three][:var3].should == "value three"
|
117
121
|
end
|
118
122
|
|
119
|
-
it "should allow method
|
123
|
+
it "should allow method based access to attributes" do
|
120
124
|
configuration = Configuration.configure do |config|
|
121
|
-
config.one.two.three.var1 = "value"
|
125
|
+
config.one.two.three.var1 = "value one"
|
126
|
+
config.one.two.three.var2 = "value two"
|
127
|
+
config.one.two.three.var3 = "value three"
|
122
128
|
end
|
123
129
|
|
124
|
-
configuration.one.two.three.var1.should == "value"
|
130
|
+
configuration.one.two.three.var1.should == "value one"
|
131
|
+
configuration.one.two.three.var2.should == "value two"
|
132
|
+
configuration.one.two.three.var3.should == "value three"
|
125
133
|
end
|
134
|
+
|
126
135
|
end
|
127
136
|
end
|
data/spec/lib/errors_spec.rb
CHANGED
@@ -1,12 +1,11 @@
|
|
1
1
|
module Configr
|
2
2
|
describe Hash do
|
3
3
|
|
4
|
-
it "should have a base error class
|
5
|
-
Configr::ConfigrError.ancestors.should include(StandardError)
|
6
|
-
|
4
|
+
it "should have a base error class" do
|
7
5
|
error = Configr::ConfigrError.new("Error data")
|
8
6
|
|
9
7
|
error.data.should == "Error data"
|
8
|
+
Configr::ConfigrError.ancestors.should include(StandardError)
|
10
9
|
end
|
11
10
|
|
12
11
|
end
|
data/spec/lib/hash_spec.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
module Configr
|
2
2
|
describe Hash do
|
3
3
|
|
4
|
-
it "should create a
|
4
|
+
it "should create a Configr Hash from an existing hash" do
|
5
5
|
hash = Hash.new({ :one => "one", :two => "two" })
|
6
6
|
|
7
7
|
hash[:one].should == "one"
|
@@ -11,11 +11,17 @@ module Configr
|
|
11
11
|
it "should symbolize a set of string keys" do
|
12
12
|
hash = Hash.new({ "one" => "one", "two" => "two" })
|
13
13
|
|
14
|
+
hash["one"].should == "one"
|
15
|
+
hash["two"].should == "two"
|
16
|
+
|
14
17
|
hash[:one].should be_nil
|
15
18
|
hash[:two].should be_nil
|
16
19
|
|
17
20
|
hash.symbolize_keys!
|
18
21
|
|
22
|
+
hash["one"].should be_nil
|
23
|
+
hash["two"].should be_nil
|
24
|
+
|
19
25
|
hash[:one].should == "one"
|
20
26
|
hash[:two].should == "two"
|
21
27
|
end
|
@@ -23,12 +29,20 @@ module Configr
|
|
23
29
|
it "should recursively symbolize a set of string keys" do
|
24
30
|
hash = Hash.new({ "one" => "one", "two" => "two", "three" => { "four" => "four" } })
|
25
31
|
|
32
|
+
hash["one"].should == "one"
|
33
|
+
hash["two"].should == "two"
|
34
|
+
hash["three"]["four"].should == "four"
|
35
|
+
|
26
36
|
hash[:one].should be_nil
|
27
37
|
hash[:two].should be_nil
|
28
38
|
hash[:three].should be_nil
|
29
39
|
|
30
40
|
hash.recursive_symbolize_keys!
|
31
41
|
|
42
|
+
hash["one"].should be_nil
|
43
|
+
hash["two"].should be_nil
|
44
|
+
hash["three"].should be_nil
|
45
|
+
|
32
46
|
hash[:one].should == "one"
|
33
47
|
hash[:two].should == "two"
|
34
48
|
hash[:three][:four].should == "four"
|
@@ -56,11 +70,12 @@ module Configr
|
|
56
70
|
hash[:three][:five].class.should == Configr::Hash
|
57
71
|
end
|
58
72
|
|
59
|
-
it "should
|
73
|
+
it "should allow method based access to hash keys" do
|
60
74
|
hash = Hash.new({ :one => "one", :two => "two" })
|
61
75
|
|
62
76
|
hash.one.should == "one"
|
63
77
|
hash.two.should == "two"
|
64
78
|
end
|
79
|
+
|
65
80
|
end
|
66
81
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: configr
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Josh Nesbitt
|
@@ -22,7 +22,7 @@ dependencies:
|
|
22
22
|
- !ruby/object:Gem::Version
|
23
23
|
version: 1.2.9
|
24
24
|
version:
|
25
|
-
description: "Configr aims to provide a
|
25
|
+
description: "Configr aims to provide a clean interface to configuring and reading a set of configuration values. The idea evolved from using a standard hash as a configuration store into a more elegant way to declare and read values from within a hash. "
|
26
26
|
email: josh@josh-nesbitt.net
|
27
27
|
executables: []
|
28
28
|
|
@@ -31,9 +31,11 @@ extensions: []
|
|
31
31
|
extra_rdoc_files:
|
32
32
|
- LICENSE
|
33
33
|
files:
|
34
|
+
- .gitignore
|
34
35
|
- LICENSE
|
35
36
|
- Rakefile
|
36
37
|
- VERSION
|
38
|
+
- configr.gemspec
|
37
39
|
- examples/all.rb
|
38
40
|
- lib/configr.rb
|
39
41
|
- lib/configr/configuration.rb
|
@@ -75,7 +77,7 @@ rubyforge_project:
|
|
75
77
|
rubygems_version: 1.3.5
|
76
78
|
signing_key:
|
77
79
|
specification_version: 3
|
78
|
-
summary: A more
|
80
|
+
summary: A more elegant approach to creating and accessing configuration values.
|
79
81
|
test_files:
|
80
82
|
- spec/lib/configuration_block_spec.rb
|
81
83
|
- spec/lib/configuration_spec.rb
|