smart_env 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.
data/README.md CHANGED
@@ -1,9 +1,13 @@
1
1
  # SmartEnv
2
2
 
3
+ gem install smart_env
4
+
5
+ require 'smart_env'
6
+
3
7
  ## Purpose
4
8
  Attach hooks to your ENV vars and wrap them in Proxy Objects.
5
9
 
6
- ## Example
10
+ ## Example with built-in URI Proxy
7
11
  ENV['SERVICE'] = 'http://username:password@example.com:3000/"
8
12
 
9
13
  ENV['SERVICE'] #=> 'http://username:password@example.com:3000/"
@@ -15,3 +19,13 @@ Attach hooks to your ENV vars and wrap them in Proxy Objects.
15
19
  ENV['SERVICE'].scheme #=> 'http'
16
20
  ENV['SERVICE'].port #=> 3000
17
21
 
22
+ ## Add your own Proxies
23
+ class TestProxy
24
+ def initialize(value)
25
+ end
26
+ end
27
+
28
+ ENV.use(TestProxy).when { |key, value| key == 'FOO' }
29
+
30
+ ENV['FOO'] = 'bar'
31
+ ENV['FOO'].class #=> TestProxy
@@ -1,3 +1,3 @@
1
1
  module SmartEnv
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
data/lib/smart_env.rb CHANGED
@@ -2,15 +2,18 @@ require "smart_env/version"
2
2
  require "smart_env/uri_proxy"
3
3
 
4
4
  module SmartEnv
5
- extend self
5
+ attr_accessor :registry
6
6
 
7
- @@loaded = false
8
- @@registry = []
7
+ def clear_registry
8
+ @registry = []
9
+ end
9
10
 
10
11
  def reset_registry
11
- @@registry = [
12
- [lambda{ |k,v| v.match(/^\w+:\/\//) }, UriProxy]
13
- ]
12
+ @registry = default
13
+ end
14
+
15
+ def default
16
+ [[UriProxy, lambda{ |k,v| v.match(/^\w+:\/\//) }]]
14
17
  end
15
18
 
16
19
  def use(klass)
@@ -19,40 +22,36 @@ module SmartEnv
19
22
  end
20
23
 
21
24
  def when(&block)
22
- raise "Block must take 0 or 2 arguments" unless ( block.arity == 0 || block.arity == 2)
23
- @@registry << [block, @class]
25
+ raise "Block must take 0 or 2 arguments: key and value" unless (block.arity == 0 || block.arity == 2)
26
+ registry << [@class, block]
24
27
  self
25
28
  end
26
29
 
27
- def [](key)
28
- value = ENV.get(key)
29
- @@registry.each do |condition, klass|
30
- result = condition.call(key, value) rescue false
31
- return klass.new(value) if result
32
- end
33
- value
30
+ def registry
31
+ @registry ||= default
34
32
  end
35
33
 
36
34
  def unload!
37
- class << ENV
35
+ class << self
38
36
  alias_method :[], :get
39
- alias_method :[]=, :set
37
+ # alias_method :[]=, :set
40
38
  end
41
- @@loaded = false
42
39
  end
43
40
 
44
- def load!
45
- reset_registry
46
- return if @@loaded
47
- class << ENV
41
+ def self.extended(base)
42
+ class << base
48
43
  alias_method :get, :[]
49
44
 
50
45
  def [](key)
51
- SmartEnv[key]
46
+ value = get(key)
47
+ registry.each do |klass, condition|
48
+ result = condition.call(key, value) rescue false
49
+ value = klass.new(value) if value && result
50
+ end
51
+ value
52
52
  end
53
53
  end
54
- @@loaded = true
55
54
  end
56
55
  end
57
56
 
58
- SmartEnv.load!
57
+ ENV.extend SmartEnv
@@ -0,0 +1,30 @@
1
+ require 'spec_helper'
2
+
3
+ describe SmartEnv, 'decoration' do
4
+ before do
5
+ class PassOne < String
6
+ attr_accessor :one
7
+ def initialize(value)
8
+ @one = true
9
+ super
10
+ end
11
+ end
12
+
13
+ class PassTwo < PassOne
14
+ attr_accessor :two
15
+ def initialize(value)
16
+ @two = true
17
+ super
18
+ end
19
+ end
20
+
21
+ ENV.use(PassOne).when{ true }
22
+ ENV.use(PassTwo).when{ true }
23
+ end
24
+
25
+ it "should pass successive value to all callbacks that match" do
26
+ ENV['FOO'] = "bar"
27
+ ENV['FOO'].one.should be_true
28
+ ENV['FOO'].two.should be_true
29
+ end
30
+ end
@@ -0,0 +1,27 @@
1
+ require 'spec_helper'
2
+
3
+ describe SmartEnv, 'load/unload' do
4
+ context "on extend" do
5
+ before do
6
+ @env = {}
7
+ @env.extend SmartEnv
8
+
9
+ class PassOne < String
10
+ attr_accessor :one
11
+ def initialize(value)
12
+ @one = true
13
+ super
14
+ end
15
+ end
16
+ end
17
+
18
+ it "should not bleed" do
19
+ ENV['FOO'] = 'bar'
20
+ @env['FOO'] = 'bar'
21
+ @env.use(PassOne).when{ true }
22
+
23
+ ENV['FOO'].should_not respond_to :one
24
+ @env['FOO'].one.should be_true
25
+ end
26
+ end
27
+ end
@@ -6,7 +6,7 @@ describe SmartEnv, 'registering your own Proxies' do
6
6
  def initialize(value)
7
7
  end
8
8
  end
9
- SmartEnv.use(TestProxy).when { |key, value| key == 'FOO' }
9
+ ENV.use(TestProxy).when { |key, value| key == 'FOO' }
10
10
  end
11
11
 
12
12
  it "should use the specified proxy when the block returns true" do
@@ -18,8 +18,8 @@ describe SmartEnv, 'registering your own Proxies' do
18
18
  end
19
19
 
20
20
  it "raises error if the block doens't have two args" do
21
- lambda { SmartEnv.use(TestProxy).when { |k,v,x| name == 'FOO' } }.should raise_error
22
- lambda { SmartEnv.use(TestProxy).when { |value| name == 'FOO' } }.should raise_error
23
- lambda { SmartEnv.use(TestProxy).when { false } }.should_not raise_error
21
+ lambda { ENV.use(TestProxy).when { |k,v,x| name == 'FOO' } }.should raise_error
22
+ lambda { ENV.use(TestProxy).when { |value| name == 'FOO' } }.should raise_error
23
+ lambda { ENV.use(TestProxy).when { false } }.should_not raise_error
24
24
  end
25
25
  end
data/spec/spec_helper.rb CHANGED
@@ -1,5 +1,8 @@
1
1
  require_relative '../lib/smart_env'
2
2
 
3
3
  RSpec.configure do |config|
4
- config.after(:each) { SmartEnv.reset_registry }
4
+ config.after(:each) do
5
+ ENV.reset_registry
6
+ @env.reset_registry if @env
7
+ end
5
8
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: smart_env
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
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-19 00:00:00.000000000 -07:00
12
+ date: 2011-08-24 00:00:00.000000000 -07:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
  description: Allows you to register Proxy classes for ENV vars by using blocks to
@@ -28,6 +28,8 @@ files:
28
28
  - lib/smart_env/uri_proxy.rb
29
29
  - lib/smart_env/version.rb
30
30
  - smart_env.gemspec
31
+ - spec/decoration_spec.rb
32
+ - spec/load_unload_spec.rb
31
33
  - spec/registry_spec.rb
32
34
  - spec/spec_helper.rb
33
35
  - spec/uri_spec.rb
@@ -57,6 +59,8 @@ signing_key:
57
59
  specification_version: 3
58
60
  summary: Lazily proxy ENV values
59
61
  test_files:
62
+ - spec/decoration_spec.rb
63
+ - spec/load_unload_spec.rb
60
64
  - spec/registry_spec.rb
61
65
  - spec/spec_helper.rb
62
66
  - spec/uri_spec.rb