env.rb 0.0.3 → 0.0.4
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/Gemfile +2 -0
- data/lib/env.rb +39 -9
- data/lib/env/version.rb +1 -1
- data/spec/enforce_spec.rb +6 -4
- data/spec/group_spec.rb +42 -0
- data/spec/spec_helper.rb +1 -0
- data/spec/uri_spec.rb +6 -6
- metadata +4 -2
data/Gemfile
CHANGED
data/lib/env.rb
CHANGED
@@ -8,11 +8,17 @@ end
|
|
8
8
|
module Env
|
9
9
|
RACK = %w{GEM_HOME TMPDIR HTTPS}
|
10
10
|
HEROKU = %w{TMP TEMP} + RACK
|
11
|
-
|
12
|
-
@@env = {}
|
13
|
-
@@enforced = false
|
11
|
+
EXPORT_DEFAULTS = {:group => :default}
|
14
12
|
|
15
13
|
class << self
|
14
|
+
def init
|
15
|
+
@@dependencies = []
|
16
|
+
@@env = {}
|
17
|
+
@@enforced = false
|
18
|
+
@@groups = Hash.new { |hash, key| hash[key] = [] }
|
19
|
+
@@default_group = :default
|
20
|
+
end
|
21
|
+
|
16
22
|
def [](key)
|
17
23
|
_raise(key) unless dependencies.include? key
|
18
24
|
@@env[key]
|
@@ -23,11 +29,26 @@ module Env
|
|
23
29
|
@@env[key] = uri?(value) ? proxify(value) : value
|
24
30
|
end
|
25
31
|
|
26
|
-
def
|
27
|
-
@@
|
28
|
-
|
32
|
+
def group(name)
|
33
|
+
@@default_group = name.to_sym
|
34
|
+
yield
|
35
|
+
@@default_group = :default
|
36
|
+
end
|
37
|
+
|
38
|
+
def export_defaults
|
39
|
+
{:group => @@default_group}
|
40
|
+
end
|
41
|
+
|
42
|
+
#store actual work and load group
|
43
|
+
def export(key, value = nil, options = {})
|
44
|
+
options = export_defaults.merge!(options)
|
45
|
+
@@groups[options[:group].to_sym] << lambda do
|
46
|
+
@@dependencies << key
|
47
|
+
@@env[key] = uri?(value) ? proxify(value) : value
|
48
|
+
end
|
29
49
|
end
|
30
50
|
|
51
|
+
#only calls itself and export
|
31
52
|
def import(key)
|
32
53
|
if key.is_a? Symbol
|
33
54
|
const_get(key.to_s.upcase).each { |key| import(key) }
|
@@ -36,16 +57,23 @@ module Env
|
|
36
57
|
end
|
37
58
|
end
|
38
59
|
|
39
|
-
def
|
60
|
+
def load_groups(*groups)
|
61
|
+
groups.each do |group|
|
62
|
+
@@groups[group.to_sym].each { |c| c.call }
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def load!(*groups)
|
40
67
|
@@enforced or Env.enforce
|
41
68
|
eval File.read("Envfile") if File.exist?("Envfile")
|
69
|
+
groups = [:default] if groups.empty?
|
70
|
+
load_groups(*groups)
|
42
71
|
File.exist?("Envfile")
|
43
72
|
end
|
44
73
|
|
45
74
|
def unload
|
46
75
|
@@enforced and Env.unenforce
|
47
|
-
|
48
|
-
@@env = {}
|
76
|
+
init
|
49
77
|
end
|
50
78
|
|
51
79
|
def unenforce
|
@@ -109,3 +137,5 @@ module Env
|
|
109
137
|
end
|
110
138
|
end
|
111
139
|
end
|
140
|
+
|
141
|
+
Env.init
|
data/lib/env/version.rb
CHANGED
data/spec/enforce_spec.rb
CHANGED
@@ -9,9 +9,10 @@ describe Env, "::enforce" do
|
|
9
9
|
|
10
10
|
context "with uninitialized dependency FOO" do
|
11
11
|
before do
|
12
|
-
|
12
|
+
envfile(%{
|
13
13
|
export 'FOO'
|
14
|
-
|
14
|
+
})
|
15
|
+
Env.load!
|
15
16
|
end
|
16
17
|
|
17
18
|
it "should return nil for ENV['FOO']" do
|
@@ -26,9 +27,10 @@ describe Env, "::enforce" do
|
|
26
27
|
|
27
28
|
context "with initialized dependency FOO=bar" do
|
28
29
|
before do
|
29
|
-
|
30
|
+
envfile(%{
|
30
31
|
export 'FOO', 'bar'
|
31
|
-
|
32
|
+
})
|
33
|
+
Env.load!
|
32
34
|
end
|
33
35
|
|
34
36
|
it "should return 'bar' for ENV['FOO']" do
|
data/spec/group_spec.rb
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
shared_examples_for "handling groups" do
|
4
|
+
it "should only be loaded when that group is loaded" do
|
5
|
+
Env.load!
|
6
|
+
lambda { ENV["URL"] }.should raise_error(EnvironmentError)
|
7
|
+
Env.load! :test
|
8
|
+
lambda { ENV["URL"] }.should_not raise_error(EnvironmentError)
|
9
|
+
ENV['URL'].should == 'http://google.com'
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should allow loading in one command" do
|
13
|
+
Env.load! :default, 'test'
|
14
|
+
lambda { ENV["URL"] }.should_not raise_error(EnvironmentError)
|
15
|
+
ENV['URL'].should == 'http://google.com'
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe Env, "groups" do
|
20
|
+
context "passed as a parameter" do
|
21
|
+
before do
|
22
|
+
envfile(%{
|
23
|
+
export 'URL', 'http://google.com', :group => :test
|
24
|
+
})
|
25
|
+
end
|
26
|
+
|
27
|
+
it_should_behave_like "handling groups"
|
28
|
+
end
|
29
|
+
|
30
|
+
|
31
|
+
context "in block form" do
|
32
|
+
before do
|
33
|
+
envfile(%{
|
34
|
+
group :test do
|
35
|
+
export 'URL', 'http://google.com'
|
36
|
+
end
|
37
|
+
})
|
38
|
+
end
|
39
|
+
|
40
|
+
it_should_behave_like "handling groups"
|
41
|
+
end
|
42
|
+
end
|
data/spec/spec_helper.rb
CHANGED
data/spec/uri_spec.rb
CHANGED
@@ -3,10 +3,10 @@ require 'spec_helper'
|
|
3
3
|
describe Env, 'uri support' do
|
4
4
|
context "with a value FOO that is not a URI" do
|
5
5
|
before do
|
6
|
-
|
6
|
+
envfile(%{
|
7
7
|
export 'FOO', 'bar'
|
8
|
-
|
9
|
-
Env.
|
8
|
+
})
|
9
|
+
Env.load!
|
10
10
|
end
|
11
11
|
|
12
12
|
it "should not wrap it" do
|
@@ -18,10 +18,10 @@ describe Env, 'uri support' do
|
|
18
18
|
URL = 'http://username:password@this.domain.example.com/path?var=val'
|
19
19
|
|
20
20
|
before do
|
21
|
-
|
21
|
+
envfile(%{
|
22
22
|
export 'FOO', URL
|
23
|
-
|
24
|
-
Env.
|
23
|
+
})
|
24
|
+
Env.load!
|
25
25
|
end
|
26
26
|
|
27
27
|
it "should leave the original value unchanged" do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: env.rb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-08-
|
12
|
+
date: 2011-08-10 00:00:00.000000000 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
description: Allows your to manage many ENV vars by declaring them as dependencies
|
@@ -30,6 +30,7 @@ files:
|
|
30
30
|
- lib/env/load.rb
|
31
31
|
- lib/env/version.rb
|
32
32
|
- spec/enforce_spec.rb
|
33
|
+
- spec/group_spec.rb
|
33
34
|
- spec/import_spec.rb
|
34
35
|
- spec/load_spec.rb
|
35
36
|
- spec/spec_helper.rb
|
@@ -61,6 +62,7 @@ specification_version: 3
|
|
61
62
|
summary: Manage your ENV with ease
|
62
63
|
test_files:
|
63
64
|
- spec/enforce_spec.rb
|
65
|
+
- spec/group_spec.rb
|
64
66
|
- spec/import_spec.rb
|
65
67
|
- spec/load_spec.rb
|
66
68
|
- spec/spec_helper.rb
|