app_config 1.1.1 → 2.0.1

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.
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