ecology 0.0.11 → 0.0.12

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.lock CHANGED
@@ -1,12 +1,14 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ecology (0.0.11)
4
+ ecology (0.0.12)
5
+ erubis
5
6
  multi_json
6
7
 
7
8
  GEM
8
9
  remote: http://rubygems.org/
9
10
  specs:
11
+ erubis (2.7.0)
10
12
  minitest (2.3.0)
11
13
  mocha (0.9.12)
12
14
  multi_json (1.0.3)
data/README.md CHANGED
@@ -176,6 +176,25 @@ on_initialize hook, then the hook will run immediately.
176
176
  There is also an on_reset hook. Read "Testing with an Ecology" to
177
177
  find out why you'd ever care about that.
178
178
 
179
+ Ecology.read Etiquette
180
+ ======================
181
+
182
+ If you're writing an application, try to call Ecology.read early.
183
+ Libraries depending on it can then initialize themselves, now that
184
+ they know where your Ecology data is.
185
+
186
+ If you're writing a library, call Ecology.on_initialize early to make
187
+ sure you get initialized as soon as possible. You'll probably need
188
+ your own Ecology.read call since your containing application may not
189
+ use Ecology, or have an Ecology file. Try to make Ecology.read happen
190
+ as late as you can - the first time you genuinely need the data, for
191
+ instance.
192
+
193
+ For test purposes, if you set a bunch of data with
194
+ Ecology.on_initialize, try to register Ecology.on_reset to clear that
195
+ same data. Then a test using Ecology.reset can test your library with
196
+ different settings.
197
+
179
198
  Testing with an Ecology
180
199
  =======================
181
200
 
data/TODO CHANGED
@@ -1,5 +1,7 @@
1
- * Use Erubis before evaluating
2
-
3
1
  * On Ecology.read calls, make sure ecology filename hasn't changed (and warn if it has)
4
2
 
5
3
  * Have Ecology.read try to do a read relative to the executable's directory first rather than relative to cwd.
4
+
5
+ * Register properties by top-level tag
6
+
7
+ * Allow setting environment variables based on Ecology
data/ecology.gemspec CHANGED
@@ -28,6 +28,7 @@ EOS
28
28
  s.require_paths = ["lib"]
29
29
 
30
30
  s.add_dependency "multi_json"
31
+ s.add_dependency "erubis"
31
32
 
32
33
  s.add_development_dependency "bundler", "~> 1.0.10"
33
34
  s.add_development_dependency "scope", "~> 0.2.1"
@@ -1,3 +1,3 @@
1
1
  module Ecology
2
- VERSION = "0.0.11"
2
+ VERSION = "0.0.12"
3
3
  end
@@ -1,3 +1,3 @@
1
1
  module Ecology
2
- VERSION = "0.0.10"
2
+ VERSION = "0.0.11"
3
3
  end
data/lib/ecology.rb CHANGED
@@ -39,10 +39,15 @@ module Ecology
39
39
  mutex.synchronize do
40
40
  return if @ecology_initialized
41
41
 
42
- file_path = ENV['ECOLOGY_SPEC'] || ecology_pathname || default_ecology_name
43
- if File.exist?(file_path)
44
- @data = {}
45
- contents = merge_with_overrides(file_path)
42
+ filelist = [ENV["ECOLOGY_SPEC"], ecology_pathname, default_ecology_name]
43
+ filelist.detect do |file_path|
44
+ if file_path && (File.exist?(file_path) || File.exist?(file_path + ".erb"))
45
+ @data = {}
46
+ contents = merge_with_overrides(file_path)
47
+ true
48
+ else
49
+ false
50
+ end
46
51
  end
47
52
 
48
53
  @application ||= File.basename($0)
@@ -103,7 +108,18 @@ module Ecology
103
108
  end
104
109
 
105
110
  def merge_with_overrides(file_path)
106
- contents = File.read(file_path)
111
+ if File.exist?(file_path + ".erb")
112
+ contents = File.read(file_path + ".erb")
113
+
114
+ require "erubis"
115
+ var_hash = {
116
+ :ecology_version => Ecology::VERSION,
117
+ :filename => "#{file_path}.erb",
118
+ }
119
+ contents = Erubis::Eruby.new(contents).result(var_hash)
120
+ else
121
+ contents = File.read(file_path)
122
+ end
107
123
  file_data = MultiJson.decode(contents);
108
124
 
109
125
  return unless file_data
data/test/ecology_test.rb CHANGED
@@ -16,6 +16,7 @@ class EcologyTest < Scope::TestCase
16
16
 
17
17
  should "respect the ECOLOGY_SPEC environment variable" do
18
18
  ENV['ECOLOGY_SPEC'] = '/tmp/bobo.txt'
19
+ File.expects(:exist?).with('/tmp/bobo.txt.erb').returns(false).at_least_once
19
20
  File.expects(:exist?).with('/tmp/bobo.txt').returns(true)
20
21
  File.expects(:read).with('/tmp/bobo.txt').returns('{ "application": "foo_app" }')
21
22
  Ecology.read
@@ -31,6 +32,7 @@ class EcologyTest < Scope::TestCase
31
32
  $0 = "whatever_app.rb"
32
33
 
33
34
  ENV['ECOLOGY_SPEC'] = nil
35
+ File.expects(:exist?).with("whatever_app.ecology.erb").returns(false).at_least_once
34
36
  File.expects(:exist?).with("whatever_app.ecology").returns(false)
35
37
 
36
38
  Ecology.read
@@ -0,0 +1,46 @@
1
+ require File.join(File.dirname(__FILE__), "test_helper.rb")
2
+ require "multi_json"
3
+
4
+ class ErubisTest < Scope::TestCase
5
+ setup do
6
+ Ecology.reset
7
+ end
8
+
9
+ context "with a .erb ecology" do
10
+ setup do
11
+ set_up_ecology(<<ECOLOGY_CONTENTS, "some_app.ecology.erb")
12
+ {
13
+ "application": "SomeApp",
14
+ "domain": {
15
+ "property1" :
16
+ <% if ENV["BOBO"] %>
17
+ 37
18
+ <% else %>
19
+ 42
20
+ <% end %>
21
+ },
22
+ "bobo": <%= MultiJson.encode(ENV["BOBO"]) %>
23
+ }
24
+ ECOLOGY_CONTENTS
25
+
26
+ ENV["BOBO"] = nil
27
+ end
28
+
29
+ should "Parse conditionally with Erubis" do
30
+ ENV["BOBO"] = "true"
31
+ Ecology.read
32
+ assert_equal 37, Ecology.property("domain::property1")
33
+ end
34
+
35
+ should "Parse conditionally with Erubis when a variable is unset" do
36
+ Ecology.read
37
+ assert_equal 42, Ecology.property("domain::property1")
38
+ end
39
+
40
+ # should "Return values from Erubis" do
41
+ # ENV["BOBO"] = { "a" => "b", "c" => "d" }
42
+ # Ecology.read
43
+ # assert_equal { "a" => "b", "c" => "d" }, Ecology.property("bobo")
44
+ # end
45
+ end
46
+ end
data/test/test_helper.rb CHANGED
@@ -10,7 +10,15 @@ require "ecology"
10
10
 
11
11
  class Scope::TestCase
12
12
  def set_up_ecology(file_contents, filename = "some.ecology")
13
- ENV["ECOLOGY_SPEC"] = filename
13
+ match = filename.match(/^(.*)\.erb$/)
14
+ if match
15
+ ENV["ECOLOGY_SPEC"] = match[1]
16
+ File.stubs(:exist?).with(match[1]).returns(false)
17
+ else
18
+ ENV["ECOLOGY_SPEC"] = filename
19
+ end
20
+
21
+ File.stubs(:exist?).with(filename + ".erb").returns(false)
14
22
  File.stubs(:exist?).with(filename).returns(true)
15
23
  File.expects(:read).with(filename).returns(file_contents).at_least_once
16
24
  end
data/test/trigger_test.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  require File.join(File.dirname(__FILE__), "test_helper.rb")
2
2
 
3
- class EnvironmentTest < Scope::TestCase
3
+ class TriggerTest < Scope::TestCase
4
4
  setup do
5
5
  Ecology.reset
6
6
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: ecology
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.11
5
+ version: 0.0.12
6
6
  platform: ruby
7
7
  authors:
8
8
  - Noah Gibbs
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-10-06 00:00:00 Z
13
+ date: 2011-10-19 00:00:00 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: multi_json
@@ -24,49 +24,60 @@ dependencies:
24
24
  type: :runtime
25
25
  version_requirements: *id001
26
26
  - !ruby/object:Gem::Dependency
27
- name: bundler
27
+ name: erubis
28
28
  prerelease: false
29
29
  requirement: &id002 !ruby/object:Gem::Requirement
30
+ none: false
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: "0"
35
+ type: :runtime
36
+ version_requirements: *id002
37
+ - !ruby/object:Gem::Dependency
38
+ name: bundler
39
+ prerelease: false
40
+ requirement: &id003 !ruby/object:Gem::Requirement
30
41
  none: false
31
42
  requirements:
32
43
  - - ~>
33
44
  - !ruby/object:Gem::Version
34
45
  version: 1.0.10
35
46
  type: :development
36
- version_requirements: *id002
47
+ version_requirements: *id003
37
48
  - !ruby/object:Gem::Dependency
38
49
  name: scope
39
50
  prerelease: false
40
- requirement: &id003 !ruby/object:Gem::Requirement
51
+ requirement: &id004 !ruby/object:Gem::Requirement
41
52
  none: false
42
53
  requirements:
43
54
  - - ~>
44
55
  - !ruby/object:Gem::Version
45
56
  version: 0.2.1
46
57
  type: :development
47
- version_requirements: *id003
58
+ version_requirements: *id004
48
59
  - !ruby/object:Gem::Dependency
49
60
  name: mocha
50
61
  prerelease: false
51
- requirement: &id004 !ruby/object:Gem::Requirement
62
+ requirement: &id005 !ruby/object:Gem::Requirement
52
63
  none: false
53
64
  requirements:
54
65
  - - ">="
55
66
  - !ruby/object:Gem::Version
56
67
  version: "0"
57
68
  type: :development
58
- version_requirements: *id004
69
+ version_requirements: *id005
59
70
  - !ruby/object:Gem::Dependency
60
71
  name: rake
61
72
  prerelease: false
62
- requirement: &id005 !ruby/object:Gem::Requirement
73
+ requirement: &id006 !ruby/object:Gem::Requirement
63
74
  none: false
64
75
  requirements:
65
76
  - - ">="
66
77
  - !ruby/object:Gem::Version
67
78
  version: "0"
68
79
  type: :development
69
- version_requirements: *id005
80
+ version_requirements: *id006
70
81
  description: |
71
82
  Ecology sets configuration data for an application based
72
83
  on environment variables and other factors. It is meant
@@ -95,6 +106,7 @@ files:
95
106
  - test/ecology_test.rb
96
107
  - test/environment_test.rb
97
108
  - test/environment_var_test.rb
109
+ - test/erubis_test.rb
98
110
  - test/override_properties_test.rb
99
111
  - test/path_test.rb
100
112
  - test/property_test.rb
@@ -133,6 +145,7 @@ test_files:
133
145
  - test/ecology_test.rb
134
146
  - test/environment_test.rb
135
147
  - test/environment_var_test.rb
148
+ - test/erubis_test.rb
136
149
  - test/override_properties_test.rb
137
150
  - test/path_test.rb
138
151
  - test/property_test.rb