orange-core 0.6.0 → 0.7.0

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 (33) hide show
  1. data/README.markdown +18 -27
  2. data/lib/orange-core/application.rb +7 -2
  3. data/lib/orange-core/carton.rb +17 -9
  4. data/lib/orange-core/core.rb +25 -8
  5. data/lib/orange-core/magick.rb +3 -0
  6. data/lib/orange-core/middleware/abstract_format.rb +46 -0
  7. data/lib/orange-core/middleware/database.rb +5 -2
  8. data/lib/orange-core/middleware/globals.rb +1 -1
  9. data/lib/orange-core/middleware/restful_router.rb +40 -11
  10. data/lib/orange-core/middleware/root_dir.rb +19 -0
  11. data/lib/orange-core/middleware/show_exceptions.rb +23 -6
  12. data/lib/orange-core/middleware/static.rb +6 -6
  13. data/lib/orange-core/middleware/template.rb +8 -0
  14. data/lib/orange-core/resource.rb +25 -1
  15. data/lib/orange-core/resources/mapper.rb +20 -2
  16. data/lib/orange-core/resources/model_resource.rb +84 -2
  17. data/lib/orange-core/resources/parser.rb +3 -2
  18. data/lib/orange-core/stack.rb +10 -12
  19. data/lib/orange-core/templates/500.haml +2 -0
  20. data/lib/orange-core/views/default_resource/create.haml +1 -1
  21. data/lib/orange-core/views/default_resource/edit.haml +1 -1
  22. data/lib/orange-core/views/not_found/404.haml +1 -1
  23. data/spec/orange-core/application_spec.rb +1 -0
  24. data/spec/orange-core/core_spec.rb +16 -1
  25. data/spec/orange-core/middleware/restful_router_spec.rb +98 -1
  26. data/spec/orange-core/mock/mock_mixins.rb +1 -1
  27. data/spec/orange-core/mock/mock_model_resource.rb +13 -0
  28. data/spec/orange-core/mock/mock_plugin.rb +7 -0
  29. data/spec/orange-core/orange_spec.rb +11 -0
  30. data/spec/orange-core/resources/model_resource_spec.rb +16 -7
  31. data/spec/orange-core/spec_helper.rb +3 -0
  32. data/spec/orange-core/stack_spec.rb +2 -2
  33. metadata +11 -72
@@ -6,6 +6,18 @@ module Orange
6
6
  # attribute
7
7
  cattr_accessor :model_class
8
8
  attr_accessor :model_class
9
+ # Defines a list of exposed actions
10
+ cattr_accessor :exposed_actions
11
+ cattr_accessor :listable_actions
12
+ # Allows the resource to be nested inside other resources.
13
+ cattr_accessor :nested_in
14
+ # Allows the resource to be nest other resources.
15
+ cattr_accessor :nests
16
+
17
+ def self.listable(*args)
18
+ self.listable_actions ||= []
19
+ args.each{|arg| self.listable_actions << arg}
20
+ end
9
21
 
10
22
  # Tells the Model resource which Carton class to scaffold
11
23
  # @param [Orange::Carton] my_model_class class name of the carton class to scaffold
@@ -13,9 +25,39 @@ module Orange
13
25
  self.model_class = my_model_class
14
26
  end
15
27
 
28
+ # Allows the resource to nest other resources
29
+ def self.nests_many(*args)
30
+ self.nests ||= {}
31
+ args.each{|arg| self.nests[arg] = :many}
32
+ end
33
+
34
+ # Allows the resource to nest other resources
35
+ def self.nests_one(*args)
36
+ self.nests ||= {}
37
+ args.each{|arg| self.nests[arg] = :one}
38
+ end
39
+
40
+ def nests
41
+ self.class.nests
42
+ end
43
+
44
+ # Allows the resource to nest inside other resources
45
+ def self.nests_in(*args)
46
+ self.nested_in ||= []
47
+ args.each{|arg| self.nested_in << arg}
48
+ end
49
+
50
+ def nested_in
51
+ self.class.nested_in
52
+ end
53
+
16
54
  # Overrides the instantiation of new Resource object to set instance model
17
55
  # class to the class-level model class defined by #use
18
56
  def self.new(*args, &block)
57
+ self.exposed_actions ||= {:all => [:show, :list], :admin => [:all], :orange => [:all]}
58
+ self.listable_actions ||= []
59
+ self.nested_in ||= []
60
+ self.nests ||= {}
19
61
  me = super(*args, &block)
20
62
  me.model_class = self.model_class
21
63
  me
@@ -32,7 +74,24 @@ module Orange
32
74
  resource_id = opts[:id] || packet['route.resource_id', false]
33
75
  mode = opts[:mode] || packet['route.resource_action'] ||
34
76
  (resource_id ? :show : :index)
35
- self.__send__(mode, packet, opts)
77
+ if self.respond_to?(mode)
78
+ self.__send__(mode, packet, opts)
79
+ else
80
+ viewable(packet, mode, opts)
81
+ end
82
+ end
83
+
84
+ # Allows undefined methods to be viewed with the standard do_view method
85
+ # They must be added to the viewable or listable actions by calling
86
+ # #self.viewable or #self.listable with a set of functions to be viewable
87
+ def viewable(packet, mode, opts={})
88
+ if(self.class.viewable_actions.include?(mode))
89
+ do_view(packet, mode, opts)
90
+ elsif(self.class.listable_actions.include?(mode))
91
+ do_list_view(packet, mode, opts)
92
+ else
93
+ ''
94
+ end
36
95
  end
37
96
 
38
97
  # Renders a view, with all options set for haml to access.
@@ -68,7 +127,7 @@ module Orange
68
127
  # @return [Hash] hash of options to be used
69
128
  def view_opts(packet, mode, is_list, *args)
70
129
  opts = args.extract_options!.with_defaults({:path => ''})
71
- props = model_class.form_props(packet['route.context'])
130
+ props = model_class.form_props(packet['route.context'], ((is_list || mode == :table_row) ? mode : :any))
72
131
  resource_id = opts[:id] || packet['route.resource_id'] || false
73
132
  all_opts = {:props => props, :resource => self, :model_name => @my_orange_name}.merge!(opts)
74
133
  all_opts.with_defaults! :model => find_one(packet, mode, resource_id) unless is_list
@@ -222,6 +281,29 @@ module Orange
222
281
  def index(packet, *opts)
223
282
  do_list_view(packet, :list, *opts)
224
283
  end
284
+
285
+ # Add methods to the list of exposed actions.
286
+ def self.expose(*args)
287
+ self.exposed_actions ||= {:all => [:show, :list], :admin => :all, :orange => :all}
288
+ self.exposed_actions.merge!(args.extract_options!)
289
+ self.exposed_actions[:all].concat(args)
290
+ end
291
+
292
+ # Add an exclusive list of exposed actions. List is cleared out beforehand
293
+ def self.expose_only(*args)
294
+ self.exposed_actions = {:all => []}
295
+ self.exposed_actions.merge!(args.extract_options!)
296
+ self.exposed_actions[:all].concat(args)
297
+ end
298
+
299
+ # Exposed method for helping the RestfulRouter class.
300
+ def exposed(packet)
301
+ all = self.class.exposed_actions[:all]
302
+ all = [all] unless all.is_a?(Array)
303
+ context = self.class.exposed_actions[packet['route.context']]
304
+ context = [context] unless context.is_a?(Array)
305
+ all+context
306
+ end
225
307
 
226
308
  end
227
309
 
@@ -9,8 +9,8 @@ module Orange
9
9
  orange.add_pulp Orange::Pulp::ParserPulp
10
10
  @template_dirs = [File.join(orange.core_dir, 'templates')]
11
11
  @view_dirs = [File.join(orange.core_dir, 'views')]
12
- Orange.plugins.each{|p| @template_dirs << p.templates if p.has_templates? }
13
- Orange.plugins.each{|p| @view_dirs << p.views if p.has_views? }
12
+ orange.plugins.each{|p| @template_dirs << p.templates if p.has_templates? }
13
+ orange.plugins.each{|p| @view_dirs << p.views if p.has_views? }
14
14
  end
15
15
 
16
16
  def yaml(file)
@@ -77,6 +77,7 @@ module Orange
77
77
  packet_binding['parser.haml-templates', {}]["#{context}-#{resource}-#{file}"] = haml_engine
78
78
  end
79
79
  end
80
+ opts[:opts] = opts.dup
80
81
  out = haml_engine.render(packet_binding, opts, &block)
81
82
  end
82
83
 
@@ -1,6 +1,5 @@
1
1
  require 'orange-core/core'
2
2
  require 'rack/builder'
3
- require 'rack/abstract_format'
4
3
 
5
4
  module Orange
6
5
  # Builds an orange stack of middleware
@@ -127,13 +126,12 @@ module Orange
127
126
  stack Orange::Middleware::Loader
128
127
  stack Orange::Middleware::Rerouter, opts.dup
129
128
  stack Orange::Middleware::Static, opts.dup
130
- use Rack::AbstractFormat unless opts[:no_abstract_format]
131
- # Must be used before non-destructive route altering done by Orange,
132
- # since all orange stuff is non-destructive
129
+ stack Orange::Middleware::AbstractFormat unless opts[:no_abstract_format]
130
+ stack Orange::Middleware::RootDir, opts.dup
133
131
  stack Orange::Middleware::RouteSite, opts.dup
134
132
  stack Orange::Middleware::RouteContext, opts.dup
135
- stack Orange::Middleware::Database
136
- Orange.plugins.each{|p| p.middleware(:prerouting).each{|m| stack m, opts.dup} if p.has_middleware?}
133
+ stack Orange::Middleware::Database unless (opts[:no_datamapper] || orange.options[:no_datamapper])
134
+ orange.plugins.each{|p| p.middleware(:prerouting).each{|m| stack m, opts.dup} if p.has_middleware?}
137
135
  end
138
136
 
139
137
  # A shortcut for routing via Orange::Middleware::RestfulRouter and any plugins
@@ -141,17 +139,17 @@ module Orange
141
139
  # Any args are passed on to the middleware
142
140
  def routing(opts ={})
143
141
  stack Orange::Middleware::RestfulRouter, opts.dup
144
- Orange.plugins.each{|p| p.middleware(:routing).each{|m| stack m, opts.dup} if p.has_middleware?}
142
+ orange.plugins.each{|p| p.middleware(:routing).each{|m| stack m, opts.dup} if p.has_middleware?}
145
143
  end
146
144
 
147
145
  def postrouting(opts ={})
148
- Orange.plugins.each{|p| p.middleware(:postrouting).each{|m| stack m, opts.dup} if p.has_middleware?}
146
+ orange.plugins.each{|p| p.middleware(:postrouting).each{|m| stack m, opts.dup} if p.has_middleware?}
149
147
  stack Orange::Middleware::Template
150
148
  stack Orange::Middleware::FourOhFour, opts.dup # Last ditch, send route to 404 page.
151
149
  end
152
150
 
153
151
  def responders(opts ={})
154
- Orange.plugins.each{|p| p.middleware(:responders).each{|m| stack m, opts.dup} if p.has_middleware?}
152
+ orange.plugins.each{|p| p.middleware(:responders).each{|m| stack m, opts.dup} if p.has_middleware?}
155
153
  end
156
154
 
157
155
  # # A shortcut to enable Rack::OpenID and Orange::Middleware::AccessControl
@@ -203,14 +201,14 @@ module Orange
203
201
  @app = false # Rebuild no matter what if autoload
204
202
  end
205
203
  unless @app
206
- @app = do_build # Build if necessary
204
+ do_build # Build if necessary
207
205
  orange.fire(:stack_loaded, @app)
208
206
  end
209
207
  @app
210
208
  end
211
209
 
212
210
  def do_build
213
- @build.to_app
211
+ @app = @build.to_app
214
212
  end
215
213
 
216
214
  # Sets the core and then passes on to the stack, according to standard
@@ -222,7 +220,7 @@ module Orange
222
220
 
223
221
  # Debug helping
224
222
  def inspect
225
- "#<Orange::Stack:0x#{self.object_id.to_s(16)} @build=#{@build.inspect}, @core=#{@core.inspect}>"
223
+ "#<Orange::Stack:0x#{self.object_id.to_s(16)} @app=#{@app.inspect}, @core=#{@core.inspect}>"
226
224
  end
227
225
  end
228
226
  end
@@ -0,0 +1,2 @@
1
+ %h1 An Error Occurred!
2
+ %p We're sorry.
@@ -1,4 +1,4 @@
1
- %form{:action => "#{packet.route_to(model_name, 'new')}", :method => 'post'}
1
+ %form{:action => "#{packet.route_to(model_name, 'new')}", :method => 'post', :"accept-charset" => "UTF-8"}
2
2
  - for prop in props
3
3
  %p= view_attribute(prop, model_name, :label => true)
4
4
  %input{:type => 'submit', :value => 'Save New Item'}
@@ -1,7 +1,7 @@
1
1
  - if model
2
2
  - if resource.options[:sitemappable, false]
3
3
  = orange[:sitemap, true].sitemap_links(packet, {:slug_me => orange[:sitemap, true].slug_for(model, props)})
4
- %form{:action => packet.route_to(model_name, model[:id], 'save'), :method => 'post'}
4
+ %form{:action => packet.route_to(model_name, model[:id], 'save'), :method => 'post', :"accept-charset" => "UTF-8"}
5
5
  - for prop in props
6
6
  %p!= view_attribute(prop, model_name, :label => true, :value => model.attribute_get(prop[:name]), :model => model)
7
7
  %input{:type => 'submit', :value => 'Save Changes'}
@@ -1,2 +1,2 @@
1
- %h1= "#{request.request_method}: #{request.path}"
1
+ %h1= "#{request.request_method}: #{packet['route.path']}"
2
2
  %h2 The file you were looking for cannot be found
@@ -47,6 +47,7 @@ describe Orange::Application do
47
47
  it "should have a different app stack after using stack method" do
48
48
  lambda {
49
49
  MockApplication.stack do
50
+ run MockExitware.new
50
51
  end
51
52
  }.should change(MockApplication, :app)
52
53
  end
@@ -139,6 +139,21 @@ describe Orange::Core do
139
139
  c.options.should_not have_key(:opt_3)
140
140
  end
141
141
 
142
+ it "should have a mash options hash" do
143
+ c= Orange::Core.new(:opt_1 => true, "opt_4" => 'banana'){ opt_2 true }
144
+ c.options.should be_an_instance_of(Mash)
145
+ c.options[:opt_1].should == true
146
+ c.options[:opt_2].should == true
147
+ c.options[:opt_4].should == 'banana'
148
+ c.options["opt_1"].should == true
149
+ c.options["opt_2"].should == true
150
+ c.options["opt_4"].should == 'banana'
151
+ c.options.should have_key(:opt_1)
152
+ c.options.should have_key("opt_1")
153
+ c.options.should_not have_key(:opt_3)
154
+ c.options.should_not have_key("opt_3")
155
+ end
156
+
142
157
  it "should load a resource when passed resource instance" do
143
158
  c= Orange::Core.new
144
159
  c.load(MockResource.new, :mock_one)
@@ -225,7 +240,7 @@ describe Orange::Core do
225
240
  end
226
241
 
227
242
  it "should have an options hash" do
228
- Orange::Core.new.options.should be_an_instance_of(Hash)
243
+ Orange::Core.new.options.should be_a_kind_of(Hash)
229
244
  end
230
245
 
231
246
  it "should allow access to the resources via []" do
@@ -1,3 +1,100 @@
1
1
  describe Orange::Middleware::RestfulRouter do
2
- it "should be spec'ed"
2
+ before :all do
3
+ @router = Orange::Middleware::RestfulRouter.new(nil, Orange::Core.new)
4
+ end
5
+ before :each do
6
+ @index = empty_packet(@router.orange)
7
+ @index.orange.load(MockNestingResource.new, :products)
8
+ @index.orange.load(MockNestedResource.new, :photo)
9
+ @index.orange.load(MockCategoryResource.new, :category)
10
+ @index.orange.load(MockResource.new, :special)
11
+ @show_product_list = empty_packet(@index.orange)
12
+ @show_product_list['route.path'] = '/products'
13
+ @show_product_one = empty_packet(@index.orange)
14
+ @show_product_one['route.path'] = '/products/1'
15
+ @edit_product_two = empty_packet(@index.orange)
16
+ @edit_product_two['route.path'] = '/products/2/edit'
17
+ @edit_product_three_special = empty_packet(@index.orange)
18
+ @edit_product_three_special['route.path'] = '/products/3/edit/special'
19
+ @edit_product_three_photo = empty_packet(@index.orange)
20
+ @edit_product_three_photo['route.path'] = '/products/3/photo/edit'
21
+ @edit_product_very_nested = empty_packet(@index.orange)
22
+ @edit_product_very_nested['route.path'] = '/category/1/view/products/3/photo/edit'
23
+ @edit_product_three_photo_thumbnail = empty_packet(@index.orange)
24
+ @edit_product_three_photo_thumbnail['route.path'] = '/products/3/photo/1/edit/thumbnail'
25
+ @show_banana_list = empty_packet(@index.orange)
26
+ @show_banana_list['route.path'] = '/bananas'
27
+ end
28
+ it "should not route if other middleware has" do
29
+ @index['route.router'] = true
30
+ @show_product_list['route.router'].should == false
31
+ @router.should_receive(:pass).twice
32
+ @router.should_receive(:should_route?).once.and_return(true)
33
+ @router.packet_call(@index)
34
+ @router.packet_call(@show_product_list)
35
+
36
+ end
37
+ it "should set router" do
38
+ @router.should_receive(:pass).once
39
+ @router.should_receive(:should_route?).once.and_return(true)
40
+ @show_product_list['route.router'].should == false
41
+ @router.packet_call(@show_product_list)
42
+ @show_product_list['route.router'].should == @router
43
+ end
44
+ it "should set routing vars if should_route true" do
45
+ @router.should_receive(:pass).at_least(:once)
46
+ @router.should_receive(:should_route?).at_least(:once).and_return(true)
47
+ @router.packet_call(@show_product_list)
48
+ @show_product_list['route.resource'].should == :products
49
+ @show_product_list['route.resource_action'].should == :list
50
+ @show_product_list['route.resource_id'].should == false
51
+ @show_product_one['route.resource_path'].should == false
52
+ @router.packet_call(@show_product_one)
53
+ @show_product_one['route.resource'].should == :products
54
+ @show_product_one['route.resource_action'].should == :show
55
+ @show_product_one['route.resource_id'].should == "1"
56
+ @show_product_one['route.resource_path'].should == ""
57
+ @router.packet_call(@edit_product_two)
58
+ @edit_product_two['route.resource'].should == :products
59
+ @edit_product_two['route.resource_action'].should == :edit
60
+ @edit_product_two['route.resource_id'].should == "2"
61
+ @show_product_one['route.resource_path'].should == ""
62
+ @router.packet_call(@edit_product_three_special)
63
+ @edit_product_three_special['route.nesting'].should == []
64
+ @edit_product_three_special['route.resource'].should == :products
65
+ @edit_product_three_special['route.resource_action'].should == :edit
66
+ @edit_product_three_special['route.resource_id'].should == "3"
67
+ @edit_product_three_special['route.resource_path'].should == "/special"
68
+ end
69
+ it "should handle nesting correctly" do
70
+ @router.should_receive(:pass).at_least(:once)
71
+ @router.should_receive(:should_route?).at_least(:once).and_return(true)
72
+ @router.packet_call(@edit_product_three_special)
73
+ @edit_product_three_special['route.nesting'].should == []
74
+ @edit_product_three_special['route.resource'].should == :products
75
+ @edit_product_three_special['route.resource_action'].should == :edit
76
+ @edit_product_three_special['route.resource_id'].should == "3"
77
+ @edit_product_three_special['route.resource_path'].should == "/special"
78
+ @router.packet_call(@edit_product_three_photo)
79
+ @edit_product_three_photo['route.nesting'].should_not == []
80
+ @edit_product_three_photo['route.resource'].should == :photo
81
+ @edit_product_three_photo['route.resource_action'].should == :edit
82
+ @edit_product_three_photo['route.resource_path'].should == ""
83
+ @router.packet_call(@edit_product_very_nested)
84
+ @edit_product_very_nested['route.nesting'].length.should == 2
85
+ @edit_product_very_nested['route.resource'].should == :photo
86
+ @edit_product_very_nested['route.resource_action'].should == :edit
87
+ @edit_product_very_nested['route.resource_path'].should == ""
88
+ @edit_product_very_nested['route.nesting'].first[:resource].should == :category
89
+ @edit_product_very_nested['route.nesting'].first[:resource_action].should == :view
90
+ @edit_product_very_nested['route.nesting'].first[:resource_id].should == "1"
91
+ @router.packet_call(@edit_product_three_photo_thumbnail)
92
+ @edit_product_three_photo_thumbnail['route.nesting'].should_not == []
93
+ @edit_product_three_photo_thumbnail['route.resource'].should == :photo
94
+ @edit_product_three_photo_thumbnail['route.resource_action'].should == :edit
95
+ @edit_product_three_photo_thumbnail['route.resource_id'].should == "1"
96
+ @edit_product_three_photo_thumbnail['route.resource_path'].should == "/thumbnail"
97
+ end
98
+
99
+
3
100
  end
@@ -16,4 +16,4 @@ end
16
16
  module MockMixinCore2
17
17
  def mixin_core_two
18
18
  end
19
- end
19
+ end
@@ -2,6 +2,19 @@ class MockModelResource < Orange::ModelResource
2
2
  use MockCarton
3
3
  end
4
4
 
5
+ class MockNestedResource < Orange::ModelResource
6
+ nests_in :products
7
+ end
8
+
9
+ class MockNestingResource < Orange::ModelResource
10
+ nests_many :photo
11
+ nests_in :category
12
+ end
13
+
14
+ class MockCategoryResource < Orange::ModelResource
15
+ nests_many :products
16
+ end
17
+
5
18
  class MockModelResourceOne < Orange::ModelResource
6
19
  use MockCarton
7
20
  def index(packet, *args)
@@ -0,0 +1,7 @@
1
+
2
+ class MockPlugin < Orange::Plugins::Base
3
+ assets_dir File.join('assets')
4
+ views_dir File.join('views')
5
+ templates_dir File.join('templates')
6
+ resource MockResource.new
7
+ end
@@ -16,4 +16,15 @@ describe Orange do
16
16
  p.should respond_to(:pulp_orange_one)
17
17
  p2.should respond_to(:pulp_orange_one)
18
18
  end
19
+ it "should allow plugins" do
20
+ Orange.plugins.should have(0).items
21
+ Orange.plugin(MockPlugin.new)
22
+ Orange.plugins.should have(1).items
23
+ Orange.plugins([:foo, :bar]).should have(0).items
24
+ Orange.plugins([:mock_plugin]).should have(1).items
25
+ c= Orange::Core.new(:plugins => [:foo, :bar])
26
+ c.plugins.should have(0).items
27
+ c2= Orange::Core.new(:plugins => [:mock_plugin])
28
+ c2.plugins.should have(1).items
29
+ end
19
30
  end
@@ -43,12 +43,6 @@ describe Orange::ModelResource do
43
43
  }.should raise_error(RuntimeError, "I see you're using other")
44
44
  end
45
45
 
46
- it "shouldn't give a shit" do
47
- lambda{
48
- MockModelResource.shit
49
- }.should raise_error(NoMethodError)
50
- end
51
-
52
46
  it "should call find_one if calling view_opts with is_list false" do
53
47
  a= MockModelResourceOne.new
54
48
  lambda{
@@ -91,11 +85,26 @@ describe Orange::ModelResource do
91
85
 
92
86
  it "should call view_extras after during view_opts" do
93
87
  a= MockModelResourceThree.new
88
+ c = Orange::Core.new
94
89
  lambda{
95
- a.view_opts(Orange::Packet.new(Orange::Core.new, {}), :list, true)
90
+ a.view_opts(Orange::Packet.new(c, {}), :list, true)
96
91
  }.should raise_error(RuntimeError, "calling find_extras")
97
92
  end
98
93
 
94
+ it "should have nesting methods" do
95
+ MockModelResourceOne.should respond_to(:nests_in)
96
+ MockModelResourceOne.nests_in :foo
97
+ MockModelResourceOne.new.nested_in.should include(:foo)
98
+ MockModelResourceTwo.should respond_to(:nests_many)
99
+ MockModelResourceTwo.nests_many :bar
100
+ MockModelResourceTwo.new.nests.should have_key(:bar)
101
+ MockModelResourceTwo.should respond_to(:nests_one)
102
+ MockModelResourceTwo.nests_one :baz
103
+ MockModelResourceTwo.new.nests.should have_key(:baz)
104
+ MockModelResourceTwo.new.nests[:bar].should == :many
105
+ MockModelResourceTwo.new.nests[:baz].should == :one
106
+ end
107
+
99
108
  it "should call haml parser with opts on do_view" do
100
109
  c= Orange::Core.new
101
110
  p= Orange::Packet.new(c, {})
@@ -13,7 +13,10 @@ require 'mock/mock_mixins'
13
13
  require 'mock/mock_router'
14
14
  require 'mock/mock_resource'
15
15
  require 'mock/mock_middleware'
16
+ require 'mock/mock_plugin'
16
17
  require 'rack/test'
18
+ require 'dm-sqlite-adapter'
19
+ DataMapper.setup(:default, "sqlite::memory:")
17
20
 
18
21
 
19
22
  Spec::Runner.configure do |config|
@@ -161,7 +161,7 @@ describe Orange::Stack do
161
161
  x.middlewarez.should have(1).middlewares
162
162
  x.prerouting
163
163
  x.middlewarez.should have(9).middlewares
164
- x.middlewarez.select{|y| y.instance_of?(Rack::AbstractFormat)}.should_not be_empty
164
+ x.middlewarez.select{|y| y.instance_of?(Orange::Middleware::AbstractFormat)}.should_not be_empty
165
165
  x.middlewarez.select{|y| y.instance_of?(Orange::Middleware::RouteSite)}.should_not be_empty
166
166
  end
167
167
 
@@ -189,7 +189,7 @@ describe Orange::Stack do
189
189
  x.middlewarez.should have(1).middlewares
190
190
  x.prerouting(:no_abstract_format => true)
191
191
  x.middlewarez.should have(8).middlewares
192
- x.middlewarez.select{|y| y.instance_of?(Rack::AbstractFormat)}.should be_empty
192
+ x.middlewarez.select{|y| y.instance_of?(Orange::Middleware::AbstractFormat)}.should be_empty
193
193
  x.middlewarez.select{|y| y.instance_of?(Orange::Middleware::RouteSite)}.should_not be_empty
194
194
  end
195
195