app_config 1.0.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- app_config (0.7.1)
4
+ app_config (1.0.0)
5
5
 
6
6
  GEM
7
7
  remote: http://rubygems.org/
data/README.md CHANGED
@@ -22,6 +22,11 @@ In it's simplest form, you can use it like so:
22
22
  You may also specify the storage method along with options specific to that storage method.
23
23
  Check the [wiki](https://github.com/Oshuma/app_config/wiki) for more usage examples.
24
24
 
25
+ ## Deprecation Note
26
+
27
+ Version `1.0` is \***not**\* backwards compatible with `0.7.1`! See the [wiki](https://github.com/Oshuma/app_config/wiki)
28
+ for upgrade instructions.
29
+
25
30
 
26
31
  ## AppConfig::Storage::YAML
27
32
 
@@ -1,18 +1,34 @@
1
1
  require 'core_ext/hashish'
2
2
 
3
3
  module AppConfig
4
- VERSION = '1.0.0'
4
+ VERSION = '1.0.1'
5
5
 
6
- autoload :Base, 'app_config/base'
7
6
  autoload :Error, 'app_config/error'
8
7
  autoload :Storage, 'app_config/storage'
9
8
 
10
9
  class << self
11
10
 
12
11
  # Accepts an `options` hash or a block.
13
- # See {AppConfig::Base AppConfig::Base} for valid storage methods.
12
+ # See each storage method's documentation for their specific options.
13
+ #
14
+ # Valid storage methods:
15
+ # * `:memory` - {AppConfig::Storage::Memory AppConfig::Storage::Memory}
16
+ # * `:mongo` - {AppConfig::Storage::Mongo AppConfig::Storage::Mongo}
17
+ # * `:yaml` - {AppConfig::Storage::YAML AppConfig::Storage::YAML}
14
18
  def setup(options = {}, &block)
15
- @@storage = AppConfig::Base.new(options, &block)
19
+ @@options = options
20
+
21
+ if @@options[:yaml]
22
+ @@storage = AppConfig::Storage::YAML.new(@@options.delete(:yaml))
23
+ elsif @@options[:mongo]
24
+ @@storage = AppConfig::Storage::Mongo.new(@@options.delete(:mongo))
25
+ else
26
+ @@storage = AppConfig::Storage::Memory.new(@@options)
27
+ end
28
+
29
+ yield @@storage if block_given?
30
+
31
+ to_hash
16
32
  end
17
33
 
18
34
  # Returns `true` if {AppConfig.setup AppConfig.setup} has been called.
@@ -33,17 +49,33 @@ module AppConfig
33
49
  # Access the configured `key`'s value.
34
50
  def [](key)
35
51
  setup unless setup?
36
- @@storage[key]
52
+ storage[key]
37
53
  end
38
54
 
39
55
  # Set a new `value` for `key` (persistence depends on the type of Storage).
40
56
  def []=(key, value)
41
57
  setup unless setup?
42
- @@storage[key] = value
58
+ storage[key] = value
59
+ end
60
+
61
+ def empty?
62
+ storage.empty?
43
63
  end
44
64
 
45
65
  def to_hash
46
- setup? ? @@storage.to_hash : Hashish.new
66
+ setup? ? storage.to_hash : Hashish.new
67
+ end
68
+
69
+ private
70
+
71
+ def environment
72
+ (@@options[:environment] || @@options[:env]) || nil
73
+ end
74
+ alias_method :env, :environment
75
+
76
+ # Returns the `@@storage` contents, which is what is exposed as the configuration.
77
+ def storage
78
+ environment ? @@storage[environment] : @@storage
47
79
  end
48
80
 
49
81
  end # self
@@ -2,28 +2,14 @@ module AppConfig
2
2
  module Storage
3
3
  class Base
4
4
 
5
- attr_reader :data
6
-
7
5
  def initialize(options)
8
6
  @options = options
9
7
  end
10
8
 
11
- def [](key)
12
- @data[key]
13
- end
14
-
15
- def []=(key, value)
16
- @data[key] = value
17
- end
18
-
19
- def empty?
20
- @data.empty?
21
- end
22
-
23
9
  def to_hash
24
10
  @data.to_hash
25
11
  end
26
12
 
27
- end # BaseStorage
13
+ end # Base
28
14
  end # Storage
29
15
  end # AppConfig
@@ -3,10 +3,21 @@ module AppConfig
3
3
  class Memory < Storage::Base
4
4
 
5
5
  def initialize(options)
6
- super(options)
7
6
  @data = Hashish.new(options)
8
7
  end
9
8
 
9
+ def [](key)
10
+ @data[key]
11
+ end
12
+
13
+ def []=(key, value)
14
+ @data[key] = value
15
+ end
16
+
17
+ def empty?
18
+ @data.empty?
19
+ end
20
+
10
21
  end # Memory
11
22
  end # Storage
12
23
  end # AppConfig
@@ -16,11 +16,10 @@ module AppConfig
16
16
  }
17
17
 
18
18
  def initialize(options)
19
- super(DEFAULTS.merge(options))
20
19
  @connected = false
21
20
  @options = DEFAULTS.merge(options)
22
21
  setup_connection
23
- @data = fetch_data
22
+ fetch_data!
24
23
  end
25
24
 
26
25
  def [](key)
@@ -32,11 +31,15 @@ module AppConfig
32
31
  save!
33
32
  end
34
33
 
34
+ def empty?
35
+ @data.empty?
36
+ end
37
+
35
38
  private
36
39
 
37
40
  def save!
38
- if @data.has_key?('_id')
39
- collection.update({'_id' => @data['_id']}, @data)
41
+ if @_id
42
+ collection.update({ '_id' => @_id}, @data)
40
43
  else
41
44
  collection.save(@data)
42
45
  end
@@ -55,9 +58,10 @@ module AppConfig
55
58
  @connection && @connection.connected?
56
59
  end
57
60
 
58
- def fetch_data
61
+ def fetch_data!
59
62
  raise 'Not connected to MongoDB' unless connected?
60
- Hashish.new(collection.find_one)
63
+ @data = Hashish.new(collection.find_one)
64
+ @_id = @data.delete('_id')
61
65
  end
62
66
 
63
67
  def database
@@ -17,6 +17,22 @@ module AppConfig
17
17
  @data = Hashish.new(::YAML.load_file(path))
18
18
  end
19
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?
30
+ end
31
+
32
+ def to_hash
33
+ @data.to_hash
34
+ end
35
+
20
36
  end # YAML
21
37
  end # Storage
22
38
  end # AppConfig
@@ -13,14 +13,17 @@ describe AppConfig::Storage::Mongo do
13
13
  end
14
14
 
15
15
  it 'should update the values' do
16
- pending 'Needs a little work...'
17
- AppConfig.class_variable_get(:@@storage).
18
- instance_variable_get(:@storage).should_receive(:save!)
16
+ AppConfig.class_variable_get(:@@storage).should_receive(:save!)
19
17
  AppConfig[:api_key] = 'SOME_NEW_API_KEY'
20
-
21
- # now reload the config options and check the value
22
- AppConfig.reset!
23
- config_for_mongo({}, false) # use default options and do not load test data
24
18
  AppConfig[:api_key].should == 'SOME_NEW_API_KEY'
25
19
  end
20
+
21
+ it 'should not have the Mongo _id in storage' do
22
+ AppConfig['_id'].should be_nil
23
+ end
24
+
25
+ it 'should have a @_id variable for the Mongo ID' do
26
+ AppConfig.class_variable_get(:@@storage).
27
+ instance_variable_get(:@_id).should_not be_nil
28
+ end
26
29
  end
@@ -54,4 +54,13 @@ describe AppConfig do
54
54
  AppConfig.should be_setup
55
55
  end
56
56
 
57
+ it 'should create nested keys' do
58
+ pending 'Implement nested keys'
59
+ AppConfig.reset!
60
+ AppConfig.setup
61
+
62
+ AppConfig[:name][:first] = 'Dale'
63
+ AppConfig[:name][:first].should == 'Dale'
64
+ end
65
+
57
66
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: app_config
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -140,7 +140,6 @@ files:
140
140
  - app_config.gemspec
141
141
  - doc/.gitignore
142
142
  - lib/app_config.rb
143
- - lib/app_config/base.rb
144
143
  - lib/app_config/error.rb
145
144
  - lib/app_config/storage.rb
146
145
  - lib/app_config/storage/base.rb
@@ -1,70 +0,0 @@
1
- module AppConfig
2
-
3
- # The Base storage class.
4
- # Acts as a wrapper for the different storage methods.
5
- #
6
- # See each storage method's documentation for their specific options.
7
- #
8
- # Valid storage methods:
9
- # * `:memory` - {AppConfig::Storage::Memory AppConfig::Storage::Memory}
10
- # * `:mongo` - {AppConfig::Storage::Mongo AppConfig::Storage::Mongo}
11
- # * `:yaml` - {AppConfig::Storage::YAML AppConfig::Storage::YAML}
12
- class Base
13
-
14
- # Accepts either a hash of `options` or a block (which overrides any options passed in the hash).
15
- def initialize(options = {}, &block)
16
- @options = options
17
-
18
- if @options[:yaml]
19
- @storage = AppConfig::Storage::YAML.new(@options.delete(:yaml))
20
- elsif @options[:mongo]
21
- @storage = AppConfig::Storage::Mongo.new(@options.delete(:mongo))
22
- else
23
- @storage = AppConfig::Storage::Memory.new(@options)
24
- end
25
-
26
- yield @storage if block_given?
27
- end
28
-
29
- # Access the `key`'s value in storage.
30
- def [](key)
31
- if storage.respond_to?(:[])
32
- storage[key]
33
- else
34
- raise AppConfig::Error::MustOverride.new('#[]')
35
- end
36
- end
37
-
38
- def []=(key, value)
39
- if storage.respond_to?(:[]=)
40
- storage[key] = value
41
- else
42
- raise AppConfig::Error::MustOverride.new('#[]=')
43
- end
44
- end
45
-
46
- def empty?
47
- if storage.respond_to?(:empty?)
48
- storage.empty?
49
- else
50
- raise AppConfig::Error::MustOverride.new('#empty?')
51
- end
52
- end
53
-
54
- def environment
55
- (@options[:environment] || @options[:env]) || nil
56
- end
57
- alias_method :env, :environment
58
-
59
- # Returns the `@storage` contents, which is what is exposed
60
- # as the configuration.
61
- def storage
62
- environment ? @storage[environment] : @storage
63
- end
64
-
65
- def to_hash
66
- storage.to_hash
67
- end
68
-
69
- end # Base
70
- end # AppConfig