app_config 0.2.4 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
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