merb-plugins-app-config 0.3 → 0.4

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/Rakefile CHANGED
@@ -5,7 +5,7 @@ require 'merb-core'
5
5
  require 'merb-core/tasks/merb'
6
6
 
7
7
  GEM_NAME = "merb-plugins-app-config"
8
- GEM_VERSION = "0.3"
8
+ GEM_VERSION = "0.4"
9
9
  AUTHOR = "Jacques Crocker"
10
10
  EMAIL = "merbjedi@gmail.com"
11
11
  HOMEPAGE = "http://www.merbjedi.com/"
@@ -10,19 +10,26 @@ module ApplicationConfig
10
10
  # 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
11
11
  # if the first file if they exist in the first file.
12
12
  def self.load_files(*conf_load_paths)
13
- @@conf_paths = []
14
- @@conf_paths << conf_load_paths
15
- @@conf_paths.flatten!.uniq!
16
- return reload
17
- end
18
-
19
- def self.reload
20
- conf = {}
21
- @@conf_paths.to_a.each do |path|
22
- new_conf = YAML.load(ERB.new(IO.read(path)).result) if path and File.exists?(path)
23
- conf.merge!(new_conf) if new_conf
13
+ config = OpenStruct.new
14
+ config.load_paths = []
15
+ config.load_paths << conf_load_paths
16
+ config.load_paths.flatten!.uniq!
17
+
18
+ # add singleton method to our AppConfig that reloads its settings from the load_paths options
19
+ def config.reload!
20
+ conf = {:load_paths => self.load_paths}
21
+ self.load_paths.to_a.each do |path|
22
+ file_conf = YAML.load(ERB.new(IO.read(path)).result) if path and File.exists?(path)
23
+ conf.merge!(file_conf) if file_conf
24
+ end
25
+
26
+ # load all the new values into the openstruct
27
+ marshal_load(ApplicationConfig::ConfigBuilder.convert(conf).marshal_dump)
28
+ return self
24
29
  end
25
- return convert(conf)
30
+
31
+ config.reload!
32
+ return config
26
33
  end
27
34
 
28
35
  # Recursively converts Hashes to OpenStructs (including Hashes inside Arrays)
@@ -2,15 +2,22 @@ module ApplicationConfig
2
2
  module ViewHelpers
3
3
  def javascripts
4
4
  js_hash = AppConfigJavascripts.marshal_dump
5
- js_hash.each do |key, val|
5
+ if AppConfig.javascripts
6
+ js_hash.merge!(AppConfig.javascripts.marshal_dump)
7
+ end
8
+ js_hash.reject{|key, val| key.to_s == "load_paths"}.each do |key, val|
6
9
  require_js val, :bundle => key.to_sym
7
10
  end
8
11
  include_required_js
9
12
  end
10
13
 
11
14
  def stylesheets
12
- style_hash = AppConfigStylesheets.marshal_dump
13
- style_hash.each do |key, val|
15
+ css_hash = AppConfigStylesheets.marshal_dump
16
+ if AppConfig.stylesheets
17
+ css_hash.merge!(AppConfig.stylesheets.marshal_dump)
18
+ end
19
+
20
+ css_hash.reject{|key, val| key.to_s == "load_paths"}.each do |key, val|
14
21
  require_css val, :bundle => key.to_sym
15
22
  end
16
23
 
@@ -10,27 +10,44 @@ if defined?(Merb::Plugins)
10
10
  }
11
11
 
12
12
  Merb::BootLoader.before_app_loads do
13
- ::AppConfig = ApplicationConfig::ConfigBuilder.load_files(Merb.root+"/config/app_config/settings.yml",
14
- Merb.root+"/config/app_config/#{Merb.env}.yml")
15
-
16
- if Merb::Plugins.config[:app_config][:include_viewhelpers]
17
- ::AppConfigStylesheets = ApplicationConfig::ConfigBuilder.load_files(Merb.root+"/config/app_config/stylesheets.yml")
18
- ::AppConfigJavascripts = ApplicationConfig::ConfigBuilder.load_files(Merb.root+"/config/app_config/javascripts.yml")
13
+ if defined?(::AppConfig)
14
+ AppConfig.reload!
15
+ else
16
+ ::AppConfig = ApplicationConfig::ConfigBuilder.load_files("#{Merb.root}/config/app_config/settings.yml",
17
+ "#{Merb.root}/config/app_config/#{Merb.env}.yml")
19
18
  end
20
19
 
21
- # add reload method to our ostruct
22
- def AppConfig.reload!
23
- AppConfig.marshal_load(ApplicationConfig::ConfigBuilder.reload.marshal_dump)
24
- return AppConfig
25
- end
26
-
27
20
  if Merb::Plugins.config[:app_config][:include_viewhelpers]
21
+ if defined?(::AppConfigStylesheets)
22
+ AppConfigStylesheets.reload!
23
+ else
24
+ ::AppConfigStylesheets = ApplicationConfig::ConfigBuilder.load_files("#{Merb.root}/config/stylesheets.yml",
25
+ "#{Merb.root}/config/app_config/stylesheets.yml")
26
+ end
27
+
28
+ if defined?(::AppConfigJavascripts)
29
+ AppConfigJavascripts.reload!
30
+ else
31
+ ::AppConfigJavascripts = ApplicationConfig::ConfigBuilder.load_files("#{Merb.root}/config/javascripts.yml",
32
+ "#{Merb.root}/config/app_config/javascripts.yml")
33
+ end
34
+
28
35
  Merb::Controller.send(:include, ApplicationConfig::ViewHelpers)
29
36
  end
30
37
  end
31
38
 
32
- # Merb::BootLoader.after_app_loads do
33
- # end
39
+ Merb::BootLoader.after_app_loads do
40
+ if Merb::Plugins.config[:app_config][:auto_reload]
41
+ Merb.logger.info "Auto reloading AppConfig on *every request*. Set via Merb::Plugins.config[:app_config][:auto_reload]"
42
+ Merb::Controller.before do
43
+ AppConfig.reload!
44
+ if Merb::Plugins.config[:app_config][:include_viewhelpers]
45
+ AppConfigStylesheets.reload!
46
+ AppConfigJavascripts.reload!
47
+ end
48
+ end
49
+ end
50
+ end
34
51
 
35
52
  Merb::Plugins.add_rakefiles "merbtasks"
36
53
  end
@@ -30,17 +30,34 @@ describe "AppConfig Plugin" do
30
30
  end
31
31
 
32
32
  it "should not crash on missing files" do
33
- config = ApplicationConfig::ConfigBuilder.load_files("#{@settings_path}/nothing_here.yml", "#{@settings_path}/nothing_here2.yml")
34
- config.should == OpenStruct.new
33
+ files = ["#{@settings_path}/nothing_here.yml", "#{@settings_path}/nothing_here2.yml"]
34
+ config = ApplicationConfig::ConfigBuilder.load_files(*files)
35
+ config.should == OpenStruct.new(:load_paths => files)
35
36
  end
36
37
 
37
38
  it "should allow erb in settings" do
38
- config = ApplicationConfig::ConfigBuilder.load_files("#{@settings_path}/development.yml")
39
+ files = ["#{@settings_path}/development.yml"]
40
+ config = ApplicationConfig::ConfigBuilder.load_files(*files)
39
41
  config.computed.should == 6
40
42
  end
41
43
 
42
44
  it "should not crash on empty files" do
43
- config = ApplicationConfig::ConfigBuilder.load_files("#{@settings_path}/empty1.yml", "#{@settings_path}/empty2.yml")
44
- config.should == OpenStruct.new
45
+ files = ["#{@settings_path}/empty1.yml", "#{@settings_path}/empty2.yml"]
46
+ config = ApplicationConfig::ConfigBuilder.load_files(*files)
47
+ config.should == OpenStruct.new(:load_paths => files)
48
+ end
49
+
50
+
51
+ it "should allow reloads" do
52
+ config = ApplicationConfig::ConfigBuilder.load_files("#{@settings_path}/development.yml")
53
+ check = lambda { |config|
54
+ config.section.size.should == 3
55
+ config.section.servers.is_a?(Array).should be_true
56
+ config.section.servers.first.name.should == "yahoo.com"
57
+ config.section.servers.last.name.should == "amazon.com"
58
+ }
59
+ check.call(config)
60
+ config.reload!
61
+ check.call(config)
45
62
  end
46
63
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: merb-plugins-app-config
3
3
  version: !ruby/object:Gem::Version
4
- version: "0.3"
4
+ version: "0.4"
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jacques Crocker
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-11-15 00:00:00 -08:00
12
+ date: 2008-11-16 00:00:00 -08:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency