mir_extensions 0.2.0 → 1.0.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.
- data/.gitignore +3 -0
- data/Gemfile +2 -1
- data/Gemfile.lock +18 -2
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/app/controllers/foos_controller.rb +83 -0
- data/app/helpers/application_helper.rb +1 -0
- data/app/models/foo.rb +2 -0
- data/app/views/foos/_form.html.erb +20 -0
- data/app/views/foos/edit.html.erb +6 -0
- data/app/views/foos/index.html.erb +27 -0
- data/app/views/foos/new.html.erb +5 -0
- data/app/views/foos/show.html.erb +20 -0
- data/config.ru +1 -1
- data/config/application.rb +5 -1
- data/config/environment.rb +1 -1
- data/config/environments/development.rb +1 -1
- data/config/environments/test.rb +1 -1
- data/config/initializers/secret_token.rb +1 -1
- data/config/initializers/session_store.rb +1 -1
- data/config/routes.rb +5 -2
- data/db/migrate/20100801224509_create_foos.rb +16 -0
- data/db/mir_ext_development.sqlite3 +0 -0
- data/db/mir_ext_test.sqlite3 +0 -0
- data/db/schema.rb +11 -1
- data/lib/core_ext/core_ext.rb +1 -2
- data/lib/mir_extensions.rb +386 -2
- data/lib/mir_form_builder.rb +166 -0
- data/mir_extensions.gemspec +29 -7
- data/public/stylesheets/scaffold.css +56 -0
- data/spec/controllers/foos_controller_spec.rb +125 -0
- data/spec/routing/foos_routing_spec.rb +35 -0
- data/spec/support/integration_example_group.rb +35 -0
- data/spec/views/foos/edit.html.erb_spec.rb +61 -0
- data/spec/views/foos/index.html.erb_spec.rb +25 -0
- data/spec/views/foos/new.html.erb_spec.rb +22 -0
- data/spec/views/foos/show.html.erb_spec.rb +18 -0
- metadata +29 -7
- data/lib/core_ext/helper_extensions.rb +0 -383
- data/log/development.log +0 -151
- data/log/test.log +0 -27
- data/public/index.html +0 -262
@@ -0,0 +1,166 @@
|
|
1
|
+
# == Configuration
|
2
|
+
#
|
3
|
+
# === Configure your application to default to the custom form builder
|
4
|
+
#
|
5
|
+
# In app/controllers/application_controller.rb:
|
6
|
+
#
|
7
|
+
# class ApplicationController < ActionController::Base
|
8
|
+
# ActionView::Base.default_form_builder = MirFormBuilder
|
9
|
+
#
|
10
|
+
# == Usage
|
11
|
+
#
|
12
|
+
# === Default form field with label:
|
13
|
+
#
|
14
|
+
# <%= f.text_field :last_name -%>
|
15
|
+
#
|
16
|
+
# Returns:
|
17
|
+
#
|
18
|
+
# <fieldset>
|
19
|
+
# <label for="user_last_name">Last Name</label><br />
|
20
|
+
# <input id="user_last_name" name="user[last_name]" size="30" type="text" />
|
21
|
+
# </fieldset>
|
22
|
+
#
|
23
|
+
# === Form field with custom label:
|
24
|
+
#
|
25
|
+
# <%= f.text_field :first_name, :label => 'Custom' -%>
|
26
|
+
#
|
27
|
+
# Returns:
|
28
|
+
#
|
29
|
+
# <fieldset>
|
30
|
+
# <label for="user_first_name">Custom</label><br />
|
31
|
+
# <input id="user_first_name" name="user[first_name]" size="30" type="text" />
|
32
|
+
# </fieldset>
|
33
|
+
#
|
34
|
+
# === Form field with no label
|
35
|
+
#
|
36
|
+
# <%= f.text_field :search, :label => false -%>
|
37
|
+
#
|
38
|
+
# Returns:
|
39
|
+
#
|
40
|
+
# <input id="search" name="search" size="30" type="text" />
|
41
|
+
#
|
42
|
+
# === Form field with inline help (? icon which reveals help content when clicked):
|
43
|
+
#
|
44
|
+
# <%= f.password_field :password %>
|
45
|
+
#
|
46
|
+
# Returns:
|
47
|
+
#
|
48
|
+
# <fieldset>
|
49
|
+
# <label for="password">Password: <img src="/images/icons/help_icon.png"
|
50
|
+
# onclick="$('password_help').toggle();" class='inline_icon' /></label><br />
|
51
|
+
# <div class="inline_help" id="password_help" style="display: none;">
|
52
|
+
# <p>Here are some detailed instructions on valid passwords.</p>
|
53
|
+
# </div>
|
54
|
+
# <input id="user_password" name="user[password]" size="30" type="password" />
|
55
|
+
# </fieldset>
|
56
|
+
#
|
57
|
+
# === Form field with instructions (show immediately below the label):
|
58
|
+
#
|
59
|
+
# <%= f.password_field :password_confirmation %>
|
60
|
+
#
|
61
|
+
# Returns:
|
62
|
+
#
|
63
|
+
# <fieldset>
|
64
|
+
# <label for="password_confirmation">
|
65
|
+
# Confirm Password:
|
66
|
+
# <span class="instructions">Enter your password again to confirm.</span>
|
67
|
+
# </label><br />
|
68
|
+
# <input id="user_password_confirmation" name="user[password_confirmation]" size="30" type="password" />
|
69
|
+
# </fieldset>
|
70
|
+
#
|
71
|
+
# === Check box with label in addition to checkbox value text
|
72
|
+
# (E.g. 'Foo' appears above the checkbox, and 'Something' next to it):
|
73
|
+
#
|
74
|
+
# <%= f.check_box :foo, :inline_label => 'Something' -%>
|
75
|
+
#
|
76
|
+
# Returns:
|
77
|
+
#
|
78
|
+
# <fieldset>
|
79
|
+
# <label for="user_foo">Foo</label><br />
|
80
|
+
# <input name="user[foo]" type="hidden" value="0" />
|
81
|
+
# <input id="user_foo" name="user[foo]" type="checkbox" value="1" />
|
82
|
+
# <label class="inline" for="user_foo">Something</label><br style='clear: both;'/><br />
|
83
|
+
# </fieldset>
|
84
|
+
#
|
85
|
+
# === Don't wrap fields in a fieldset
|
86
|
+
#
|
87
|
+
# <%= f.text_field :query, :label => 'Search terms:', :fieldset => false -%>
|
88
|
+
#
|
89
|
+
# Returns
|
90
|
+
#
|
91
|
+
# <label for="search_terms_query"><br />
|
92
|
+
# <input id="search_terms_query" name="search_terms_query" size="30" />
|
93
|
+
#
|
94
|
+
# == Troubleshooting
|
95
|
+
#
|
96
|
+
# If you're seeing double form labels, it's because you still have <%= label -%> elements in your forms.
|
97
|
+
#
|
98
|
+
module MirExtensions
|
99
|
+
|
100
|
+
|
101
|
+
class MirFormBuilder < ActionView::Helpers::FormBuilder
|
102
|
+
|
103
|
+
include ActionView::Helpers::DateHelper
|
104
|
+
helpers = field_helpers +
|
105
|
+
%w{date_select datetime_select time_select} +
|
106
|
+
%w{collection_select select country_select time_zone_select} -
|
107
|
+
%w{hidden_field label fields_for}
|
108
|
+
|
109
|
+
helpers.each do |name|
|
110
|
+
define_method(name) do |field, *args|
|
111
|
+
|
112
|
+
# capture first array as select choices
|
113
|
+
choices = args.detect{ |a| a.is_a?(Array) } || []
|
114
|
+
args.delete(choices)
|
115
|
+
|
116
|
+
# capture first hash as options
|
117
|
+
options = args.detect{ |a| a.is_a?(Hash) } || {}
|
118
|
+
args.delete(options)
|
119
|
+
include_label = true
|
120
|
+
|
121
|
+
if options[:label].nil? # Not specified. Default to humanized version of field id.
|
122
|
+
_label_text = field.to_s.humanize.capitalize_words
|
123
|
+
elsif options[:label]
|
124
|
+
_label_text = options.delete :label
|
125
|
+
# options[:label] is false!
|
126
|
+
else
|
127
|
+
include_label = options.delete(:label)
|
128
|
+
end
|
129
|
+
|
130
|
+
# Create label, if label text was provided or created.
|
131
|
+
if _label_text || options[:instructions]
|
132
|
+
if options[:instructions]
|
133
|
+
_label = tag_for_label_with_instructions(_label_text, field, options.delete(:instructions))
|
134
|
+
elsif options[:help]
|
135
|
+
_label = tag_for_label_with_inline_help(_label_text, field, options.delete(:help))
|
136
|
+
elsif include_label
|
137
|
+
_label = label(field, _label_text) + @template.tag('br')
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
if options[:inline_label] # Handle inline labels, e.g. for checkboxes
|
142
|
+
_inline_label = label(field, options.delete(:inline_label), :class => 'inline') + @template.tag('br', :style => 'clear: both;')
|
143
|
+
end
|
144
|
+
|
145
|
+
_field = nil
|
146
|
+
|
147
|
+
if name.include? 'select'
|
148
|
+
_field = super(field, choices, options)
|
149
|
+
else
|
150
|
+
if name == 'radio_button'
|
151
|
+
# invert arguments
|
152
|
+
_field = super(field, args, options)
|
153
|
+
else
|
154
|
+
_field = args.blank? ? super(field, options).html_safe : super(field, options, args).html_safe
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
if options[:fieldset] == false
|
159
|
+
"#{_label}#{_field}#{_inline_label}"
|
160
|
+
else
|
161
|
+
@template.content_tag(:fieldset, "#{_label}#{_field}#{_inline_label}".html_safe)
|
162
|
+
end
|
163
|
+
end
|
164
|
+
end
|
165
|
+
end
|
166
|
+
end
|
data/mir_extensions.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{mir_extensions}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "1.0.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Corey Ehmke", "Rod Monje"]
|
12
|
-
s.date = %q{2010-08-
|
12
|
+
s.date = %q{2010-08-02}
|
13
13
|
s.description = %q{Standard extensions and utility methods for SEO Logic's Rails 3 apps.}
|
14
14
|
s.email = %q{corey@seologic.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -30,9 +30,16 @@ Gem::Specification.new do |s|
|
|
30
30
|
"Rakefile",
|
31
31
|
"VERSION",
|
32
32
|
"app/controllers/application_controller.rb",
|
33
|
+
"app/controllers/foos_controller.rb",
|
33
34
|
"app/helpers/application_helper.rb",
|
35
|
+
"app/models/foo.rb",
|
34
36
|
"app/models/primary.rb",
|
35
37
|
"app/models/secondary.rb",
|
38
|
+
"app/views/foos/_form.html.erb",
|
39
|
+
"app/views/foos/edit.html.erb",
|
40
|
+
"app/views/foos/index.html.erb",
|
41
|
+
"app/views/foos/new.html.erb",
|
42
|
+
"app/views/foos/show.html.erb",
|
36
43
|
"app/views/layouts/application.html.erb",
|
37
44
|
"autotest/discover.rb",
|
38
45
|
"config.ru",
|
@@ -51,6 +58,7 @@ Gem::Specification.new do |s|
|
|
51
58
|
"config/locales/en.yml",
|
52
59
|
"config/routes.rb",
|
53
60
|
"db/development.sqlite3",
|
61
|
+
"db/migrate/20100801224509_create_foos.rb",
|
54
62
|
"db/mir_ext_development.sqlite3",
|
55
63
|
"db/mir_ext_test.sqlite3",
|
56
64
|
"db/schema.rb",
|
@@ -59,20 +67,17 @@ Gem::Specification.new do |s|
|
|
59
67
|
"doc/README_FOR_APP",
|
60
68
|
"lib/core_ext/controller_extensions.rb",
|
61
69
|
"lib/core_ext/core_ext.rb",
|
62
|
-
"lib/core_ext/helper_extensions.rb",
|
63
70
|
"lib/mir_extensions.rb",
|
71
|
+
"lib/mir_form_builder.rb",
|
64
72
|
"lib/tasks/.gitkeep",
|
65
|
-
"log/development.log",
|
66
73
|
"log/production.log",
|
67
74
|
"log/server.log",
|
68
|
-
"log/test.log",
|
69
75
|
"mir_extensions.gemspec",
|
70
76
|
"public/404.html",
|
71
77
|
"public/422.html",
|
72
78
|
"public/500.html",
|
73
79
|
"public/favicon.ico",
|
74
80
|
"public/images/rails.png",
|
75
|
-
"public/index.html",
|
76
81
|
"public/javascripts/application.js",
|
77
82
|
"public/javascripts/controls.js",
|
78
83
|
"public/javascripts/dragdrop.js",
|
@@ -81,11 +86,20 @@ Gem::Specification.new do |s|
|
|
81
86
|
"public/javascripts/rails.js",
|
82
87
|
"public/robots.txt",
|
83
88
|
"public/stylesheets/.gitkeep",
|
89
|
+
"public/stylesheets/scaffold.css",
|
84
90
|
"script/rails",
|
85
91
|
"spec/controllers/application_controller_spec.rb",
|
92
|
+
"spec/controllers/foos_controller_spec.rb",
|
86
93
|
"spec/helpers/application_helper_spec.rb",
|
87
94
|
"spec/mir_extensions_spec.rb",
|
95
|
+
"spec/routing/foos_routing_spec.rb",
|
88
96
|
"spec/spec_helper.rb",
|
97
|
+
"spec/support/integration_example_group.rb",
|
98
|
+
"spec/views/foos/edit.html.erb_spec.rb",
|
99
|
+
"spec/views/foos/index.html.erb_spec.rb",
|
100
|
+
"spec/views/foos/new.html.erb_spec.rb",
|
101
|
+
"spec/views/foos/show.html.erb_spec.rb",
|
102
|
+
"test/integration/foo_test.rb",
|
89
103
|
"vendor/plugins/.gitkeep"
|
90
104
|
]
|
91
105
|
s.homepage = %q{http://github.com/Bantik/mir_extensions}
|
@@ -95,9 +109,17 @@ Gem::Specification.new do |s|
|
|
95
109
|
s.summary = %q{Standard extensions and utility methods for SEO Logic's Rails 3 apps.}
|
96
110
|
s.test_files = [
|
97
111
|
"spec/controllers/application_controller_spec.rb",
|
112
|
+
"spec/controllers/foos_controller_spec.rb",
|
98
113
|
"spec/helpers/application_helper_spec.rb",
|
99
114
|
"spec/mir_extensions_spec.rb",
|
100
|
-
"spec/
|
115
|
+
"spec/routing/foos_routing_spec.rb",
|
116
|
+
"spec/spec_helper.rb",
|
117
|
+
"spec/support/integration_example_group.rb",
|
118
|
+
"spec/views/foos/edit.html.erb_spec.rb",
|
119
|
+
"spec/views/foos/index.html.erb_spec.rb",
|
120
|
+
"spec/views/foos/new.html.erb_spec.rb",
|
121
|
+
"spec/views/foos/show.html.erb_spec.rb",
|
122
|
+
"test/integration/foo_test.rb"
|
101
123
|
]
|
102
124
|
|
103
125
|
if s.respond_to? :specification_version then
|
@@ -0,0 +1,56 @@
|
|
1
|
+
body { background-color: #fff; color: #333; }
|
2
|
+
|
3
|
+
body, p, ol, ul, td {
|
4
|
+
font-family: verdana, arial, helvetica, sans-serif;
|
5
|
+
font-size: 13px;
|
6
|
+
line-height: 18px;
|
7
|
+
}
|
8
|
+
|
9
|
+
pre {
|
10
|
+
background-color: #eee;
|
11
|
+
padding: 10px;
|
12
|
+
font-size: 11px;
|
13
|
+
}
|
14
|
+
|
15
|
+
a { color: #000; }
|
16
|
+
a:visited { color: #666; }
|
17
|
+
a:hover { color: #fff; background-color:#000; }
|
18
|
+
|
19
|
+
div.field, div.actions {
|
20
|
+
margin-bottom: 10px;
|
21
|
+
}
|
22
|
+
|
23
|
+
#notice {
|
24
|
+
color: green;
|
25
|
+
}
|
26
|
+
|
27
|
+
.field_with_errors {
|
28
|
+
padding: 2px;
|
29
|
+
background-color: red;
|
30
|
+
display: table;
|
31
|
+
}
|
32
|
+
|
33
|
+
#error_explanation {
|
34
|
+
width: 450px;
|
35
|
+
border: 2px solid red;
|
36
|
+
padding: 7px;
|
37
|
+
padding-bottom: 0;
|
38
|
+
margin-bottom: 20px;
|
39
|
+
background-color: #f0f0f0;
|
40
|
+
}
|
41
|
+
|
42
|
+
#error_explanation h2 {
|
43
|
+
text-align: left;
|
44
|
+
font-weight: bold;
|
45
|
+
padding: 5px 5px 5px 15px;
|
46
|
+
font-size: 12px;
|
47
|
+
margin: -7px;
|
48
|
+
margin-bottom: 0px;
|
49
|
+
background-color: #c00;
|
50
|
+
color: #fff;
|
51
|
+
}
|
52
|
+
|
53
|
+
#error_explanation ul li {
|
54
|
+
font-size: 12px;
|
55
|
+
list-style: square;
|
56
|
+
}
|
@@ -0,0 +1,125 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe FoosController do
|
4
|
+
|
5
|
+
def mock_foo(stubs={})
|
6
|
+
@mock_foo ||= mock_model(Foo, stubs).as_null_object
|
7
|
+
end
|
8
|
+
|
9
|
+
describe "GET index" do
|
10
|
+
it "assigns all foos as @foos" do
|
11
|
+
Foo.stub(:all) { [mock_foo] }
|
12
|
+
get :index
|
13
|
+
assigns(:foos).should eq([mock_foo])
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
describe "GET show" do
|
18
|
+
it "assigns the requested foo as @foo" do
|
19
|
+
Foo.stub(:find).with("37") { mock_foo }
|
20
|
+
get :show, :id => "37"
|
21
|
+
assigns(:foo).should be(mock_foo)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe "GET new" do
|
26
|
+
it "assigns a new foo as @foo" do
|
27
|
+
Foo.stub(:new) { mock_foo }
|
28
|
+
get :new
|
29
|
+
assigns(:foo).should be(mock_foo)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
describe "GET edit" do
|
34
|
+
it "assigns the requested foo as @foo" do
|
35
|
+
Foo.stub(:find).with("37") { mock_foo }
|
36
|
+
get :edit, :id => "37"
|
37
|
+
assigns(:foo).should be(mock_foo)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
describe "POST create" do
|
42
|
+
|
43
|
+
describe "with valid params" do
|
44
|
+
it "assigns a newly created foo as @foo" do
|
45
|
+
Foo.stub(:new).with({'these' => 'params'}) { mock_foo(:save => true) }
|
46
|
+
post :create, :foo => {'these' => 'params'}
|
47
|
+
assigns(:foo).should be(mock_foo)
|
48
|
+
end
|
49
|
+
|
50
|
+
it "redirects to the created foo" do
|
51
|
+
Foo.stub(:new) { mock_foo(:save => true) }
|
52
|
+
post :create, :foo => {}
|
53
|
+
response.should redirect_to(foo_url(mock_foo))
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
describe "with invalid params" do
|
58
|
+
it "assigns a newly created but unsaved foo as @foo" do
|
59
|
+
Foo.stub(:new).with({'these' => 'params'}) { mock_foo(:save => false) }
|
60
|
+
post :create, :foo => {'these' => 'params'}
|
61
|
+
assigns(:foo).should be(mock_foo)
|
62
|
+
end
|
63
|
+
|
64
|
+
it "re-renders the 'new' template" do
|
65
|
+
Foo.stub(:new) { mock_foo(:save => false) }
|
66
|
+
post :create, :foo => {}
|
67
|
+
response.should render_template("new")
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
72
|
+
|
73
|
+
describe "PUT update" do
|
74
|
+
|
75
|
+
describe "with valid params" do
|
76
|
+
it "updates the requested foo" do
|
77
|
+
Foo.should_receive(:find).with("37") { mock_foo }
|
78
|
+
mock_foo.should_receive(:update_attributes).with({'these' => 'params'})
|
79
|
+
put :update, :id => "37", :foo => {'these' => 'params'}
|
80
|
+
end
|
81
|
+
|
82
|
+
it "assigns the requested foo as @foo" do
|
83
|
+
Foo.stub(:find) { mock_foo(:update_attributes => true) }
|
84
|
+
put :update, :id => "1"
|
85
|
+
assigns(:foo).should be(mock_foo)
|
86
|
+
end
|
87
|
+
|
88
|
+
it "redirects to the foo" do
|
89
|
+
Foo.stub(:find) { mock_foo(:update_attributes => true) }
|
90
|
+
put :update, :id => "1"
|
91
|
+
response.should redirect_to(foo_url(mock_foo))
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
describe "with invalid params" do
|
96
|
+
it "assigns the foo as @foo" do
|
97
|
+
Foo.stub(:find) { mock_foo(:update_attributes => false) }
|
98
|
+
put :update, :id => "1"
|
99
|
+
assigns(:foo).should be(mock_foo)
|
100
|
+
end
|
101
|
+
|
102
|
+
it "re-renders the 'edit' template" do
|
103
|
+
Foo.stub(:find) { mock_foo(:update_attributes => false) }
|
104
|
+
put :update, :id => "1"
|
105
|
+
response.should render_template("edit")
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
end
|
110
|
+
|
111
|
+
describe "DELETE destroy" do
|
112
|
+
it "destroys the requested foo" do
|
113
|
+
Foo.should_receive(:find).with("37") { mock_foo }
|
114
|
+
mock_foo.should_receive(:destroy)
|
115
|
+
delete :destroy, :id => "37"
|
116
|
+
end
|
117
|
+
|
118
|
+
it "redirects to the foos list" do
|
119
|
+
Foo.stub(:find) { mock_foo }
|
120
|
+
delete :destroy, :id => "1"
|
121
|
+
response.should redirect_to(foos_url)
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe FoosController do
|
4
|
+
describe "routing" do
|
5
|
+
|
6
|
+
it "recognizes and generates #index" do
|
7
|
+
{ :get => "/foos" }.should route_to(:controller => "foos", :action => "index")
|
8
|
+
end
|
9
|
+
|
10
|
+
it "recognizes and generates #new" do
|
11
|
+
{ :get => "/foos/new" }.should route_to(:controller => "foos", :action => "new")
|
12
|
+
end
|
13
|
+
|
14
|
+
it "recognizes and generates #show" do
|
15
|
+
{ :get => "/foos/1" }.should route_to(:controller => "foos", :action => "show", :id => "1")
|
16
|
+
end
|
17
|
+
|
18
|
+
it "recognizes and generates #edit" do
|
19
|
+
{ :get => "/foos/1/edit" }.should route_to(:controller => "foos", :action => "edit", :id => "1")
|
20
|
+
end
|
21
|
+
|
22
|
+
it "recognizes and generates #create" do
|
23
|
+
{ :post => "/foos" }.should route_to(:controller => "foos", :action => "create")
|
24
|
+
end
|
25
|
+
|
26
|
+
it "recognizes and generates #update" do
|
27
|
+
{ :put => "/foos/1" }.should route_to(:controller => "foos", :action => "update", :id => "1")
|
28
|
+
end
|
29
|
+
|
30
|
+
it "recognizes and generates #destroy" do
|
31
|
+
{ :delete => "/foos/1" }.should route_to(:controller => "foos", :action => "destroy", :id => "1")
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
end
|