GitHub Sale: sign up for any paid plan this week and pay nothing until January 1, 2009!  [ hide ]

public
Rubygem
Description: Merb Core: All you need. None you don't.
Homepage: http://www.merbivore.com
Clone URL: git://github.com/wycats/merb-core.git
Merb Personalized Environments; Completed Merb#merge_env method, now 
accepts boolean parameter to optionally use the merged environments 
database connection

Signed-off-by: Ezra Zygmuntowicz <ez@engineyard.com>
Cory ODaniel (author)
Fri May 16 11:15:44 -0700 2008
ezmobius (committer)
Wed May 21 16:02:06 -0700 2008
commit  291c4ac979dc034b16bb4e12d066fe2c974079e6
tree    46698f3153c307f371963918f9f69fc628870aee
parent  13a23a81c58c9a005834d3ef466def6474235ca5
...
13
14
15
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
16
17
18
...
59
60
61
62
 
63
64
65
...
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
...
99
100
101
 
102
103
104
105
0
@@ -13,6 +13,46 @@ module Merb
0
   module GlobalHelpers; end
0
   class << self
0
 
0
+ # Merge environment settings
0
+ # Can allow you to have a "localdev" that runs like your "development"
0
+ # OR
0
+ # A "staging" environment that runs like your "production"
0
+ #
0
+ # ==== Parameters
0
+ # env<~String>:: Environment to run like
0
+ # use_db<~Boolean>:: Should Merb use the merged environments DB connection
0
+ # Defaults to +false+
0
+ def merge_env(env,use_db=false)
0
+ if Merb.environment_info.nil?
0
+ Merb.environment_info = {
0
+ :real_env => Merb.environment,
0
+ :merged_envs => [],
0
+ :db_env => Merb.environment
0
+ }
0
+ end
0
+
0
+ #Only load if it hasn't been loaded
0
+ unless Merb.environment_info[:merged_envs].member? env
0
+ Merb.environment_info[:merged_envs] << env
0
+
0
+ env_file = Merb.dir_for(:config) / "environments" / ("#{env}.rb")
0
+ if File.exists?(env_file)
0
+ load(env_file)
0
+ else
0
+ Merb.logger.warn! "Environment file does not exist! #{env_file}"
0
+ end
0
+
0
+ end
0
+
0
+ # Mark specific environment to load when ORM loads,
0
+ # if multiple environments are loaded, the last one
0
+ # with use_db as TRUE will be loaded
0
+ if use_db
0
+ Merb.environment_info[:db_env] = env
0
+ end
0
+ end
0
+
0
+
0
     # Startup Merb by setting up the Config and starting the server.
0
     # This is where Merb application environment and root path are set.
0
     #
0
@@ -59,7 +99,7 @@ module Merb
0
       start_environment(Merb::Config.to_hash.merge(argv))
0
     end
0
 
0
- attr_accessor :environment, :load_paths, :adapter
0
+ attr_accessor :environment, :load_paths, :adapter, :environment_info
0
 
0
     alias :env :environment
0
 
...
30
31
32
 
 
 
 
 
 
 
 
 
 
 
33
34
35
...
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
0
@@ -30,5 +30,16 @@ describe "Merb.env helpers" do
0
     end
0
   end
0
   
0
+ it "should allow an environment to merge another environments settings" do
0
+ %w(development test production staging demo custom).each do |e|
0
+
0
+ Merb.environment = e
0
+ Merb.start_environment
0
+ Merb.merge_env "some_other_env"
0
+ Merb.environment_info.nil?.should be_false
0
+ Merb.environment_info[:merged_envs].first.should == "some_other_env"
0
+ end
0
+ end
0
+
0
   
0
 end
0
\ No newline at end of file

Comments

    No one has commented yet.