smart_env 0.5.1 → 1.0.0rc1

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.
@@ -1,3 +1,3 @@
1
1
  module SmartEnv
2
- VERSION = "0.5.1"
2
+ VERSION = "1.0.0rc1"
3
3
  end
data/lib/smart_env.rb CHANGED
@@ -4,12 +4,29 @@ require "smart_env/uri_proxy"
4
4
  module SmartEnv
5
5
  attr_accessor :registry
6
6
 
7
- def clear_registry
8
- @registry = empty_registry
9
- end
7
+ def self.extended(base)
8
+ raise RuntimeError.new("#{base.inspect} doesn't respond to #[]") \
9
+ unless base.respond_to? :[]
10
10
 
11
- def empty_registry
12
- []
11
+ class << base
12
+ alias_method :__get, :[]
13
+ alias_method :__set, :[]=
14
+
15
+ def []=(key, value)
16
+ memoized[key] = nil
17
+ __set(key, value)
18
+ end
19
+
20
+ def [](key)
21
+ return memoized[key] if memoized[key]
22
+ value = __get(key)
23
+ registry.each do |klass, condition|
24
+ result = condition.call(key, value) rescue false
25
+ value = klass.new(key, value) if value && result
26
+ end
27
+ memoized[key] = value
28
+ end
29
+ end
13
30
  end
14
31
 
15
32
  def use(klass)
@@ -26,26 +43,22 @@ module SmartEnv
26
43
  self
27
44
  end
28
45
 
29
- def registry
30
- @registry ||= empty_registry
46
+ def clear_registry
47
+ @registry = empty_registry
48
+ @memoized = {}
31
49
  end
32
50
 
33
- def self.extended(base)
34
- raise RuntimeError.new("#{base.inspect} doesn't respond to #[]") \
35
- unless base.respond_to? :[]
51
+ private
52
+ def empty_registry
53
+ []
54
+ end
36
55
 
37
- class << base
38
- alias_method :__get, :[]
56
+ def registry
57
+ @registry ||= empty_registry
58
+ end
39
59
 
40
- def [](key)
41
- value = __get(key)
42
- registry.each do |klass, condition|
43
- result = condition.call(key, value) rescue false
44
- value = klass.new(key, value) if value && result
45
- end
46
- value
47
- end
48
- end
60
+ def memoized
61
+ @memoized ||= {}
49
62
  end
50
63
  end
51
64
 
@@ -42,5 +42,12 @@ describe SmartEnv, 'load/unload' do
42
42
  @env.clear_registry
43
43
  @env['FOO'].should_not respond_to :one
44
44
  end
45
+
46
+ it "should clear memoized values" do
47
+ @env['FOO'] = 'test'
48
+ memoized = @env['FOO']
49
+ @env.clear_registry
50
+ @env['FOO'].object_id.should_not == memoized.object_id
51
+ end
45
52
  end
46
53
  end
@@ -0,0 +1,14 @@
1
+ require 'spec_helper'
2
+
3
+ describe SmartEnv, 'memoizing values' do
4
+ before do
5
+ @env = {}
6
+ @env.extend SmartEnv
7
+ @env.use(SmartEnv::UriProxy)
8
+ @env['TEST'] = 'http://service.com'
9
+ end
10
+
11
+ it "should return the same object after calling" do
12
+ ENV['TEST'].object_id.should == ENV['TEST'].object_id
13
+ end
14
+ end
metadata CHANGED
@@ -1,13 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: smart_env
3
3
  version: !ruby/object:Gem::Version
4
- hash: 9
5
- prerelease:
4
+ hash: 15424055
5
+ prerelease: 5
6
6
  segments:
7
+ - 1
8
+ - 0
7
9
  - 0
8
- - 5
10
+ - rc
9
11
  - 1
10
- version: 0.5.1
12
+ version: 1.0.0rc1
11
13
  platform: ruby
12
14
  authors:
13
15
  - Chris Continanza
@@ -15,12 +17,11 @@ autorequire:
15
17
  bindir: bin
16
18
  cert_chain: []
17
19
 
18
- date: 2011-10-11 00:00:00 -07:00
20
+ date: 2011-10-12 00:00:00 -07:00
19
21
  default_executable:
20
22
  dependencies:
21
23
  - !ruby/object:Gem::Dependency
22
- name: rspec
23
- version_requirements: &id001 !ruby/object:Gem::Requirement
24
+ requirement: &id001 !ruby/object:Gem::Requirement
24
25
  none: false
25
26
  requirements:
26
27
  - - ~>
@@ -30,12 +31,12 @@ dependencies:
30
31
  - 2
31
32
  - 0
32
33
  version: "2.0"
34
+ version_requirements: *id001
35
+ name: rspec
33
36
  prerelease: false
34
37
  type: :development
35
- requirement: *id001
36
38
  - !ruby/object:Gem::Dependency
37
- name: rcov
38
- version_requirements: &id002 !ruby/object:Gem::Requirement
39
+ requirement: &id002 !ruby/object:Gem::Requirement
39
40
  none: false
40
41
  requirements:
41
42
  - - ">="
@@ -44,9 +45,10 @@ dependencies:
44
45
  segments:
45
46
  - 0
46
47
  version: "0"
48
+ version_requirements: *id002
49
+ name: rcov
47
50
  prerelease: false
48
51
  type: :development
49
- requirement: *id002
50
52
  description: Allows you to register Proxy classes for ENV vars by using blocks to match keys and values
51
53
  email:
52
54
  - christopher.continanza@gmail.com
@@ -68,6 +70,7 @@ files:
68
70
  - smart_env.gemspec
69
71
  - spec/decoration_spec.rb
70
72
  - spec/load_unload_spec.rb
73
+ - spec/memoize_spec.rb
71
74
  - spec/registry_spec.rb
72
75
  - spec/spec_helper.rb
73
76
  - spec/uri_spec.rb
@@ -92,12 +95,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
92
95
  required_rubygems_version: !ruby/object:Gem::Requirement
93
96
  none: false
94
97
  requirements:
95
- - - ">="
98
+ - - ">"
96
99
  - !ruby/object:Gem::Version
97
- hash: 3
100
+ hash: 25
98
101
  segments:
99
- - 0
100
- version: "0"
102
+ - 1
103
+ - 3
104
+ - 1
105
+ version: 1.3.1
101
106
  requirements: []
102
107
 
103
108
  rubyforge_project: smart_env
@@ -108,6 +113,7 @@ summary: Lazily proxy ENV values
108
113
  test_files:
109
114
  - spec/decoration_spec.rb
110
115
  - spec/load_unload_spec.rb
116
+ - spec/memoize_spec.rb
111
117
  - spec/registry_spec.rb
112
118
  - spec/spec_helper.rb
113
119
  - spec/uri_spec.rb