app_config 0.2.4 → 0.3.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.
data/README CHANGED
@@ -23,6 +23,8 @@ Use it like so:
23
23
  AppConfig.setup do |config|
24
24
  config[:storage_method] = :yaml
25
25
  config[:path] = '/path/to/app_config.yml'
26
+ # ..or..
27
+ config[:uri] = 'yaml://path/to/app_config.yml'
26
28
  end
27
29
 
28
30
  # Later on...
@@ -36,13 +38,34 @@ Want SQLite3? No problem!
36
38
  AppConfig.setup do |config|
37
39
  config[:storage_method] = :sqlite
38
40
  config[:database] = '/path/to/database.sqlite3'
39
- config[:table] = 'app_config'
41
+ # ..or..
42
+ config[:uri] = 'sqlite://path/to/database.sqlite3'
43
+
44
+ config[:table] = 'app_config' # defaults to 'app_config'
40
45
  end
41
46
 
42
47
  AppConfig[:column] # => 'value'
43
48
 
44
- You can also pass a <tt>:uri</tt> option, which will automatically determine
45
- the options for the storage method. So in the block (or passed in hash):
46
49
 
47
- config[:uri] = 'sqlite://path/to/database.sqlite3'
48
- config[:uri] = 'yaml://path/to/app_config.yml'
50
+ == Rails Mode
51
+
52
+ As of version 0.3.1, there's a 'Rails mode' where you can organize
53
+ the config file sort of like Rails' database config.
54
+
55
+ *NOTE:* This might get renamed to a more Rack-ish 'environment' mode.
56
+
57
+ development:
58
+ name: 'Dev Mode'
59
+
60
+ production:
61
+ name: 'Production Mode'
62
+
63
+ Then set the <tt>:rails</tt> option to true (it's false by default).
64
+
65
+ AppConfig.setup do |config|
66
+ config[:rails] = true
67
+ config[:uri] = 'yaml://path/to/app_config.yml'
68
+ end
69
+
70
+ # If Rails.env is 'production'
71
+ AppConfig[:name] = 'Production Mode'
@@ -1,37 +1,32 @@
1
1
  $LOAD_PATH.unshift File.dirname(__FILE__)
2
2
 
3
3
  # TODO: Only load deps if needed (no gems unless required).
4
- libs = %w{ sqlite3 yaml uri }
4
+ dependencies = %w{ sqlite3 yaml uri }
5
5
 
6
6
  begin
7
- libs.each { |lib| require lib }
7
+ dependencies.each { |lib| require lib }
8
8
  rescue LoadError
9
9
  require 'rubygems'
10
- libs.each { |lib| require lib }
10
+ dependencies.each { |lib| require lib }
11
11
  end
12
12
 
13
+ # AppConfig stuff.
13
14
  require 'core_ext/hashish'
14
15
 
15
- # TODO: Move these to their own file.
16
- class NotConfigured < Exception
17
- def to_s; "Must call 'AppConfig.setup' to setup storage!"; end
18
- end
19
- class UnknownStorageMethod < Exception; end
20
-
21
16
  module AppConfig
22
- VERSION = '0.2.4'
17
+ VERSION = '0.3.1'
23
18
 
24
19
  autoload :Base, 'app_config/base'
20
+ autoload :Error, 'app_config/error'
25
21
  autoload :Storage, 'app_config/storage'
26
22
 
27
23
  # Returns the AppConfig version string.
28
24
  def self.to_version
29
- "#{self.class} v#{VERSION}"
25
+ "#{self.name} v#{VERSION}"
30
26
  end
31
27
 
32
28
  # Access the configured <tt>key</tt>'s value.
33
29
  def self.[](key)
34
- raise NotConfigured unless defined?(@@storage)
35
30
  @@storage[key]
36
31
  end
37
32
 
@@ -41,4 +36,8 @@ module AppConfig
41
36
  @@storage = AppConfig::Base.new(options, &block)
42
37
  end
43
38
 
39
+ def self.to_hash
40
+ @@storage.to_hash
41
+ end
42
+
44
43
  end # AppConfig
@@ -20,42 +20,55 @@ module AppConfig
20
20
  def initialize(options = {}, &block)
21
21
  @options = DEFAULTS.merge(options)
22
22
  yield @options if block_given?
23
+
23
24
  determine_storage_method if @options[:uri]
24
25
  @storage = initialize_storage
25
26
  end
26
27
 
27
28
  # Access the <tt>key</tt>'s value in @storage.
28
29
  def [](key)
29
- @storage[key]
30
+ storage[key]
31
+ end
32
+
33
+ def storage
34
+ rails_enabled? ? @storage[::Rails.env] : @storage
30
35
  end
31
36
 
32
- private
33
-
34
- # Sets the storage_method depending on the URI given.
35
- def determine_storage_method
36
- uri = URI.parse(@options.delete(:uri))
37
- case uri.scheme
38
- when 'sqlite'
39
- @options[:storage_method] = :sqlite
40
- @options[:database] = uri.path
41
- when 'yaml'
42
- @options[:storage_method] = :yaml
43
- @options[:path] = uri.path
37
+ def to_hash
38
+ storage.to_hash
44
39
  end
45
- end
46
-
47
- # This decides how to load the data, based on the +storage_method+.
48
- # TODO: Maybe purge AppConfig options (ie, those not related to the user-end).
49
- def initialize_storage
50
- case @options[:storage_method]
51
- when :sqlite
52
- AppConfig::Storage::Sqlite.load(@options)
53
- when :yaml
54
- AppConfig::Storage::YAML.load(@options)
55
- else
56
- raise UnknownStorageMethod
40
+
41
+ private
42
+
43
+ # Sets the storage_method depending on the URI given.
44
+ def determine_storage_method
45
+ uri = URI.parse(@options.delete(:uri))
46
+ case uri.scheme
47
+ when 'sqlite'
48
+ @options[:storage_method] = :sqlite
49
+ @options[:database] = uri.path
50
+ when 'yaml'
51
+ @options[:storage_method] = :yaml
52
+ @options[:path] = uri.path
53
+ end
54
+ end
55
+
56
+ # This decides how to load the data, based on the +storage_method+.
57
+ # TODO: Maybe purge AppConfig options (ie, those not related to the user-end).
58
+ def initialize_storage
59
+ case @options[:storage_method]
60
+ when :sqlite
61
+ AppConfig::Storage::Sqlite.load(@options)
62
+ when :yaml
63
+ AppConfig::Storage::YAML.load(@options)
64
+ else
65
+ raise Error::UnknownStorageMethod
66
+ end
67
+ end
68
+
69
+ def rails_enabled?
70
+ @options[:rails] || false
57
71
  end
58
- end
59
72
 
60
73
  end # Base
61
74
  end # AppConfig
@@ -37,6 +37,7 @@ module AppConfig
37
37
  values(columns(table))
38
38
  end
39
39
 
40
+ # Return the values for a given +columns+ (as a Hashish).
40
41
  def values(columns)
41
42
  data = Hashish.new
42
43
  query = "SELECT #{columns.join(', ')} FROM #{@options[:table]}"
@@ -46,6 +47,7 @@ module AppConfig
46
47
  data
47
48
  end
48
49
 
50
+ # Return the column names of a given +table+ (as an Array).
49
51
  def columns(table)
50
52
  columns = table.split(', ')
51
53
  # Trip the first element, since it's the SQL CREATE statement.
@@ -135,3 +135,11 @@ end
135
135
 
136
136
  # Simple alias.
137
137
  Hashish = HashWithIndifferentAccess
138
+
139
+ class Hash
140
+ def with_indifferent_access
141
+ hash = Hashish.new(self)
142
+ hash.default = self.default
143
+ hash
144
+ end
145
+ 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: 0.2.4
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dale Campbell
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-09-27 00:00:00 -05:00
12
+ date: 2009-10-01 00:00:00 -05:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency