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 +3 -1
- data/README.md +19 -0
- data/TODO +4 -2
- data/ecology.gemspec +1 -0
- data/lib/ecology/version.rb +1 -1
- data/lib/ecology/version.rb~ +1 -1
- data/lib/ecology.rb +21 -5
- data/test/ecology_test.rb +2 -0
- data/test/erubis_test.rb +46 -0
- data/test/test_helper.rb +9 -1
- data/test/trigger_test.rb +1 -1
- metadata +23 -10
    
        data/Gemfile.lock
    CHANGED
    
    
    
        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
    
    
    
        data/lib/ecology/version.rb
    CHANGED
    
    
    
        data/lib/ecology/version.rb~
    CHANGED
    
    
    
        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 | 
            -
                     | 
| 43 | 
            -
                     | 
| 44 | 
            -
                       | 
| 45 | 
            -
             | 
| 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 | 
            -
                   | 
| 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
         | 
    
        data/test/erubis_test.rb
    ADDED
    
    | @@ -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 | 
            -
                 | 
| 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
    
    
    
        metadata
    CHANGED
    
    | @@ -2,7 +2,7 @@ | |
| 2 2 | 
             
            name: ecology
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version 
         | 
| 4 4 | 
             
              prerelease: 
         | 
| 5 | 
            -
              version: 0.0. | 
| 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- | 
| 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:  | 
| 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: * | 
| 47 | 
            +
              version_requirements: *id003
         | 
| 37 48 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| 38 49 | 
             
              name: scope
         | 
| 39 50 | 
             
              prerelease: false
         | 
| 40 | 
            -
              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: * | 
| 58 | 
            +
              version_requirements: *id004
         | 
| 48 59 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| 49 60 | 
             
              name: mocha
         | 
| 50 61 | 
             
              prerelease: false
         | 
| 51 | 
            -
              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: * | 
| 69 | 
            +
              version_requirements: *id005
         | 
| 59 70 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| 60 71 | 
             
              name: rake
         | 
| 61 72 | 
             
              prerelease: false
         | 
| 62 | 
            -
              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: * | 
| 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
         |