hookercookerman-merb-resource-scope 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (31) hide show
  1. data/LICENSE +20 -0
  2. data/README.textile +297 -0
  3. data/Rakefile +82 -0
  4. data/TODO +3 -0
  5. data/lib/dependencies.rb +1 -0
  6. data/lib/merb-resource-scope.rb +25 -0
  7. data/lib/merb-resource-scope/controller/actions.rb +67 -0
  8. data/lib/merb-resource-scope/controller/helpers.rb +252 -0
  9. data/lib/merb-resource-scope/controller/scoped_resource_mixin.rb +300 -0
  10. data/lib/merb-resource-scope/controller/singleton_actions.rb +25 -0
  11. data/lib/merb-resource-scope/merbtasks.rb +6 -0
  12. data/lib/merb-resource-scope/router/resource_specification.rb +144 -0
  13. data/lib/merb-resource-scope/specification.rb +36 -0
  14. data/spec/app.rb +7 -0
  15. data/spec/controller/_build_enclosing_scope_spec.rb +107 -0
  16. data/spec/controller/scope_resource_mixin_spec.rb +0 -0
  17. data/spec/integration/admin_posts_controller_spec.rb +158 -0
  18. data/spec/integration/campaign_post_comments_controller_spec.rb +158 -0
  19. data/spec/integration/campaign_posts_controller_spec.rb +73 -0
  20. data/spec/integration/campaigns_controller_spec.rb +43 -0
  21. data/spec/integration/images_spec.rb +17 -0
  22. data/spec/integration/myhome_controller_spec.rb +29 -0
  23. data/spec/integration/myhome_posts_comment_controller_spec.rb +44 -0
  24. data/spec/integration/myhome_posts_controller_spec.rb +55 -0
  25. data/spec/integration/profile_images_controller_spec.rb +61 -0
  26. data/spec/integration/tags_controller_spec.rb +34 -0
  27. data/spec/integration/user_posts_controller_spec.rb +71 -0
  28. data/spec/request_with_controller.rb +103 -0
  29. data/spec/spec_helper.rb +33 -0
  30. data/spec/specification_spec.rb +1 -0
  31. metadata +88 -0
@@ -0,0 +1,158 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ given "requsting campaigns/:id/posts/:id/comments" do
4
+ DataMapper.auto_migrate!
5
+ @user = User.gen
6
+ @campaign = Campaign.gen
7
+ @post = Post.gen :campaign => @campaign, :user => @user
8
+ Comment.gen :post => @post
9
+ @rack = request_with_controller("/campaigns/#{@campaign.id}/posts/#{@post.id}/comments")
10
+ end
11
+
12
+ describe "comments controller spec", :given => "requsting campaigns/:id/posts/:id/comments" do
13
+ it "should be cool to request my 'campaigns/:id/posts/:id/comments'" do
14
+ @rack.should be_successful
15
+ end
16
+
17
+ it "should current_resource as Campaign.get(:id).posts.get(:id).comments" do
18
+ @rack.controller.current_resources.should == Campaign.get(@campaign.id).posts.get(@post.id).comments
19
+ end
20
+
21
+ it "should have a current_resoures url of 'campaigns/:id/posts/:id/comments'" do
22
+ @rack.controller.current_resources_url.should == "/campaigns/#{@campaign.id}/posts/#{@post.id}/comments"
23
+ end
24
+
25
+ it "should have a enclosing_resource_url of 'campaigns/:id/posts/:id'" do
26
+ @rack.controller.enclosing_resource_url.should == "/campaigns/#{@campaign.id}/posts/#{@post.id}"
27
+ end
28
+
29
+ it "should have a enclosing_resources_url of 'campaigns/:id/posts'" do
30
+ @rack.controller.enclosing_resources_url.should == "/campaigns/#{@campaign.id}/posts"
31
+ end
32
+
33
+ it "Should have a body of 'Comments controller, index action'" do
34
+ @rack.body.to_s.should contain("Comments controller, index action")
35
+ end
36
+
37
+ it "should have an instance variable of @comments" do
38
+ @rack.controller.instance_variable_get("@comments").should_not be_nil
39
+ end
40
+
41
+ it "should have an instance variable of @post" do
42
+ @rack.controller.instance_variable_get("@post").should_not be_nil
43
+ end
44
+
45
+ it "should have an instance variable of @campaign" do
46
+ @rack.controller.instance_variable_get("@campaign").should_not be_nil
47
+ end
48
+
49
+ describe "generating urls" do
50
+ it "should have a edit enclosing_resource_url of 'campaigns/:id/posts:id/posts/:id/edit'" do
51
+ @rack.controller.enclosing_resource_url(:edit).should == "/campaigns/#{@campaign.id}/posts/#{@post.id}/edit"
52
+ end
53
+
54
+ it "should have a new new_enclosing_resource_url of 'campaigns/:id/posts:id/posts/new'" do
55
+ @rack.controller.new_enclosing_resource_url.should == "/campaigns/#{@campaign.id}/posts/new"
56
+ end
57
+ end
58
+ end
59
+ #
60
+ given "requsting campaigns/:id/posts/:id/comments/new" do
61
+ DataMapper.auto_migrate!
62
+ @user = User.gen
63
+ @campaign = Campaign.gen
64
+ @post = Post.gen :campaign => @campaign, :user => @user
65
+ Comment.gen :post => @post
66
+ @rack = request_with_controller("/campaigns/#{@campaign.id}/posts/#{@post.id}/comments/new")
67
+ end
68
+
69
+ describe "Comments controller spec", :given => "requsting campaigns/:id/posts/:id/comments/new" do
70
+ it "should be cool to request my 'campaigns/:id/posts/:id/comments/new'" do
71
+ @rack.should be_successful
72
+ end
73
+
74
+ it "should have an enclosing resource of post" do
75
+ @rack.controller.enclosing_resource == @post
76
+ end
77
+
78
+ it "should create a new comment with the attributes with a post'" do
79
+ @rack.controller.new_resource.post.should == @post
80
+ end
81
+
82
+ it "should have current_resources_url of " do
83
+ @rack.controller.current_resources_url == "/campaigns/#{@campaign.id}/posts/#{@post.id}/comments"
84
+ end
85
+
86
+ it "should have an enclosing_resource_url of '/campaigns/:id/posts/:id'" do
87
+ @rack.controller.enclosing_resource_url.should == "/campaigns/#{@campaign.id}/posts/#{@post.id}"
88
+ end
89
+
90
+ it "should have a enclosing_resources_url of '/campaigns/:id/posts'" do
91
+ @rack.controller.enclosing_resources_url.should == "/campaigns/#{@campaign.id}/posts"
92
+ end
93
+ end
94
+ #
95
+ #
96
+
97
+ given "requsting campaigns/:id/posts/:id/comments/:id with PUT" do
98
+ DataMapper.auto_migrate!
99
+ @user = User.gen
100
+ @campaign = Campaign.gen
101
+ @post = Post.gen :campaign => @campaign, :user => @user
102
+ @comment = Comment.gen :post => @post
103
+ @rack = request_with_controller("/campaigns/#{@campaign.id}/posts/#{@post.id}/comments/#{@comment.id}", :method => "PUT",
104
+ :params => {:comment => {:body => "themakeup"}})
105
+ end
106
+
107
+
108
+ describe "Comments controller spec", :given => "requsting campaigns/:id/posts/:id/comments/:id with PUT" do
109
+ it "should be cool to request my 'campaigns/:id/posts/:id/comments/:id with PUT' and then redirect" do
110
+ @rack.should redirect_to("/campaigns/#{@campaign.id}/posts/#{@post.id}/comments/#{@comment.id}")
111
+ end
112
+
113
+ it "should update the comment to have the new body of 'themakeup'" do
114
+ @comment.reload.body.should == "themakeup"
115
+ end
116
+ end
117
+
118
+
119
+
120
+ given "requsting campaigns/:id/posts/:id/comments with POST" do
121
+ DataMapper.auto_migrate!
122
+ @user = User.gen
123
+ @campaign = Campaign.gen
124
+ @post = Post.gen :campaign => @campaign, :user => @user
125
+ @rack = request_with_controller("/campaigns/#{@campaign.id}/posts/#{@post.id}/comments", :method => "POST",
126
+ :params => {:comment => {:body => "thedoors"}})
127
+ end
128
+
129
+ describe "Comments controller spec", :given => "requsting campaigns/:id/posts/:id/comments with POST" do
130
+ it "should be cool to request my 'campaigns/:id/posts/:id/comments with POST' and then redirect" do
131
+ @rack.should redirect_to("/campaigns/#{@campaign.id}/posts/#{@post.id}/comments")
132
+ end
133
+
134
+ it "should create a new comment with a body of 'thedoors'" do
135
+ Comment.first :conditions => {:body => "thedoors"}
136
+ end
137
+ end
138
+
139
+
140
+
141
+ given "requsting campaigns/:id/posts/:id/comments/:id with DELETE" do
142
+ DataMapper.auto_migrate!
143
+ @user = User.gen
144
+ @campaign = Campaign.gen
145
+ @post = Post.gen :campaign => @campaign, :user => @user
146
+ @comment = Comment.gen :post => @post, :body => "whattheegg"
147
+ @rack = request_with_controller("/campaigns/#{@campaign.id}/posts/#{@post.id}/comments/#{@comment.id}", :method => "DELETE")
148
+ end
149
+
150
+ describe "Comments controller spec", :given => "requsting campaigns/:id/posts/:id/comments/:id with DELETE" do
151
+ it "should be cool to request my 'campaigns/:id/posts/:id/comments/:id with DELETE' and then redirect" do
152
+ @rack.should redirect_to("/campaigns/#{@campaign.id}/posts/#{@post.id}/comments")
153
+ end
154
+
155
+ it "should delete the comment" do
156
+ Comment.first(:conditions => {:body => "whattheegg"}).should be_nil
157
+ end
158
+ end
@@ -0,0 +1,73 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ given "requsting campaign/:id/posts" do
4
+ DataMapper.auto_migrate!
5
+ @user = User.gen
6
+ @campaign = Campaign.gen
7
+ 100.times {Post.gen :campaign => @campaign, :user => @user}
8
+ @rack = request_with_controller("/campaigns/#{@campaign.id}/posts")
9
+ end
10
+
11
+ describe "posts controller spec", :given => "requsting campaign/:id/posts" do
12
+ it "should be cool to request my 'campaigns/:id/posts'" do
13
+ @rack.should be_successful
14
+ end
15
+
16
+ it "should have current_resources as Campaign.get(campaign_id).posts" do
17
+ @rack.controller.current_resources.should == Campaign.get(@campaign.id).posts
18
+ end
19
+
20
+ it "should have an enclosing resource of Campaign.get(:id)" do
21
+ @rack.controller.enclosing_resource.should == Campaign.get(@campaign.id)
22
+ end
23
+
24
+ it "should have a enclosing_resource_url of '/campaigns/:id'" do
25
+ @rack.controller.enclosing_resource_url.should == "/campaigns/#{@campaign.id}"
26
+ end
27
+
28
+ it "should have a enclosing_resources_url of '/campaigns'" do
29
+ @rack.controller.enclosing_resources_url.should == "/campaigns"
30
+ end
31
+
32
+ it "should have a current_specificaiton with a class_name of CampaignPost via using the scoped_class_name" do
33
+ @rack.controller._current_specification.klass_name.should == "CampaignPost"
34
+ end
35
+
36
+ it "should have a current_specification klass of nil as CampaignPost does not exist" do
37
+ @rack.controller._current_specification.klass.should be_nil
38
+ end
39
+ end
40
+ #
41
+ #
42
+
43
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
44
+
45
+ given "requsting campaign/:id/posts/id" do
46
+ DataMapper.auto_migrate!
47
+ @user = User.gen
48
+ @campaign = Campaign.gen
49
+ @post = Post.gen :campaign => @campaign, :user => @user
50
+ @rack = request_with_controller("/campaigns/#{@campaign.id}/posts/#{@post.id}")
51
+ end
52
+
53
+ describe "Posts controller spec", :given => "requsting campaign/:id/posts/id" do
54
+ it "should be cool to request my 'campaigns/:id/posts/:id'" do
55
+ @rack.should be_successful
56
+ end
57
+
58
+ it "should have current_resources as Campaign.get(campaign_id).posts" do
59
+ @rack.controller.current_resource.should == Campaign.get(@campaign.id).posts.get(@post.id)
60
+ end
61
+
62
+ it "should have an enclosing resource of Campaign.get(:id)" do
63
+ @rack.controller.enclosing_resource.should == Campaign.get(@campaign.id)
64
+ end
65
+
66
+ it "should have a enclosing_resource_url of '/campaigns/:id'" do
67
+ @rack.controller.enclosing_resource_url.should == "/campaigns/#{@campaign.id}"
68
+ end
69
+
70
+ it "should have a enclosing_resources_url of '/campaigns'" do
71
+ @rack.controller.enclosing_resources_url.should == "/campaigns"
72
+ end
73
+ end
@@ -0,0 +1,43 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ given "requsting /campaigns" do
4
+ DataMapper.auto_migrate!
5
+ @campaign = Campaign.gen
6
+
7
+ @rack = request_with_controller("/campaigns")
8
+ end
9
+
10
+ describe "posts controller spec", :given => "requsting /campaigns" do
11
+ it "should be cool to request my 'campaign/'" do
12
+ @rack.should be_successful
13
+ end
14
+
15
+ it "should have current_resources as Campaign.all" do
16
+ @rack.controller.current_resources.should == Campaign.all
17
+ end
18
+
19
+ it "should have a current_resoures url of '/campaigns'" do
20
+ @rack.controller.current_resources_url.should == '/campaigns'
21
+ end
22
+ end
23
+ #
24
+ given "requsting /campaigns/:id" do
25
+ DataMapper.auto_migrate!
26
+ @campaign = Campaign.gen
27
+
28
+ @rack = request_with_controller("/campaigns/#{@campaign.id}")
29
+ end
30
+
31
+ describe "Campaigns controller spec", :given => "requsting /campaigns/:id" do
32
+ it "should be cool to request my 'campaign/:id'" do
33
+ @rack.should be_successful
34
+ end
35
+
36
+ it "should have current_resources as Campaign.get(campaign_id)" do
37
+ @rack.controller.current_resource.should == Campaign.get(@campaign.id)
38
+ end
39
+
40
+ it "should have a current_resoure url of '/campaigns/:id'" do
41
+ @rack.controller.current_resource_url(@campaign).should == "/campaigns/#{@campaign.id}"
42
+ end
43
+ end
@@ -0,0 +1,17 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+ given "requsting /images" do
3
+ DataMapper.auto_migrate!
4
+ @imags = 10.times{Image.gen}
5
+ @rack = request_with_controller("/images")
6
+ end
7
+
8
+ describe "images controller spec", :given => "requsting /images" do
9
+ it "should be cool 'images' as there there is an action" do
10
+ @rack.should be_successful
11
+ end
12
+
13
+ it "should have a current_resources of 'Image.all'" do
14
+ @rack.controller.current_resources.should == Image.all
15
+ end
16
+
17
+ end
@@ -0,0 +1,29 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ given "requsting 'myhome'" do
4
+ User.gen
5
+ @rack = request_with_controller("/myhome")
6
+ end
7
+
8
+ describe "myhome controller spec", :given => "requsting 'myhome'" do
9
+ it "should be cool to request my home" do
10
+ @rack.should be_successful
11
+ end
12
+
13
+ it "should have a current_resource (current_user == User.first)" do
14
+ @rack.controller.current_resource.should == User.first
15
+ end
16
+
17
+ it "should have a current_resoure url of '/myhome'" do
18
+ @rack.controller.current_resource_url(:myhome).should == "/myhome"
19
+ end
20
+
21
+ it "should have enclosing_resource_url of nil" do
22
+ @rack.controller.enclosing_resource_url.should be_nil
23
+ end
24
+ end
25
+
26
+ given "requsting 'myhome' with index'" do
27
+ User.gen
28
+ @rack = request_with_controller("/myhome/index")
29
+ end
@@ -0,0 +1,44 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+ given "requsting myhome/posts/:id/comments" do
3
+ DataMapper.auto_migrate!
4
+ @user = User.gen
5
+ @post = Post.gen :user => @user
6
+ @comments = 10.times {Comment.gen :post => @post}
7
+ @rack = request_with_controller("/myhome/posts/#{@post.id}/comments")
8
+ end
9
+
10
+ describe "Comments controller spec", :given => "requsting myhome/posts/:id/comments" do
11
+ it "should be cool to request my 'requsting myhome/posts/:id/comments'" do
12
+ @rack.should be_successful
13
+ end
14
+
15
+ it "should have a current_resources as User.first.posts.get(:id).comments" do
16
+ @rack.controller.current_resources.should == User.first.posts.get(@post.id).comments
17
+ end
18
+
19
+ it "should have a enclosing_resource of User.first.posts.get(:id)" do
20
+ @rack.controller.enclosing_resource.should == User.first.posts.get(@post.id)
21
+ end
22
+
23
+ it "should have an enclosing_resource_url of /myhome/posts/:id" do
24
+ @rack.controller.enclosing_resource_url.should == "/myhome/posts/#{@post.id}"
25
+ end
26
+
27
+ it "should be able to extend the enclosing_resource_url with image named_route" do
28
+ @rack.controller.enclosing_resource_url{|route| route.add(:image)}.should == "/myhome/posts/#{@post.id}/image"
29
+ end
30
+
31
+ it "should be able to extend the enclosing_resource_url with new image named_route" do
32
+ @rack.controller.enclosing_resource_url{|route| route.add(:image, :new)}.should == "/myhome/posts/#{@post.id}/image/new"
33
+ end
34
+
35
+ it "should be able to extend the enclosing_resource_url with edit image named_route" do
36
+ @rack.controller.enclosing_resource_url{|route| route.add(:image, :edit)}.should == "/myhome/posts/#{@post.id}/image/edit"
37
+ end
38
+
39
+ it "should have an enclosing_resources_url of /myhome/posts" do
40
+ @rack.controller.enclosing_resources_url.should == "/myhome/posts"
41
+ end
42
+
43
+
44
+ end
@@ -0,0 +1,55 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ given "requsting myhome/posts" do
4
+ DataMapper.auto_migrate!
5
+ @user = User.gen
6
+ 10.times {Post.gen}
7
+ @rack = request_with_controller("/myhome/posts")
8
+ end
9
+
10
+ describe "Posts controller spec", :given => "requsting myhome/posts" do
11
+ it "should be cool to request my 'myhome/posts'" do
12
+ @rack.should be_successful
13
+ end
14
+
15
+ it "should have current_resources as User.first.posts.all" do
16
+ @rack.controller.current_resources.should == User.first.posts.all
17
+ end
18
+
19
+ it "should have a current_resoures url of 'myhome/posts'" do
20
+ @rack.controller.current_resources_url.should == '/myhome/posts'
21
+ end
22
+
23
+ it "should have an enclosing resource of User.first" do
24
+ @rack.controller.enclosing_resource.should == User.first
25
+ end
26
+
27
+ it "should have a enclosing_resource_url of 'myhome'" do
28
+ @rack.controller.enclosing_resource_url.should == '/myhome'
29
+ end
30
+
31
+ describe "generating urls" do
32
+ it "should have a edit enclosing_resource_url of 'myhome/edit" do
33
+ @rack.controller.enclosing_resource_url(:edit).should == "/myhome/edit"
34
+ end
35
+
36
+ it "should have a extend enclosing_resource_url of 'myhome/edit with posts" do
37
+ @rack.controller.enclosing_resource_url{|route| route.add(:posts)} == "/myhome/posts"
38
+ end
39
+
40
+ it "should have a extend enclosing_resource_url of 'myhome/edit with posts/:id" do
41
+ @post = Post.pick
42
+ @rack.controller.enclosing_resource_url{|route| route.add(:post, @post)} == "/myhome/posts/#{@post.id}"
43
+ end
44
+
45
+ it "should have a extend enclosing_resource_url of 'myhome/edit with posts/:id/edit" do
46
+ @post = Post.pick
47
+ @rack.controller.enclosing_resource_url{|route| route.add(:post, :edit, @post)} == "/myhome/posts/#{@post.id}/edit"
48
+ end
49
+
50
+ it "should have a new enclosing_resources_url of 'myhome/new'" do
51
+ @rack.controller.enclosing_resource_url(:new).should == "/myhome/new"
52
+ end
53
+ end
54
+ end
55
+
@@ -0,0 +1,61 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ given "requsting myhome/profile_image" do
4
+ DataMapper.auto_migrate!
5
+ @user = User.gen
6
+ @post_image = ProfileImage.gen :user => @user
7
+ @rack = request_with_controller("/myhome/profile_image")
8
+ end
9
+
10
+ describe "profile_images controller spec", :given => "requsting myhome/profile_image" do
11
+ it "should be cool to request my 'myhome/profile_image'" do
12
+ @rack.should be_successful
13
+ end
14
+
15
+ it "should have current_resource of User.first.profile_image" do
16
+ @rack.controller.current_resource.should == User.first.profile_image
17
+ end
18
+
19
+ it "should have an enclosing resource of User.first" do
20
+ @rack.controller.enclosing_resource.should == User.first
21
+ end
22
+
23
+ it "should have a current_resource url of 'myhome/profile_image'" do
24
+ @rack.controller.current_resource_url(:profile_image).should == "/myhome/profile_image"
25
+ end
26
+
27
+ describe "generating urls" do
28
+ it "should have a edit current_resource_url of 'myhome/profile_image/edit'" do
29
+ @rack.controller.current_resource_url(:profile_image, :edit).should == "/myhome/profile_image/edit"
30
+ end
31
+
32
+ it "should have a new current_resource_url of 'myhome/profile_image/new'" do
33
+ @rack.controller.new_current_resource_url.should == "/myhome/profile_image/new"
34
+ end
35
+
36
+ it "should have a edit enclosing_resource_url of 'myhome/edit" do
37
+ @rack.controller.enclosing_resource_url(:edit).should == "/myhome/edit"
38
+ end
39
+
40
+ it "should have a new enclosing_resources_url of 'myhome/new'" do
41
+ @rack.controller.enclosing_resource_url(:new).should == "/myhome/new"
42
+ end
43
+ end
44
+ end
45
+
46
+
47
+ given "requsting myhome/profile_image/new" do
48
+ DataMapper.auto_migrate!
49
+ @user = User.gen
50
+ @rack = request_with_controller("/myhome/profile_image/new")
51
+ end
52
+
53
+ describe "profile_images controller spec", :given => "requsting myhome/profile_image/new" do
54
+ it "should be cool to request my 'myhome/profile_image/new'" do
55
+ @rack.should be_successful
56
+ end
57
+
58
+ it "should have current_resource of a new profile image with myhome being User.first as the user" do
59
+ @rack.controller.current_resource.user.should == @user
60
+ end
61
+ end