jcnetdev-app_config 1.0
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 +1 -0
- data/README.rdoc +56 -0
- data/app_config.gemspec +32 -0
- data/init.rb +1 -0
- data/lib/app_config.rb +41 -0
- data/rails/init.rb +4 -0
- data/test/app_config.yml +2 -0
- data/test/app_config_test.rb +44 -0
- data/test/development.yml +5 -0
- data/test/empty1.yml +0 -0
- data/test/empty2.yml +0 -0
- metadata +72 -0
data/README
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
README.rdoc
|
data/README.rdoc
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
== Summary
|
2
|
+
Application level configuration.
|
3
|
+
|
4
|
+
== Author
|
5
|
+
Christopher J. Bottaro
|
6
|
+
|
7
|
+
=== Accessing the AppConfig object
|
8
|
+
After installing this plugin, the AppConfig object will be global available. Entries are accessed via object member notation:
|
9
|
+
AppConfig.my_config_entry
|
10
|
+
Nested entries are supported:
|
11
|
+
AppConfig.my_section.some_entry
|
12
|
+
|
13
|
+
=== Common config file
|
14
|
+
Config entries defined in
|
15
|
+
RAILS_ROOT/config/app_config.yml
|
16
|
+
will be available to all environments.
|
17
|
+
|
18
|
+
=== Environment specific config files
|
19
|
+
You can have environment specific config files. Environment specific config entries take precedence over common config entries.
|
20
|
+
|
21
|
+
Example development environment config file:
|
22
|
+
RAILS_ROOT/config/environments/development.yml
|
23
|
+
|
24
|
+
Example production environment config file:
|
25
|
+
RAILS_ROOT/config/environments/production.yml
|
26
|
+
|
27
|
+
=== Embedded Ruby (ERB)
|
28
|
+
Embedded Ruby is allowed in the configuration files. See examples below.
|
29
|
+
|
30
|
+
=== Examples
|
31
|
+
Consider the two following config files.
|
32
|
+
|
33
|
+
RAILS_ROOT/config/app_config.yml:
|
34
|
+
size: 1
|
35
|
+
server: google.com
|
36
|
+
|
37
|
+
RAILS_ROOT/config/environments/development.yml:
|
38
|
+
size: 2
|
39
|
+
computed: <%= 1 + 2 + 3 %>
|
40
|
+
section:
|
41
|
+
size: 3
|
42
|
+
servers: [ {name: yahoo.com}, {name: amazon.com} ]
|
43
|
+
|
44
|
+
Notice that the environment specific config entries overwrite the common entries.
|
45
|
+
AppConfig.size -> 2
|
46
|
+
AppConfig.server -> google.com
|
47
|
+
|
48
|
+
Notice the embedded Ruby.
|
49
|
+
AppConfig.computed -> 6
|
50
|
+
|
51
|
+
Notice that object member notation is maintained even in nested entries.
|
52
|
+
AppConfig.section.size -> 3
|
53
|
+
|
54
|
+
Notice array notation and object member notation is maintained.
|
55
|
+
AppConfig.section.servers[0].name -> yahoo.com
|
56
|
+
AppConfig.section.servers[1].name -> amazon.com
|
data/app_config.gemspec
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
Gem::Specification.new do |s|
|
2
|
+
s.name = 'app_config'
|
3
|
+
s.version = '1.0'
|
4
|
+
s.date = '2008-07-04'
|
5
|
+
|
6
|
+
s.summary = "Application level configuration"
|
7
|
+
s.description = "Allow application wide configuration settings via YML files"
|
8
|
+
|
9
|
+
s.authors = ['RailsJedi', 'Christopher J. Bottaro']
|
10
|
+
s.email = 'railsjedi@gmail.com'
|
11
|
+
s.homepage = 'http://github.com/jcnetdev/app_config'
|
12
|
+
|
13
|
+
s.has_rdoc = true
|
14
|
+
s.rdoc_options = ["--main", "README"]
|
15
|
+
s.extra_rdoc_files = ["README"]
|
16
|
+
|
17
|
+
s.add_dependency 'rails', ['>= 2.1']
|
18
|
+
|
19
|
+
s.files = ["README",
|
20
|
+
"README.rdoc",
|
21
|
+
"app_config.gemspec",
|
22
|
+
"init.rb",
|
23
|
+
"lib/app_config.rb",
|
24
|
+
"rails/init.rb"]
|
25
|
+
|
26
|
+
s.test_files = ["test/app_config.yml",
|
27
|
+
"test/app_config_test.rb",
|
28
|
+
"test/development.yml",
|
29
|
+
"test/empty1.yml",
|
30
|
+
"test/empty2.yml"]
|
31
|
+
|
32
|
+
end
|
data/init.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/rails/init"
|
data/lib/app_config.rb
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'ostruct'
|
2
|
+
require 'yaml'
|
3
|
+
require 'erb'
|
4
|
+
|
5
|
+
# == Summary
|
6
|
+
# This is API documentation, NOT documentation on how to use this plugin. For that, see the README.
|
7
|
+
module ApplicationConfig
|
8
|
+
|
9
|
+
# Create a config object (OpenStruct) from a yaml file. If a second yaml file is given, then the sections of that file will overwrite the sections
|
10
|
+
# if the first file if they exist in the first file.
|
11
|
+
def self.load_files(conf_path_1, conf_path_2 = nil)
|
12
|
+
|
13
|
+
conf1 = YAML.load(ERB.new(IO.read(conf_path_1)).result) if conf_path_1 and File.exists?(conf_path_1)
|
14
|
+
conf1 = {} if !conf1 or conf1.empty?
|
15
|
+
|
16
|
+
conf2 = YAML.load(ERB.new(IO.read(conf_path_2)).result) if conf_path_2 and File.exists?(conf_path_2)
|
17
|
+
conf2 = {} if !conf2 or conf2.empty?
|
18
|
+
|
19
|
+
conf = conf1.merge(conf2)
|
20
|
+
(!conf or conf.empty?) ? OpenStruct.new : convert(conf)
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
# Recursively converts Hashes to OpenStructs (including Hashes inside Arrays)
|
25
|
+
def self.convert(h) #:nodoc:
|
26
|
+
s = OpenStruct.new
|
27
|
+
h.each do |k, v|
|
28
|
+
s.new_ostruct_member(k)
|
29
|
+
if v.instance_of?(Hash)
|
30
|
+
s.send( (k+'=').to_sym, convert(v))
|
31
|
+
elsif v.instance_of?(Array)
|
32
|
+
converted_array = v.collect { |e| e.instance_of?(Hash) ? convert(e) : e }
|
33
|
+
s.send( (k+'=').to_sym, converted_array)
|
34
|
+
else
|
35
|
+
s.send( (k+'=').to_sym, v)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
s
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
data/rails/init.rb
ADDED
data/test/app_config.yml
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'app_config'
|
3
|
+
|
4
|
+
class AppConfigTest < Test::Unit::TestCase
|
5
|
+
|
6
|
+
def test_missing_files
|
7
|
+
config = ApplicationConfig.load_files('not_here1', 'not_here2')
|
8
|
+
assert_equal OpenStruct.new, config
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_empty_files
|
12
|
+
config = ApplicationConfig.load_files('test/empty1.yml', 'test/empty2.yml')
|
13
|
+
assert_equal OpenStruct.new, config
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_common
|
17
|
+
config = ApplicationConfig.load_files('test/app_config.yml')
|
18
|
+
assert_equal 1, config.size
|
19
|
+
assert_equal 'google.com', config.server
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_environment_override
|
23
|
+
config = ApplicationConfig.load_files('test/app_config.yml', 'test/development.yml')
|
24
|
+
assert_equal 2, config.size
|
25
|
+
assert_equal 'google.com', config.server
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_nested
|
29
|
+
config = ApplicationConfig.load_files('test/development.yml')
|
30
|
+
assert_equal 3, config.section.size
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_array
|
34
|
+
config = ApplicationConfig.load_files('test/development.yml')
|
35
|
+
assert_equal 'yahoo.com', config.section.servers[0].name
|
36
|
+
assert_equal 'amazon.com', config.section.servers[1].name
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_erb
|
40
|
+
config = ApplicationConfig.load_files('test/development.yml')
|
41
|
+
assert_equal 6, config.computed
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
data/test/empty1.yml
ADDED
File without changes
|
data/test/empty2.yml
ADDED
File without changes
|
metadata
ADDED
@@ -0,0 +1,72 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: jcnetdev-app_config
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: "1.0"
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- RailsJedi
|
8
|
+
- Christopher J. Bottaro
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
|
13
|
+
date: 2008-07-04 00:00:00 -07:00
|
14
|
+
default_executable:
|
15
|
+
dependencies:
|
16
|
+
- !ruby/object:Gem::Dependency
|
17
|
+
name: rails
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: "2.1"
|
24
|
+
version:
|
25
|
+
description: Allow application wide configuration settings via YML files
|
26
|
+
email: railsjedi@gmail.com
|
27
|
+
executables: []
|
28
|
+
|
29
|
+
extensions: []
|
30
|
+
|
31
|
+
extra_rdoc_files:
|
32
|
+
- README
|
33
|
+
files:
|
34
|
+
- README
|
35
|
+
- README.rdoc
|
36
|
+
- app_config.gemspec
|
37
|
+
- init.rb
|
38
|
+
- lib/app_config.rb
|
39
|
+
- rails/init.rb
|
40
|
+
has_rdoc: true
|
41
|
+
homepage: http://github.com/jcnetdev/app_config
|
42
|
+
post_install_message:
|
43
|
+
rdoc_options:
|
44
|
+
- --main
|
45
|
+
- README
|
46
|
+
require_paths:
|
47
|
+
- lib
|
48
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
49
|
+
requirements:
|
50
|
+
- - ">="
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: "0"
|
53
|
+
version:
|
54
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
55
|
+
requirements:
|
56
|
+
- - ">="
|
57
|
+
- !ruby/object:Gem::Version
|
58
|
+
version: "0"
|
59
|
+
version:
|
60
|
+
requirements: []
|
61
|
+
|
62
|
+
rubyforge_project:
|
63
|
+
rubygems_version: 1.2.0
|
64
|
+
signing_key:
|
65
|
+
specification_version: 2
|
66
|
+
summary: Application level configuration
|
67
|
+
test_files:
|
68
|
+
- test/app_config.yml
|
69
|
+
- test/app_config_test.rb
|
70
|
+
- test/development.yml
|
71
|
+
- test/empty1.yml
|
72
|
+
- test/empty2.yml
|