jcnetdev-app_config 1.2 → 1.5
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 +0 -0
- data/app_config.gemspec +4 -4
- data/lib/application_config/config_builder.rb +132 -0
- data/lib/application_config/view_helpers.rb +67 -0
- data/rails/init.rb +16 -7
- metadata +6 -12
- data/lib/app_config.rb +0 -47
- data/test/app_config.yml +0 -2
- data/test/app_config_test.rb +0 -46
- data/test/development.yml +0 -5
- data/test/empty1.yml +0 -0
- data/test/empty2.yml +0 -0
data/README
CHANGED
File without changes
|
data/app_config.gemspec
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'app_config'
|
3
|
-
s.version = '1.
|
4
|
-
s.date = '2008-
|
3
|
+
s.version = '1.5'
|
4
|
+
s.date = '2008-11-18'
|
5
5
|
|
6
6
|
s.summary = "Application level configuration"
|
7
7
|
s.description = "Allow application wide configuration settings via YML files"
|
@@ -13,14 +13,14 @@ Gem::Specification.new do |s|
|
|
13
13
|
s.has_rdoc = true
|
14
14
|
s.rdoc_options = ["--main", "README"]
|
15
15
|
s.extra_rdoc_files = ["README"]
|
16
|
-
|
17
|
-
s.add_dependency 'rails', ['>= 2.1']
|
18
16
|
|
19
17
|
s.files = ["README",
|
20
18
|
"README.rdoc",
|
21
19
|
"app_config.gemspec",
|
22
20
|
"init.rb",
|
23
21
|
"lib/app_config.rb",
|
22
|
+
"lib/application_config/config_builder.rb",
|
23
|
+
"lib/application_config/view_helpers.rb",
|
24
24
|
"rails/init.rb"]
|
25
25
|
|
26
26
|
s.test_files = ["test/app_config.yml",
|
@@ -0,0 +1,132 @@
|
|
1
|
+
require 'ostruct'
|
2
|
+
require 'yaml'
|
3
|
+
require 'erb'
|
4
|
+
|
5
|
+
module ApplicationConfig
|
6
|
+
# == Summary
|
7
|
+
# This is API documentation, NOT documentation on how to use this plugin. For that, see the README.
|
8
|
+
class ConfigBuilder
|
9
|
+
@@load_paths = []
|
10
|
+
@@expand_keys = []
|
11
|
+
@@root_path = ""
|
12
|
+
|
13
|
+
# 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
|
14
|
+
# if the first file if they exist in the first file.
|
15
|
+
def self.load_files(options = {})
|
16
|
+
config = OpenStruct.new
|
17
|
+
|
18
|
+
@@load_paths = [options[:paths]].flatten.compact.uniq
|
19
|
+
@@expand_keys = [options[:expand_keys]].flatten.compact.uniq
|
20
|
+
@@root_path = options[:root_path]
|
21
|
+
|
22
|
+
# add singleton method to our AppConfig that reloads its settings from the load_paths options
|
23
|
+
def config.reload!
|
24
|
+
conf = {}
|
25
|
+
ConfigBuilder.load_paths.to_a.each do |path|
|
26
|
+
file_conf = YAML.load(ERB.new(IO.read(path)).result) if path and File.exists?(path)
|
27
|
+
conf.merge!(file_conf) if file_conf
|
28
|
+
end
|
29
|
+
|
30
|
+
# expand the javascripts config to handle *.* paths
|
31
|
+
ConfigBuilder.expand_keys.to_a.each do |expand_path|
|
32
|
+
expand_path = expand_path.to_s
|
33
|
+
if conf[expand_path]
|
34
|
+
conf[expand_path] = ApplicationConfig::ConfigBuilder.expand(conf[expand_path], "#{ConfigBuilder.root_path}/public/#{expand_path}")
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
# load all the new values into the openstruct
|
39
|
+
marshal_load(ApplicationConfig::ConfigBuilder.convert(conf).marshal_dump)
|
40
|
+
|
41
|
+
return self
|
42
|
+
end
|
43
|
+
|
44
|
+
config.reload!
|
45
|
+
return config
|
46
|
+
end
|
47
|
+
|
48
|
+
def self.load_paths
|
49
|
+
@@load_paths
|
50
|
+
end
|
51
|
+
|
52
|
+
def self.expand_keys
|
53
|
+
@@expand_keys
|
54
|
+
end
|
55
|
+
|
56
|
+
def self.root_path
|
57
|
+
@@root_path
|
58
|
+
end
|
59
|
+
|
60
|
+
# Recursively converts Hashes to OpenStructs (including Hashes inside Arrays)
|
61
|
+
def self.convert(h) #:nodoc:
|
62
|
+
s = OpenStruct.new
|
63
|
+
h.each do |k, v|
|
64
|
+
s.new_ostruct_member(k)
|
65
|
+
if v.is_a?(Hash)
|
66
|
+
s.send( (k+'=').to_sym, convert(v))
|
67
|
+
elsif v.is_a?(Array)
|
68
|
+
converted_array = v.collect { |e| e.instance_of?(Hash) ? convert(e) : e }
|
69
|
+
s.send("#{k}=".to_sym, converted_array)
|
70
|
+
else
|
71
|
+
s.send("#{k}=".to_sym, v)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
s
|
75
|
+
end
|
76
|
+
|
77
|
+
# expand a config val
|
78
|
+
def self.expand(config, base_path)
|
79
|
+
case config.class.to_s
|
80
|
+
when "Hash"
|
81
|
+
return expand_hash(config, base_path)
|
82
|
+
when "Array"
|
83
|
+
return expand_array(config, base_path)
|
84
|
+
when "String"
|
85
|
+
return expand_string(config, base_path)
|
86
|
+
end
|
87
|
+
return config
|
88
|
+
end
|
89
|
+
|
90
|
+
# expand a string and returns a list
|
91
|
+
def self.expand_string(config, base_path)
|
92
|
+
# puts "Expanding String: #{config.inspect}"
|
93
|
+
if config.include?("*")
|
94
|
+
results = Dir["#{base_path}/#{config}"].map{|i| i.to_s.gsub("#{base_path}/", "") }
|
95
|
+
|
96
|
+
# puts "EXPANDED PATH: #{base_path}/#{config}"
|
97
|
+
# puts results.inspect
|
98
|
+
return results
|
99
|
+
else
|
100
|
+
return config
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
# expand a hash by cycling throw all the hash values
|
105
|
+
def self.expand_hash(config, base_path)
|
106
|
+
# puts "Expanding Hash: #{config.inspect}"
|
107
|
+
new_config = {}
|
108
|
+
config.each do |key, val|
|
109
|
+
new_config[key] = expand(val, base_path)
|
110
|
+
end
|
111
|
+
return new_config
|
112
|
+
end
|
113
|
+
|
114
|
+
# expand an array by cycling through all the values
|
115
|
+
def self.expand_array(config, base_path)
|
116
|
+
# puts "Expanding Array: #{config.inspect}"
|
117
|
+
new_config = []
|
118
|
+
config.each do |val|
|
119
|
+
new_val = expand(val, base_path)
|
120
|
+
if new_val.is_a?(Array)
|
121
|
+
new_val.each do |inner|
|
122
|
+
new_config << inner
|
123
|
+
end
|
124
|
+
else
|
125
|
+
new_config << new_val
|
126
|
+
end
|
127
|
+
end
|
128
|
+
return new_config.uniq
|
129
|
+
end
|
130
|
+
|
131
|
+
end
|
132
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
module ApplicationConfig
|
2
|
+
module ViewHelpers
|
3
|
+
def javascripts_from_config(options = {})
|
4
|
+
html = ""
|
5
|
+
if defined?(AppConfig) and AppConfig.javascripts
|
6
|
+
AppConfig.javascripts.each do |javascript|
|
7
|
+
if javascript.is_a?(OpenStruct)
|
8
|
+
javascript = javascript.marshal_dump
|
9
|
+
end
|
10
|
+
|
11
|
+
if javascript.is_a? Hash
|
12
|
+
javascript.each do |key, val|
|
13
|
+
args = [val].flatten
|
14
|
+
if defined?(Merb)
|
15
|
+
args << options.merge(:bundle => key.to_sym)
|
16
|
+
html << js_include_tag(*args)
|
17
|
+
elsif defined?(Rails)
|
18
|
+
args << options.merge(:cache => key.to_s)
|
19
|
+
html << javascript_include_tag(*args)
|
20
|
+
end
|
21
|
+
html << "\n"
|
22
|
+
end
|
23
|
+
else
|
24
|
+
args = [javascript].flatten
|
25
|
+
args << options
|
26
|
+
if defined?(Merb)
|
27
|
+
html << js_include_tag(*args)
|
28
|
+
elsif defined?(Rails)
|
29
|
+
html << javascript_include_tag(*args)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
return html
|
35
|
+
end
|
36
|
+
|
37
|
+
def stylesheets_from_config(options = {})
|
38
|
+
html = ""
|
39
|
+
if defined?(AppConfig) and AppConfig.stylesheets
|
40
|
+
AppConfig.stylesheets.each do |stylesheet|
|
41
|
+
if stylesheet.is_a?(OpenStruct)
|
42
|
+
stylesheet = stylesheet.marshal_dump
|
43
|
+
end
|
44
|
+
|
45
|
+
if stylesheet.is_a? Hash
|
46
|
+
stylesheet.each do |key, val|
|
47
|
+
args = [val].flatten
|
48
|
+
if defined?(Merb)
|
49
|
+
args << options.merge(:bundle => key.to_sym)
|
50
|
+
html << css_include_tag(*args)
|
51
|
+
elsif defined?(Rails)
|
52
|
+
args << options.merge(:cache => key.to_s)
|
53
|
+
html << stylesheet_link_tag(*args)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
else
|
57
|
+
args = [stylesheet].flatten
|
58
|
+
args << options
|
59
|
+
html << stylesheet_link_tag(*args)
|
60
|
+
end
|
61
|
+
html << "\n"
|
62
|
+
end
|
63
|
+
end
|
64
|
+
return html
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
data/rails/init.rb
CHANGED
@@ -1,9 +1,18 @@
|
|
1
|
-
require '
|
1
|
+
require 'application_config/config_builder'
|
2
|
+
require 'application_config/view_helpers'
|
2
3
|
|
3
|
-
::AppConfig = ApplicationConfig.load_files(
|
4
|
-
|
4
|
+
::AppConfig = ApplicationConfig::ConfigBuilder.load_files(
|
5
|
+
:paths => [
|
6
|
+
"#{Rails.root}/config/app_config.yml",
|
7
|
+
"#{Rails.root}/config/app_config/settings.yml",
|
8
|
+
"#{Rails.root}/config/app_config/#{Rails.env}.yml",
|
9
|
+
"#{Rails.root}/config/environments/#{Rails.env}.yml",
|
10
|
+
"#{Rails.root}/config/assets.yml",
|
11
|
+
"#{Rails.root}/config/javascripts.yml",
|
12
|
+
"#{Rails.root}/config/stylesheets.yml"
|
13
|
+
],
|
14
|
+
:expand_keys => [:javascripts, :stylesheets],
|
15
|
+
:root_path => Rails.root
|
16
|
+
)
|
5
17
|
|
6
|
-
|
7
|
-
AppConfig.marshal_load(ApplicationConfig.reload.marshal_dump)
|
8
|
-
return AppConfig
|
9
|
-
end
|
18
|
+
ActionView::Base.send :include, ApplicationConfig::ViewHelpers
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jcnetdev-app_config
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: "1.
|
4
|
+
version: "1.5"
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- RailsJedi
|
@@ -10,18 +10,10 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2008-
|
13
|
+
date: 2008-11-18 00:00:00 -08:00
|
14
14
|
default_executable:
|
15
|
-
dependencies:
|
16
|
-
|
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:
|
15
|
+
dependencies: []
|
16
|
+
|
25
17
|
description: Allow application wide configuration settings via YML files
|
26
18
|
email: railsjedi@gmail.com
|
27
19
|
executables: []
|
@@ -36,6 +28,8 @@ files:
|
|
36
28
|
- app_config.gemspec
|
37
29
|
- init.rb
|
38
30
|
- lib/app_config.rb
|
31
|
+
- lib/application_config/config_builder.rb
|
32
|
+
- lib/application_config/view_helpers.rb
|
39
33
|
- rails/init.rb
|
40
34
|
has_rdoc: true
|
41
35
|
homepage: http://github.com/jcnetdev/app_config
|
data/lib/app_config.rb
DELETED
@@ -1,47 +0,0 @@
|
|
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
|
-
class ApplicationConfig
|
8
|
-
|
9
|
-
cattr_accessor :conf_paths
|
10
|
-
|
11
|
-
# 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
|
12
|
-
# if the first file if they exist in the first file.
|
13
|
-
def self.load_files(*conf_load_paths)
|
14
|
-
self.conf_paths = []
|
15
|
-
self.conf_paths += conf_load_paths
|
16
|
-
self.conf_paths.uniq!
|
17
|
-
|
18
|
-
reload
|
19
|
-
end
|
20
|
-
|
21
|
-
def self.reload
|
22
|
-
conf = {}
|
23
|
-
conf_paths.each do |path|
|
24
|
-
new_conf = YAML.load(ERB.new(IO.read(path)).result) if path and File.exists?(path)
|
25
|
-
conf.merge!(new_conf) if new_conf
|
26
|
-
end
|
27
|
-
return convert(conf)
|
28
|
-
end
|
29
|
-
|
30
|
-
# Recursively converts Hashes to OpenStructs (including Hashes inside Arrays)
|
31
|
-
def self.convert(h) #:nodoc:
|
32
|
-
s = OpenStruct.new
|
33
|
-
h.each do |k, v|
|
34
|
-
s.new_ostruct_member(k)
|
35
|
-
if v.instance_of?(Hash)
|
36
|
-
s.send( (k+'=').to_sym, convert(v))
|
37
|
-
elsif v.instance_of?(Array)
|
38
|
-
converted_array = v.collect { |e| e.instance_of?(Hash) ? convert(e) : e }
|
39
|
-
s.send( (k+'=').to_sym, converted_array)
|
40
|
-
else
|
41
|
-
s.send( (k+'=').to_sym, v)
|
42
|
-
end
|
43
|
-
end
|
44
|
-
s
|
45
|
-
end
|
46
|
-
|
47
|
-
end
|
data/test/app_config.yml
DELETED
data/test/app_config_test.rb
DELETED
@@ -1,46 +0,0 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
require 'test/unit'
|
3
|
-
require 'active_support'
|
4
|
-
require 'lib/app_config'
|
5
|
-
|
6
|
-
class AppConfigTest < Test::Unit::TestCase
|
7
|
-
|
8
|
-
def test_missing_files
|
9
|
-
config = ApplicationConfig.load_files('not_here1', 'not_here2')
|
10
|
-
assert_equal OpenStruct.new, config
|
11
|
-
end
|
12
|
-
|
13
|
-
def test_empty_files
|
14
|
-
config = ApplicationConfig.load_files('test/empty1.yml', 'test/empty2.yml')
|
15
|
-
assert_equal OpenStruct.new, config
|
16
|
-
end
|
17
|
-
|
18
|
-
def test_common
|
19
|
-
config = ApplicationConfig.load_files('test/app_config.yml')
|
20
|
-
assert_equal 1, config.size
|
21
|
-
assert_equal 'google.com', config.server
|
22
|
-
end
|
23
|
-
|
24
|
-
def test_environment_override
|
25
|
-
config = ApplicationConfig.load_files('test/app_config.yml', 'test/development.yml')
|
26
|
-
assert_equal 2, config.size
|
27
|
-
assert_equal 'google.com', config.server
|
28
|
-
end
|
29
|
-
|
30
|
-
def test_nested
|
31
|
-
config = ApplicationConfig.load_files('test/development.yml')
|
32
|
-
assert_equal 3, config.section.size
|
33
|
-
end
|
34
|
-
|
35
|
-
def test_array
|
36
|
-
config = ApplicationConfig.load_files('test/development.yml')
|
37
|
-
assert_equal 'yahoo.com', config.section.servers[0].name
|
38
|
-
assert_equal 'amazon.com', config.section.servers[1].name
|
39
|
-
end
|
40
|
-
|
41
|
-
def test_erb
|
42
|
-
config = ApplicationConfig.load_files('test/development.yml')
|
43
|
-
assert_equal 6, config.computed
|
44
|
-
end
|
45
|
-
|
46
|
-
end
|
data/test/development.yml
DELETED
data/test/empty1.yml
DELETED
File without changes
|
data/test/empty2.yml
DELETED
File without changes
|