ambience 0.2.0 → 0.3.0

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/CHANGELOG CHANGED
@@ -1,3 +1,30 @@
1
+ == 0.3.0 (2010-05-13)
2
+ * Ambience now operates on the instance level. So after setting up a new Ambience config
3
+ like before:
4
+
5
+ AppConfig = Ambience.new File.join(Rails.root, "config", "ambience.yml")
6
+
7
+ you now have to choose whether you like to have the config returned as a simple Hash
8
+ or a Hashie::Mash (which was the default since version 0.2.0):
9
+
10
+ AppConfig.to_hash
11
+ AppConfig.to_mash
12
+
13
+ * Along with support for a basic config and JVM properties, version 0.3.0 adds support
14
+ for local (user-specific) settings. By default, Ambience tries to load a local YAML
15
+ config from:
16
+
17
+ File.join ENV["HOME"].to_s, ".ambience", "ambience.yml"
18
+
19
+ Ambience will still work fine if the file does not exist. But if you want to use a
20
+ local config and change the default location, you can use the +local_config+ class
21
+ method to do so.
22
+
23
+ Ambience.local_config # => "/Users/you/.ambience/ambience.yml"
24
+
25
+ # Change the location of the local config file:
26
+ Ambience.local_config = File.join "config", "user_config.yml"
27
+
1
28
  == 0.2.0 (2010-03-06)
2
29
  * Complete rewrite. Removed Rails-specific defaults and returning the Ambience config
3
30
  as a Hashie::Mash (http://github.com/intridea/hashie). Take a look at the new Readme
data/README.rdoc CHANGED
@@ -1,6 +1,6 @@
1
1
  = Ambience
2
2
 
3
- App configuration feat. YAML and JVM properties. Lets you specify a default configuration in a YAML file and overwrite details via JVM properties for production.
3
+ App configuration feat. YAML and JVM properties. Lets you specify a default configuration in a YAML file and overwrite details via local settings and JVM properties for production.
4
4
 
5
5
  == Installation
6
6
 
@@ -8,14 +8,14 @@ App configuration feat. YAML and JVM properties. Lets you specify a default conf
8
8
 
9
9
  == How it works
10
10
 
11
- Given you created a YAML config like this one:
11
+ Given you created a YAML config like this:
12
12
 
13
13
  auth:
14
14
  address: http://example.com
15
15
  username: ferris
16
16
  password: test
17
17
 
18
- You create an Ambience config by passing in the path to your config file:
18
+ You can instantiate an Ambience config by passing in the path to your config file:
19
19
 
20
20
  AppConfig = Ambience.new File.join(Rails.root, "config", "ambience.yml")
21
21
 
@@ -23,23 +23,19 @@ Ambience will load and convert your config into a Hash:
23
23
 
24
24
  { "auth" => { "address" => "http://example.com", "username" => "ferris", "password" => "test" } }
25
25
 
26
- Then it looks for any JVM properties (if your running JRuby)
26
+ Afterwards it tries to merge these settings with local ones specified in an Ambience.local_config file. Finally it looks for any JVM properties (if your running JRuby) and merge these properties with your config:
27
27
 
28
28
  auth.address = "http://live.example.com"
29
29
  auth.password = "topsecret"
30
30
 
31
- and deep merge them with your Hash:
31
+ The result would be something like this:
32
32
 
33
33
  { "auth" => { "address" => "http://live.example.com", "username" => "ferris", "password" => "topsecret" } }
34
34
 
35
- Finally, it returns the Hash as a {Hashie::Mash}[http://github.com/intridea/hashie] so you can access values by specifying keys as Symbols or Strings or using method-like accessors:
35
+ In the end you can decide whether you want to return the config as a Hash:
36
36
 
37
- AppConfig[:auth][:address]
38
- # => "http://live.example.com"
37
+ AppConfig = Ambience.new(File.join(Rails.root, "config", "ambience.yml")).to_hash
39
38
 
40
- AppConfig["auth"]["username"]
41
- # => "http://live.example.com"
42
-
43
- AppConfig.auth.password
44
- # => "topsecret"
39
+ or a {Hashie::Mash}[http://github.com/intridea/hashie]:
45
40
 
41
+ AppConfig = Ambience.new(File.join(Rails.root, "config", "ambience.yml")).to_mash
data/Rakefile CHANGED
File without changes
@@ -1,98 +1,82 @@
1
1
  # = Ambience
2
2
  #
3
3
  # App configuration feat. YAML and JVM properties. Lets you specify a default configuration
4
- # in a YAML file and overwrite details via JVM properties for production.
5
- #
6
- # == How it works
7
- #
8
- # Given you created a YAML config like this one:
9
- #
10
- # auth:
11
- # address: http://example.com
12
- # username: ferris
13
- # password: test
14
- #
15
- # You create an Ambience config by passing in the path to your config file:
16
- #
17
- # AppConfig = Ambience.new File.join(Rails.root, "config", "ambience.yml")
18
- #
19
- # Ambience will load and convert your config into a Hash:
20
- #
21
- # { "auth" => { "address" => "http://example.com", "username" => "ferris", "password" => "test" } }
22
- #
23
- # Then it looks for any JVM properties (if your running JRuby)
24
- #
25
- # auth.address = "http://live.example.com"
26
- # auth.password = "topsecret"
27
- #
28
- # and deep merge them with your Hash:
29
- #
30
- # { "auth" => { "address" => "http://live.example.com", "username" => "ferris", "password" => "topsecret" } }
31
- #
32
- # Finally, it returns the Hash as a {Hashie::Mash}[http://github.com/intridea/hashie] so you can
33
- # access values by specifying keys as Symbols or Strings or using method-like accessors:
34
- #
35
- # AppConfig[:auth][:address]
36
- # # => "http://live.example.com"
37
- #
38
- # AppConfig["auth"]["username"]
39
- # # => "http://live.example.com"
40
- #
41
- # AppConfig.auth.password
42
- # # => "topsecret"
4
+ # in a YAML file and overwrite details via local settings and JVM properties for production.
43
5
  class Ambience
44
- class << self
45
6
 
46
- # Returns a new Ambience config from a given YAML +config_file+ for an optional +env+.
47
- # Overwrites properties with any JVM properties (in case the application is running on JRuby).
48
- def new(config_file, env = nil)
49
- config_hash = parse_config load_config(config_file)
50
- config_hash = config_hash[env.to_s] || config_hash[env.to_sym] if env
51
- config_hash.deep_merge! jvm_property_hash
52
- Hashie::Mash.new config_hash
53
- end
7
+ # Sets the path to a local ambience config file.
8
+ def self.local_config=(local_config)
9
+ @@local_config = local_config
10
+ end
54
11
 
55
- # Returns whether the current Ruby platfrom is JRuby.
56
- def jruby?
57
- RUBY_PLATFORM =~ /java/
58
- end
12
+ # Returns the path to a local ambience config file for specifying user-specific
13
+ # settings that don't belong into the application config file.
14
+ def self.local_config
15
+ @@local_config ||= File.join ENV["HOME"].to_s, ".ambience", "ambience.yml"
16
+ end
59
17
 
60
- private
18
+ # Returns whether the current Ruby platfrom is JRuby.
19
+ def self.jruby?
20
+ RUBY_PLATFORM =~ /java/
21
+ end
61
22
 
62
- # Loads a given +config_file+. Raises an ArgumentError in case the config could not be found.
63
- def load_config(config_file)
64
- raise ArgumentError, "Missing config: #{config_file}" unless File.exist? config_file
65
- File.read config_file
66
- end
23
+ def initialize(config_file, env = nil)
24
+ @config_file, @env = config_file, env
25
+ end
67
26
 
68
- # Returns the ERB-interpreted content from a given YAML +config+ String and returns a Hash
69
- # containing the evaluated content. Defaults to returning an empty Hash.
70
- def parse_config(config)
71
- YAML.load ERB.new(config).result || {}
72
- end
27
+ # Returns the Ambience config as a Hash.
28
+ def to_hash
29
+ config = load_config @config_file
30
+ config = config.deep_merge local_config
31
+ config.deep_merge jvm_config
32
+ end
73
33
 
74
- # Returns a Hash containing any JVM properties.
75
- def jvm_property_hash
76
- jvm_properties.inject({}) do |hash, (key, value)|
77
- hash.deep_merge hash_from_property(key, value)
78
- end
79
- end
34
+ # Returns the Ambience config as a Hashie::Mash.
35
+ def to_mash
36
+ Hashie::Mash.new to_hash
37
+ end
80
38
 
81
- # Returns a Hash generated from a JVM +property+ and its +value+.
82
- #
83
- # ==== Example:
84
- #
85
- # hash_from_property "webservice.auth.address", "http://auth.example.com"
86
- # # => { "webservice" => { "auth" => { "address" => "http://auth.example.com" } } }
87
- def hash_from_property(property, value)
88
- property.split(".").reverse.inject(value) { |value, item| { item => value } }
89
- end
39
+ private
90
40
 
91
- # Returns the JVM properties.
92
- def jvm_properties
93
- jruby? ? JavaLang::System.get_properties : {}
41
+ def load_config(config_file)
42
+ raise ArgumentError, "Missing config: #{config_file}" unless File.exist? config_file
43
+
44
+ config = File.read config_file
45
+ config = YAML.load ERB.new(config).result || {}
46
+ config = config[@env.to_s] || config[@env.to_sym] if @env
47
+ config
48
+ end
49
+
50
+ # Returns a Hash containing any local settings from the +@@local_config+.
51
+ def local_config
52
+ File.exist?(self.class.local_config) ? load_config(self.class.local_config) : {}
53
+ end
54
+
55
+ ## Returns a Hash containing any JVM properties.
56
+ def jvm_config
57
+ jvm_properties.inject({}) do |hash, (key, value)|
58
+ hash.deep_merge hash_from_property(key, value)
94
59
  end
60
+ end
61
+
62
+ # Returns the JVM properties.
63
+ def jvm_properties
64
+ JavaLang::System.get_properties rescue {}
65
+ end
66
+
67
+ # Returns a Hash generated from a JVM +property+ and its +value+.
68
+ #
69
+ # ==== Example:
70
+ #
71
+ # hash_from_property "webservice.auth.address", "http://auth.example.com"
72
+ # # => { "webservice" => { "auth" => { "address" => "http://auth.example.com" } } }
73
+ def hash_from_property(property, value)
74
+ property.split(".").reverse.inject(value) { |value, item| { item => value } }
75
+ end
95
76
 
77
+ # Returns the JVM properties.
78
+ def jvm_properties
79
+ self.class.jruby? ? JavaLang::System.get_properties : {}
96
80
  end
97
81
 
98
82
  if jruby?
File without changes
data/lib/ambience.rb CHANGED
File without changes
@@ -3,9 +3,17 @@ require "spec_helper"
3
3
  describe Ambience do
4
4
  include SpecHelper
5
5
 
6
- it "should return the content of a given config file as a Hashie::Mash" do
7
- config = Ambience.new config_file(:basic)
6
+ it "should return the content of a given config file as a Hash" do
7
+ config = Ambience.new(config_file(:basic)).to_hash
8
+
9
+ config.should be_a(Hash)
10
+ config["auth"]["username"].should == "ferris"
11
+ config["auth"]["password"].should == "test"
12
+ end
8
13
 
14
+ it "should return the content of a given config file as a Hashie::Mash" do
15
+ config = Ambience.new(config_file(:basic)).to_mash
16
+
9
17
  config.should be_a(Hashie::Mash)
10
18
  config.auth.username.should == "ferris"
11
19
  config[:auth][:address].should == "http://example.com"
@@ -13,16 +21,16 @@ describe Ambience do
13
21
  end
14
22
 
15
23
  it "should return the config for an optional environment as a Hashie::Mash" do
16
- config = Ambience.new config_file(:environments), :production
17
-
24
+ config = Ambience.new(config_file(:environments), :production).to_mash
25
+
18
26
  config.should be_a(Hashie::Mash)
19
27
  config.auth.username.should == "ferris"
20
28
  config[:auth]["password"].should == "topsecret"
21
29
  end
22
30
 
23
31
  it "should return the config specified as Symbols as a Hashie::Mash" do
24
- config = Ambience.new config_file(:symbols), "production"
25
-
32
+ config = Ambience.new(config_file(:symbols), "production").to_mash
33
+
26
34
  config.should be_a(Hashie::Mash)
27
35
  config.auth.username.should == "ferris"
28
36
  config[:auth]["password"].should == "test"
@@ -30,11 +38,11 @@ describe Ambience do
30
38
 
31
39
  it "should merge the config with any JVM properties when using JRuby" do
32
40
  Ambience.stubs(:jruby?).returns(true)
33
- Ambience.stubs(:jvm_properties).returns(
41
+ Ambience.any_instance.stubs(:jvm_properties).returns(
34
42
  "auth.address" => "http://live.example.com",
35
43
  "auth.password" => "topsecret"
36
44
  )
37
- config = Ambience.new config_file(:basic)
45
+ config = Ambience.new(config_file(:basic)).to_mash
38
46
 
39
47
  config.should be_a(Hashie::Mash)
40
48
  config.auth.username.should == "ferris"
@@ -43,7 +51,7 @@ describe Ambience do
43
51
  end
44
52
 
45
53
  it "should raise an ArgumentError in case the given config file could not be found" do
46
- lambda { Ambience.new "missing_config.yml" }.should raise_error(ArgumentError)
54
+ lambda { Ambience.new("missing_config.yml").to_hash }.should raise_error(ArgumentError)
47
55
  end
48
56
 
49
57
  end
File without changes
File without changes
File without changes
data/spec/spec_helper.rb CHANGED
File without changes
metadata CHANGED
@@ -1,7 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ambience
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 3
8
+ - 0
9
+ version: 0.3.0
5
10
  platform: ruby
6
11
  authors:
7
12
  - Daniel Harrington
@@ -9,39 +14,51 @@ autorequire:
9
14
  bindir: bin
10
15
  cert_chain: []
11
16
 
12
- date: 2010-03-06 00:00:00 +01:00
17
+ date: 2010-05-13 00:00:00 +02:00
13
18
  default_executable:
14
19
  dependencies:
15
20
  - !ruby/object:Gem::Dependency
16
21
  name: hashie
17
- type: :runtime
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
20
24
  requirements:
21
25
  - - ">="
22
26
  - !ruby/object:Gem::Version
27
+ segments:
28
+ - 0
29
+ - 2
30
+ - 0
23
31
  version: 0.2.0
24
- version:
32
+ type: :runtime
33
+ version_requirements: *id001
25
34
  - !ruby/object:Gem::Dependency
26
35
  name: rspec
27
- type: :development
28
- version_requirement:
29
- version_requirements: !ruby/object:Gem::Requirement
36
+ prerelease: false
37
+ requirement: &id002 !ruby/object:Gem::Requirement
30
38
  requirements:
31
39
  - - ">="
32
40
  - !ruby/object:Gem::Version
41
+ segments:
42
+ - 1
43
+ - 2
44
+ - 8
33
45
  version: 1.2.8
34
- version:
46
+ type: :development
47
+ version_requirements: *id002
35
48
  - !ruby/object:Gem::Dependency
36
49
  name: mocha
37
- type: :development
38
- version_requirement:
39
- version_requirements: !ruby/object:Gem::Requirement
50
+ prerelease: false
51
+ requirement: &id003 !ruby/object:Gem::Requirement
40
52
  requirements:
41
53
  - - ">="
42
54
  - !ruby/object:Gem::Version
55
+ segments:
56
+ - 0
57
+ - 9
58
+ - 7
43
59
  version: 0.9.7
44
- version:
60
+ type: :development
61
+ version_requirements: *id003
45
62
  description:
46
63
  email: me@rubiii.com
47
64
  executables: []
@@ -79,18 +96,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
79
96
  requirements:
80
97
  - - ">="
81
98
  - !ruby/object:Gem::Version
99
+ segments:
100
+ - 0
82
101
  version: "0"
83
- version:
84
102
  required_rubygems_version: !ruby/object:Gem::Requirement
85
103
  requirements:
86
104
  - - ">="
87
105
  - !ruby/object:Gem::Version
106
+ segments:
107
+ - 0
88
108
  version: "0"
89
- version:
90
109
  requirements: []
91
110
 
92
111
  rubyforge_project:
93
- rubygems_version: 1.3.5
112
+ rubygems_version: 1.3.6
94
113
  signing_key:
95
114
  specification_version: 3
96
115
  summary: App configuration feat. YAML and JVM properties