remarkable_rails 3.1.8 → 3.1.9
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +91 -88
- data/LICENSE +20 -20
- data/README +80 -80
- data/lib/remarkable_rails/action_controller/base.rb +29 -29
- data/lib/remarkable_rails/action_controller/macro_stubs.rb +459 -457
- data/lib/remarkable_rails/action_controller/matchers/assign_to_matcher.rb +92 -92
- data/lib/remarkable_rails/action_controller/matchers/filter_params_matcher.rb +41 -41
- data/lib/remarkable_rails/action_controller/matchers/redirect_to_matcher.rb +119 -119
- data/lib/remarkable_rails/action_controller/matchers/render_template_matcher.rb +146 -146
- data/lib/remarkable_rails/action_controller/matchers/respond_with_matcher.rb +126 -126
- data/lib/remarkable_rails/action_controller/matchers/route_matcher.rb +135 -109
- data/lib/remarkable_rails/action_controller/matchers/set_cookies_matcher.rb +49 -49
- data/lib/remarkable_rails/action_controller/matchers/set_session_matcher.rb +106 -106
- data/lib/remarkable_rails/action_controller/matchers/set_the_flash_matcher.rb +54 -54
- data/lib/remarkable_rails/action_controller.rb +22 -22
- data/lib/remarkable_rails/action_view/base.rb +7 -7
- data/lib/remarkable_rails/action_view.rb +18 -18
- data/lib/remarkable_rails/active_orm.rb +19 -19
- data/lib/remarkable_rails.rb +30 -30
- data/locale/en.yml +110 -110
- data/spec/action_controller/assign_to_matcher_spec.rb +142 -142
- data/spec/action_controller/filter_params_matcher_spec.rb +64 -64
- data/spec/action_controller/macro_stubs_spec.rb +234 -208
- data/spec/action_controller/redirect_to_matcher_spec.rb +102 -102
- data/spec/action_controller/render_template_matcher_spec.rb +251 -251
- data/spec/action_controller/respond_with_matcher_spec.rb +223 -223
- data/spec/action_controller/route_matcher_spec.rb +96 -79
- data/spec/action_controller/set_cookies_matcher_spec.rb +149 -149
- data/spec/action_controller/set_session_matcher_spec.rb +141 -141
- data/spec/action_controller/set_the_flash_matcher_spec.rb +93 -93
- data/spec/application/application.rb +15 -15
- data/spec/application/tasks_controller.rb +34 -34
- data/spec/functional_builder.rb +88 -88
- data/spec/rcov.opts +2 -2
- data/spec/remarkable_rails_spec.rb +5 -5
- data/spec/spec.opts +4 -4
- data/spec/spec_helper.rb +42 -42
- metadata +7 -7
data/CHANGELOG
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
* Allow should route(:get, :action => :show, :id => 1).to("/projects/1") and
|
2
|
+
should route(:get, "/projects/1").from(:action => :show, :id => 1) syntax.
|
3
|
+
|
1
4
|
* Plugin files are automatically loaded [#86]
|
2
5
|
|
3
6
|
* Allow should_route to use environment configuration [#88] (thanks to Lawrence Pit)
|
@@ -12,91 +15,91 @@
|
|
12
15
|
|
13
16
|
* assert_valid_keys on expects
|
14
17
|
|
15
|
-
* mock_models now creates a second class method to be used on the index action [#71]
|
16
|
-
In other words, mock_models :project will create:
|
17
|
-
|
18
|
-
def self.mock_project
|
19
|
-
proc { mock_project }
|
20
|
-
end
|
21
|
-
|
22
|
-
# This was added to be used on index actions
|
23
|
-
def self.mock_projects
|
24
|
-
proc { [ mock_project ] }
|
25
|
-
end
|
26
|
-
|
27
|
-
def mock_project(stubs={})
|
28
|
-
@project ||= mock_model(Project, stubs)
|
29
|
-
end
|
30
|
-
|
31
|
-
* Allow multiple args to be given to :with in expects. If you need to verify that
|
32
|
-
an array is being sent, you need to send an array inside another array [#70]
|
33
|
-
|
34
|
-
* Allow procs or blocks to be given to respond_with_body and respond_with :body [#67]
|
35
|
-
|
36
|
-
* Allow ordered to be given to macro stubs as option [#66]
|
37
|
-
|
38
|
-
# v3.1
|
39
|
-
|
40
|
-
* Ensure set_cookies and set_session work with arrays [#55]
|
41
|
-
|
42
|
-
* Added set_cookies matcher [#51]
|
43
|
-
|
44
|
-
* Add a helper to declare that a XmlHttpRequest should be performed:
|
45
|
-
|
46
|
-
describe :get => :show do
|
47
|
-
xhr!
|
48
|
-
|
49
|
-
* Macro stubs now supports blocks too [#50]
|
50
|
-
|
51
|
-
expects :human_attribute_name, :on => Project, :with => :title do |attr|
|
52
|
-
attr.to_s.humanize
|
53
|
-
end
|
54
|
-
|
55
|
-
* :to option in set_session and set_the_flash now accepts Regexp [#46]
|
56
|
-
|
57
|
-
* render_template now works with partials [#43]
|
58
|
-
|
59
|
-
* Added to support for routing example group (inside spec/routing) [#26]
|
60
|
-
|
61
|
-
# v3.0
|
62
|
-
|
63
|
-
* redirect_to and render_template were ported from rspec-rails to
|
64
|
-
remarkable to provide I18n. The second was also extended to deal with :with,
|
65
|
-
:layout and :content_type as options.
|
66
|
-
|
67
|
-
render_with_layout, render_without_layout delegate their logic to render_template
|
68
|
-
so they share the same options.
|
69
|
-
|
70
|
-
respond_with_content_type and respond_wity_body delegate their logic to
|
71
|
-
respond_with matcher, so they also share the same options.
|
72
|
-
|
73
|
-
:set_the_flash was also redesign to inherit from :set_session, providing a
|
74
|
-
consistent API.
|
75
|
-
|
76
|
-
* remarkable_rails now ships with a new feature, called macro stubs.
|
77
|
-
This allows you to declare just once your mocks and/or expectations, and each
|
78
|
-
matcher will know how to deal with properly. A TasksController could have your
|
79
|
-
specs for a create action rewritten like this:
|
80
|
-
|
81
|
-
describe TasksController do
|
82
|
-
mock_models :task
|
83
|
-
|
84
|
-
describe :post => :create, :task => { :these => 'params' } do
|
85
|
-
expects :new, :on => Task, with => {'these' => 'params'}, :returns => task_proc
|
86
|
-
expects :save, :on => mock_task, :returns => true
|
87
|
-
|
88
|
-
should_assign_to :task, :with => task_proc
|
89
|
-
should_redirect_to { task_url(mock_task) }
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
It automatically performs the action before running each macro. In assign_to,
|
94
|
-
it executes the expects as expectations (:should_receive), and in redirect_to
|
95
|
-
it executes the expects as stubs (:stub!), just as above.
|
96
|
-
|
97
|
-
For more options, information and configuration, check macro stubs documentation.
|
98
|
-
|
99
|
-
# v2.x
|
100
|
-
|
101
|
-
* Added assign_to, filter_params, render_with_layout, respond_with
|
102
|
-
respond_with_content_type, route, set_session and set_the_flash matchers.
|
18
|
+
* mock_models now creates a second class method to be used on the index action [#71]
|
19
|
+
In other words, mock_models :project will create:
|
20
|
+
|
21
|
+
def self.mock_project
|
22
|
+
proc { mock_project }
|
23
|
+
end
|
24
|
+
|
25
|
+
# This was added to be used on index actions
|
26
|
+
def self.mock_projects
|
27
|
+
proc { [ mock_project ] }
|
28
|
+
end
|
29
|
+
|
30
|
+
def mock_project(stubs={})
|
31
|
+
@project ||= mock_model(Project, stubs)
|
32
|
+
end
|
33
|
+
|
34
|
+
* Allow multiple args to be given to :with in expects. If you need to verify that
|
35
|
+
an array is being sent, you need to send an array inside another array [#70]
|
36
|
+
|
37
|
+
* Allow procs or blocks to be given to respond_with_body and respond_with :body [#67]
|
38
|
+
|
39
|
+
* Allow ordered to be given to macro stubs as option [#66]
|
40
|
+
|
41
|
+
# v3.1
|
42
|
+
|
43
|
+
* Ensure set_cookies and set_session work with arrays [#55]
|
44
|
+
|
45
|
+
* Added set_cookies matcher [#51]
|
46
|
+
|
47
|
+
* Add a helper to declare that a XmlHttpRequest should be performed:
|
48
|
+
|
49
|
+
describe :get => :show do
|
50
|
+
xhr!
|
51
|
+
|
52
|
+
* Macro stubs now supports blocks too [#50]
|
53
|
+
|
54
|
+
expects :human_attribute_name, :on => Project, :with => :title do |attr|
|
55
|
+
attr.to_s.humanize
|
56
|
+
end
|
57
|
+
|
58
|
+
* :to option in set_session and set_the_flash now accepts Regexp [#46]
|
59
|
+
|
60
|
+
* render_template now works with partials [#43]
|
61
|
+
|
62
|
+
* Added to support for routing example group (inside spec/routing) [#26]
|
63
|
+
|
64
|
+
# v3.0
|
65
|
+
|
66
|
+
* redirect_to and render_template were ported from rspec-rails to
|
67
|
+
remarkable to provide I18n. The second was also extended to deal with :with,
|
68
|
+
:layout and :content_type as options.
|
69
|
+
|
70
|
+
render_with_layout, render_without_layout delegate their logic to render_template
|
71
|
+
so they share the same options.
|
72
|
+
|
73
|
+
respond_with_content_type and respond_wity_body delegate their logic to
|
74
|
+
respond_with matcher, so they also share the same options.
|
75
|
+
|
76
|
+
:set_the_flash was also redesign to inherit from :set_session, providing a
|
77
|
+
consistent API.
|
78
|
+
|
79
|
+
* remarkable_rails now ships with a new feature, called macro stubs.
|
80
|
+
This allows you to declare just once your mocks and/or expectations, and each
|
81
|
+
matcher will know how to deal with properly. A TasksController could have your
|
82
|
+
specs for a create action rewritten like this:
|
83
|
+
|
84
|
+
describe TasksController do
|
85
|
+
mock_models :task
|
86
|
+
|
87
|
+
describe :post => :create, :task => { :these => 'params' } do
|
88
|
+
expects :new, :on => Task, with => {'these' => 'params'}, :returns => task_proc
|
89
|
+
expects :save, :on => mock_task, :returns => true
|
90
|
+
|
91
|
+
should_assign_to :task, :with => task_proc
|
92
|
+
should_redirect_to { task_url(mock_task) }
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
It automatically performs the action before running each macro. In assign_to,
|
97
|
+
it executes the expects as expectations (:should_receive), and in redirect_to
|
98
|
+
it executes the expects as stubs (:stub!), just as above.
|
99
|
+
|
100
|
+
For more options, information and configuration, check macro stubs documentation.
|
101
|
+
|
102
|
+
# v2.x
|
103
|
+
|
104
|
+
* Added assign_to, filter_params, render_with_layout, respond_with
|
105
|
+
respond_with_content_type, route, set_session and set_the_flash matchers.
|
data/LICENSE
CHANGED
@@ -1,20 +1,20 @@
|
|
1
|
-
Copyright (c) 2009 Carlos Brando
|
2
|
-
|
3
|
-
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
-
a copy of this software and associated documentation files (the
|
5
|
-
"Software"), to deal in the Software without restriction, including
|
6
|
-
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
-
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
-
permit persons to whom the Software is furnished to do so, subject to
|
9
|
-
the following conditions:
|
10
|
-
|
11
|
-
The above copyright notice and this permission notice shall be
|
12
|
-
included in all copies or substantial portions of the Software.
|
13
|
-
|
14
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
-
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
-
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
-
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
-
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
-
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
-
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
1
|
+
Copyright (c) 2009 Carlos Brando
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README
CHANGED
@@ -1,11 +1,11 @@
|
|
1
|
-
= Remarkable Rails
|
2
|
-
|
3
|
-
Remarkable Rails is a collection of matchers to Rails. This package has some
|
4
|
-
ActionController matchers and soon some ActionView matchers.
|
5
|
-
|
1
|
+
= Remarkable Rails
|
2
|
+
|
3
|
+
Remarkable Rails is a collection of matchers to Rails. This package has some
|
4
|
+
ActionController matchers and soon some ActionView matchers.
|
5
|
+
|
6
6
|
Whenever using the Remarkable Rails gem, it will automatically add your ActiveRecord
|
7
|
-
matchers. So just one line is needed to install both:
|
8
|
-
|
7
|
+
matchers. So just one line is needed to install both:
|
8
|
+
|
9
9
|
sudo gem install remarkable_rails
|
10
10
|
|
11
11
|
If you are using Rails 2.3, you need to have this configuration on your
|
@@ -18,82 +18,82 @@ config/environments/test.rb:
|
|
18
18
|
And then require remarkable inside your spec_helper.rb, after "spec/rails":
|
19
19
|
|
20
20
|
require 'spec/rails'
|
21
|
-
require 'remarkable_rails'
|
22
|
-
|
23
|
-
== Matchers & Macros
|
24
|
-
|
25
|
-
The supported matchers and macros are:
|
26
|
-
|
27
|
-
assign_to, filter_params, render_with_layout, respond_with,
|
28
|
-
respond_with_content_type, route, set_session and set_the_flash matchers.
|
29
|
-
|
30
|
-
In Remarkable 3.0, we also ported and extended redirect to and render template
|
31
|
-
from rspec rails matchers to provide I18n. You can also do:
|
32
|
-
|
33
|
-
render_template 'edit', :layout => 'default'
|
34
|
-
respond_with 404, :content_type => Mime::XML, :body => /Not found/
|
35
|
-
|
36
|
-
== Macro stubs
|
37
|
-
|
38
|
-
Another cool feature in Remarkable 3.0 is macro stubs, which makes your mocks
|
39
|
-
and stubs DRY and easier to maintain. An rspec default scaffold would be:
|
40
|
-
|
41
|
-
describe TasksController do
|
42
|
-
def mock_task(stubs={})
|
43
|
-
@task ||= mock_model(Task, stubs)
|
44
|
-
end
|
45
|
-
|
46
|
-
describe “responding to #POST create” do
|
47
|
-
it "exposes a newly created task as @task" do
|
48
|
-
Task.should_receive(:new).with({'these' => 'params'}).
|
49
|
-
and_return(mock_task(:save => true))
|
50
|
-
post :create, :task => {:these => 'params'}
|
51
|
-
assigns[:task].should equal(mock_task)
|
52
|
-
end
|
53
|
-
|
54
|
-
it "redirects to the created task" do
|
55
|
-
Task.stub!(:new).and_return(mock_task(:save => true))
|
56
|
-
post :create, :task => {}
|
57
|
-
response.should redirect_to(task_url(mock_task))
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
An equivalent in remarkable would be:
|
63
|
-
|
64
|
-
describe TasksController do
|
65
|
-
mock_models :task
|
66
|
-
|
67
|
-
describe :post => :create, :task => { :these => 'params' } do
|
68
|
-
expects :new, :on => Task, :with => {'these' => 'params'}, :returns => task_proc
|
69
|
-
expects :save, :on => task_proc, :returns => true
|
70
|
-
|
71
|
-
should_assign_to :task, :with => task_proc
|
72
|
-
should_redirect_to { task_url(task_proc) }
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
21
|
+
require 'remarkable_rails'
|
22
|
+
|
23
|
+
== Matchers & Macros
|
24
|
+
|
25
|
+
The supported matchers and macros are:
|
26
|
+
|
27
|
+
assign_to, filter_params, render_with_layout, respond_with,
|
28
|
+
respond_with_content_type, route, set_session and set_the_flash matchers.
|
29
|
+
|
30
|
+
In Remarkable 3.0, we also ported and extended redirect to and render template
|
31
|
+
from rspec rails matchers to provide I18n. You can also do:
|
32
|
+
|
33
|
+
render_template 'edit', :layout => 'default'
|
34
|
+
respond_with 404, :content_type => Mime::XML, :body => /Not found/
|
35
|
+
|
36
|
+
== Macro stubs
|
37
|
+
|
38
|
+
Another cool feature in Remarkable 3.0 is macro stubs, which makes your mocks
|
39
|
+
and stubs DRY and easier to maintain. An rspec default scaffold would be:
|
40
|
+
|
41
|
+
describe TasksController do
|
42
|
+
def mock_task(stubs={})
|
43
|
+
@task ||= mock_model(Task, stubs)
|
44
|
+
end
|
45
|
+
|
46
|
+
describe “responding to #POST create” do
|
47
|
+
it "exposes a newly created task as @task" do
|
48
|
+
Task.should_receive(:new).with({'these' => 'params'}).
|
49
|
+
and_return(mock_task(:save => true))
|
50
|
+
post :create, :task => {:these => 'params'}
|
51
|
+
assigns[:task].should equal(mock_task)
|
52
|
+
end
|
53
|
+
|
54
|
+
it "redirects to the created task" do
|
55
|
+
Task.stub!(:new).and_return(mock_task(:save => true))
|
56
|
+
post :create, :task => {}
|
57
|
+
response.should redirect_to(task_url(mock_task))
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
An equivalent in remarkable would be:
|
63
|
+
|
64
|
+
describe TasksController do
|
65
|
+
mock_models :task
|
66
|
+
|
67
|
+
describe :post => :create, :task => { :these => 'params' } do
|
68
|
+
expects :new, :on => Task, :with => {'these' => 'params'}, :returns => task_proc
|
69
|
+
expects :save, :on => task_proc, :returns => true
|
70
|
+
|
71
|
+
should_assign_to :task, :with => task_proc
|
72
|
+
should_redirect_to { task_url(task_proc) }
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
76
|
It automatically performs the action before running each macro. It executes the
|
77
77
|
expects as expectations (:should_receive), but you can supply :with_stubs => true
|
78
|
-
if you want it to be executed with stubs.
|
79
|
-
|
80
|
-
There are also params and mime methods:
|
81
|
-
|
82
|
-
describe TasksController
|
83
|
-
params :project_id => 42
|
84
|
-
mime Mime::HTML
|
85
|
-
|
86
|
-
describe :get => :show, :id => 37 do
|
87
|
-
should_assign_to :project, :task
|
88
|
-
|
89
|
-
describe Mime::XML do
|
90
|
-
should_assign_to :project, :task
|
91
|
-
end
|
92
|
-
end
|
93
|
-
end
|
94
|
-
|
78
|
+
if you want it to be executed with stubs.
|
79
|
+
|
80
|
+
There are also params and mime methods:
|
81
|
+
|
82
|
+
describe TasksController
|
83
|
+
params :project_id => 42
|
84
|
+
mime Mime::HTML
|
85
|
+
|
86
|
+
describe :get => :show, :id => 37 do
|
87
|
+
should_assign_to :project, :task
|
88
|
+
|
89
|
+
describe Mime::XML do
|
90
|
+
should_assign_to :project, :task
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
95
|
And much more. Be sure to check macro stubs documentation.
|
96
|
-
|
96
|
+
|
97
97
|
== Rails plugin developers
|
98
98
|
|
99
99
|
Remarkable automatically loads files at the remarkable directory on your plugins
|
@@ -1,31 +1,31 @@
|
|
1
|
-
module Remarkable
|
2
|
-
module ActionController
|
3
|
-
class Base < Remarkable::Base
|
4
|
-
|
5
|
-
before_assert :perform_action_with_macro_stubs
|
1
|
+
module Remarkable
|
2
|
+
module ActionController
|
3
|
+
class Base < Remarkable::Base
|
6
4
|
|
7
|
-
|
8
|
-
optional :with_stubs, :default => true
|
5
|
+
before_assert :perform_action_with_macro_stubs
|
9
6
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
7
|
+
optional :with_expectations, :default => true
|
8
|
+
optional :with_stubs, :default => true
|
9
|
+
|
10
|
+
protected
|
11
|
+
|
12
|
+
# Before assertions, call run_action! to perform the action if it was
|
13
|
+
# not performed yet.
|
14
|
+
#
|
15
|
+
def perform_action_with_macro_stubs #:nodoc:
|
16
|
+
@spec.send(:run_action!, run_with_expectations?) if @spec.send(:controller)
|
17
|
+
end
|
18
|
+
|
19
|
+
def run_with_expectations? #:nodoc:
|
20
|
+
if @options.key?(:with_stubs)
|
21
|
+
!@options[:with_stubs]
|
22
|
+
elsif @options.key?(:with_expectations)
|
23
|
+
@options[:with_expectations]
|
24
|
+
else
|
25
|
+
true
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|