merb-core 0.9.2 → 0.9.3

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -0,0 +1,16 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+ require 'json'
3
+
4
+ describe Time, "#to_json" do
5
+
6
+ before do
7
+ @expected = "\"2008-03-28T22:54:20Z\""
8
+ end
9
+
10
+ it "should transform itself into a ISO 8601 compatible string" do
11
+ Time.utc(2008, 3, 28, 22, 54, 20).to_json.should == @expected
12
+ Time.xmlschema("2008-03-28T22:54:20Z").to_json.should == @expected
13
+ Time.xmlschema("2008-03-28T17:54:20-05:00").to_json.should == @expected
14
+ end
15
+
16
+ end
@@ -0,0 +1,24 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ describe Merb::BootLoader::RackUpApplication do
4
+
5
+ it "should default to rack config (rack.rb)" do
6
+ options = {:merb_root => File.dirname(__FILE__) / 'fixture'}
7
+ Merb::Config.setup(options)
8
+ app = Merb::BootLoader::RackUpApplication.run
9
+ app.class.should == Merb::Rack::Application
10
+ end
11
+
12
+ it "should use rackup config that we specified" do
13
+ options = {:rackup => File.dirname(__FILE__) / 'fixture' / 'config' / 'black_hole.rb'}
14
+ Merb::Config.setup(options)
15
+ app = Merb::BootLoader::RackUpApplication.run
16
+ app.class.should == Rack::Adapter::BlackHole
17
+
18
+ env = Rack::MockRequest.env_for("/black_hole")
19
+ status, header, body = app.call(env)
20
+ status.should == 200
21
+ header.should == { "Content-Type" => "text/plain" }
22
+ body.should == ""
23
+ end
24
+ end
@@ -31,7 +31,7 @@
31
31
  <div id="footer-container">
32
32
  <hr />
33
33
  <div class="left"></div>
34
- <div class="right">&copy; 2007 the merb dev team</div>
34
+ <div class="right">&copy; 2008 the merb dev team</div>
35
35
  <p>&nbsp;</p>
36
36
  </div>
37
37
  </div>
@@ -129,7 +129,7 @@
129
129
  <div class="internalError">
130
130
 
131
131
  <div class="header">
132
- <h1><%= @exception_name %> <sup class="error_<%= @exception.class::STATUS %>"><%= @exception.class::STATUS %></sup></h1>
132
+ <h1><%= @exception_name %> <sup class="error_<%= @exception.class.status %>"><%= @exception.class.status %></sup></h1>
133
133
  <% if show_details = ::Merb::Config[:exception_details] -%>
134
134
  <h2><%= @exception.message %></h2>
135
135
  <% else -%>
@@ -32,7 +32,7 @@
32
32
  <div id="footer-container">
33
33
  <hr />
34
34
  <div class="left"></div>
35
- <div class="right">&copy; 2007 the merb dev team</div>
35
+ <div class="right">&copy; 2008 the merb dev team</div>
36
36
  <p>&nbsp;</p>
37
37
  </div>
38
38
  </div>
@@ -34,7 +34,7 @@
34
34
  <div id="footer-container">
35
35
  <hr />
36
36
  <div class="left"></div>
37
- <div class="right">&copy; 2007 the merb dev team</div>
37
+ <div class="right">&copy; 2008 the merb dev team</div>
38
38
  <p>&nbsp;</p>
39
39
  </div>
40
40
  </div>
@@ -0,0 +1,12 @@
1
+ # Alternate rackup config
2
+ module Rack
3
+ module Adapter
4
+ class BlackHole
5
+ def call(env)
6
+ [ 200, { "Content-Type" => "text/plain" }, "" ]
7
+ end
8
+ end
9
+ end
10
+ end
11
+
12
+ run Rack::Adapter::BlackHole.new
@@ -2038,3 +2038,141 @@ Mon, 25 Feb 2008 23:13:12 GMT ~ {:before_filters_time=>6.0e-06, :action_time=>0.
2038
2038
  ~ Params: {"format"=>nil, "action"=>"bar", "id"=>"54", "controller"=>"foo"}
2039
2039
  ~ Routed to: {:action=>"bar", :format=>nil, :controller=>"foo", :id=>"54"}
2040
2040
  ~ {:action_time=>0.000269, :dispatch_time=>0.000425, :before_filters_time=>5.0e-06, :after_filters_time=>5.0e-06}
2041
+ ~ Loaded TEST Environment...
2042
+ ~ Compiling routes...
2043
+ ~ Using 'share-nothing' cookie sessions (4kb limit per client)
2044
+ ~ Loaded TEST Environment...
2045
+ ~ Compiling routes...
2046
+ ~ Using 'share-nothing' cookie sessions (4kb limit per client)
2047
+ ~ Params: {"format"=>nil, "action"=>"bar", "id"=>"54", "controller"=>"foo"}
2048
+ ~ Routed to: {:action=>"bar", :format=>nil, :controller=>"foo", :id=>"54"}
2049
+ ~ {:action_time=>0.00086, :dispatch_time=>0.001065, :before_filters_time=>8.0e-06, :after_filters_time=>6.0e-06}
2050
+ ~ Params: {"format"=>nil, "action"=>"bar", "id"=>"54", "controller"=>"foo"}
2051
+ ~ Routed to: {:action=>"bar", :format=>nil, :controller=>"foo", :id=>"54"}
2052
+ ~ {:action_time=>0.000247, :dispatch_time=>0.000385, :before_filters_time=>6.0e-06, :after_filters_time=>5.0e-06}
2053
+ ~ Loaded TEST Environment...
2054
+ ~ Compiling routes...
2055
+ ~ Using 'share-nothing' cookie sessions (4kb limit per client)
2056
+ ~ Loaded TEST Environment...
2057
+ ~ Compiling routes...
2058
+ ~ Using 'share-nothing' cookie sessions (4kb limit per client)
2059
+ ~ Params: {"format"=>nil, "action"=>"bar", "id"=>"54", "controller"=>"foo"}
2060
+ ~ Routed to: {:action=>"bar", :format=>nil, :controller=>"foo", :id=>"54"}
2061
+ ~ {:action_time=>0.000836, :dispatch_time=>0.00103, :before_filters_time=>8.0e-06, :after_filters_time=>6.0e-06}
2062
+ ~ Params: {"format"=>nil, "action"=>"bar", "id"=>"54", "controller"=>"foo"}
2063
+ ~ Routed to: {:action=>"bar", :format=>nil, :controller=>"foo", :id=>"54"}
2064
+ ~ {:action_time=>0.000239, :dispatch_time=>0.000377, :before_filters_time=>4.0e-06, :after_filters_time=>5.0e-06}
2065
+ ~ Loaded TEST Environment...
2066
+ ~ Compiling routes...
2067
+ ~ Using 'share-nothing' cookie sessions (4kb limit per client)
2068
+ ~ Loaded TEST Environment...
2069
+ ~ Compiling routes...
2070
+ ~ Using 'share-nothing' cookie sessions (4kb limit per client)
2071
+ ~ Loaded TEST Environment...
2072
+ ~ Compiling routes...
2073
+ ~ Using 'share-nothing' cookie sessions (4kb limit per client)
2074
+ ~ Loaded TEST Environment...
2075
+ ~ Compiling routes...
2076
+ ~ Using 'share-nothing' cookie sessions (4kb limit per client)
2077
+ ~ Params: {"format"=>nil, "action"=>"bar", "id"=>"54", "controller"=>"foo"}
2078
+ ~ Routed to: {:action=>"bar", :format=>nil, :controller=>"foo", :id=>"54"}
2079
+ ~ {:action_time=>0.000839, :dispatch_time=>0.001034, :before_filters_time=>7.0e-06, :after_filters_time=>6.0e-06}
2080
+ ~ Params: {"format"=>nil, "action"=>"bar", "id"=>"54", "controller"=>"foo"}
2081
+ ~ Routed to: {:action=>"bar", :format=>nil, :controller=>"foo", :id=>"54"}
2082
+ ~ {:action_time=>0.000238, :dispatch_time=>0.000373, :before_filters_time=>4.0e-06, :after_filters_time=>5.0e-06}
2083
+ ~ Loaded TEST Environment...
2084
+ ~ Compiling routes...
2085
+ ~ Using 'share-nothing' cookie sessions (4kb limit per client)
2086
+ ~ Loaded TEST Environment...
2087
+ ~ Compiling routes...
2088
+ ~ Using 'share-nothing' cookie sessions (4kb limit per client)
2089
+ ~ Params: {"format"=>nil, "action"=>"bar", "id"=>"54", "controller"=>"foo"}
2090
+ ~ Routed to: {:format=>nil, :action=>"bar", :controller=>"foo", :id=>"54"}
2091
+ ~ {:dispatch_time=>0.00124, :action_time=>0.001025, :before_filters_time=>1.0e-05, :after_filters_time=>6.0e-06}
2092
+ ~ Params: {"format"=>nil, "action"=>"bar", "id"=>"54", "controller"=>"foo"}
2093
+ ~ Routed to: {:format=>nil, :action=>"bar", :controller=>"foo", :id=>"54"}
2094
+ ~ {:dispatch_time=>0.000476, :action_time=>0.000335, :before_filters_time=>6.0e-06, :after_filters_time=>5.0e-06}
2095
+ ~ Loaded TEST Environment...
2096
+ ~ Compiling routes...
2097
+ ~ Using 'share-nothing' cookie sessions (4kb limit per client)
2098
+ ~ Loaded TEST Environment...
2099
+ ~ Compiling routes...
2100
+ ~ Using 'share-nothing' cookie sessions (4kb limit per client)
2101
+ ~ Params: {"format"=>nil, "action"=>"bar", "id"=>"54", "controller"=>"foo"}
2102
+ ~ Routed to: {:format=>nil, :action=>"bar", :controller=>"foo", :id=>"54"}
2103
+ ~ {:dispatch_time=>0.001202, :action_time=>0.000997, :before_filters_time=>9.0e-06, :after_filters_time=>5.0e-06}
2104
+ ~ Params: {"format"=>nil, "action"=>"bar", "id"=>"54", "controller"=>"foo"}
2105
+ ~ Routed to: {:format=>nil, :action=>"bar", :controller=>"foo", :id=>"54"}
2106
+ ~ {:dispatch_time=>0.000541, :action_time=>0.000322, :before_filters_time=>5.0e-06, :after_filters_time=>4.0e-06}
2107
+ ~ Loaded TEST Environment...
2108
+ ~ Compiling routes...
2109
+ ~ Using 'share-nothing' cookie sessions (4kb limit per client)
2110
+ ~ Loaded TEST Environment...
2111
+ ~ Compiling routes...
2112
+ ~ Using 'share-nothing' cookie sessions (4kb limit per client)
2113
+ ~ Routed to: {:format=>nil, :action=>"bar", :controller=>"foo", :id=>"54"}
2114
+ ~ Params: {"format"=>nil, "action"=>"bar", "id"=>"54", "controller"=>"foo"}
2115
+ ~ {:dispatch_time=>0.001481, :action_time=>0.001224, :before_filters_time=>1.0e-05, :after_filters_time=>6.0e-06}
2116
+ ~ Routed to: {:format=>nil, :action=>"bar", :controller=>"foo", :id=>"54"}
2117
+ ~ Params: {"format"=>nil, "action"=>"bar", "id"=>"54", "controller"=>"foo"}
2118
+ ~ {:dispatch_time=>0.000606, :action_time=>0.00042, :before_filters_time=>7.0e-06, :after_filters_time=>6.0e-06}
2119
+ ~ Loaded TEST Environment...
2120
+ ~ Compiling routes...
2121
+ ~ Using 'share-nothing' cookie sessions (4kb limit per client)
2122
+ ~ Loaded TEST Environment...
2123
+ ~ Compiling routes...
2124
+ ~ Using 'share-nothing' cookie sessions (4kb limit per client)
2125
+ ~ Routed to: {:format=>nil, :action=>"bar", :controller=>"foo", :id=>"54"}
2126
+ ~ Params: {"format"=>nil, "action"=>"bar", "id"=>"54", "controller"=>"foo"}
2127
+ ~ {:dispatch_time=>0.001454, :action_time=>0.00121, :before_filters_time=>9.0e-06, :after_filters_time=>7.0e-06}
2128
+ ~ Routed to: {:format=>nil, :action=>"bar", :controller=>"foo", :id=>"54"}
2129
+ ~ Params: {"format"=>nil, "action"=>"bar", "id"=>"54", "controller"=>"foo"}
2130
+ ~ {:dispatch_time=>0.000594, :action_time=>0.000413, :before_filters_time=>7.0e-06, :after_filters_time=>5.0e-06}
2131
+ ~ Loaded TEST Environment...
2132
+ ~ Compiling routes...
2133
+ ~ Using 'share-nothing' cookie sessions (4kb limit per client)
2134
+ ~ Loaded TEST Environment...
2135
+ ~ Compiling routes...
2136
+ ~ Using 'share-nothing' cookie sessions (4kb limit per client)
2137
+ ~ Routed to: {:format=>nil, :action=>"bar", :id=>"54", :controller=>"foo"}
2138
+ ~ Params: {"format"=>nil, "action"=>"bar", "id"=>"54", "controller"=>"foo"}
2139
+ ~ {:before_filters_time=>9.0e-06, :after_filters_time=>7.0e-06, :dispatch_time=>0.001479, :action_time=>0.001234}
2140
+ ~ Routed to: {:format=>nil, :action=>"bar", :id=>"54", :controller=>"foo"}
2141
+ ~ Params: {"format"=>nil, "action"=>"bar", "id"=>"54", "controller"=>"foo"}
2142
+ ~ {:before_filters_time=>7.0e-06, :after_filters_time=>7.0e-06, :dispatch_time=>0.000594, :action_time=>0.000407}
2143
+ ~ Loaded TEST Environment...
2144
+ ~ Compiling routes...
2145
+ ~ Using 'share-nothing' cookie sessions (4kb limit per client)
2146
+ ~ Loaded TEST Environment...
2147
+ ~ Compiling routes...
2148
+ ~ Using 'share-nothing' cookie sessions (4kb limit per client)
2149
+ ~ Routed to: {:controller=>"foo", :format=>nil, :action=>"bar", :id=>"54"}
2150
+ ~ Params: {"format"=>nil, "action"=>"bar", "id"=>"54", "controller"=>"foo"}
2151
+ ~ {:dispatch_time=>0.001304, :action_time=>0.001105, :before_filters_time=>8.0e-06, :after_filters_time=>5.0e-06}
2152
+ ~ Routed to: {:controller=>"foo", :format=>nil, :action=>"bar", :id=>"54"}
2153
+ ~ Params: {"format"=>nil, "action"=>"bar", "id"=>"54", "controller"=>"foo"}
2154
+ ~ {:dispatch_time=>0.000448, :action_time=>0.000307, :before_filters_time=>6.0e-06, :after_filters_time=>5.0e-06}
2155
+ ~ Loaded TEST Environment...
2156
+ ~ Compiling routes...
2157
+ ~ Using 'share-nothing' cookie sessions (4kb limit per client)
2158
+ ~ Loaded TEST Environment...
2159
+ ~ Compiling routes...
2160
+ ~ Using 'share-nothing' cookie sessions (4kb limit per client)
2161
+ ~ Routed to: {:controller=>"foo", :format=>nil, :action=>"bar", :id=>"54"}
2162
+ ~ Params: {"format"=>nil, "action"=>"bar", "id"=>"54", "controller"=>"foo"}
2163
+ ~ {:dispatch_time=>0.001304, :action_time=>0.001105, :before_filters_time=>8.0e-06, :after_filters_time=>6.0e-06}
2164
+ ~ Routed to: {:controller=>"foo", :format=>nil, :action=>"bar", :id=>"54"}
2165
+ ~ Params: {"format"=>nil, "action"=>"bar", "id"=>"54", "controller"=>"foo"}
2166
+ ~ {:dispatch_time=>0.000486, :action_time=>0.000345, :before_filters_time=>5.0e-06, :after_filters_time=>6.0e-06}
2167
+ ~ Loaded TEST Environment...
2168
+ ~ Compiling routes...
2169
+ ~ Using 'share-nothing' cookie sessions (4kb limit per client)
2170
+ ~ Loaded TEST Environment...
2171
+ ~ Compiling routes...
2172
+ ~ Using 'share-nothing' cookie sessions (4kb limit per client)
2173
+ ~ Routed to: {:format=>nil, :action=>"bar", :controller=>"foo", :id=>"54"}
2174
+ ~ Params: {"format"=>nil, "action"=>"bar", "id"=>"54", "controller"=>"foo"}
2175
+ ~ {:dispatch_time=>0.001314, :action_time=>0.001112, :before_filters_time=>8.0e-06, :after_filters_time=>6.0e-06}
2176
+ ~ Routed to: {:format=>nil, :action=>"bar", :controller=>"foo", :id=>"54"}
2177
+ ~ Params: {"format"=>nil, "action"=>"bar", "id"=>"54", "controller"=>"foo"}
2178
+ ~ {:dispatch_time=>0.000446, :action_time=>0.000305, :before_filters_time=>6.0e-06, :after_filters_time=>5.0e-06}
@@ -18,13 +18,13 @@ end
18
18
 
19
19
  describe "Plugins","use_orm" do
20
20
  before(:each) do
21
- Merb.generator_scope.replace [:merb_default, :merb, :rspec]
21
+ Merb.generator_scope.replace [:merb_default, :merb, :rspec]
22
22
  Kernel.stub!(:dependency)
23
23
  end
24
-
24
+
25
25
  it "should raise an error if use_orm is called twice" do
26
26
  use_orm(:activerecord)
27
- lambda { use_orm(:datamapper) }.should raise_error
27
+ lambda { use_orm(:datamapper) }.should raise_error("Don't call use_orm more than once")
28
28
  end
29
29
 
30
30
  it "should not have :merb_default in GENERATOR_SCOPE with use_orm(:activerecord)" do
@@ -41,21 +41,22 @@ describe "Plugins","use_orm" do
41
41
  use_orm(:activerecord)
42
42
  Merb.generator_scope.first.should == :activerecord
43
43
  end
44
-
44
+
45
45
  it "should call dependency :merb_activerecord with use_orm(:activerecord)" do
46
46
  Kernel.should_receive(:dependency).with("merb_activerecord").once.
47
47
  and_return(true)
48
48
  use_orm(:activerecord)
49
49
  end
50
-
51
50
  end
52
51
 
52
+
53
+
53
54
  describe "Plugins","use_test" do
54
55
  before(:each) do
55
56
  Merb.generator_scope.replace [:merb_default, :merb, :rspec]
56
57
  Kernel.stub!(:dependency)
57
58
  end
58
-
59
+
59
60
  it "should have :rspec in GENERATOR_SCOPE by default" do
60
61
  Merb.generator_scope.should include(:rspec)
61
62
  end
@@ -74,8 +75,78 @@ describe "Plugins","use_test" do
74
75
  use_test(:test_unit)
75
76
  Merb.generator_scope.last.should == :test_unit
76
77
  end
77
-
78
+
78
79
  it "should raise an error if called with an unsupported test framework" do
79
80
  lambda { use_test(:fiddlefaddle) }.should raise_error
80
81
  end
81
- end
82
+ end
83
+
84
+
85
+ describe "Plugins", "register_orm" do
86
+ before(:each) do
87
+ Merb.generator_scope.replace [:merb_default, :merb, :rspec]
88
+ Kernel.stub!(:dependency)
89
+ end
90
+
91
+ it "registers ORM plugin at generator scope" do
92
+ register_orm(:sequel)
93
+
94
+ Merb.generator_scope.should include(:sequel)
95
+ end
96
+ end
97
+
98
+
99
+
100
+ describe "Plugins", "registred_orm?" do
101
+ before(:each) do
102
+ Merb.generator_scope.replace [:merb_default, :merb, :rspec]
103
+ Kernel.stub!(:dependency)
104
+ end
105
+
106
+ it "returns false unless ORM is registred" do
107
+ registred_orm?(:sequel).should be(false)
108
+ end
109
+
110
+ it "returns true once ORM is registred" do
111
+ use_orm(:sequel)
112
+
113
+ registred_orm?(:sequel).should be(false)
114
+ end
115
+ end
116
+
117
+
118
+
119
+
120
+ describe "Plugins", "register_test_framework" do
121
+ before(:each) do
122
+ Merb.generator_scope.replace [:merb_default, :merb, :rspec]
123
+ Kernel.stub!(:dependency)
124
+ end
125
+
126
+ it "registers test framework at generator scope" do
127
+ register_test_framework(:test_unit)
128
+
129
+ Merb.generator_scope.should include(:test_unit)
130
+ end
131
+ end
132
+
133
+
134
+
135
+ describe "Plugins", "supported_test_framework?" do
136
+ before(:each) do
137
+ Merb.generator_scope.replace [:merb_default, :merb, :rspec]
138
+ Kernel.stub!(:dependency)
139
+ end
140
+
141
+ it "supports RSpec" do
142
+ supported_test_framework?(:rspec).should be(true)
143
+ end
144
+
145
+ it "supports Test::Unit" do
146
+ supported_test_framework?(:rspec).should be(true)
147
+ end
148
+
149
+ it "DOES NOT yet support MSpec (of Rubinius fame)" do
150
+ supported_test_framework?(:mspec).should be(false)
151
+ end
152
+ end
@@ -11,7 +11,7 @@ describe Merb::Rack::Application do
11
11
 
12
12
  it "should return a MockResponse" do
13
13
  res = Rack::MockRequest.new(@app).get("")
14
- res.should be_kind_of Rack::MockResponse
14
+ res.should be_kind_of(Rack::MockResponse)
15
15
  end
16
16
 
17
17
  end
@@ -163,5 +163,31 @@ module Merb::Test::Fixtures
163
163
  "index action"
164
164
  end
165
165
  end
166
+
167
+ class TestBeforeFilterWithArgument < Testing
168
+ before :foo, :with => "bar"
169
+
170
+ def index
171
+ "index action"
172
+ end
173
+
174
+ private
175
+ def foo(bar)
176
+ bar == "bar"
177
+ end
178
+ end
179
+
180
+ class TestBeforeFilterWithArguments < Testing
181
+ before :foo, :with => ["bar", "baz"]
182
+
183
+ def index
184
+ "index action"
185
+ end
186
+
187
+ private
188
+ def foo(bar,baz)
189
+ bar == "bar" && baz == "baz"
190
+ end
191
+ end
166
192
  end
167
193
  end
@@ -4,8 +4,8 @@ module Merb::Test::Fixtures
4
4
  class HelperTesting < Merb::AbstractController
5
5
  self._template_root = File.dirname(__FILE__) / "views"
6
6
 
7
- def _template_location(action, type = nil, controller = controller_name)
8
- "helpers/#{File.basename(controller)}/#{action}"
7
+ def _template_location(context, type = nil, controller = controller_name)
8
+ "helpers/#{File.basename(controller)}/#{context}"
9
9
  end
10
10
  end
11
11
 
@@ -7,8 +7,8 @@ module Merb::Test::Fixtures
7
7
  class RenderIt < Merb::AbstractController
8
8
  self._template_root = File.dirname(__FILE__) / "views"
9
9
 
10
- def _template_location(action, type = nil, controller = controller_name)
11
- "partial/#{File.basename(controller)}/#{action}"
10
+ def _template_location(context, type = nil, controller = controller_name)
11
+ "partial/#{File.basename(controller)}/#{context}"
12
12
  end
13
13
  end
14
14
 
@@ -58,9 +58,21 @@ module Merb::Test::Fixtures
58
58
  self._template_root = File.dirname(__FILE__) / "alt_views"
59
59
  end
60
60
 
61
+ class RenderNoDefaultAppLayout < RenderString
62
+ self._template_root = File.dirname(__FILE__) / "alt_views"
63
+ self.layout false
64
+ end
65
+
66
+ class RenderNoDefaultAppLayoutInherited < RenderNoDefaultAppLayout
67
+ end
68
+
69
+ class RenderDefaultAppLayoutInheritedOverride < RenderNoDefaultAppLayout
70
+ self.default_layout
71
+ end
72
+
61
73
  class RenderTemplateCustomLocation < RenderTemplate
62
- def _template_location(action, type = nil, controller = controller_name)
63
- "wonderful/#{action}"
74
+ def _template_location(context, type = nil, controller = controller_name)
75
+ "wonderful/#{context}"
64
76
  end
65
77
  end
66
78
 
@@ -75,8 +87,8 @@ module Merb::Test::Fixtures
75
87
  class RenderTemplateMultipleRootsAndCustomLocation < RenderTemplate
76
88
  self._template_roots = [[File.dirname(__FILE__) / "alt_views", :_custom_template_location]]
77
89
 
78
- def _custom_template_location(action, type = nil, controller = controller_name)
79
- "#{self.class.name.split('::')[-1].to_const_path}/#{action}"
90
+ def _custom_template_location(context, type = nil, controller = controller_name)
91
+ "#{self.class.name.split('::')[-1].to_const_path}/#{context}"
80
92
  end
81
93
  end
82
94