hookercookerman-merb-resource-scope 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE +20 -0
- data/README.textile +297 -0
- data/Rakefile +82 -0
- data/TODO +3 -0
- data/lib/dependencies.rb +1 -0
- data/lib/merb-resource-scope.rb +25 -0
- data/lib/merb-resource-scope/controller/actions.rb +67 -0
- data/lib/merb-resource-scope/controller/helpers.rb +252 -0
- data/lib/merb-resource-scope/controller/scoped_resource_mixin.rb +300 -0
- data/lib/merb-resource-scope/controller/singleton_actions.rb +25 -0
- data/lib/merb-resource-scope/merbtasks.rb +6 -0
- data/lib/merb-resource-scope/router/resource_specification.rb +144 -0
- data/lib/merb-resource-scope/specification.rb +36 -0
- data/spec/app.rb +7 -0
- data/spec/controller/_build_enclosing_scope_spec.rb +107 -0
- data/spec/controller/scope_resource_mixin_spec.rb +0 -0
- data/spec/integration/admin_posts_controller_spec.rb +158 -0
- data/spec/integration/campaign_post_comments_controller_spec.rb +158 -0
- data/spec/integration/campaign_posts_controller_spec.rb +73 -0
- data/spec/integration/campaigns_controller_spec.rb +43 -0
- data/spec/integration/images_spec.rb +17 -0
- data/spec/integration/myhome_controller_spec.rb +29 -0
- data/spec/integration/myhome_posts_comment_controller_spec.rb +44 -0
- data/spec/integration/myhome_posts_controller_spec.rb +55 -0
- data/spec/integration/profile_images_controller_spec.rb +61 -0
- data/spec/integration/tags_controller_spec.rb +34 -0
- data/spec/integration/user_posts_controller_spec.rb +71 -0
- data/spec/request_with_controller.rb +103 -0
- data/spec/spec_helper.rb +33 -0
- data/spec/specification_spec.rb +1 -0
- metadata +88 -0
@@ -0,0 +1,34 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
+
|
3
|
+
given "requsting post_images/:id/tags" do
|
4
|
+
DataMapper.auto_migrate!
|
5
|
+
@post_image = PostImage.gen
|
6
|
+
Tag.gen :post_image => @post_image
|
7
|
+
@rack = request_with_controller("/post_images/#{@post_image.id}/tags")
|
8
|
+
end
|
9
|
+
|
10
|
+
describe "tags controller spec", :given => "requsting post_images/:id/tags" do
|
11
|
+
it "should not be cool 'requsting post_images/:id/tags' as there is no action" do
|
12
|
+
@rack.status.should == 500
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
given "requsting post_images/:id/tags/:id" do
|
17
|
+
DataMapper.auto_migrate!
|
18
|
+
@post_image = PostImage.gen
|
19
|
+
@tag = Tag.gen :post_image => @post_image
|
20
|
+
@rack = request_with_controller("/post_images/#{@post_image.id}/tags/#{@tag.id}")
|
21
|
+
end
|
22
|
+
|
23
|
+
describe "tags controller spec", :given => "requsting post_images/:id/tags/:id" do
|
24
|
+
it "should be cool 'requsting post_images/:id/tags/:id' as there there is an action" do
|
25
|
+
@rack.should be_successful
|
26
|
+
end
|
27
|
+
it "should have a current_resource of 'PostImage.get(:id).tags.get(@tag.id)'" do
|
28
|
+
@rack.controller.current_resource.should == PostImage.get(@post_image.id).tags.get(@tag.id)
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should have a enclosing_resource of 'PostImage.get(:id)'" do
|
32
|
+
@rack.controller.enclosing_resource.should == PostImage.get(@post_image.id)
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
+
|
3
|
+
given "requsting '/users/hookercookerman/posts/merb-is-gravey'" do
|
4
|
+
DataMapper.auto_migrate!
|
5
|
+
@user = User.gen :login => "hookercookerman"
|
6
|
+
@post = Post.gen :title => "merb-is-gravey", :user => @user
|
7
|
+
@rack = request_with_controller("/users/hookercookerman/posts/merb-is-gravey")
|
8
|
+
end
|
9
|
+
|
10
|
+
describe "Posts controller spec", :given => "requsting '/users/hookercookerman/posts/merb-is-gravey'" do
|
11
|
+
it "should be cool 'requsting requsting /users/hookercookerman/posts/merb-is-gravey" do
|
12
|
+
@rack.should be_successful
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should have an current_resource of User.first(:conditions => {:login => 'hookercookerman'}).post.first :conditions => {:title => 'merb-is-gravey}" do
|
16
|
+
@rack.controller.current_resource.should == @post
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should have an enclosing resource of User.first(:conditions => {:login => 'hookercookerman'})" do
|
20
|
+
@rack.controller.enclosing_resource.should == @user
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should have a enclosing_resource_url of /users/:id" do
|
24
|
+
@rack.controller.enclosing_resource_url.should == "/users/hookercookerman"
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should have enclosing_resources_url of /users" do
|
28
|
+
@rack.controller.enclosing_resources_url.should == "/users"
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should have current_resources_url of /users/:id/posts" do
|
32
|
+
@rack.controller.current_resources_url.should == "/users/hookercookerman/posts"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
|
37
|
+
given "requsting '/users/hookercookerman/posts via POST'" do
|
38
|
+
DataMapper.auto_migrate!
|
39
|
+
@user = User.gen :login => "hookercookerman"
|
40
|
+
@post = Post.gen :title => "merb-is-gravey", :user => @user
|
41
|
+
@rack = request_with_controller("/users/hookercookerman/posts", :method => "POST",
|
42
|
+
:params => {:post => {:title => "beans", :body => "eggs"}})
|
43
|
+
end
|
44
|
+
|
45
|
+
describe "Posts controller spec", :given => "requsting '/users/hookercookerman/posts via POST'" do
|
46
|
+
it "should have an current_resource of" do
|
47
|
+
@rack.controller.current_resource.body.should == "eggs"
|
48
|
+
@rack.controller.current_resource.title.should == "beans"
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should be a saved record" do
|
52
|
+
@rack.controller.current_resource.new_record? == false
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
|
57
|
+
given "requsting '/users/10' where user does not exist" do
|
58
|
+
DataMapper.auto_migrate!
|
59
|
+
@rack = request_with_controller("/users/10")
|
60
|
+
end
|
61
|
+
|
62
|
+
describe "User controller spec", :given => "requsting '/users/10' where user does not exist" do
|
63
|
+
it "should not be cool 'requsting requsting requsting '/users/10'" do
|
64
|
+
@rack.should_not be_successful
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
describe "User controller spec where user does not exist" do
|
69
|
+
it "should be cool 'requsting requsting requsting '/users/10'" do
|
70
|
+
end
|
71
|
+
end
|
@@ -0,0 +1,103 @@
|
|
1
|
+
# OK OK OK OK
|
2
|
+
# its a hack, but had to specs up and running
|
3
|
+
# when find a way to do this properly
|
4
|
+
# WHY DID YOU DO THIS????
|
5
|
+
# basically I need to go through the routes fully in the specs, and I also need access to the controller
|
6
|
+
# hence the names request_with_controller
|
7
|
+
|
8
|
+
module Merb
|
9
|
+
module Rack
|
10
|
+
class ResourceTest
|
11
|
+
|
12
|
+
# The main rack application call method. This is the entry point from rack (and the webserver)
|
13
|
+
# to your application.
|
14
|
+
#
|
15
|
+
# ==== Parameters
|
16
|
+
# env<Hash>:: A rack request of parameters.
|
17
|
+
#
|
18
|
+
# ==== Returns
|
19
|
+
# <Array>:: A rack response of [status<Integer>, headers<Hash>, body<String, Stream>]
|
20
|
+
#
|
21
|
+
# @api private
|
22
|
+
def call(env)
|
23
|
+
begin
|
24
|
+
request = Merb::Request.new(env)
|
25
|
+
request.find_route!
|
26
|
+
klass = request.controller
|
27
|
+
|
28
|
+
controller = klass.new(request)
|
29
|
+
controller._dispatch(request.params[:action])
|
30
|
+
rescue Object => e
|
31
|
+
return [500, {Merb::Const::CONTENT_TYPE => Merb::Const::TEXT_SLASH_HTML}, e.message + Merb::Const::BREAK_TAG + e.backtrace.join(Merb::Const::BREAK_TAG)]
|
32
|
+
end
|
33
|
+
Merb.logger.info
|
34
|
+
Merb::Const::DOUBLE_NEWLINE
|
35
|
+
Merb.logger.flush
|
36
|
+
|
37
|
+
# end
|
38
|
+
controller.rack_response << controller
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
module Merb
|
45
|
+
module Test
|
46
|
+
module RequestHelper
|
47
|
+
|
48
|
+
|
49
|
+
def request_with_controller(uri, env = {})
|
50
|
+
uri = url(uri) if uri.is_a?(Symbol)
|
51
|
+
uri = URI(uri)
|
52
|
+
uri.scheme ||= "http"
|
53
|
+
uri.host ||= "example.org"
|
54
|
+
|
55
|
+
if (env[:method] == "POST" || env["REQUEST_METHOD"] == "POST")
|
56
|
+
params = env.delete(:body_params) if env.key?(:body_params)
|
57
|
+
params = env.delete(:params) if env.key?(:params) && !env.key?(:input)
|
58
|
+
|
59
|
+
unless env.key?(:input)
|
60
|
+
env[:input] = Merb::Parse.params_to_query_string(params)
|
61
|
+
env["CONTENT_TYPE"] = "application/x-www-form-urlencoded"
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
if env[:params]
|
66
|
+
uri.query = [
|
67
|
+
uri.query, Merb::Parse.params_to_query_string(env.delete(:params))
|
68
|
+
].compact.join("&")
|
69
|
+
end
|
70
|
+
|
71
|
+
ignore_cookies = env.has_key?(:jar) && env[:jar].nil?
|
72
|
+
|
73
|
+
unless ignore_cookies
|
74
|
+
# Setup a default cookie jar container
|
75
|
+
@__cookie_jar__ ||= Merb::Test::CookieJar.new
|
76
|
+
# Grab the cookie group name
|
77
|
+
jar = env.delete(:jar) || :default
|
78
|
+
# Set the cookie header with the cookies
|
79
|
+
env["HTTP_COOKIE"] = @__cookie_jar__.for(jar, uri)
|
80
|
+
end
|
81
|
+
|
82
|
+
app = Merb::Rack::ResourceTest.new
|
83
|
+
rack = app.call(::Rack::MockRequest.env_for(uri.to_s, env))
|
84
|
+
|
85
|
+
|
86
|
+
rack = Struct.new(:status, :headers, :body, :url, :env, :controller).
|
87
|
+
new(rack[0], rack[1], rack[2], uri, env, rack[3])
|
88
|
+
|
89
|
+
@__cookie_jar__.update(jar, uri, rack.headers["Set-Cookie"]) unless ignore_cookies
|
90
|
+
|
91
|
+
Merb::Dispatcher.work_queue.size.times do
|
92
|
+
Merb::Dispatcher.work_queue.pop.call
|
93
|
+
end
|
94
|
+
|
95
|
+
yield rack.controller if block_given?
|
96
|
+
rack
|
97
|
+
end
|
98
|
+
alias requesting_with_controller request_with_controller
|
99
|
+
|
100
|
+
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
$:.push File.join(File.dirname(__FILE__), '..', 'test-stack')
|
2
|
+
$:.push File.join(File.dirname(__FILE__), '..', 'lib')
|
3
|
+
|
4
|
+
require 'rubygems'
|
5
|
+
|
6
|
+
# Add the local gems dir if found within the app root; any dependencies loaded
|
7
|
+
# hereafter will try to load from the local gems before loading system gems.
|
8
|
+
if (local_gem_dir = File.join(File.dirname(__FILE__), ".." , "test-stack", "gems")) && $BUNDLE.nil?
|
9
|
+
$BUNDLE = true; Gem.clear_paths; Gem.path.unshift(local_gem_dir)
|
10
|
+
end
|
11
|
+
|
12
|
+
require "merb-core"
|
13
|
+
require 'merb-resource-scope'
|
14
|
+
|
15
|
+
require "spec"
|
16
|
+
|
17
|
+
require File.expand_path(File.dirname(__FILE__) + '/request_with_controller')
|
18
|
+
|
19
|
+
Merb.start_environment(
|
20
|
+
:testing => true,
|
21
|
+
:adapter => 'runner',
|
22
|
+
:environment => ENV['MERB_ENV'] || 'test',
|
23
|
+
:merb_root => File.dirname(__FILE__) / ".." / "test-stack",
|
24
|
+
:log_file => File.dirname(__FILE__) / ".." / "test-stack" / "log" / "merb_test.log"
|
25
|
+
)
|
26
|
+
|
27
|
+
Spec::Runner.configure do |config|
|
28
|
+
config.include(Merb::Test::ViewHelper)
|
29
|
+
config.include(Merb::Test::RouteHelper)
|
30
|
+
config.include(Merb::Test::ControllerHelper)
|
31
|
+
end
|
32
|
+
|
33
|
+
require File.dirname(__FILE__) / ".." / "test-stack" / "spec" / "spec_fixtures"
|
@@ -0,0 +1 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
metadata
ADDED
@@ -0,0 +1,88 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: hookercookerman-merb-resource-scope
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- hookercookerman
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2008-10-24 00:00:00 -07:00
|
13
|
+
default_executable:
|
14
|
+
dependencies: []
|
15
|
+
|
16
|
+
description: Merb plugin that provides scoped resourceful controllers
|
17
|
+
email: hookercookerman@gmail.com
|
18
|
+
executables: []
|
19
|
+
|
20
|
+
extensions: []
|
21
|
+
|
22
|
+
extra_rdoc_files:
|
23
|
+
- README.textile
|
24
|
+
- LICENSE
|
25
|
+
- TODO
|
26
|
+
files:
|
27
|
+
- LICENSE
|
28
|
+
- README.textile
|
29
|
+
- Rakefile
|
30
|
+
- TODO
|
31
|
+
- lib/dependencies.rb
|
32
|
+
- lib/merb-resource-scope
|
33
|
+
- lib/merb-resource-scope/controller
|
34
|
+
- lib/merb-resource-scope/controller/actions.rb
|
35
|
+
- lib/merb-resource-scope/controller/helpers.rb
|
36
|
+
- lib/merb-resource-scope/controller/scoped_resource_mixin.rb
|
37
|
+
- lib/merb-resource-scope/controller/singleton_actions.rb
|
38
|
+
- lib/merb-resource-scope/merbtasks.rb
|
39
|
+
- lib/merb-resource-scope/router
|
40
|
+
- lib/merb-resource-scope/router/resource_specification.rb
|
41
|
+
- lib/merb-resource-scope/specification.rb
|
42
|
+
- lib/merb-resource-scope.rb
|
43
|
+
has_rdoc: true
|
44
|
+
homepage: http://www.dynamic50.com/
|
45
|
+
post_install_message:
|
46
|
+
rdoc_options: []
|
47
|
+
|
48
|
+
require_paths:
|
49
|
+
- lib
|
50
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: "0"
|
55
|
+
version:
|
56
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - ">="
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: "0"
|
61
|
+
version:
|
62
|
+
requirements: []
|
63
|
+
|
64
|
+
rubyforge_project:
|
65
|
+
rubygems_version: 1.2.0
|
66
|
+
signing_key:
|
67
|
+
specification_version: 2
|
68
|
+
summary: Merb plugin that provides scoped resourceful controllers
|
69
|
+
test_files:
|
70
|
+
- spec/app.rb
|
71
|
+
- spec/controller
|
72
|
+
- spec/controller/_build_enclosing_scope_spec.rb
|
73
|
+
- spec/controller/scope_resource_mixin_spec.rb
|
74
|
+
- spec/integration
|
75
|
+
- spec/integration/admin_posts_controller_spec.rb
|
76
|
+
- spec/integration/campaign_post_comments_controller_spec.rb
|
77
|
+
- spec/integration/campaign_posts_controller_spec.rb
|
78
|
+
- spec/integration/campaigns_controller_spec.rb
|
79
|
+
- spec/integration/images_spec.rb
|
80
|
+
- spec/integration/myhome_controller_spec.rb
|
81
|
+
- spec/integration/myhome_posts_comment_controller_spec.rb
|
82
|
+
- spec/integration/myhome_posts_controller_spec.rb
|
83
|
+
- spec/integration/profile_images_controller_spec.rb
|
84
|
+
- spec/integration/tags_controller_spec.rb
|
85
|
+
- spec/integration/user_posts_controller_spec.rb
|
86
|
+
- spec/request_with_controller.rb
|
87
|
+
- spec/spec_helper.rb
|
88
|
+
- spec/specification_spec.rb
|