duffel 0.0.1 → 0.0.2
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/.travis.yml +0 -1
- data/README.md +3 -3
- data/duffel.gemspec +2 -2
- data/lib/duffel.rb +26 -10
- data/spec/lib/duffel_spec.rb +61 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f95bb4cf610f9be60c7dfe01671fa23158b8989c
|
4
|
+
data.tar.gz: 832e42fe8597aed4c2e611460059f224420de231
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: eef9c610a64e30f2ca4af58a5fa8c0e0c502d9e79ce21faaa4e973255c2da291caebf1c2c4c2e0bd9ff1926e9ecf372b15742b21ddeb245cc2a0caffa00a3239
|
7
|
+
data.tar.gz: c7299ef2a77d0a88f002e29c9e8ba5bf135edbafe9104f46caf4d1f73ab6089e00740945bfdf7e86136d834c6f0869584cf5a903474b3da68cee360132922704
|
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Duffel
|
2
2
|
|
3
|
-
Fetch your environment
|
3
|
+
Fetch your environment variables. Raise errors or set defaults when a variable does not exist.
|
4
4
|
|
5
5
|
## Installation
|
6
6
|
|
@@ -60,7 +60,7 @@ Calling `Settings.env_variable_name` will still return you your environment vari
|
|
60
60
|
|
61
61
|
I know.
|
62
62
|
|
63
|
-
### Why did you do it this way and not
|
63
|
+
### Why did you do it this way and not [obviously better way]?
|
64
64
|
|
65
65
|
Because I probably don't know the obviously better way. Feel free to submit a pull request or open an issue and I'll look into it!
|
66
66
|
|
@@ -68,7 +68,7 @@ Because I probably don't know the obviously better way. Feel free to submit a pu
|
|
68
68
|
|
69
69
|
## Contributing
|
70
70
|
|
71
|
-
1. Fork it ( https://github.com/
|
71
|
+
1. Fork it ( https://github.com/ericroberts/duffel/fork )
|
72
72
|
2. Create your feature branch (`git checkout -b my-new-feature`)
|
73
73
|
3. Commit your changes (`git commit -am 'Add some feature'`)
|
74
74
|
4. Push to the branch (`git push origin my-new-feature`)
|
data/duffel.gemspec
CHANGED
@@ -8,8 +8,8 @@ Gem::Specification.new do |spec|
|
|
8
8
|
spec.version = Duffel::VERSION
|
9
9
|
spec.authors = ["Eric Roberts"]
|
10
10
|
spec.email = ["ericroberts@gmail.com"]
|
11
|
-
spec.summary = "Fetch your environment
|
12
|
-
spec.description = "Fetch your environment
|
11
|
+
spec.summary = "Fetch your environment variables."
|
12
|
+
spec.description = "Fetch your environment variables. Raise errors or set defaults when a setting does not exist."
|
13
13
|
spec.homepage = "https://github.com/ericroberts/duffel"
|
14
14
|
spec.license = "MIT"
|
15
15
|
|
data/lib/duffel.rb
CHANGED
@@ -1,18 +1,34 @@
|
|
1
1
|
class Duffel
|
2
|
-
VERSION = "0.0.
|
2
|
+
VERSION = "0.0.2"
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
|
4
|
+
class << self
|
5
|
+
|
6
|
+
def method_missing(method, *args, &block)
|
7
|
+
define_singleton_method(method) do |options={}|
|
8
|
+
options ||= {}
|
9
|
+
return_value = options.fetch(:fallback, fetch_default)
|
10
|
+
fallback = format_return_value(return_value)
|
11
|
+
|
12
|
+
env_name = method.to_s.upcase
|
13
|
+
ENV.fetch(env_name, &fallback)
|
14
|
+
end
|
15
|
+
self.send(method, args.first)
|
7
16
|
end
|
8
17
|
|
9
|
-
|
10
|
-
|
11
|
-
|
18
|
+
protected
|
19
|
+
|
20
|
+
def format_return_value(value)
|
21
|
+
if value.is_a?(Proc)
|
22
|
+
value
|
23
|
+
else
|
24
|
+
lambda { |_key| value }
|
25
|
+
end
|
26
|
+
end
|
12
27
|
|
13
|
-
|
14
|
-
|
28
|
+
def fetch_default
|
29
|
+
lambda do |key|
|
30
|
+
raise KeyError.new("key not found: #{key}")
|
31
|
+
end
|
15
32
|
end
|
16
|
-
self.send(method)
|
17
33
|
end
|
18
34
|
end
|
data/spec/lib/duffel_spec.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
require 'duffel'
|
2
2
|
|
3
3
|
describe Duffel do
|
4
|
+
subject { Duffel }
|
5
|
+
|
4
6
|
it 'should not raise an error' do
|
5
7
|
expect { subject }.to_not raise_error
|
6
8
|
end
|
@@ -18,23 +20,81 @@ describe Duffel do
|
|
18
20
|
).to eq 'blah'
|
19
21
|
end
|
20
22
|
|
23
|
+
it 'should be idempotent' do
|
24
|
+
expect(
|
25
|
+
subject.another_non_existing_method(:fallback => 'blah')
|
26
|
+
).to eq 'blah'
|
27
|
+
expect(
|
28
|
+
subject.another_non_existing_method(:fallback => 'blah')
|
29
|
+
).to eq 'blah'
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'should allow a different fallback the next time it is called' do
|
33
|
+
expect(
|
34
|
+
subject.another_non_existing_method(:fallback => 'foo')
|
35
|
+
).to eq 'foo'
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'should allow nothing to be passed and to raise a key error' do
|
39
|
+
expect{
|
40
|
+
subject.another_non_existing_method
|
41
|
+
}.to raise_error KeyError
|
42
|
+
end
|
43
|
+
|
21
44
|
context 'fallback is nil' do
|
22
45
|
it 'should return nil' do
|
23
46
|
expect(
|
24
47
|
subject.yet_another_non_existing_method(:fallback => nil)
|
25
48
|
).to eq nil
|
26
49
|
end
|
50
|
+
|
51
|
+
it 'should be idempotent' do
|
52
|
+
expect(
|
53
|
+
subject.yet_another_non_existing_method(:fallback => nil)
|
54
|
+
).to eq nil
|
55
|
+
expect(
|
56
|
+
subject.yet_another_non_existing_method(:fallback => nil)
|
57
|
+
).to eq nil
|
58
|
+
end
|
59
|
+
|
60
|
+
it 'should allow a different fallback the next time it is called' do
|
61
|
+
expect(
|
62
|
+
subject.yet_another_non_existing_method(:fallback => 'bar')
|
63
|
+
).to eq 'bar'
|
64
|
+
end
|
65
|
+
|
66
|
+
it 'should allow nothing to be passed and to raise a key error' do
|
67
|
+
expect{
|
68
|
+
subject.yet_another_non_existing_method
|
69
|
+
}.to raise_error KeyError
|
70
|
+
end
|
27
71
|
end
|
28
72
|
end
|
29
73
|
end
|
30
74
|
|
31
75
|
context 'with a matching environment variable' do
|
32
|
-
before
|
76
|
+
before do
|
77
|
+
allow(ENV).to(
|
78
|
+
receive(:fetch).
|
79
|
+
with('AN_EXISTING_METHOD').
|
80
|
+
and_return(response)
|
81
|
+
)
|
82
|
+
end
|
83
|
+
|
33
84
|
let(:response) { 'response' }
|
34
85
|
|
35
86
|
it 'should return the env variable' do
|
36
87
|
expect(subject.an_existing_method).to eq response
|
37
88
|
end
|
89
|
+
|
90
|
+
it 'should be idempotent' do
|
91
|
+
expect(subject.an_existing_method).to eq response
|
92
|
+
expect(subject.an_existing_method).to eq response
|
93
|
+
end
|
94
|
+
|
95
|
+
it 'should not return the fallback when the env variable exists' do
|
96
|
+
expect(subject.an_existing_method(fallback: 'foo')).to eq response
|
97
|
+
end
|
38
98
|
end
|
39
99
|
end
|
40
100
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: duffel
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eric Roberts
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-07-
|
11
|
+
date: 2014-07-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -52,7 +52,7 @@ dependencies:
|
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '3.0'
|
55
|
-
description: Fetch your environment
|
55
|
+
description: Fetch your environment variables. Raise errors or set defaults when a
|
56
56
|
setting does not exist.
|
57
57
|
email:
|
58
58
|
- ericroberts@gmail.com
|
@@ -93,6 +93,6 @@ rubyforge_project:
|
|
93
93
|
rubygems_version: 2.2.2
|
94
94
|
signing_key:
|
95
95
|
specification_version: 4
|
96
|
-
summary: Fetch your environment
|
96
|
+
summary: Fetch your environment variables.
|
97
97
|
test_files:
|
98
98
|
- spec/lib/duffel_spec.rb
|