envolve 1.0.1 → 1.1.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.
- checksums.yaml +4 -4
- data/HISTORY.md +4 -0
- data/Manifest.txt +1 -0
- data/Rakefile +2 -2
- data/lib/envolve.rb +1 -0
- data/lib/envolve/config.rb +12 -6
- data/lib/envolve/error.rb +8 -0
- data/lib/envolve/version.rb +1 -1
- data/test/test_helper.rb +0 -1
- data/test/test_property_config.rb +45 -15
- metadata +7 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 94e9f25547cce1d320142122f72d7d580f52bd1e
|
4
|
+
data.tar.gz: 3cc94c1b0a79e41cda8dd96d1713077ffcfb73d9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 30b91a69a0210626901e6a0aa6feb34948e5d97b0c6fa6e488dc7e2ab6f59351eaec3c74c2fb2e7f6008db9d3ebf8e9d391779b7dc11352ee1dd01f1f31717d0
|
7
|
+
data.tar.gz: 58e606ad44024f0752863505c9951ac27d8072973cdc55341288e11d52a4170193165e3ffbf0b1ff5b278bc1fda5c3eb3c2be7b2044dba0f52a4bd4499bf8c64
|
data/HISTORY.md
CHANGED
data/Manifest.txt
CHANGED
data/Rakefile
CHANGED
@@ -7,9 +7,9 @@ This.email = "jeremy@copiousfreetime.org"
|
|
7
7
|
This.homepage = "http://github.com/copiousfreetime/#{ This.name }"
|
8
8
|
|
9
9
|
This.ruby_gemspec do |spec|
|
10
|
-
spec.add_development_dependency( 'rake' , '~> 10.
|
10
|
+
spec.add_development_dependency( 'rake' , '~> 10.4')
|
11
11
|
spec.add_development_dependency( 'minitest' , '~> 5.4' )
|
12
|
-
spec.add_development_dependency( 'rdoc' , '~> 4.
|
12
|
+
spec.add_development_dependency( 'rdoc' , '~> 4.2' )
|
13
13
|
spec.add_development_dependency( 'simplecov', '~> 0.9' )
|
14
14
|
end
|
15
15
|
|
data/lib/envolve.rb
CHANGED
data/lib/envolve/config.rb
CHANGED
@@ -1,10 +1,11 @@
|
|
1
|
+
require 'envolve/error'
|
1
2
|
module Envolve
|
2
3
|
# Public: A Configuration class to hold your application configuration
|
3
4
|
#
|
4
5
|
# Feed it ENV or some other Hash-like object and it will allow you to access
|
5
6
|
# the elements in that hash via methods.
|
6
7
|
#
|
7
|
-
# You can also tell it to only pull those items from the initial
|
8
|
+
# You can also tell it to only pull those items from the initial hash that have
|
8
9
|
# a particular prefix, and that prefix will be stripped off of the elements
|
9
10
|
# for access.
|
10
11
|
class Config
|
@@ -50,7 +51,7 @@ module Envolve
|
|
50
51
|
|
51
52
|
# Public: Set a property, with possible transformations
|
52
53
|
#
|
53
|
-
# In the conversion of
|
54
|
+
# In the conversion of the environment to the configuration properties
|
54
55
|
# sometimes the keys and/or values need to be converted to a new name.
|
55
56
|
#
|
56
57
|
# All property transformations take place AFTER the initial keys have been downcased
|
@@ -59,13 +60,16 @@ module Envolve
|
|
59
60
|
# property - the name of the property we want to appear in the configuration
|
60
61
|
# key - the source key from the environment where this property comes from
|
61
62
|
# value - the new value for this property
|
62
|
-
# default - setting a default for this property should
|
63
|
+
# default - setting a default for this property should the environment not
|
64
|
+
# provide a value
|
65
|
+
# required - this property is required to be set via env. If it is not, an
|
66
|
+
# execption is raised when the environment is parsed
|
63
67
|
#
|
64
68
|
# value may also be a lambda, in which ase the lambda is given the original
|
65
69
|
# value and the return value from the labmda is used for the new value.
|
66
70
|
#
|
67
|
-
def self.property( property, key: nil, value: nil, default: nil )
|
68
|
-
properties[property] = { :key => key, :value => value, :default => default }
|
71
|
+
def self.property( property, key: nil, value: nil, default: nil, required: false )
|
72
|
+
properties[property] = { :key => key, :value => value, :default => default, :required => required }
|
69
73
|
end
|
70
74
|
|
71
75
|
# Internal: Return the hash holding the properties
|
@@ -75,7 +79,7 @@ module Envolve
|
|
75
79
|
@_properties ||= Hash.new
|
76
80
|
end
|
77
81
|
|
78
|
-
# Internal: The internal hash holding all the keys and values
|
82
|
+
# Internal: The internal hash like item holding all the keys and values
|
79
83
|
attr_reader :_env
|
80
84
|
|
81
85
|
# Internal: The prefix to strip off all the keys
|
@@ -107,6 +111,7 @@ module Envolve
|
|
107
111
|
|
108
112
|
# Internal: Transform the environment variables to propreties
|
109
113
|
#
|
114
|
+
# Raises MissingPropertyError if the property is required
|
110
115
|
# Returns the transformed hash
|
111
116
|
def transform_properties( env, properties )
|
112
117
|
transformed = env.to_h.dup
|
@@ -117,6 +122,7 @@ module Envolve
|
|
117
122
|
if value = transformed.delete(src_key) then
|
118
123
|
value = apply_transformation(value, trans[:value]) if trans[:value]
|
119
124
|
elsif value.nil? then
|
125
|
+
::Envolve::MissingPropertyError.raise(_prefix, src_key) if trans[:required]
|
120
126
|
value = trans[:default] if trans[:default]
|
121
127
|
end
|
122
128
|
transformed[dest_key] = value
|
data/lib/envolve/version.rb
CHANGED
data/test/test_helper.rb
CHANGED
@@ -1,30 +1,38 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
require 'envolve/config'
|
3
3
|
|
4
|
-
class
|
5
|
-
|
6
|
-
{
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
4
|
+
class TestPropertyConfig < ::Minitest::Test
|
5
|
+
class PropertyConfig < ::Envolve::Config
|
6
|
+
environment_source {
|
7
|
+
{
|
8
|
+
'EV_TEST_1' => 'test-1',
|
9
|
+
'EV_TEST_2' => 'test-2',
|
10
|
+
'EV_FOO' => 'test-bar',
|
11
|
+
'EV_WIBBLE' => 'wobble',
|
12
|
+
}
|
11
13
|
}
|
12
|
-
}
|
13
14
|
|
14
|
-
|
15
|
+
prefix 'ev'
|
15
16
|
|
16
|
-
|
17
|
-
|
18
|
-
|
17
|
+
property 'bar', :key => 'foo'
|
18
|
+
property 'wibble', :value => lambda { |val| val.gsub('o', 'ee') }
|
19
|
+
property 'ara', :default => 42, :value => lambda { |val| Integer(val) }
|
19
20
|
|
20
|
-
end
|
21
|
+
end
|
22
|
+
|
23
|
+
class PropertyMustConfig < ::Envolve::Config
|
24
|
+
property 'envolve_test_must', :required => true
|
25
|
+
end
|
26
|
+
|
27
|
+
class PrefixPropertyMustConfig < ::Envolve::Config
|
28
|
+
prefix 'envolve_test'
|
29
|
+
property 'required_property', :required => true
|
30
|
+
end
|
21
31
|
|
22
|
-
class TestPropertyConfig < ::Minitest::Test
|
23
32
|
def setup
|
24
33
|
@config = PropertyConfig.new
|
25
34
|
end
|
26
35
|
|
27
|
-
|
28
36
|
def test_access_key_as_method
|
29
37
|
assert_equal( 'test-1', @config.test_1 )
|
30
38
|
end
|
@@ -50,4 +58,26 @@ class TestPropertyConfig < ::Minitest::Test
|
|
50
58
|
assert_equal( 42, @config['ara'] )
|
51
59
|
end
|
52
60
|
|
61
|
+
|
62
|
+
def test_required_property
|
63
|
+
assert_raises(::Envolve::MissingPropertyError) {
|
64
|
+
PropertyMustConfig.new
|
65
|
+
}
|
66
|
+
end
|
67
|
+
|
68
|
+
def test_required_property_error_message
|
69
|
+
begin
|
70
|
+
PropertyMustConfig.new
|
71
|
+
rescue ::Envolve::MissingPropertyError => e
|
72
|
+
assert_match( /\s+ENVOLVE_TEST_MUST\Z/, e.message )
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def test_required_property_error_message_includes_prefix
|
77
|
+
begin
|
78
|
+
PrefixPropertyMustConfig.new
|
79
|
+
rescue ::Envolve::MissingPropertyError => e
|
80
|
+
assert_match( /\s+ENVOLVE_TEST_REQUIRED_PROPERTY\Z/, e.message )
|
81
|
+
end
|
82
|
+
end
|
53
83
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: envolve
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jeremy Hinegardner
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-12-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '10.
|
19
|
+
version: '10.4'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '10.
|
26
|
+
version: '10.4'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: minitest
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -44,14 +44,14 @@ dependencies:
|
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '4.
|
47
|
+
version: '4.2'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '4.
|
54
|
+
version: '4.2'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: simplecov
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -86,6 +86,7 @@ files:
|
|
86
86
|
- Rakefile
|
87
87
|
- lib/envolve.rb
|
88
88
|
- lib/envolve/config.rb
|
89
|
+
- lib/envolve/error.rb
|
89
90
|
- lib/envolve/version.rb
|
90
91
|
- tasks/default.rake
|
91
92
|
- tasks/this.rb
|