app_config 1.1.1 → 2.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 57a758d17f3cf8b5932064d8daaba948f2b0e51a
4
+ data.tar.gz: a9851dc01c313b651654a52a1b8ad8e397f82380
5
+ SHA512:
6
+ metadata.gz: d7e65918fd775a55c5611d24084fe36ccc212b609fe4a864379e357b4a2f5ead09061a6c992ea40d1f80ea240e5ba75fd7a65de915665215f6009dcb2265d4b8
7
+ data.tar.gz: 1f7d96ba6828400f2784cbc523b4078697d8cce396b2bd8abe221f130070d69f9a5ccad961402500aa2b6012337f3be4bfe9338323dd5e00f63c1708aace227f
data/.travis.yml ADDED
@@ -0,0 +1,16 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.2
4
+ - 1.9.3
5
+ - 2.0.0
6
+
7
+ env:
8
+ # Ignore warnings when running specs.
9
+ - RUBYOPT="-W0"
10
+
11
+ branches:
12
+ only:
13
+ - master
14
+
15
+ services:
16
+ - mongodb
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- app_config (1.1.0)
4
+ app_config (2.0.1)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -9,12 +9,11 @@ GEM
9
9
  bson (1.3.1)
10
10
  bson_ext (1.3.1)
11
11
  diff-lcs (1.1.3)
12
- maruku (0.6.0)
13
- syntax (>= 1.0.0)
14
12
  mongo (1.3.1)
15
13
  bson (>= 1.3.1)
16
14
  multi_json (1.3.6)
17
15
  rake (0.9.2.2)
16
+ redcarpet (2.3.0)
18
17
  rspec (2.10.0)
19
18
  rspec-core (~> 2.10.0)
20
19
  rspec-expectations (~> 2.10.0)
@@ -27,7 +26,6 @@ GEM
27
26
  multi_json (~> 1.0)
28
27
  simplecov-html (~> 0.5.3)
29
28
  simplecov-html (0.5.3)
30
- syntax (1.0.0)
31
29
  yard (0.8.2)
32
30
 
33
31
  PLATFORMS
@@ -36,9 +34,9 @@ PLATFORMS
36
34
  DEPENDENCIES
37
35
  app_config!
38
36
  bson_ext
39
- maruku
40
37
  mongo
41
38
  rake
39
+ redcarpet
42
40
  rspec (~> 2.10.0)
43
41
  simplecov
44
42
  yard
data/README.md CHANGED
@@ -1,33 +1,35 @@
1
- # AppConfig
1
+ # AppConfig [![Build Status](https://travis-ci.org/Oshuma/app_config.png?branch=master)](https://travis-ci.org/Oshuma/app_config) [![Donate](https://www.paypalobjects.com/en_US/i/btn/btn_donate_SM.gif)](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=3N885MZB7QCY6&lc=US&item_name=Dale%20Campbell&item_number=app_config&currency_code=USD&bn=PP%2dDonationsBF%3abtn_donate_SM%2egif%3aNonHosted)
2
2
 
3
3
  An easy to use, customizable library to easily store and retrieve application
4
4
  (or library) configuration, API keys or basically anything in 'key/value' pairs.
5
5
 
6
6
  AppConfig requires at least Ruby 1.9.
7
7
 
8
+
9
+ ## Deprecation Note
10
+
11
+ Version `2.0` is **not** backwards compatible with the `1.x` branch.
12
+
13
+ See the [wiki](https://github.com/Oshuma/app_config/wiki) for upgrade instructions.
14
+
15
+
8
16
  ## Usage
9
17
 
10
- Usage is simple. Just pass either a hash of options, or a block, to {AppConfig.setup}.
18
+ Usage is simple. Just pass either a hash of options, or a block, to {AppConfig.setup!}.
11
19
 
12
20
  In it's simplest form, you can use it like so:
13
21
 
14
- AppConfig.setup(:admin_email => 'admin@example.com')
22
+ AppConfig.setup!(:admin_email => 'admin@example.com')
15
23
  # ..or..
16
- AppConfig.setup do |config|
17
- config[:admin_email] = 'admin@example.com'
24
+ AppConfig.setup! do |config|
25
+ config.admin_email = 'admin@example.com'
18
26
  end
19
27
 
20
- # Strings or symbols as keys.
21
- AppConfig[:admin_email] # => 'admin@example.com'
28
+ AppConfig.admin_email # => 'admin@example.com'
22
29
 
23
30
  You may also specify the storage method along with options specific to that storage method.
24
31
  Check the [wiki](https://github.com/Oshuma/app_config/wiki) for more usage examples.
25
32
 
26
- ## Deprecation Note
27
-
28
- Version `1.0` is \***not**\* backwards compatible with `0.7.1`! See the [wiki](https://github.com/Oshuma/app_config/wiki)
29
- for upgrade instructions.
30
-
31
33
 
32
34
  ## AppConfig::Storage::YAML
33
35
 
@@ -40,18 +42,17 @@ Given this YAML file:
40
42
 
41
43
  Use it like so:
42
44
 
43
- AppConfig.setup(:yaml => '/path/to/app_config.yml')
45
+ AppConfig.setup!(:yaml => '/path/to/app_config.yml')
44
46
 
45
47
  # Later on...
46
- # Strings or symbols as keys.
47
- AppConfig['admin_email'] # => 'admin@example.com'
48
- AppConfig[:api_name] # => 'Supr Webz 2.0'
49
- AppConfig[:api_key] # => 'SUPERAWESOMESERVICE'
48
+ AppConfig.admin_email # => 'admin@example.com'
49
+ AppConfig.api_name # => 'Supr Webz 2.0'
50
+ AppConfig.api_key # => 'SUPERAWESOMESERVICE'
50
51
 
51
52
 
52
53
  ## AppConfig::Storage::Mongo
53
54
 
54
- You can pass a `:mongo` options hash to {AppConfig.setup} which should contain
55
+ You can pass a `:mongo` options hash to {AppConfig.setup!} which should contain
55
56
  configuration values for a Mongo database. Check the {AppConfig::Storage::Mongo::DEFAULTS}
56
57
  constant for the default Mongo connection options.
57
58
 
@@ -61,43 +62,18 @@ constant for the default Mongo connection options.
61
62
  :collection => 'app_config' # default
62
63
  }
63
64
 
64
- AppConfig.setup(:mongo => mongo_opts)
65
+ AppConfig.setup!(:mongo => mongo_opts)
65
66
 
66
- AppConfig[:admin_email]
67
- # => 'admin@example.com'
67
+ AppConfig.admin_email # => 'admin@example.com'
68
68
 
69
- # Override an existing value (saves to the database):
70
- AppConfig[:admin_email] = 'other_admin@example.com'
69
+ # Override an existing value and save to the database:
70
+ AppConfig.admin_email = 'other_admin@example.com'
71
+ AppConfig.save!
71
72
 
72
73
  The values are read/saved (by default) to the `app_config` database and
73
74
  `app_config` collection. These defaults can be overridden, however, which
74
75
  might lend well to versioned configurations; collection names such as
75
76
  `app_config_v1`, `app_config_v2`, etc.
76
77
 
77
- AppConfig.setup(:mongo => { :collection => 'app_config_v2' })
78
-
79
-
80
- ## Environment Mode
81
-
82
- There's also an 'environment mode' where you can organize the config
83
- sort of like the Rails database config. Given this YAML file:
84
-
85
- # Rails.root/config/app_config.yml
86
- development:
87
- title: 'Development Mode'
88
-
89
- production:
90
- title: 'Production Mode'
91
-
92
- Set the `:env` option to your desired environment.
93
-
94
- # Rails.root/config/initializers/app_config.rb
95
- AppConfig.setup({
96
- :yaml => "#{Rails.root}/config/app_config.yml",
97
- :env => Rails.env # or any string
98
- })
99
-
100
- # Uses the given environment section of the config.
101
- AppConfig[:title]
102
- # => 'Production Mode'
78
+ AppConfig.setup!(:mongo => { :collection => 'app_config_v2' })
103
79
 
data/app_config.gemspec CHANGED
@@ -7,15 +7,15 @@ Gem::Specification.new do |s|
7
7
 
8
8
  s.authors = ['Dale Campbell']
9
9
  s.email = ['oshuma@gmail.com']
10
- s.homepage = 'http://oshuma.github.com/app_config'
10
+ s.homepage = 'http://oshuma.github.io/app_config'
11
11
 
12
12
  s.summary = %q{Quick and easy application configuration.}
13
13
  s.description = %q{An easy to use, customizable library to easily store and retrieve application configuration.}
14
14
 
15
15
  s.add_development_dependency 'bson_ext'
16
- s.add_development_dependency 'maruku'
17
16
  s.add_development_dependency 'mongo'
18
17
  s.add_development_dependency 'rake'
18
+ s.add_development_dependency 'redcarpet'
19
19
  s.add_development_dependency 'rspec', '~> 2.10.0'
20
20
  s.add_development_dependency 'simplecov'
21
21
  s.add_development_dependency 'yard'
@@ -8,7 +8,7 @@ module AppConfig
8
8
  end
9
9
 
10
10
  class NotSetup < Exception
11
- def to_s; "Must call 'AppConfig.setup' to setup storage!"; end
11
+ def to_s; "Must call 'AppConfig.setup!' to setup storage!"; end
12
12
  end
13
13
 
14
14
  class UnknownStorageMethod < Exception; end
@@ -2,12 +2,22 @@ module AppConfig
2
2
  module Storage
3
3
  class Base
4
4
 
5
- def initialize(options)
6
- @options = options
5
+ def initialize
7
6
  end
8
7
 
9
8
  def to_hash
10
- defined?(@data) ? @data.to_hash : Hash.new(&Storage::DEEP_HASH)
9
+ defined?(@data) ? @data.marshal_dump : Hash.new
10
+ end
11
+
12
+ # Wrap `method_missing` to proxy to `@data`.
13
+ def method_missing(name, *args)
14
+ unless @data.nil?
15
+ if name =~ /.+=$/ # Caller is a setter.
16
+ @data.send(name.to_sym, *args[0])
17
+ else
18
+ @data.send(name.to_sym)
19
+ end
20
+ end
11
21
  end
12
22
 
13
23
  end # Base
@@ -22,29 +22,19 @@ module AppConfig
22
22
  fetch_data!
23
23
  end
24
24
 
25
- def [](key)
26
- @data[key]
27
- end
28
-
29
- def []=(key, value)
30
- @data[key] = value
31
- save!
32
- end
33
-
34
- def empty?
35
- @data.empty?
36
- end
37
-
38
- private
39
-
25
+ # Saves the data back to Mongo. Returns `true`/`false`.
40
26
  def save!
41
27
  if @_id
42
- collection.update({ '_id' => @_id}, @data)
28
+ retval = collection.update({ '_id' => @_id}, @data.to_h)
43
29
  else
44
- collection.save(@data)
30
+ retval = collection.save(@data.to_h)
45
31
  end
32
+
33
+ !!retval
46
34
  end
47
35
 
36
+ private
37
+
48
38
  def setup_connection
49
39
  @connection = ::Mongo::Connection.new(@options[:host], @options[:port].to_i)
50
40
  authenticate_connection if @options[:user] && @options[:password]
@@ -61,10 +51,8 @@ module AppConfig
61
51
  def fetch_data!
62
52
  raise 'Not connected to MongoDB' unless connected?
63
53
 
64
- @data = Hashish.new(collection.find_one)
65
- @data.default_proc = Storage::DEEP_HASH
66
-
67
- @_id = @data.delete('_id')
54
+ @data = OpenStruct.new(collection.find_one)
55
+ @_id = @data._id
68
56
  end
69
57
 
70
58
  def database
@@ -9,24 +9,12 @@ module AppConfig
9
9
  DEFAULT_PATH = File.join(Dir.home, '.app_config.yml')
10
10
 
11
11
  # Loads `@data` with the YAML file located at `path`.
12
- # `@data` will be the Hashish that is accessed with `AppConfig[:key]`.
12
+ # `@data` will be the OpenStruct that is accessed with `AppConfig.some_var`.
13
13
  #
14
14
  # Defaults to `Dir.home/.app_config.yml`
15
15
  def initialize(path = DEFAULT_PATH)
16
16
  # Make sure to use the top-level YAML module here.
17
- @data = Hashish.new(::YAML.load_file(path))
18
- end
19
-
20
- def [](key)
21
- @data[key]
22
- end
23
-
24
- def []=(key, value)
25
- @data[key] = value
26
- end
27
-
28
- def empty?
29
- @data.empty?
17
+ @data = OpenStruct.new(::YAML.load_file(path))
30
18
  end
31
19
 
32
20
  end # YAML
@@ -0,0 +1,3 @@
1
+ module AppConfig
2
+ VERSION = '2.0.1'
3
+ end
data/lib/app_config.rb CHANGED
@@ -1,7 +1,7 @@
1
- require 'core_ext/hashish'
1
+ require 'ostruct'
2
2
 
3
3
  module AppConfig
4
- VERSION = '1.1.1'
4
+ autoload :VERSION, 'app_config/version'
5
5
 
6
6
  autoload :Error, 'app_config/error'
7
7
  autoload :Storage, 'app_config/storage'
@@ -14,8 +14,7 @@ module AppConfig
14
14
  # Valid storage methods:
15
15
  # * `:mongo` - {AppConfig::Storage::Mongo AppConfig::Storage::Mongo}
16
16
  # * `:yaml` - {AppConfig::Storage::YAML AppConfig::Storage::YAML}
17
- def setup(options = {}, &block)
18
- warn "DEPRECATED: AppConfig.setup will be renamed to AppConfig.setup! in 2.0."
17
+ def setup!(options = {}, &block)
19
18
  @@options = options
20
19
 
21
20
  if @@options[:yaml]
@@ -23,7 +22,7 @@ module AppConfig
23
22
  elsif @@options[:mongo]
24
23
  @@storage = AppConfig::Storage::Mongo.new(@@options.delete(:mongo))
25
24
  else
26
- @@storage = Hash.new(&Storage::DEEP_HASH)
25
+ @@storage = AppConfig::Storage::Base.new
27
26
  end
28
27
 
29
28
  yield @@storage if block_given?
@@ -31,64 +30,30 @@ module AppConfig
31
30
  to_hash
32
31
  end
33
32
 
34
- # Returns `true` if {AppConfig.setup AppConfig.setup} has been called.
33
+ # Returns `true` if {AppConfig.setup! AppConfig.setup!} has been called.
35
34
  def setup?
36
- !!(defined?(@@storage) && !@@storage.empty?)
35
+ defined?(@@storage) && !@@storage.nil?
37
36
  end
38
37
 
39
38
  # Clears the `@@storage`.
40
39
  def reset!
41
- if defined?(@@storage)
42
- remove_class_variable(:@@storage)
43
- true
44
- else
45
- false
46
- end
47
- end
48
-
49
- # Access the configured `key`'s value.
50
- def [](key)
51
- warn "DEPRECATED: AppConfig.[] is deprecated and will be removed in 2.0."
52
- setup unless setup?
53
- storage[key]
54
- end
55
-
56
- # Set a new `value` for `key` (persistence depends on the type of Storage).
57
- def []=(key, value)
58
- warn "DEPRECATED: AppConfig.[]= is deprecated and will be removed in 2.0."
59
- setup unless setup?
60
- storage[key] = value
61
- end
62
-
63
- def empty?
64
- warn "DEPRECATED: AppConfig.empty? is deprecated and will be removed in 2.0."
65
- storage.empty?
40
+ @@storage = nil
66
41
  end
67
42
 
68
43
  def to_hash
69
- unless setup?
70
- @@storage = default_storage
71
- end
72
-
73
- storage.to_hash
44
+ storage ? storage.to_hash : {}
74
45
  end
75
46
 
76
- private
77
-
78
- # Returns a nested Hash as a sane default.
79
- def default_storage
80
- Hash.new(&Storage::DEEP_HASH)
47
+ # Wrap `method_missing` to proxy to `storage`.
48
+ def method_missing(name, *args)
49
+ storage.send(name.to_sym, *args)
81
50
  end
82
51
 
83
- def environment
84
- warn "DEPRECATED: Environment mode will be removed in 2.0."
85
- (@@options[:environment] || @@options[:env]) || nil
86
- end
87
- alias_method :env, :environment
52
+ private
88
53
 
89
54
  # Returns the `@@storage` contents, which is what is exposed as the configuration.
90
55
  def storage
91
- environment ? @@storage[environment] : @@storage
56
+ @@storage
92
57
  end
93
58
 
94
59
  end # self
@@ -9,17 +9,15 @@ describe AppConfig::Storage::Mongo do
9
9
  end
10
10
 
11
11
  it 'should have some values' do
12
- AppConfig[:api_key].should_not be_nil
12
+ AppConfig.api_key.should_not be_nil
13
13
  end
14
14
 
15
15
  it 'should update the values' do
16
- AppConfig.class_variable_get(:@@storage).should_receive(:save!)
17
- AppConfig[:api_key] = 'SOME_NEW_API_KEY'
18
- AppConfig[:api_key].should == 'SOME_NEW_API_KEY'
19
- end
16
+ AppConfig.api_key = 'SOME_NEW_API_KEY'
17
+ AppConfig.api_key.should == 'SOME_NEW_API_KEY'
20
18
 
21
- it 'should not have the Mongo _id in storage' do
22
- AppConfig['_id'].should be_empty
19
+ AppConfig.class_variable_get(:@@storage).should_receive(:save!)
20
+ AppConfig.save!
23
21
  end
24
22
 
25
23
  it 'should have a @_id variable for the Mongo ID' do
@@ -4,7 +4,7 @@ describe AppConfig::Storage::YAML do
4
4
 
5
5
  it 'should have some values' do
6
6
  config_for_yaml
7
- AppConfig[:api_key].should_not be_nil
7
+ AppConfig.api_key.should_not be_nil
8
8
  end
9
9
 
10
10
  it 'should raise file not found' do
@@ -15,8 +15,8 @@ describe AppConfig::Storage::YAML do
15
15
 
16
16
  it 'saves the new value in memory' do
17
17
  config_for_yaml
18
- AppConfig[:new_key] = 'new value'
19
- AppConfig[:new_key].should == 'new value'
18
+ AppConfig.new_key = 'new value'
19
+ AppConfig.new_key.should == 'new value'
20
20
  end
21
21
 
22
22
  it "requires the use of 'Dir.home'" do
@@ -6,8 +6,8 @@ describe AppConfig do
6
6
  AppConfig::VERSION.should_not be_nil
7
7
  end
8
8
 
9
- it 'responds to .setup()' do
10
- AppConfig.should respond_to(:setup)
9
+ it 'responds to .setup!()' do
10
+ AppConfig.should respond_to(:setup!)
11
11
  end
12
12
 
13
13
  it 'responds to .setup?()' do
@@ -28,7 +28,7 @@ describe AppConfig do
28
28
  config_for_yaml(:api_key => 'API_KEY')
29
29
  # then reset
30
30
  AppConfig.reset!
31
- AppConfig[:api_key].should be_empty
31
+ AppConfig.send(:storage).should be_nil
32
32
  end
33
33
 
34
34
  it 'to_hash() returns an empty hash if storage not set' do
@@ -36,14 +36,6 @@ describe AppConfig do
36
36
  AppConfig.to_hash.should == {}
37
37
  end
38
38
 
39
- describe 'environment mode' do
40
- it 'should load the proper environment' do
41
- config_for_yaml(:yaml => fixture('env_app_config.yml'),
42
- :env => 'development')
43
- AppConfig[:api_key].should_not be_nil
44
- end
45
- end
46
-
47
39
  it 'should not be setup' do
48
40
  AppConfig.reset!
49
41
  AppConfig.should_not be_setup
@@ -55,26 +47,21 @@ describe AppConfig do
55
47
  end
56
48
 
57
49
  it 'should create nested keys' do
50
+ pending 'Re-implement this later.'
58
51
  AppConfig.reset!
59
- AppConfig.setup
52
+ AppConfig.setup!
60
53
 
61
- AppConfig[:person][:name][:first] = 'Dale'
62
- AppConfig[:person][:name][:first].should == 'Dale'
54
+ AppConfig.person.name.first = 'Dale'
55
+ AppConfig.person.name.first.should == 'Dale'
63
56
  end
64
57
 
65
58
  it 'returns a Hash on setup' do
66
59
  AppConfig.reset!
67
- config = AppConfig.setup do |c|
68
- c[:name] = 'Dale'
69
- c[:nick] = 'Oshuma'
60
+ config = AppConfig.setup! do |c|
61
+ c.name = 'Dale'
62
+ c.nick = 'Oshuma'
70
63
  end
71
64
  config.should be_instance_of(Hash)
72
65
  end
73
66
 
74
- it '.default_storage() returns a nested Hash' do
75
- hash = AppConfig.send(:default_storage)
76
- hash[:name][:first] = 'Dale'
77
- hash[:name][:first].should == 'Dale'
78
- end
79
-
80
67
  end
data/spec/spec_helper.rb CHANGED
@@ -14,10 +14,10 @@ RSpec.configure do |config|
14
14
  File.expand_path(File.join(File.dirname(__FILE__), 'fixtures', name))
15
15
  end
16
16
 
17
- # AppConfig.setup wrapper. Accepts a hash of +options+.
17
+ # AppConfig.setup! wrapper. Accepts a hash of +options+.
18
18
  def config_for(options)
19
19
  AppConfig.reset!
20
- AppConfig.setup(options)
20
+ AppConfig.setup!(options)
21
21
  end
22
22
 
23
23
  # Setup YAML options and pass to config_for().
metadata CHANGED
@@ -1,84 +1,74 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: app_config
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
5
- prerelease:
4
+ version: 2.0.1
6
5
  platform: ruby
7
6
  authors:
8
7
  - Dale Campbell
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-05-20 00:00:00.000000000 Z
11
+ date: 2013-07-02 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: bson_ext
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - '>='
20
18
  - !ruby/object:Gem::Version
21
19
  version: '0'
22
20
  type: :development
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - '>='
28
25
  - !ruby/object:Gem::Version
29
26
  version: '0'
30
27
  - !ruby/object:Gem::Dependency
31
- name: maruku
28
+ name: mongo
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - '>='
36
32
  - !ruby/object:Gem::Version
37
33
  version: '0'
38
34
  type: :development
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - '>='
44
39
  - !ruby/object:Gem::Version
45
40
  version: '0'
46
41
  - !ruby/object:Gem::Dependency
47
- name: mongo
42
+ name: rake
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ! '>='
45
+ - - '>='
52
46
  - !ruby/object:Gem::Version
53
47
  version: '0'
54
48
  type: :development
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ! '>='
52
+ - - '>='
60
53
  - !ruby/object:Gem::Version
61
54
  version: '0'
62
55
  - !ruby/object:Gem::Dependency
63
- name: rake
56
+ name: redcarpet
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
- - - ! '>='
59
+ - - '>='
68
60
  - !ruby/object:Gem::Version
69
61
  version: '0'
70
62
  type: :development
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
- - - ! '>='
66
+ - - '>='
76
67
  - !ruby/object:Gem::Version
77
68
  version: '0'
78
69
  - !ruby/object:Gem::Dependency
79
70
  name: rspec
80
71
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
72
  requirements:
83
73
  - - ~>
84
74
  - !ruby/object:Gem::Version
@@ -86,7 +76,6 @@ dependencies:
86
76
  type: :development
87
77
  prerelease: false
88
78
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
79
  requirements:
91
80
  - - ~>
92
81
  - !ruby/object:Gem::Version
@@ -94,33 +83,29 @@ dependencies:
94
83
  - !ruby/object:Gem::Dependency
95
84
  name: simplecov
96
85
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
86
  requirements:
99
- - - ! '>='
87
+ - - '>='
100
88
  - !ruby/object:Gem::Version
101
89
  version: '0'
102
90
  type: :development
103
91
  prerelease: false
104
92
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
93
  requirements:
107
- - - ! '>='
94
+ - - '>='
108
95
  - !ruby/object:Gem::Version
109
96
  version: '0'
110
97
  - !ruby/object:Gem::Dependency
111
98
  name: yard
112
99
  requirement: !ruby/object:Gem::Requirement
113
- none: false
114
100
  requirements:
115
- - - ! '>='
101
+ - - '>='
116
102
  - !ruby/object:Gem::Version
117
103
  version: '0'
118
104
  type: :development
119
105
  prerelease: false
120
106
  version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
107
  requirements:
123
- - - ! '>='
108
+ - - '>='
124
109
  - !ruby/object:Gem::Version
125
110
  version: '0'
126
111
  description: An easy to use, customizable library to easily store and retrieve application
@@ -133,6 +118,7 @@ extra_rdoc_files: []
133
118
  files:
134
119
  - .gitignore
135
120
  - .rspec
121
+ - .travis.yml
136
122
  - Gemfile
137
123
  - Gemfile.lock
138
124
  - README.md
@@ -145,18 +131,18 @@ files:
145
131
  - lib/app_config/storage/base.rb
146
132
  - lib/app_config/storage/mongo.rb
147
133
  - lib/app_config/storage/yaml.rb
148
- - lib/core_ext/hashish.rb
134
+ - lib/app_config/version.rb
149
135
  - spec/app_config/storage/mongo_spec.rb
150
136
  - spec/app_config/storage/yaml_spec.rb
151
137
  - spec/app_config/storage_spec.rb
152
138
  - spec/app_config_spec.rb
153
- - spec/core_ext/hashish_spec.rb
154
139
  - spec/fixtures/app_config.yml
155
140
  - spec/fixtures/app_config_mongo.yml
156
141
  - spec/fixtures/env_app_config.yml
157
142
  - spec/spec_helper.rb
158
- homepage: http://oshuma.github.com/app_config
143
+ homepage: http://oshuma.github.io/app_config
159
144
  licenses: []
145
+ metadata: {}
160
146
  post_install_message:
161
147
  rdoc_options:
162
148
  - --inline-source
@@ -164,22 +150,28 @@ rdoc_options:
164
150
  require_paths:
165
151
  - lib
166
152
  required_ruby_version: !ruby/object:Gem::Requirement
167
- none: false
168
153
  requirements:
169
- - - ! '>='
154
+ - - '>='
170
155
  - !ruby/object:Gem::Version
171
156
  version: '0'
172
157
  required_rubygems_version: !ruby/object:Gem::Requirement
173
- none: false
174
158
  requirements:
175
- - - ! '>='
159
+ - - '>='
176
160
  - !ruby/object:Gem::Version
177
161
  version: '0'
178
162
  requirements: []
179
163
  rubyforge_project:
180
- rubygems_version: 1.8.23
164
+ rubygems_version: 2.0.2
181
165
  signing_key:
182
- specification_version: 3
166
+ specification_version: 4
183
167
  summary: Quick and easy application configuration.
184
- test_files: []
168
+ test_files:
169
+ - spec/app_config/storage/mongo_spec.rb
170
+ - spec/app_config/storage/yaml_spec.rb
171
+ - spec/app_config/storage_spec.rb
172
+ - spec/app_config_spec.rb
173
+ - spec/fixtures/app_config.yml
174
+ - spec/fixtures/app_config_mongo.yml
175
+ - spec/fixtures/env_app_config.yml
176
+ - spec/spec_helper.rb
185
177
  has_rdoc: true
@@ -1,140 +0,0 @@
1
- # Stolen from Rails `ActiveSupport::HashWithIndifferentAccess` and renamed to Hashish.
2
- #
3
- # This class has dubious semantics and we only have it so that
4
- # people can write `params[:key]` instead of `params['key']`
5
- # and they get the same value for both keys.
6
- class Hashish < Hash
7
- def initialize(constructor = {})
8
- if constructor.is_a?(Hash)
9
- super()
10
- update(constructor)
11
- else
12
- super(constructor)
13
- end
14
- end
15
-
16
- def default(key = nil)
17
- if key.is_a?(Symbol) && include?(key = key.to_s)
18
- self[key]
19
- else
20
- super
21
- end
22
- end
23
-
24
- alias_method :regular_writer, :[]= unless method_defined?(:regular_writer)
25
- alias_method :regular_update, :update unless method_defined?(:regular_update)
26
-
27
- # Assigns a new value to the hash:
28
- #
29
- # hash = HashWithIndifferentAccess.new
30
- # hash[:key] = "value"
31
- def []=(key, value)
32
- regular_writer(convert_key(key), convert_value(value))
33
- end
34
-
35
- # Updates the instantized hash with values from the second:
36
- #
37
- # hash_1 = HashWithIndifferentAccess.new
38
- # hash_1[:key] = "value"
39
- #
40
- # hash_2 = HashWithIndifferentAccess.new
41
- # hash_2[:key] = "New Value!"
42
- #
43
- # hash_1.update(hash_2) # => {"key"=>"New Value!"}
44
- def update(other_hash)
45
- other_hash.each_pair { |key, value| regular_writer(convert_key(key), convert_value(value)) }
46
- self
47
- end
48
-
49
- alias_method :merge!, :update
50
-
51
- # Checks the hash for a key matching the argument passed in:
52
- #
53
- # hash = HashWithIndifferentAccess.new
54
- # hash["key"] = "value"
55
- # hash.key? :key # => true
56
- # hash.key? "key" # => true
57
- def key?(key)
58
- super(convert_key(key))
59
- end
60
-
61
- alias_method :include?, :key?
62
- alias_method :has_key?, :key?
63
- alias_method :member?, :key?
64
-
65
- # Fetches the value for the specified key, same as doing `hash[key]`.
66
- def fetch(key, *extras)
67
- super(convert_key(key), *extras)
68
- end
69
-
70
- # Returns an array of the values at the specified indices:
71
- #
72
- # hash = HashWithIndifferentAccess.new
73
- # hash[:a] = "x"
74
- # hash[:b] = "y"
75
- # hash.values_at("a", "b") # => ["x", "y"]
76
- def values_at(*indices)
77
- indices.collect {|key| self[convert_key(key)]}
78
- end
79
-
80
- # Returns an exact copy of the hash.
81
- def dup
82
- HashWithIndifferentAccess.new(self)
83
- end
84
-
85
- # Merges the instantized and the specified hashes together, giving precedence to the values from the second hash
86
- # Does not overwrite the existing hash.
87
- def merge(hash)
88
- self.dup.update(hash)
89
- end
90
-
91
- # Performs the opposite of merge, with the keys and values from the first hash taking precedence over the second.
92
- # This overloaded definition prevents returning a regular hash, if reverse_merge is called on a HashWithDifferentAccess.
93
- def reverse_merge(other_hash)
94
- super other_hash.with_indifferent_access
95
- end
96
-
97
- def reverse_merge!(other_hash)
98
- replace(reverse_merge( other_hash ))
99
- end
100
-
101
- # Removes a specified key from the hash.
102
- def delete(key)
103
- super(convert_key(key))
104
- end
105
-
106
- def stringify_keys!; self end
107
- def symbolize_keys!; self end
108
- def to_options!; self end
109
-
110
- # Convert to a Hash with String keys.
111
- def to_hash
112
- Hash.new(default).merge!(self)
113
- end
114
-
115
- protected
116
-
117
- def convert_key(key)
118
- key.kind_of?(Symbol) ? key.to_s : key
119
- end
120
-
121
- def convert_value(value)
122
- case value
123
- when Hash
124
- value.with_indifferent_access
125
- when Array
126
- value.collect { |e| e.is_a?(Hash) ? e.with_indifferent_access : e }
127
- else
128
- value
129
- end
130
- end
131
-
132
- end # Hashish
133
-
134
- class Hash
135
- def with_indifferent_access
136
- hash = Hashish.new(self)
137
- hash.default = self.default
138
- hash
139
- end
140
- end
@@ -1,18 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Hashish do
4
- before(:each) do
5
- @strings = { 'key' => 'value', 'four' => 20 }
6
- @symbols = { :key => 'value', :four => 20 }
7
- end
8
-
9
- it 'should not give a fuck about symbols' do
10
- hashish = Hashish.new(@strings)
11
- hashish[:key].should == 'value'
12
- end
13
-
14
- it 'should not give a fuck about strings' do
15
- hashish = Hashish.new(@symbols)
16
- hashish['key'].should == 'value'
17
- end
18
- end