merb-core 0.9.2 → 0.9.3

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.
Files changed (104) hide show
  1. data/Rakefile +61 -11
  2. data/bin/merb +5 -1
  3. data/lib/merb-core.rb +202 -25
  4. data/lib/merb-core/autoload.rb +19 -17
  5. data/lib/merb-core/bootloader.rb +84 -71
  6. data/lib/merb-core/config.rb +19 -14
  7. data/lib/merb-core/controller/abstract_controller.rb +16 -17
  8. data/lib/merb-core/controller/exceptions.rb +115 -70
  9. data/lib/merb-core/controller/merb_controller.rb +62 -38
  10. data/lib/merb-core/controller/mime.rb +1 -1
  11. data/lib/merb-core/controller/mixins/authentication.rb +87 -0
  12. data/lib/merb-core/controller/mixins/controller.rb +16 -15
  13. data/lib/merb-core/controller/mixins/render.rb +113 -19
  14. data/lib/merb-core/controller/mixins/responder.rb +8 -2
  15. data/lib/merb-core/controller/template.rb +1 -1
  16. data/lib/merb-core/core_ext.rb +1 -0
  17. data/lib/merb-core/core_ext/class.rb +113 -6
  18. data/lib/merb-core/core_ext/hash.rb +43 -39
  19. data/lib/merb-core/core_ext/kernel.rb +75 -38
  20. data/lib/merb-core/core_ext/mash.rb +4 -4
  21. data/lib/merb-core/core_ext/object.rb +18 -7
  22. data/lib/merb-core/core_ext/set.rb +9 -4
  23. data/lib/merb-core/core_ext/string.rb +29 -9
  24. data/lib/merb-core/core_ext/time.rb +13 -0
  25. data/lib/merb-core/dispatch/cookies.rb +1 -2
  26. data/lib/merb-core/dispatch/dispatcher.rb +18 -10
  27. data/lib/merb-core/dispatch/exceptions.html.erb +1 -1
  28. data/lib/merb-core/dispatch/request.rb +3 -0
  29. data/lib/merb-core/dispatch/router.rb +10 -7
  30. data/lib/merb-core/dispatch/router/behavior.rb +36 -27
  31. data/lib/merb-core/dispatch/router/route.rb +7 -2
  32. data/lib/merb-core/dispatch/session/cookie.rb +4 -4
  33. data/lib/merb-core/dispatch/session/memcached.rb +17 -5
  34. data/lib/merb-core/logger.rb +2 -2
  35. data/lib/merb-core/plugins.rb +16 -4
  36. data/lib/merb-core/rack/adapter/ebb.rb +4 -1
  37. data/lib/merb-core/rack/adapter/evented_mongrel.rb +2 -0
  38. data/lib/merb-core/rack/adapter/fcgi.rb +1 -0
  39. data/lib/merb-core/rack/adapter/mongrel.rb +1 -0
  40. data/lib/merb-core/rack/adapter/runner.rb +1 -0
  41. data/lib/merb-core/rack/adapter/thin.rb +3 -1
  42. data/lib/merb-core/rack/adapter/webrick.rb +1 -0
  43. data/lib/merb-core/rack/application.rb +17 -1
  44. data/lib/merb-core/server.rb +78 -28
  45. data/lib/merb-core/test/helpers/multipart_request_helper.rb +3 -3
  46. data/lib/merb-core/test/helpers/request_helper.rb +81 -27
  47. data/lib/merb-core/test/helpers/view_helper.rb +1 -1
  48. data/lib/merb-core/test/matchers/controller_matchers.rb +55 -5
  49. data/lib/merb-core/test/matchers/route_matchers.rb +8 -17
  50. data/lib/merb-core/test/matchers/view_matchers.rb +53 -11
  51. data/lib/merb-core/test/run_specs.rb +22 -14
  52. data/lib/merb-core/test/tasks/spectasks.rb +54 -33
  53. data/lib/merb-core/vendor/facets/inflect.rb +91 -2
  54. data/lib/merb-core/version.rb +2 -2
  55. data/spec/private/config/config_spec.rb +54 -26
  56. data/spec/private/core_ext/class_spec.rb +22 -0
  57. data/spec/private/core_ext/hash_spec.rb +70 -54
  58. data/spec/private/core_ext/kernel_spec.rb +149 -14
  59. data/spec/private/core_ext/object_spec.rb +92 -10
  60. data/spec/private/core_ext/string_spec.rb +162 -4
  61. data/spec/private/core_ext/time_spec.rb +16 -0
  62. data/spec/private/dispatch/bootloader_spec.rb +24 -0
  63. data/spec/private/dispatch/fixture/app/views/exeptions/client_error.html.erb +1 -1
  64. data/spec/private/dispatch/fixture/app/views/exeptions/internal_server_error.html.erb +1 -1
  65. data/spec/private/dispatch/fixture/app/views/exeptions/not_acceptable.html.erb +1 -1
  66. data/spec/private/dispatch/fixture/app/views/exeptions/not_found.html.erb +1 -1
  67. data/spec/private/dispatch/fixture/config/black_hole.rb +12 -0
  68. data/spec/private/dispatch/fixture/log/merb_test.log +138 -0
  69. data/spec/private/plugins/plugin_spec.rb +79 -8
  70. data/spec/private/rack/application_spec.rb +1 -1
  71. data/spec/public/abstract_controller/controllers/filters.rb +26 -0
  72. data/spec/public/abstract_controller/controllers/helpers.rb +2 -2
  73. data/spec/public/abstract_controller/controllers/partial.rb +2 -2
  74. data/spec/public/abstract_controller/controllers/render.rb +16 -4
  75. data/spec/public/abstract_controller/filter_spec.rb +8 -0
  76. data/spec/public/abstract_controller/render_spec.rb +12 -0
  77. data/spec/public/controller/authentication_spec.rb +103 -0
  78. data/spec/public/controller/base_spec.rb +4 -3
  79. data/spec/public/controller/controllers/authentication.rb +47 -0
  80. data/spec/public/controller/controllers/base.rb +1 -0
  81. data/spec/public/controller/controllers/display.rb +30 -0
  82. data/spec/public/controller/controllers/views/layout/custom_arg.html.erb +1 -0
  83. data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/display_with_template_argument/index.html.erb +1 -0
  84. data/spec/public/controller/display_spec.rb +17 -0
  85. data/spec/public/controller/spec_helper.rb +1 -0
  86. data/spec/public/controller/url_spec.rb +25 -7
  87. data/spec/public/core/merb_core_spec.rb +34 -0
  88. data/spec/public/directory_structure/directory/app/controllers/custom.rb +2 -2
  89. data/spec/public/directory_structure/directory/log/merb_test.log +48 -0
  90. data/spec/public/logger/logger_spec.rb +10 -4
  91. data/spec/public/reloading/directory/app/controllers/reload.rb +1 -1
  92. data/spec/public/reloading/directory/log/merb_test.log +13 -0
  93. data/spec/public/reloading/reload_spec.rb +23 -22
  94. data/spec/public/request/request_spec.rb +2 -0
  95. data/spec/public/router/nested_resources_spec.rb +7 -0
  96. data/spec/public/router/resources_spec.rb +46 -1
  97. data/spec/public/router/special_spec.rb +5 -1
  98. data/spec/public/test/controller_matchers_spec.rb +25 -1
  99. data/spec/public/test/controllers/spec_helper_controller.rb +8 -0
  100. data/spec/public/test/request_helper_spec.rb +52 -1
  101. data/spec/public/test/route_matchers_spec.rb +27 -25
  102. data/spec/public/test/view_helper_spec.rb +1 -1
  103. data/spec/public/test/view_matchers_spec.rb +148 -72
  104. metadata +23 -3
data/Rakefile CHANGED
@@ -40,7 +40,7 @@ spec = Gem::Specification.new do |s|
40
40
  s.platform = Gem::Platform::RUBY
41
41
  s.author = "Ezra Zygmuntowicz"
42
42
  s.email = "ez@engineyard.com"
43
- s.homepage = "http://merb.devjavu.com"
43
+ s.homepage = "http://merbivore.com"
44
44
  s.summary = "Merb. Pocket rocket web framework."
45
45
  s.bindir = "bin"
46
46
  s.description = s.summary
@@ -85,6 +85,40 @@ task :uninstall => :clean do
85
85
  sh %{#{SUDO} gem uninstall #{NAME}}
86
86
  end
87
87
 
88
+ namespace :github do
89
+ desc "Update Github Gemspec"
90
+ task :update_gemspec do
91
+ skip_fields = %w(new_platform original_platform)
92
+ integer_fields = %w(specification_version)
93
+
94
+ result = "Gem::Specification.new do |s|\n"
95
+ spec.instance_variables.each do |ivar|
96
+ value = spec.instance_variable_get(ivar)
97
+ name = ivar.split("@").last
98
+ next if skip_fields.include?(name) || value.nil? || value == "" || (value.respond_to?(:empty?) && value.empty?)
99
+ if name == "dependencies"
100
+ value.each do |d|
101
+ dep, *ver = d.to_s.split(" ")
102
+ result << " s.add_dependency #{dep.inspect}, #{ver.join(" ").inspect.gsub(/[()]/, "")}\n"
103
+ end
104
+ else
105
+ case value
106
+ when Array
107
+ value = name != "files" ? value.inspect : value.inspect.split(",").join(",\n")
108
+ when String
109
+ value = value.to_i if integer_fields.include?(name)
110
+ value = value.inspect
111
+ else
112
+ value = value.to_s.inspect
113
+ end
114
+ result << " s.#{name} = #{value}\n"
115
+ end
116
+ end
117
+ result << "end"
118
+ File.open(File.join(File.dirname(__FILE__), "#{spec.name}.gemspec"), "w"){|f| f << result}
119
+ end
120
+ end
121
+
88
122
  ##############################################################################
89
123
  # Documentation
90
124
  ##############################################################################
@@ -127,20 +161,36 @@ task :aok => [:specs, :rcov]
127
161
  # t.spec_files = Dir["spec/**/*_spec.rb"].sort
128
162
  # end
129
163
 
130
- def setup_specs(name, spec_cmd='spec')
164
+ def setup_specs(name, spec_cmd='spec', run_opts = "-c -f s")
131
165
  desc "Run all specs (#{name})"
132
166
  task "specs:#{name}" do
133
- run_specs("spec/**/*_spec.rb", spec_cmd)
167
+ run_specs("spec/**/*_spec.rb", spec_cmd, ENV['RSPEC_OPTS'] || run_opts)
134
168
  end
135
169
 
136
170
  desc "Run private specs (#{name})"
137
171
  task "specs:#{name}:private" do
138
- run_specs("spec/private/**/*_spec.rb", spec_cmd)
172
+ run_specs("spec/private/**/*_spec.rb", spec_cmd, ENV['RSPEC_OPTS'] || run_opts)
139
173
  end
140
174
 
141
175
  desc "Run public specs (#{name})"
142
176
  task "specs:#{name}:public" do
143
- run_specs("spec/public/**/*_spec.rb", spec_cmd)
177
+ run_specs("spec/public/**/*_spec.rb", spec_cmd, ENV['RSPEC_OPTS'] || run_opts)
178
+ end
179
+
180
+ # With profiling formatter
181
+ desc "Run all specs (#{name}) with profiling formatter"
182
+ task "specs:#{name}_profiled" do
183
+ run_specs("spec/**/*_spec.rb", spec_cmd, "-c -f o")
184
+ end
185
+
186
+ desc "Run private specs (#{name}) with profiling formatter"
187
+ task "specs:#{name}_profiled:private" do
188
+ run_specs("spec/private/**/*_spec.rb", spec_cmd, "-c -f o")
189
+ end
190
+
191
+ desc "Run public specs (#{name}) with profiling formatter"
192
+ task "specs:#{name}_profiled:public" do
193
+ run_specs("spec/public/**/*_spec.rb", spec_cmd, "-c -f o")
144
194
  end
145
195
  end
146
196
 
@@ -244,7 +294,7 @@ namespace :repo do
244
294
  system "svn update"
245
295
  end
246
296
  end
247
-
297
+
248
298
  desc "commit modified changes to the repository"
249
299
  task :commit do
250
300
  if File.directory?(".git")
@@ -253,24 +303,24 @@ namespace :repo do
253
303
  system "svn commit"
254
304
  end
255
305
  end
256
-
306
+
257
307
  end
258
308
 
259
309
  # Run specific tests or test files. Searches nested spec directories as well.
260
- #
310
+ #
261
311
  # Based on a technique popularized by Geoffrey Grosenbach
262
312
  rule "" do |t|
263
313
  spec_cmd = (RUBY_PLATFORM =~ /java/) ? "jruby -S spec" : "spec"
264
314
  # spec:spec_file:spec_name
265
315
  if /spec:(.*)$/.match(t.name)
266
316
  arguments = t.name.split(':')
267
-
317
+
268
318
  file_name = arguments[1]
269
319
  spec_name = arguments[2..-1]
270
320
 
271
321
  spec_filename = "#{file_name}_spec.rb"
272
322
  specs = Dir["spec/**/#{spec_filename}"]
273
-
323
+
274
324
  if path = specs.detect { |f| spec_filename == File.basename(f) }
275
325
  run_file_name = path
276
326
  else
@@ -279,7 +329,7 @@ rule "" do |t|
279
329
  end
280
330
 
281
331
  example = " -e '#{spec_name}'" unless spec_name.empty?
282
-
332
+
283
333
  sh "#{spec_cmd} #{run_file_name} --format specdoc --colour #{example}"
284
334
  end
285
335
  end
data/bin/merb CHANGED
@@ -1,8 +1,12 @@
1
1
  #!/usr/bin/env ruby
2
2
  require "merb-core"
3
3
 
4
+ if ARGV[0] && ARGV[0] =~ /^[^-]/
5
+ ARGV.push "-H"
6
+ end
7
+
4
8
  unless %w[-a --adapter -i --irb-console -r --script-runner].any? { |o| ARGV.index(o) }
5
9
  ARGV.push *%w[-a mongrel]
6
10
  end
7
-
11
+
8
12
  Merb.start
@@ -14,6 +14,7 @@ module Merb
14
14
  class << self
15
15
 
16
16
  # Startup Merb by setting up the Config and starting the server.
17
+ # This is where Merb application environment and root path are set.
17
18
  #
18
19
  # ==== Parameters
19
20
  # argv<String, Hash>::
@@ -26,9 +27,16 @@ module Merb
26
27
  end
27
28
  Merb.environment = Merb::Config[:environment]
28
29
  Merb.root = Merb::Config[:merb_root]
29
- Merb::Server.start(Merb::Config[:port], Merb::Config[:cluster])
30
+ case Merb::Config[:action]
31
+ when :kill
32
+ Merb::Server.kill(Merb::Config[:port], 1)
33
+ when :kill_9
34
+ Merb::Server.kill(Merb::Config[:port], 9)
35
+ else
36
+ Merb::Server.start(Merb::Config[:port], Merb::Config[:cluster])
37
+ end
30
38
  end
31
-
39
+
32
40
  # Start the Merb environment, but only if it hasn't been loaded yet.
33
41
  #
34
42
  # ==== Parameters
@@ -40,7 +48,7 @@ module Merb
40
48
  @started = true
41
49
  end
42
50
  end
43
-
51
+
44
52
  # Restart the Merb environment explicitly.
45
53
  #
46
54
  # ==== Parameters
@@ -52,14 +60,53 @@ module Merb
52
60
  end
53
61
 
54
62
  attr_accessor :environment, :load_paths, :adapter
55
-
63
+
56
64
  alias :env :environment
57
-
65
+
58
66
  Merb.load_paths = Hash.new { [Merb.root] } unless Merb.load_paths.is_a?(Hash)
59
67
 
60
- # This is the core mechanism for setting up your application layout
61
- # merb-core won't set a default application layout, but merb-more will
62
- # use the app/:type layout that is in use in Merb 0.5.
68
+ # This is the core mechanism for setting up your application layout.
69
+ # There are three application layouts in Merb:
70
+ #
71
+ # Regular app/:type layout of Ruby on Rails fame:
72
+ #
73
+ # app/models for models
74
+ # app/mailers for mailers (special type of controllers)
75
+ # app/parts for parts, Merb components
76
+ # app/views for templates
77
+ # app/controllers for controller
78
+ # lib for libraries
79
+ #
80
+ # Flat application layout:
81
+ #
82
+ # application.rb for models, controllers, mailers, etc
83
+ # config/init.rb for initialization and router configuration
84
+ # config/framework.rb for framework and dependencies configuration
85
+ # views for views
86
+ #
87
+ # and Camping-style "very flat" application layout, where the whole Merb
88
+ # application and configs fit into a single file.
89
+ #
90
+ # ==== Notes
91
+ # Autoloading for lib uses empty glob by default. If you
92
+ # want to have your libraries under lib use autoload, add
93
+ # the following to Merb init file:
94
+ #
95
+ # Merb.push_path(:lib, Merb.root / "lib", "**/*.rb") # glob set explicity.
96
+ #
97
+ # Then lib/magicwand/lib/magicwand.rb with MagicWand module will
98
+ # be autoloaded when you first access that constant.
99
+ #
100
+ # ==== Examples
101
+ # This method gives you a way to build up your own application
102
+ # structure, for instance, to reflect the structure Rails
103
+ # uses to simplify transition of legacy application, you can
104
+ # set it up like this:
105
+ #
106
+ # Merb.push_path(:models, Merb.root / "app" / "models", "**/*.rb")
107
+ # Merb.push_path(:mailers, Merb.root / "app" / "models", "**/*.rb")
108
+ # Merb.push_path(:controllers, Merb.root / "app" / "controllers", "**/*.rb")
109
+ # Merb.push_path(:views, Merb.root / "app" / "views", "**/*.rb")
63
110
  #
64
111
  # ==== Parameters
65
112
  # type<Symbol>:: The type of path being registered (i.e. :view)
@@ -72,6 +119,23 @@ module Merb
72
119
  load_paths[type] = [path, file_glob]
73
120
  end
74
121
 
122
+ # Removes given types of application components
123
+ # from load path Merb uses for autoloading.
124
+ #
125
+ # ==== Parameters
126
+ # *args<Array(Symbol)>::
127
+ # components names, for instance, :views, :models
128
+ #
129
+ # ==== Examples
130
+ # Using this combined with Merb::GlobalHelpers.push_path
131
+ # you can make your Merb application use legacy Rails
132
+ # application components.
133
+ #
134
+ # Merb.root = "path/to/legacy/app/root"
135
+ # Merb.remove_paths(:mailers)
136
+ # Merb.push_path(:mailers, Merb.root / "app" / "models", "**/*.rb")
137
+ #
138
+ # Will make Merb use app/models for mailers just like Ruby on Rails does.
75
139
  def remove_paths(*args)
76
140
  args.each {|arg| load_paths.delete(arg)}
77
141
  end
@@ -134,7 +198,7 @@ module Merb
134
198
  end
135
199
 
136
200
  # ==== Returns
137
- # String:: The directory that contains the log file.
201
+ # String:: Path to directory that contains the log file.
138
202
  def log_path
139
203
  case Merb::Config[:log_file]
140
204
  when String then File.dirname(Merb::Config[:log_file])
@@ -143,9 +207,27 @@ module Merb
143
207
  end
144
208
 
145
209
  # ==== Returns
146
- # String:: The root directory of the Merb framework.
210
+ # String:: The path of root directory of the Merb framework.
147
211
  def framework_root() @framework_root ||= File.dirname(__FILE__) end
148
212
 
213
+ # ==== Returns
214
+ # RegExp::
215
+ # Regular expression against which deferred actions
216
+ # are matched by Rack application handler.
217
+ #
218
+ # ==== Notes
219
+ # Concatenates :deferred_actions configuration option
220
+ # values.
221
+ def deferred_actions
222
+ @deferred ||= begin
223
+ if Merb::Config[:deferred_actions].empty?
224
+ /^\0$/
225
+ else
226
+ /#{Merb::Config[:deferred_actions].join("|")}/
227
+ end
228
+ end
229
+ end
230
+
149
231
  # Allows flat apps by setting no default framework directories and yielding
150
232
  # a Merb::Router instance. This is optional since the router will
151
233
  # automatically configure the app with default routes.
@@ -173,6 +255,10 @@ module Merb
173
255
  # name<~to_s>:: Name of the session type to register.
174
256
  # file<String>:: The file that defines this session type.
175
257
  # description<String>:: An optional description of the session type.
258
+ #
259
+ # ==== Notes
260
+ # Merb currently supports memory, cookie and memcache session
261
+ # types.
176
262
  def register_session_type(name, file, description = nil)
177
263
  @registered_session_types ||= Dictionary.new
178
264
  @registered_session_types[name] = {
@@ -185,24 +271,86 @@ module Merb
185
271
 
186
272
  # ==== Returns
187
273
  # Boolean:: True if Merb is running via script/frozen-merb or other freezer.
274
+ #
275
+ # ==== Notes
276
+ # Freezing means bundling framework libraries with your application
277
+ # making it independent from environment it runs in. This is a good
278
+ # practice to freeze application framework and gems it uses and
279
+ # very useful when application is run in some sort of sandbox,
280
+ # for instance, shared hosting with preconfigured gems.
188
281
  def frozen?
189
282
  @frozen
190
283
  end
191
284
 
192
285
  # Used by script/frozen-merb and other freezers to mark Merb as frozen.
286
+ # See Merb::GlobalHelpers.frozen? for more details on framework freezing.
193
287
  def frozen!
194
288
  @frozen = true
195
289
  end
196
-
290
+
197
291
  # Load configuration and assign logger.
198
292
  #
199
293
  # ==== Parameters
200
294
  # options<Hash>:: Options to pass on to the Merb config.
295
+ #
296
+ # ==== Options
297
+ # :host<String>:: host to bind to,
298
+ # default is 0.0.0.0.
299
+ #
300
+ # :port<Fixnum>:: port to run Merb application on,
301
+ # default is 4000.
302
+ #
303
+ # :adapter<String>:: name of Rack adapter to use,
304
+ # default is "runner"
305
+ #
306
+ # :rackup<String>:: name of Rack init file to use,
307
+ # default is "rack.rb"
308
+ #
309
+ # :reload_classes<Boolean>:: whether Merb should reload
310
+ # classes on each request,
311
+ # default is true
312
+ #
313
+ # :environment<String>:: name of environment to use,
314
+ # default is development
315
+ #
316
+ # :merb_root<String>:: Merb application root,
317
+ # default is Dir.pwd
318
+ #
319
+ # :use_mutex<Boolean>:: turns action dispatch synchronization
320
+ # on or off, default is on (true)
321
+ #
322
+ # :session_id_key<String>:: session identifier,
323
+ # default is _session_id
324
+ #
325
+ # :log_delimiter<String>:: what Merb logger uses as delimiter
326
+ # between message sections, default is " ~ "
327
+ #
328
+ # :log_auto_flush<Boolean>:: whether the log should automatically
329
+ # flush after new messages are
330
+ # added, defaults to true.
331
+ #
332
+ # :log_file<IO>:: IO for logger. Default is STDOUT.
333
+ #
334
+ # :log_level<Symbol>:: logger level, default is :warn
335
+ #
336
+ # :disabled_components<Array[Symbol]>::
337
+ # array of disabled component names,
338
+ # for instance, to disable json gem,
339
+ # specify :json. Default is empty array.
340
+ #
341
+ # :deferred_actions<Array(Symbol, String)]>::
342
+ # names of actions that should be deferred
343
+ # no matter what controller they belong to.
344
+ # Default is empty array.
345
+ #
346
+ # Some of these options come from command line on Merb
347
+ # application start, some of them are set in Merb init file
348
+ # or environment-specific.
201
349
  def load_config(options = {})
202
350
  Merb::Config.setup({ :log_file => STDOUT, :log_level => :warn, :log_auto_flush => true }.merge(options))
203
351
  Merb::BootLoader::Logger.run
204
352
  end
205
-
353
+
206
354
  # Load all basic dependencies (selected BootLoaders only).
207
355
  #
208
356
  # ==== Parameters
@@ -213,18 +361,32 @@ module Merb
213
361
  Merb::BootLoader::Dependencies.run
214
362
  Merb::BootLoader::BeforeAppRuns.run
215
363
  end
216
-
217
- # Reload the framework.
364
+
365
+ # Reload application and framework classes.
366
+ # See Merb::BootLoader::ReloadClasses for details.
218
367
  def reload
219
368
  Merb::BootLoader::ReloadClasses.reload
220
369
  end
221
-
370
+
222
371
  # ==== Returns
223
- # Boolean:: True if Merb is running via spec_helper.rb or other TEST scenario.
372
+ # Boolean:: True if Merb environment is testing for instance,
373
+ # Merb is running with RSpec, Test::Unit of other testing facility.
224
374
  def testing?
225
375
  $TESTING || Merb::Config[:testing]
226
376
  end
227
377
 
378
+ # Ask the question about which environment you're in.
379
+ # ==== Parameters
380
+ # env<Symbol, String>:: Name of the environment to query
381
+ #
382
+ # ==== Examples
383
+ # Merb.env #=> production
384
+ # Merb.env?(:production) #=> true
385
+ # Merb.env?(:development) #=> false
386
+ def env?(env)
387
+ Merb.env == env.to_s
388
+ end
389
+
228
390
  # If block was given configures using the block.
229
391
  #
230
392
  # ==== Parameters
@@ -233,6 +395,10 @@ module Merb
233
395
  # ==== Returns
234
396
  # Hash:: The current configuration.
235
397
  #
398
+ # ==== Notes
399
+ # See Merb::GlobalHelpers.load_config for configuration
400
+ # options list.
401
+ #
236
402
  # ==== Examples
237
403
  # Merb.config do
238
404
  # beer "good"
@@ -244,13 +410,13 @@ module Merb
244
410
  # session_secret_key "0d05a226affa226623eb18700"
245
411
  # exception_details true
246
412
  # reload_classes true
247
- # reload_time 0.5
413
+ # reload_time 0.5
248
414
  # end
249
415
  def config(&block)
250
416
  Merb::Config.configure(&block) if block_given?
251
417
  Config
252
418
  end
253
-
419
+
254
420
  # Disables the given core components, like a Gem for example.
255
421
  #
256
422
  # ==== Parameters
@@ -258,37 +424,48 @@ module Merb
258
424
  def disable(*components)
259
425
  disabled_components.push *components
260
426
  end
261
-
427
+
262
428
  # ==== Parameters
263
429
  # Array:: All components that should be disabled.
264
430
  def disabled_components=(components)
265
431
  disabled_components.replace components
266
432
  end
267
-
433
+
268
434
  # ==== Returns
269
435
  # Array:: All components that have been disabled.
270
436
  def disabled_components
271
437
  Merb::Config[:disabled_components] ||= []
272
438
  end
273
-
439
+
274
440
  # ==== Returns
275
441
  # Boolean:: True if all components (or just one) are disabled.
276
442
  def disabled?(*components)
277
443
  components.all? { |c| disabled_components.include?(c) }
278
444
  end
279
-
445
+
280
446
  # ==== Returns
281
- # Array:: All Rakefiles for plugins.
447
+ # Array(String):: Paths Rakefiles are loaded from.
448
+ #
449
+ # ==== Notes
450
+ # Recommended way to find out what paths Rakefiles
451
+ # are loaded from.
282
452
  def rakefiles
283
453
  @rakefiles ||= ['merb-core/test/tasks/spectasks']
284
454
  end
285
455
 
286
456
  # ==== Parameters
287
- # *rakefiles:: Rakefiles to add to the list of plugin Rakefiles.
457
+ # *rakefiles:: Rakefile pathss to add to the list of Rakefiles.
458
+ #
459
+ # ==== Notes
460
+ # Recommended way to add Rakefiles load path for plugins authors.
288
461
  def add_rakefiles(*rakefiles)
289
462
  @rakefiles ||= ['merb-core/test/tasks/spectasks']
290
463
  @rakefiles += rakefiles
291
464
  end
465
+
466
+
467
+
468
+
292
469
  end
293
470
  end
294
471
 
@@ -301,4 +478,4 @@ require 'merb-core/controller/mime'
301
478
  require 'merb-core/vendor/facets'
302
479
 
303
480
  # Set the environment if it hasn't already been set.
304
- Merb.environment ||= ENV['MERB_ENV'] || Merb::Config[:environment] || (Merb.testing? ? 'test' : 'development')
481
+ Merb.environment ||= ENV['MERB_ENV'] || Merb::Config[:environment] || (Merb.testing? ? 'test' : 'development')