sinatra_more 0.3.9 → 0.3.10

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/README.rdoc CHANGED
@@ -134,6 +134,10 @@ methods should be very familiar to anyone who has used rails view helpers.
134
134
  * Creates a link element with given name, url and options
135
135
  * <tt>link_to 'click me', '/dashboard', :class => 'linky'</tt>
136
136
  * <tt>link_to('/dashboard', :class => 'blocky') { ...content... }</tt>
137
+ * <tt>mail_to(email, caption=nil, mail_options={})</tt>
138
+ * Creates a mailto link tag to the specified email_address
139
+ * <tt>mail_to "me@demo.com"</tt> # => <a href="mailto:me@demo.com">me@demo.com</a>
140
+ * <tt>mail_to "me@demo.com", "My Email"</tt> # => <a href="mailto:me@demo.com">My Email</a>
137
141
  * <tt>image_tag(url, options={})</tt>
138
142
  * Creates an image element with given url and options
139
143
  * <tt>image_tag('icons/avatar.png')</tt>
@@ -190,6 +194,9 @@ methods should be very familiar to anyone who has used rails view helpers.
190
194
  * <tt>submit_tag(caption, options={})</tt>
191
195
  * Constructs a submit button from the given options
192
196
  * <tt>submit_tag "Create", :class => 'success'</tt>
197
+ * <tt>button_tag(caption, options={})</tt>
198
+ * Constructs an input (type => 'button') from the given options
199
+ * <tt>button_tag "Cancel", :class => 'clear'</tt>
193
200
  * <tt>image_submit_tag(source, options={})</tt>
194
201
  * Constructs an image submit button from the given options
195
202
  * <tt>image_submit_tag "submit.png", :class => 'success'</tt>
@@ -221,8 +228,13 @@ A form_tag might look like:
221
228
  * Defaults to StandardFormBuilder but you can easily create your own!
222
229
  * <tt>form_for(@user, '/register', :id => 'register') { |f| ...field-elements... }</tt>
223
230
  * <tt>form_for(:user, '/register', :id => 'register') { |f| ...field-elements... }</tt>
231
+ * <tt>fields_for(object, settings={}, &block)</tt>
232
+ * Constructs fields for a given object for use in an existing form
233
+ * Defaults to StandardFormBuilder but you can easily create your own!
234
+ * <tt>fields_for @user.assignment do |assignment| ... end</tt>
235
+ * <tt>fields_for :assignment do |assigment| ... end</tt>
224
236
 
225
- The following are fields provided by AbstractFormBuilder that can be used within a form_for:
237
+ The following are fields provided by AbstractFormBuilder that can be used within a form_for or fields_for:
226
238
 
227
239
  * <tt>error_messages(options={})</tt>
228
240
  * Displays list html for the errors on form object
@@ -269,9 +281,13 @@ A form_for using these basic fields might look like:
269
281
  %p
270
282
  = f.label :is_admin, :caption => "Admin User?"
271
283
  = f.check_box :is_admin
272
- $p
284
+ %p
273
285
  = f.label :color, :caption => "Favorite Color?"
274
286
  = f.select :color, :options => ['red', 'black']
287
+ %p
288
+ - fields_for @user.location do |location|
289
+ = location.text_field :street
290
+ = location.text_field :city
275
291
  %p
276
292
  = f.submit "Create", :class => 'button'
277
293
 
@@ -454,12 +470,6 @@ In addition, the strategy used expects that you have an <tt>authenticate</tt> me
454
470
 
455
471
  Using this plugin you also do need to define your own routes for managing warden sessions. An example is below:
456
472
 
457
- get '/unauthenticated/?' do
458
- flash[:notice] = "That username and password are not correct!"
459
- status 401
460
- haml_template 'session/login'
461
- end
462
-
463
473
  get '/login/?' do
464
474
  haml_template 'session/login'
465
475
  end
@@ -468,6 +478,12 @@ Using this plugin you also do need to define your own routes for managing warden
468
478
  authenticate_user!
469
479
  redirect "/dashboard"
470
480
  end
481
+
482
+ post '/unauthenticated/?' do
483
+ flash[:notice] = "That username and password are not correct!"
484
+ status 401
485
+ haml_template 'session/login'
486
+ end
471
487
 
472
488
  get '/logout/?' do
473
489
  logout_user!
data/TODO CHANGED
@@ -1,8 +1,7 @@
1
1
  = UNFINISHED
2
2
 
3
3
  * Add support for model, routes, migration generator types based on components
4
- * Add support for fields_for tag in formbuilder
5
- * Add support for button tag method, mail_to helper
4
+ * Add support for form.fields_for (one-to-one, nested and many associations like in rails)
6
5
  * Add support for check_box_group, radio_button_group which create a set of checkboxes or radio buttons
7
6
  * Become total warden solution (basically just require warden gem installed, do everything else)
8
7
  * Look into removing overlapping methods and simply leverage sinatra_warden
@@ -19,6 +18,8 @@
19
18
 
20
19
  = COMPLETED
21
20
 
21
+ * Add support for button tag method, mail_to helper
22
+ * Add support for simple fields_for tag helper
22
23
  * Add content_for / yield tags similar to rails
23
24
  * Created application generator using thor
24
25
  * Add support for a MailerPlugin which will make sending emails a breeze (http://github.com/hiroshi/pony)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.9
1
+ 0.3.10
@@ -28,6 +28,16 @@ module SinatraMore
28
28
  end
29
29
  end
30
30
 
31
+ # Creates a mail link element with given name and caption
32
+ # mail_to "me@demo.com" => <a href="mailto:me@demo.com">me@demo.com</a>
33
+ # mail_to "me@demo.com", "My Email" => <a href="mailto:me@demo.com">My Email</a>
34
+ def mail_to(email, caption=nil, mail_options={})
35
+ html_options = mail_options.slice!(:cc, :bcc, :subject, :body)
36
+ mail_query = Rack::Utils.build_query(mail_options).gsub(/\+/, '%20').gsub('%40', '@')
37
+ mail_href = "mailto:#{email}"; mail_href << "?#{mail_query}" if mail_query.present?
38
+ link_to (caption || email), mail_href, html_options
39
+ end
40
+
31
41
  # Creates an image element with given url and options
32
42
  # image_tag('icons/avatar.png')
33
43
  def image_tag(url, options={})
@@ -53,7 +53,7 @@ class AbstractFormBuilder
53
53
  # f.check_box :remember_me, :value => 'true', :uncheck_value => '0'
54
54
  def check_box(field, options={})
55
55
  unchecked_value = options.delete(:uncheck_value) || '0'
56
- options.reverse_merge!(:id => field_id(field))
56
+ options.reverse_merge!(:id => field_id(field), :value => '1')
57
57
  options.merge!(:checked => true) if values_matches_field?(field, options[:value])
58
58
  html = @template.check_box_tag field_name(field), options
59
59
  html << hidden_field(field, :value => unchecked_value, :id => nil)
@@ -98,7 +98,7 @@ class AbstractFormBuilder
98
98
  # Returns true if the value matches the value in the field
99
99
  # field_has_value?(:gender, 'male')
100
100
  def values_matches_field?(field, value)
101
- value.present? && field_value(field).to_s == value.to_s
101
+ value.present? && (field_value(field).to_s == value.to_s || field_value(field).to_s == 'true')
102
102
  end
103
103
 
104
104
  # Returns the value for the object's field
@@ -1,6 +1,7 @@
1
1
  module SinatraMore
2
2
  module FormHelpers
3
3
  # Constructs a form for object using given or default form_builder
4
+ # form_for :user, '/register' do |f| ... end
4
5
  # form_for @user, '/register', :id => 'register' do |f| ... end
5
6
  def form_for(object, url, settings={}, &block)
6
7
  builder_class = configured_form_builder_class(settings[:builder])
@@ -8,6 +9,16 @@ module SinatraMore
8
9
  form_tag(url, settings) { form_html }
9
10
  end
10
11
 
12
+ # Constructs form fields for an object using given or default form_builder
13
+ # Used within an existing form to allow alternate objects within one form
14
+ # fields_for @user.assignment do |assignment| ... end
15
+ # fields_for :assignment do |assigment| ... end
16
+ def fields_for(object, settings={}, &block)
17
+ builder_class = configured_form_builder_class(settings[:builder])
18
+ fields_html = capture_html(builder_class.new(self, object), &block)
19
+ concat_content fields_html
20
+ end
21
+
11
22
  # Constructs a form without object based on options
12
23
  # form_tag '/register' do ... end
13
24
  def form_tag(url, options={}, &block)
@@ -125,6 +136,13 @@ module SinatraMore
125
136
  input_tag(:submit, options)
126
137
  end
127
138
 
139
+ # Constructs a button input from the given options
140
+ # button_tag "Cancel", :class => 'clear'
141
+ def button_tag(caption, options = {})
142
+ options.reverse_merge!(:value => caption)
143
+ input_tag(:button, options)
144
+ end
145
+
128
146
  # Constructs a submit button from the given options
129
147
  # submit_tag "Create", :class => 'success'
130
148
  def image_submit_tag(source, options={})
@@ -1,43 +1,9 @@
1
1
  # This is for adding specific methods that are required by sinatra_more if activesupport isn't required
2
2
 
3
- unless String.method_defined?(:titleize)
3
+ unless String.method_defined?(:titleize) && Hash.method_defined?(:slice)
4
4
  require 'active_support/inflector'
5
5
  require 'active_support/core_ext/blank'
6
6
  require 'active_support/core_ext/class/attribute_accessors'
7
+ require 'active_support/core_ext/hash'
8
+ require 'active_support/core_ext/array'
7
9
  end
8
-
9
- unless Hash.method_defined?(:reverse_merge!)
10
- module HashExtensions
11
- def reverse_merge(other_hash)
12
- other_hash.merge(self)
13
- end
14
- def reverse_merge!(other_hash)
15
- replace(reverse_merge(other_hash))
16
- end
17
- end
18
- end
19
-
20
- unless Hash.method_defined?(:symbolize_keys!)
21
- module HashExtensions
22
- def symbolize_keys
23
- inject({}) do |options, (key, value)|
24
- options[(key.to_sym rescue key) || key] = value
25
- options
26
- end
27
- end
28
- def symbolize_keys!
29
- self.replace(self.symbolize_keys)
30
- end
31
- end
32
- end
33
-
34
- unless Array.method_defined?(:extract_options!)
35
- module ArrayExtensions
36
- def extract_options!
37
- last.is_a?(::Hash) ? pop : {}
38
- end
39
- end
40
- end
41
-
42
- Hash.send(:include, HashExtensions) if defined?(HashExtensions)
43
- Array.send(:include, ArrayExtensions) if defined?(ArrayExtensions)
data/sinatra_more.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{sinatra_more}
8
- s.version = "0.3.9"
8
+ s.version = "0.3.10"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Nathan Esquenazi"]
12
- s.date = %q{2009-11-10}
12
+ s.date = %q{2009-11-11}
13
13
  s.default_executable = %q{sinatra_gen}
14
14
  s.description = %q{Expands sinatra with standard helpers and tools to allow for complex applications}
15
15
  s.email = %q{nesquena@gmail.com}
@@ -98,12 +98,16 @@ Gem::Specification.new do |s|
98
98
  "test/fixtures/markup_app/views/content_for.haml",
99
99
  "test/fixtures/markup_app/views/content_tag.erb",
100
100
  "test/fixtures/markup_app/views/content_tag.haml",
101
+ "test/fixtures/markup_app/views/fields_for.erb",
102
+ "test/fixtures/markup_app/views/fields_for.haml",
101
103
  "test/fixtures/markup_app/views/form_for.erb",
102
104
  "test/fixtures/markup_app/views/form_for.haml",
103
105
  "test/fixtures/markup_app/views/form_tag.erb",
104
106
  "test/fixtures/markup_app/views/form_tag.haml",
105
107
  "test/fixtures/markup_app/views/link_to.erb",
106
108
  "test/fixtures/markup_app/views/link_to.haml",
109
+ "test/fixtures/markup_app/views/mail_to.erb",
110
+ "test/fixtures/markup_app/views/mail_to.haml",
107
111
  "test/fixtures/render_app/app.rb",
108
112
  "test/fixtures/render_app/views/erb/test.erb",
109
113
  "test/fixtures/render_app/views/haml/test.haml",
@@ -46,6 +46,12 @@ class MarkupUser
46
46
  def session_id; 45; end
47
47
  def gender; 'male'; end
48
48
  def remember_me; '1'; end
49
+ def permission; Permission.new; end
50
+ end
51
+
52
+ class Permission
53
+ def can_edit; true; end
54
+ def can_delete; false; end
49
55
  end
50
56
 
51
57
  class Errors < Array
@@ -0,0 +1,8 @@
1
+ <% @user = MarkupUser.new %>
2
+ <% form_for @user , '/demo1', :id => 'demo-fields-for' do |f| %>
3
+ <%= f.text_field :gender %>
4
+ <% fields_for @user.permission do |permission| %>
5
+ <%= permission.check_box :can_edit %>
6
+ <%= permission.check_box :can_delete %>
7
+ <% end %>
8
+ <% end %>
@@ -0,0 +1,6 @@
1
+ - @user = MarkupUser.new
2
+ - form_for @user , '/demo1', :id => 'demo-fields-for' do |f|
3
+ = f.text_field :gender
4
+ - fields_for @user.permission do |permission|
5
+ = permission.check_box :can_edit
6
+ = permission.check_box :can_delete
@@ -51,6 +51,7 @@
51
51
  <% end %>
52
52
  <% field_set_tag(:class => 'buttons') do %>
53
53
  <%= submit_tag "Login" %>
54
+ <%= button_tag "Cancel" %>
54
55
  <%= image_submit_tag "buttons/submit.png" %>
55
56
  <% end %>
56
57
  <% end %>
@@ -41,4 +41,5 @@
41
41
  = check_box_tag :remember_me, :value => "1", :checked => true
42
42
  - field_set_tag(:class => 'buttons') do
43
43
  = submit_tag "Login"
44
+ = button_tag "Cancel"
44
45
  = image_submit_tag "buttons/submit.png"
@@ -0,0 +1,3 @@
1
+ <p class='simple'><%= mail_to 'test@demo.com' %></p>
2
+
3
+ <p class='captioned'><%= mail_to 'test@demo.com', "Click my Email" %></p>
@@ -0,0 +1,3 @@
1
+ %p.simple= mail_to 'test@demo.com'
2
+
3
+ %p.captioned= mail_to 'test@demo.com', "Click my Email"
@@ -59,6 +59,11 @@ class WardenDemo < Sinatra::Base
59
59
  must_be_authorized!('/login')
60
60
  "<h1>Valid Authorized Page</h1>"
61
61
  end
62
+
63
+ post '/unauthenticated/?' do
64
+ status 401
65
+ '<h2>Unauthenticated</h2>'
66
+ end
62
67
 
63
68
  get '/current_user' do
64
69
  if current_user
@@ -46,6 +46,38 @@ class TestAssetTagHelpers < Test::Unit::TestCase
46
46
  end
47
47
  end
48
48
 
49
+ context 'for #mail_to method' do
50
+ should "display link element for mail to no caption" do
51
+ actual_html = mail_to('test@demo.com')
52
+ assert_has_tag(:a, :href => "mailto:test@demo.com", :content => 'test@demo.com') { actual_html }
53
+ end
54
+
55
+ should "display link element for mail to with caption" do
56
+ actual_html = mail_to('test@demo.com', "My Email", :class => 'demo')
57
+ assert_has_tag(:a, :href => "mailto:test@demo.com", :content => 'My Email', :class => 'demo') { actual_html }
58
+ end
59
+
60
+ should "display link element for mail to with caption and mail options" do
61
+ actual_html = mail_to('test@demo.com', "My Email", :subject => 'demo test', :class => 'demo', :cc => 'foo@test.com')
62
+ assert_has_tag(:a, :class => 'demo') { actual_html }
63
+ assert_match /mailto\:test\@demo.com\?/, actual_html
64
+ assert_match /cc=foo\@test\.com/, actual_html
65
+ assert_match /subject\=demo\%20test/, actual_html
66
+ end
67
+
68
+ should "display mail link element in haml" do
69
+ visit '/haml/mail_to'
70
+ assert_have_selector 'p.simple a', :href => 'mailto:test@demo.com', :content => 'test@demo.com'
71
+ assert_have_selector 'p.captioned a', :href => 'mailto:test@demo.com', :content => 'Click my Email'
72
+ end
73
+
74
+ should "display mail link element in erb" do
75
+ visit '/erb/mail_to'
76
+ assert_have_selector 'p.simple a', :href => 'mailto:test@demo.com', :content => 'test@demo.com'
77
+ assert_have_selector 'p.captioned a', :href => 'mailto:test@demo.com', :content => 'Click my Email'
78
+ end
79
+ end
80
+
49
81
  context 'for #image_tag method' do
50
82
  should "display image tag absolute link with no options" do
51
83
  assert_has_tag('img', :src => "/absolute/pic.gif") { image_tag('/absolute/pic.gif') }
@@ -34,7 +34,7 @@ class TestFormBuilder < Test::Unit::TestCase
34
34
  assert_has_tag('form input[type=hidden]', :name => '_method', :count => 0) { actual_html } # no method action field
35
35
  end
36
36
 
37
- should "display correct form html with method :post" do
37
+ should "display correct form html with method :put" do
38
38
  actual_html = form_for(@user, '/update', :method => 'put') { "Demo" }
39
39
  assert_has_tag('form', :action => '/update', :method => 'post') { actual_html }
40
40
  assert_has_tag('form input', :type => 'hidden', :name => "_method", :value => 'put') { actual_html }
@@ -61,7 +61,7 @@ class TestFormBuilder < Test::Unit::TestCase
61
61
  assert_has_tag('form p input[type=text]') { actual_html }
62
62
  end
63
63
 
64
- should "display fail for form with no object" do
64
+ should "display fail for form with nil object" do
65
65
  assert_raises(RuntimeError) { form_for(@not_real, '/register', :id => 'register', :method => 'post') { "Demo" } }
66
66
  end
67
67
 
@@ -80,6 +80,38 @@ class TestFormBuilder < Test::Unit::TestCase
80
80
  end
81
81
  end
82
82
 
83
+ context 'for #fields_for method' do
84
+ should 'display correct fields html' do
85
+ actual_html = fields_for(@user) { |f| f.text_field(:first_name) }
86
+ assert_has_tag(:input, :type => 'text', :name => 'user[first_name]', :id => 'user_first_name') { actual_html }
87
+ end
88
+
89
+ should 'display correct fields html with symbol object' do
90
+ actual_html = fields_for(:markup_user) { |f| f.text_field(:first_name) }
91
+ assert_has_tag(:input, :type => 'text', :name => 'markup_user[first_name]', :id => 'markup_user_first_name') { actual_html }
92
+ end
93
+
94
+ should "display fail for nil object" do
95
+ assert_raises(RuntimeError) { fields_for(@not_real) { |f| "Demo" } }
96
+ end
97
+
98
+ should 'display correct simple fields in haml' do
99
+ visit '/haml/fields_for'
100
+ assert_have_selector :form, :action => '/demo1', :id => 'demo-fields-for'
101
+ assert_have_selector '#demo-fields-for input', :type => 'text', :name => 'markup_user[gender]', :value => 'male'
102
+ assert_have_selector '#demo-fields-for input', :type => 'checkbox', :name => 'permission[can_edit]', :value => '1', :checked => 'checked'
103
+ assert_have_selector '#demo-fields-for input', :type => 'checkbox', :name => 'permission[can_delete]'
104
+ end
105
+
106
+ should "display correct simple fields in erb" do
107
+ visit '/erb/fields_for'
108
+ assert_have_selector :form, :action => '/demo1', :id => 'demo-fields-for'
109
+ assert_have_selector '#demo-fields-for input', :type => 'text', :name => 'markup_user[gender]', :value => 'male'
110
+ assert_have_selector '#demo-fields-for input', :type => 'checkbox', :name => 'permission[can_edit]', :value => '1', :checked => 'checked'
111
+ assert_have_selector '#demo-fields-for input', :type => 'checkbox', :name => 'permission[can_delete]'
112
+ end
113
+ end
114
+
83
115
  # ===========================
84
116
  # AbstractFormBuilder
85
117
  # ===========================
@@ -186,14 +218,26 @@ class TestFormBuilder < Test::Unit::TestCase
186
218
  end
187
219
 
188
220
  should "display correct checkbox html as checked when object value matches" do
189
- @user.stubs(:show_favorites => '1')
221
+ @user.stubs(:show_favorites => 'human')
222
+ actual_html = standard_builder.check_box(:show_favorites, :value => 'human')
223
+ assert_has_tag('input[type=checkbox]', :checked => 'checked', :name => 'user[show_favorites]') { actual_html }
224
+ end
225
+
226
+ should "display correct checkbox html as checked when object value is true" do
227
+ @user.stubs(:show_favorites => true)
190
228
  actual_html = standard_builder.check_box(:show_favorites, :value => '1')
191
229
  assert_has_tag('input[type=checkbox]', :checked => 'checked', :name => 'user[show_favorites]') { actual_html }
192
230
  end
193
231
 
194
232
  should "display correct checkbox html as unchecked when object value doesn't match" do
195
- @user.stubs(:show_favories => '0')
196
- actual_html = standard_builder.check_box(:show_favorites, :value => 'female')
233
+ @user.stubs(:show_favorites => 'alien')
234
+ actual_html = standard_builder.check_box(:show_favorites, :value => 'human')
235
+ assert_has_no_tag('input[type=checkbox]', :checked => 'checked') { actual_html }
236
+ end
237
+
238
+ should "display correct checkbox html as unchecked when object value is false" do
239
+ @user.stubs(:show_favorites => false)
240
+ actual_html = standard_builder.check_box(:show_favorites, :value => '1')
197
241
  assert_has_no_tag('input[type=checkbox]', :checked => 'checked') { actual_html }
198
242
  end
199
243
 
@@ -364,6 +364,23 @@ class TestFormHelpers < Test::Unit::TestCase
364
364
  end
365
365
  end
366
366
 
367
+ context 'for #button_tag method' do
368
+ should "display submit tag in ruby" do
369
+ actual_html = button_tag("Cancel", :class => 'clear')
370
+ assert_has_tag(:input, :type => 'button', :class => "clear", :value => 'Cancel') { actual_html }
371
+ end
372
+
373
+ should "display submit tag in erb" do
374
+ visit '/erb/form_tag'
375
+ assert_have_selector 'form.advanced-form input[type=button]', :count => 1, :value => "Cancel"
376
+ end
377
+
378
+ should "display submit tag in haml" do
379
+ visit '/haml/form_tag'
380
+ assert_have_selector 'form.advanced-form input[type=button]', :count => 1, :value => "Cancel"
381
+ end
382
+ end
383
+
367
384
  context 'for #image_submit_tag method' do
368
385
  should "display image submit tag in ruby with relative path" do
369
386
  actual_html = image_submit_tag('buttons/ok.png', :class => 'success')
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sinatra_more
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.9
4
+ version: 0.3.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nathan Esquenazi
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-11-10 00:00:00 -08:00
12
+ date: 2009-11-11 00:00:00 -08:00
13
13
  default_executable: sinatra_gen
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -191,12 +191,16 @@ files:
191
191
  - test/fixtures/markup_app/views/content_for.haml
192
192
  - test/fixtures/markup_app/views/content_tag.erb
193
193
  - test/fixtures/markup_app/views/content_tag.haml
194
+ - test/fixtures/markup_app/views/fields_for.erb
195
+ - test/fixtures/markup_app/views/fields_for.haml
194
196
  - test/fixtures/markup_app/views/form_for.erb
195
197
  - test/fixtures/markup_app/views/form_for.haml
196
198
  - test/fixtures/markup_app/views/form_tag.erb
197
199
  - test/fixtures/markup_app/views/form_tag.haml
198
200
  - test/fixtures/markup_app/views/link_to.erb
199
201
  - test/fixtures/markup_app/views/link_to.haml
202
+ - test/fixtures/markup_app/views/mail_to.erb
203
+ - test/fixtures/markup_app/views/mail_to.haml
200
204
  - test/fixtures/render_app/app.rb
201
205
  - test/fixtures/render_app/views/erb/test.erb
202
206
  - test/fixtures/render_app/views/haml/test.haml