merb-core 1.0.1 → 1.0.2
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 +1 -1
- data/lib/merb-core.rb +1 -0
- data/lib/merb-core/bootloader.rb +1 -1
- data/lib/merb-core/controller/merb_controller.rb +93 -1
- data/lib/merb-core/dispatch/router/route.rb +2 -2
- data/lib/merb-core/test.rb +6 -1
- data/lib/merb-core/test/helpers/cookie_jar.rb +1 -1
- data/lib/merb-core/version.rb +2 -1
- metadata +2 -2
data/Rakefile
CHANGED
@@ -103,7 +103,7 @@ task :gemspec do
|
|
103
103
|
end
|
104
104
|
end
|
105
105
|
|
106
|
-
CLEAN.include ["**/.*.sw?", "pkg", "lib/*.bundle", "lib/*.so", "*.gem", "doc/rdoc", ".config", "coverage", "cache", "spec/**/*.log", "
|
106
|
+
CLEAN.include ["**/.*.sw?", "pkg", "lib/*.bundle", "lib/*.so", "*.gem", "doc/rdoc", ".config", "coverage", "cache", "spec/**/*.log", "gems/*"]
|
107
107
|
|
108
108
|
desc "Run the specs."
|
109
109
|
task :default => :specs
|
data/lib/merb-core.rb
CHANGED
data/lib/merb-core/bootloader.rb
CHANGED
@@ -434,7 +434,7 @@ class Merb::BootLoader::Dependencies < Merb::BootLoader
|
|
434
434
|
if Merb::Config[:log_file]
|
435
435
|
raise "log file should be a string, got: #{Merb::Config[:log_file].inspect}" unless Merb::Config[:log_file].is_a?(String)
|
436
436
|
STDOUT.puts "Logging to file at #{Merb::Config[:log_file]}" unless Merb.testing?
|
437
|
-
Merb::Config[:log_stream] = File.open(Merb::Config[:log_file], "
|
437
|
+
Merb::Config[:log_stream] = File.open(Merb::Config[:log_file], "a")
|
438
438
|
# but if it's not given, fallback to log stream or stdout
|
439
439
|
else
|
440
440
|
Merb::Config[:log_stream] ||= STDOUT
|
@@ -1,9 +1,12 @@
|
|
1
1
|
class Merb::Controller < Merb::AbstractController
|
2
2
|
|
3
|
-
class_inheritable_accessor :_hidden_actions, :_shown_actions
|
3
|
+
class_inheritable_accessor :_hidden_actions, :_shown_actions,
|
4
|
+
:_overridable, :_override_bang
|
4
5
|
|
5
6
|
self._hidden_actions ||= []
|
6
7
|
self._shown_actions ||= []
|
8
|
+
self._overridable ||= []
|
9
|
+
self._override_bang ||= []
|
7
10
|
|
8
11
|
cattr_accessor :_subclasses
|
9
12
|
self._subclasses = Set.new
|
@@ -27,6 +30,61 @@ class Merb::Controller < Merb::AbstractController
|
|
27
30
|
klass._template_root = Merb.dir_for(:view) unless self._template_root
|
28
31
|
end
|
29
32
|
|
33
|
+
# ==== Parameters
|
34
|
+
# *names<Array[Symbol]>::
|
35
|
+
# an Array of method names that should be overridable in application
|
36
|
+
# controllers.
|
37
|
+
#
|
38
|
+
# ==== Returns
|
39
|
+
# Array:: The list of methods that are overridable
|
40
|
+
#
|
41
|
+
# :api: plugin
|
42
|
+
def self.overridable(*names)
|
43
|
+
self._overridable.push(*names)
|
44
|
+
end
|
45
|
+
|
46
|
+
# In an application controller, call override! before a method to indicate
|
47
|
+
# that you want to override a method in Merb::Controller that is not
|
48
|
+
# normally overridable.
|
49
|
+
#
|
50
|
+
# Doing this may potentially break your app in a future release of Merb,
|
51
|
+
# and this is provided for users who are willing to take that risk.
|
52
|
+
# Without using override!, Merb will raise an error if you attempt to
|
53
|
+
# override a method defined on Merb::Controller.
|
54
|
+
#
|
55
|
+
# This is to help users avoid a common mistake of defining an action
|
56
|
+
# that overrides a core method on Merb::Controller.
|
57
|
+
#
|
58
|
+
# ==== Parameters
|
59
|
+
# *names<Array[Symbol]>::
|
60
|
+
# An Array of methods that will override Merb core classes on purpose
|
61
|
+
#
|
62
|
+
# ==== Example
|
63
|
+
#
|
64
|
+
# class Kontroller < Application
|
65
|
+
# def status
|
66
|
+
# render
|
67
|
+
# end
|
68
|
+
# end
|
69
|
+
#
|
70
|
+
# will raise a Merb::ReservedError, because #status is a method on
|
71
|
+
# Merb::Controller.
|
72
|
+
#
|
73
|
+
# class Kontroller < Application
|
74
|
+
# override! :status
|
75
|
+
# def status
|
76
|
+
# some_code || super
|
77
|
+
# end
|
78
|
+
# end
|
79
|
+
#
|
80
|
+
# will not raise a Merb::ReservedError, because the user specifically
|
81
|
+
# decided to override the status method.
|
82
|
+
#
|
83
|
+
# :api: public
|
84
|
+
def self.override!(*names)
|
85
|
+
self._overrride_bang.push(*names)
|
86
|
+
end
|
87
|
+
|
30
88
|
# Hide each of the given methods from being callable as actions.
|
31
89
|
#
|
32
90
|
# ==== Parameters
|
@@ -97,6 +155,7 @@ class Merb::Controller < Merb::AbstractController
|
|
97
155
|
def self._filter_params(params)
|
98
156
|
params
|
99
157
|
end
|
158
|
+
overridable :_filter_params
|
100
159
|
|
101
160
|
# All methods that are callable as actions.
|
102
161
|
#
|
@@ -135,6 +194,7 @@ class Merb::Controller < Merb::AbstractController
|
|
135
194
|
def _template_location(context, type, controller)
|
136
195
|
_conditionally_append_extension(controller ? "#{controller}/#{context}" : "#{context}", type)
|
137
196
|
end
|
197
|
+
overridable :_template_location
|
138
198
|
|
139
199
|
# The location to look for a template and mime-type. This is overridden
|
140
200
|
# from AbstractController, which defines a version of this that does not
|
@@ -171,6 +231,7 @@ class Merb::Controller < Merb::AbstractController
|
|
171
231
|
super()
|
172
232
|
@request, @_status, @headers = request, status, headers
|
173
233
|
end
|
234
|
+
overridable :initialize
|
174
235
|
|
175
236
|
# Dispatch the action.
|
176
237
|
#
|
@@ -389,4 +450,35 @@ class Merb::Controller < Merb::AbstractController
|
|
389
450
|
def _conditionally_append_extension(template, type)
|
390
451
|
type && !template.match(/\.#{type.to_s.escape_regexp}$/) ? "#{template}.#{type}" : template
|
391
452
|
end
|
453
|
+
|
454
|
+
# When a method is added to a subclass of Merb::Controller (i.e. an app controller) that
|
455
|
+
# is defined on Merb::Controller, raise a Merb::ReservedError. An error will not be raised
|
456
|
+
# if the method is defined as overridable in the Merb API.
|
457
|
+
#
|
458
|
+
# This behavior can be overridden by using override! method_name before attempting to
|
459
|
+
# override the method.
|
460
|
+
#
|
461
|
+
# ==== Parameters
|
462
|
+
# meth<~to_sym> The method that is being added
|
463
|
+
#
|
464
|
+
# ==== Raises
|
465
|
+
# Merb::ReservedError::
|
466
|
+
# If the method being added is in a subclass of Merb::Controller,
|
467
|
+
# the method is defined on Merb::Controller, it is not defined
|
468
|
+
# as overridable in the Merb API, and the user has not specified
|
469
|
+
# that it can be overridden.
|
470
|
+
#
|
471
|
+
# ==== Returns
|
472
|
+
# nil
|
473
|
+
#
|
474
|
+
# :api: private
|
475
|
+
def self.method_added(meth)
|
476
|
+
if self < Merb::Controller && Merb::Controller.method_defined?(meth) &&
|
477
|
+
!self._overridable.include?(meth.to_sym) && !self._override_bang.include?(meth.to_sym)
|
478
|
+
|
479
|
+
raise Merb::ReservedError, "You tried to define #{meth} on " \
|
480
|
+
"#{self.name} but it was already defined on Merb::Controller. " \
|
481
|
+
"If you meant to override a core method, use override!"
|
482
|
+
end
|
483
|
+
end
|
392
484
|
end
|
@@ -321,9 +321,9 @@ module Merb
|
|
321
321
|
condition = "(cached_#{segment} = params[#{segment.inspect}] || include_defaults && defaults[#{segment.inspect}])"
|
322
322
|
|
323
323
|
if @symbol_conditions[segment] && @symbol_conditions[segment].is_a?(Regexp)
|
324
|
-
condition << " =~ #{@symbol_conditions[segment].inspect}"
|
324
|
+
condition << " && cached_#{segment}.to_s =~ #{@symbol_conditions[segment].inspect}"
|
325
325
|
elsif @symbol_conditions[segment]
|
326
|
-
condition << " == #{@symbol_conditions[segment].inspect}"
|
326
|
+
condition << " && cached_#{segment}.to_s == #{@symbol_conditions[segment].inspect}"
|
327
327
|
end
|
328
328
|
|
329
329
|
condition
|
data/lib/merb-core/test.rb
CHANGED
@@ -9,7 +9,12 @@ begin
|
|
9
9
|
require 'webrat'
|
10
10
|
require 'webrat/merb'
|
11
11
|
rescue LoadError => e
|
12
|
-
Merb.
|
12
|
+
if Merb.testing?
|
13
|
+
Merb.fatal! "Couldn't load Webrat. You should run: sudo gem install webrat", e
|
14
|
+
else
|
15
|
+
Merb.logger.warn! "Couldn't load Webrat, so some features, like `visit' will not " \
|
16
|
+
"be available. Please install webrat if you want these features."
|
17
|
+
end
|
13
18
|
end
|
14
19
|
|
15
20
|
if Merb.test_framework.to_s == "rspec"
|
data/lib/merb-core/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: merb-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ezra Zygmuntowicz
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-11-
|
12
|
+
date: 2008-11-24 00:00:00 -08:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|