hashr 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile.lock +1 -1
- data/lib/hashr/env_defaults.rb +11 -1
- data/lib/hashr/version.rb +1 -1
- data/test/hashr_test.rb +27 -7
- metadata +3 -3
data/Gemfile.lock
CHANGED
data/lib/hashr/env_defaults.rb
CHANGED
@@ -1,12 +1,22 @@
|
|
1
1
|
class Hashr < Hash
|
2
2
|
module EnvDefaults
|
3
|
+
attr_writer :env_namespace
|
4
|
+
|
5
|
+
def env_namespace=(env_namespace)
|
6
|
+
@env_namespace = [env_namespace.upcase]
|
7
|
+
end
|
8
|
+
|
9
|
+
def env_namespace
|
10
|
+
@env_namespace ||= []
|
11
|
+
end
|
12
|
+
|
3
13
|
def definition
|
4
14
|
deep_enverize(super)
|
5
15
|
end
|
6
16
|
|
7
17
|
protected
|
8
18
|
|
9
|
-
def deep_enverize(hash, nesting =
|
19
|
+
def deep_enverize(hash, nesting = env_namespace)
|
10
20
|
hash.each do |key, value|
|
11
21
|
nesting << key.to_s.upcase
|
12
22
|
hash[key] = case value
|
data/lib/hashr/version.rb
CHANGED
data/test/hashr_test.rb
CHANGED
@@ -36,16 +36,35 @@ class HashrTest < Test::Unit::TestCase
|
|
36
36
|
end
|
37
37
|
|
38
38
|
test 'defining defaults' do
|
39
|
-
klass = Class.new(Hashr)
|
40
|
-
|
39
|
+
klass = Class.new(Hashr) do
|
40
|
+
define :foo => 'foo', :bar => { :baz => 'baz' }
|
41
|
+
end
|
41
42
|
assert_equal 'foo', klass.new.foo
|
42
43
|
assert_equal 'baz', klass.new.bar.baz
|
43
44
|
end
|
44
45
|
|
46
|
+
test 'defining different defaults on different classes ' do
|
47
|
+
foo = Class.new(Hashr) { define :foo => 'foo' }
|
48
|
+
bar = Class.new(Hashr) { define :bar => 'bar' }
|
49
|
+
|
50
|
+
assert_equal 'foo', foo.definition[:foo]
|
51
|
+
assert_equal 'bar', bar.definition[:bar]
|
52
|
+
end
|
53
|
+
|
54
|
+
test 'defining different env_namespaces on different classes ' do
|
55
|
+
foo = Class.new(Hashr) {extend Hashr::EnvDefaults; self.env_namespace = 'foo' }
|
56
|
+
bar = Class.new(Hashr) {extend Hashr::EnvDefaults; self.env_namespace = 'bar' }
|
57
|
+
|
58
|
+
assert_equal ['FOO'], foo.env_namespace
|
59
|
+
assert_equal ['BAR'], bar.env_namespace
|
60
|
+
end
|
61
|
+
|
45
62
|
test 'defaults to env vars' do
|
46
|
-
klass = Class.new(Hashr)
|
47
|
-
|
48
|
-
|
63
|
+
klass = Class.new(Hashr) do
|
64
|
+
extend Hashr::EnvDefaults
|
65
|
+
self.env_namespace = 'worker'
|
66
|
+
define :foo => 'foo', :bar => { :baz => 'baz' }
|
67
|
+
end
|
49
68
|
|
50
69
|
ENV['WORKER_FOO'] = 'env foo'
|
51
70
|
ENV['WORKER_BAR_BAZ'] = 'env bar baz'
|
@@ -55,8 +74,9 @@ class HashrTest < Test::Unit::TestCase
|
|
55
74
|
end
|
56
75
|
|
57
76
|
test 'a key :_include includes the given modules' do
|
58
|
-
klass = Class.new(Hashr)
|
59
|
-
|
77
|
+
klass = Class.new(Hashr) do
|
78
|
+
define :foo => { :_include => Module.new { def helper; 'helper'; end } }
|
79
|
+
end
|
60
80
|
assert_equal 'helper', klass.new.foo.helper
|
61
81
|
end
|
62
82
|
end
|
metadata
CHANGED