padrino-helpers 0.11.3 → 0.11.4

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.
Files changed (50) hide show
  1. checksums.yaml +7 -0
  2. data/README.rdoc +1 -1
  3. data/lib/padrino-helpers.rb +3 -5
  4. data/lib/padrino-helpers/asset_tag_helpers.rb +32 -40
  5. data/lib/padrino-helpers/breadcrumb_helpers.rb +21 -39
  6. data/lib/padrino-helpers/form_builder/abstract_form_builder.rb +121 -118
  7. data/lib/padrino-helpers/form_builder/standard_form_builder.rb +6 -9
  8. data/lib/padrino-helpers/form_helpers.rb +190 -193
  9. data/lib/padrino-helpers/format_helpers.rb +29 -42
  10. data/lib/padrino-helpers/locale/cs.yml +14 -14
  11. data/lib/padrino-helpers/locale/da.yml +1 -1
  12. data/lib/padrino-helpers/locale/de.yml +1 -1
  13. data/lib/padrino-helpers/locale/en.yml +16 -16
  14. data/lib/padrino-helpers/locale/es.yml +16 -16
  15. data/lib/padrino-helpers/locale/fr.yml +1 -2
  16. data/lib/padrino-helpers/locale/hu.yml +16 -16
  17. data/lib/padrino-helpers/locale/it.yml +2 -2
  18. data/lib/padrino-helpers/locale/ja.yml +16 -16
  19. data/lib/padrino-helpers/locale/lv.yml +16 -16
  20. data/lib/padrino-helpers/locale/nl.yml +1 -1
  21. data/lib/padrino-helpers/locale/no.yml +1 -1
  22. data/lib/padrino-helpers/locale/pl.yml +7 -7
  23. data/lib/padrino-helpers/locale/pt_br.yml +16 -16
  24. data/lib/padrino-helpers/locale/ro.yml +16 -16
  25. data/lib/padrino-helpers/locale/ru.yml +16 -16
  26. data/lib/padrino-helpers/locale/sv.yml +16 -16
  27. data/lib/padrino-helpers/locale/tr.yml +16 -16
  28. data/lib/padrino-helpers/locale/uk.yml +16 -16
  29. data/lib/padrino-helpers/locale/zh_cn.yml +16 -16
  30. data/lib/padrino-helpers/locale/zh_tw.yml +16 -16
  31. data/lib/padrino-helpers/number_helpers.rb +10 -15
  32. data/lib/padrino-helpers/output_helpers.rb +49 -57
  33. data/lib/padrino-helpers/output_helpers/abstract_handler.rb +16 -18
  34. data/lib/padrino-helpers/output_helpers/erb_handler.rb +11 -12
  35. data/lib/padrino-helpers/output_helpers/haml_handler.rb +9 -9
  36. data/lib/padrino-helpers/output_helpers/slim_handler.rb +11 -13
  37. data/lib/padrino-helpers/render_helpers.rb +5 -6
  38. data/lib/padrino-helpers/tag_helpers.rb +18 -21
  39. data/lib/padrino-helpers/translation_helpers.rb +4 -6
  40. data/test/fixtures/markup_app/app.rb +7 -3
  41. data/test/fixtures/render_app/app.rb +1 -0
  42. data/test/test_asset_tag_helpers.rb +1 -1
  43. data/test/test_form_builder.rb +5 -6
  44. data/test/test_form_helpers.rb +24 -12
  45. data/test/test_format_helpers.rb +3 -3
  46. data/test/test_number_helpers.rb +4 -0
  47. data/test/test_output_helpers.rb +1 -1
  48. data/test/test_render_helpers.rb +1 -1
  49. data/test/test_tag_helpers.rb +1 -1
  50. metadata +9 -15
@@ -25,18 +25,19 @@ module Padrino
25
25
  template.block_is_haml?(block)
26
26
  end
27
27
 
28
- # Captures the html from a block of template code for this handler
28
+ ##
29
+ # Captures the html from a block of template code for this handler.
29
30
  #
30
31
  # @example
31
32
  # @handler.capture_from_template(&block) => "...html..."
32
33
  #
33
34
  def capture_from_template(*args, &block)
34
- eval("_hamlout ||= @haml_buffer", block.binding) # this is for rbx
35
+ eval("_hamlout ||= @haml_buffer", block.binding)
35
36
  template.capture_haml(*args, &block)
36
37
  end
37
38
 
38
39
  ##
39
- # Outputs the given text to the templates buffer directly
40
+ # Outputs the given text to the templates buffer directly.
40
41
  #
41
42
  # @example
42
43
  # @handler.concat_to_template("This will be output to the template buffer")
@@ -47,7 +48,7 @@ module Padrino
47
48
  end
48
49
 
49
50
  ##
50
- # Returns an array of engines used for the template
51
+ # Returns an array of engines used for the template.
51
52
  #
52
53
  # @example
53
54
  # @handler.engines => [:haml]
@@ -55,9 +56,8 @@ module Padrino
55
56
  def engines
56
57
  @_engines ||= [:haml]
57
58
  end
58
- end # HamlHandler
59
-
59
+ end
60
60
  OutputHelpers.register(HamlHandler)
61
- end # OutputHelpers
62
- end # Helpers
63
- end # Padrino
61
+ end
62
+ end
63
+ end
@@ -1,5 +1,3 @@
1
- # Make slim works with sinatra/padrino
2
-
3
1
  module Padrino
4
2
  module Helpers
5
3
  module OutputHelpers
@@ -24,7 +22,8 @@ module Padrino
24
22
  !self.output_buffer.nil?
25
23
  end
26
24
 
27
- # Captures the html from a block of template code for this handler
25
+ ##
26
+ # Captures the html from a block of template code for this handler.
28
27
  #
29
28
  # @example
30
29
  # @handler.capture_from_template(&block) => "...html..."
@@ -38,7 +37,7 @@ module Padrino
38
37
  end
39
38
 
40
39
  ##
41
- # Outputs the given text to the templates buffer directly
40
+ # Outputs the given text to the templates buffer directly.
42
41
  #
43
42
  # @example
44
43
  # @handler.concat_to_template("This will be output to the template buffer")
@@ -59,7 +58,7 @@ module Padrino
59
58
  end
60
59
 
61
60
  ##
62
- # Returns an array of engines used for the template
61
+ # Returns an array of engines used for the template.
63
62
  #
64
63
  # @example
65
64
  # @handler.engines => [:erb, :erubis]
@@ -69,12 +68,11 @@ module Padrino
69
68
  end
70
69
 
71
70
  protected
72
- def output_buffer=(val)
73
- template.instance_variable_set(:@_out_buf, val)
74
- end
75
- end # SlimHandler
76
-
71
+ def output_buffer=(val)
72
+ template.instance_variable_set(:@_out_buf, val)
73
+ end
74
+ end
77
75
  OutputHelpers.register(SlimHandler)
78
- end # OutputHelpers
79
- end # Helpers
80
- end # Padrino
76
+ end
77
+ end
78
+ end
@@ -5,7 +5,7 @@ module Padrino
5
5
  #
6
6
  module RenderHelpers
7
7
  ##
8
- # Render a partials with collections support
8
+ # Render a partials with collections support.
9
9
  #
10
10
  # @param [String] template
11
11
  # Relative path to partial template.
@@ -18,7 +18,7 @@ module Padrino
18
18
  # @option options [Hash] :locals ({})
19
19
  # Local variables accessible in the partial.
20
20
  # @option options [Symbol] :engine
21
- # Explicit rendering engine to use for this partial
21
+ # Explicit rendering engine to use for this partial.
22
22
  #
23
23
  # @return [String] The html generated from this partial.
24
24
  #
@@ -30,7 +30,6 @@ module Padrino
30
30
  #
31
31
  # @note If using this from Sinatra, pass explicit +:engine+ option
32
32
  #
33
- # @api public
34
33
  def partial(template, options={})
35
34
  options.reverse_merge!(:locals => {}, :layout => false)
36
35
  path = template.to_s.split(File::SEPARATOR)
@@ -55,6 +54,6 @@ module Padrino
55
54
  end
56
55
  end
57
56
  alias :render_partial :partial
58
- end # RenderHelpers
59
- end # Helpers
60
- end # Padrino
57
+ end
58
+ end
59
+ end
@@ -5,7 +5,7 @@ module Padrino
5
5
  #
6
6
  module TagHelpers
7
7
  ##
8
- # Tag values escaped to html entities
8
+ # Tag values escaped to html entities.
9
9
  #
10
10
  ESCAPE_VALUES = {
11
11
  "&" => "&",
@@ -62,13 +62,13 @@ module Padrino
62
62
  NEWLINE = "\n".html_safe.freeze
63
63
 
64
64
  ##
65
- # Creates an HTML tag with given name, content, and options
65
+ # Creates an HTML tag with given name, content, and options.
66
66
  #
67
67
  # @overload content_tag(name, content, options = nil)
68
68
  # @param [Symbol] name
69
69
  # The name of the HTML tag to create.
70
70
  # @param [String] content
71
- # The content inside of the the tag.
71
+ # The content inside of the tag.
72
72
  # @param [Hash] options
73
73
  # The HTML options to include in this tag.
74
74
  #
@@ -99,7 +99,7 @@ module Padrino
99
99
  # Specifies whether or not the element is editable.
100
100
  #
101
101
  # @return [String]
102
- # Generated HTML with specified +options+
102
+ # Generated HTML with specified +options+.
103
103
  #
104
104
  # @example
105
105
  # content_tag(:p, 'Hello World', :class => 'light')
@@ -116,7 +116,6 @@ module Padrino
116
116
  # # => <a href="http://www.padrinorb.com">Padrino</a>
117
117
  # # => </p>
118
118
  #
119
- # @api public
120
119
  def content_tag(name, content = nil, options = nil, &block)
121
120
  if block_given?
122
121
  options = content if content.is_a?(Hash)
@@ -139,7 +138,7 @@ module Padrino
139
138
 
140
139
  ##
141
140
  # Like #content_tag, but assumes its input to be safe and doesn't
142
- # escape. It also returns safe html.
141
+ # escape. It also returns safe HTML.
143
142
  #
144
143
  # @see #content_tag
145
144
  #
@@ -148,7 +147,7 @@ module Padrino
148
147
  end
149
148
 
150
149
  ##
151
- # Creates an HTML input field with the given type and options
150
+ # Creates an HTML input field with the given type and options.
152
151
  #
153
152
  # @param [Symbol] type
154
153
  # The type of input to create.
@@ -178,14 +177,14 @@ module Padrino
178
177
  # @option options [Boolean] :autofocus
179
178
  # Specifies whether or not the input should automatically get focus when the page loads.
180
179
  # @option options [Boolean] :required
181
- # Specifies whether or not the input is required to be completeled before the form is submitted.
180
+ # Specifies whether or not the input is required to be completed before the form is submitted.
182
181
  # @option options [Boolean] :readonly
183
182
  # Specifies whether or not the input is read only.
184
183
  # @option options [Boolean] :disabled
185
184
  # Specifies whether or not the input is disabled.
186
185
  #
187
186
  # @return [String]
188
- # Generated HTML with specified +options+
187
+ # Generated HTML with specified +options+.
189
188
  #
190
189
  # @example
191
190
  # input_tag :text, :name => 'handle'
@@ -200,13 +199,12 @@ module Padrino
200
199
  # input_tag :number, :name => 'credit_card', :autocomplete => :off
201
200
  # # => <input type="number" autocomplete="off" />
202
201
  #
203
- # @api semipublic
204
202
  def input_tag(type, options = {})
205
203
  tag(:input, options.reverse_merge!(:type => type))
206
204
  end
207
205
 
208
206
  ##
209
- # Creates an HTML tag with the given name and options
207
+ # Creates an HTML tag with the given name and options.
210
208
  #
211
209
  # @param [Symbol] name
212
210
  # The name of the HTML tag to create.
@@ -216,7 +214,7 @@ module Padrino
216
214
  # @macro global_html_attributes
217
215
  #
218
216
  # @return [String]
219
- # Generated HTML with specified +options+
217
+ # Generated HTML with specified +options+.
220
218
  #
221
219
  # @example
222
220
  # tag :hr, :class => 'dotted'
@@ -231,7 +229,6 @@ module Padrino
231
229
  # tag :img, :src => 'sinatra.jpg, :data => { :nsfw => false, :geo => [34.087, -118.407] }
232
230
  # # => <img src="sinatra.jpg" data-nsfw="false" data-geo="34.087 -118.407" />
233
231
  #
234
- # @api public
235
232
  def tag(name, options = nil, open = false)
236
233
  options = parse_data_options(name, options)
237
234
  attributes = tag_attributes(options)
@@ -240,8 +237,8 @@ module Padrino
240
237
 
241
238
  private
242
239
  ##
243
- # Returns a compiled list of HTML attributes
244
- ##
240
+ # Returns a compiled list of HTML attributes.
241
+ #
245
242
  def tag_attributes(options)
246
243
  return '' if options.nil?
247
244
  attributes = options.map do |k, v|
@@ -259,13 +256,13 @@ module Padrino
259
256
 
260
257
  ##
261
258
  # Escape tag values to their HTML/XML entities.
262
- ##
259
+ #
263
260
  def escape_value(string)
264
261
  string.to_s.gsub(ESCAPE_REGEXP) { |c| ESCAPE_VALUES[c] }
265
262
  end
266
263
 
267
264
  ##
268
- # Iterate through nested values
265
+ # Iterate through nested values.
269
266
  #
270
267
  def nested_values(attribute, hash)
271
268
  hash.map do |k, v|
@@ -278,7 +275,7 @@ module Padrino
278
275
  end
279
276
 
280
277
  ##
281
- # Parses custom data attributes
278
+ # Parses custom data attributes.
282
279
  #
283
280
  def parse_data_options(tag, options)
284
281
  return if options.nil?
@@ -290,6 +287,6 @@ module Padrino
290
287
  end
291
288
  parsed_options
292
289
  end
293
- end # TagHelpers
294
- end # Helpers
295
- end # Padrino
290
+ end
291
+ end
292
+ end
@@ -1,7 +1,7 @@
1
1
  module Padrino
2
2
  module Helpers
3
3
  ##
4
- # Helpers related to locale1 i18n translation within templates.
4
+ # Helpers related to locale i18n translation within templates.
5
5
  #
6
6
  module TranslationHelpers
7
7
  ##
@@ -13,7 +13,6 @@ module Padrino
13
13
  # @return [String]
14
14
  # The translation for the specified keys.
15
15
  #
16
- # @api public
17
16
  def translate(*args)
18
17
  I18n.translate(*args)
19
18
  end
@@ -28,11 +27,10 @@ module Padrino
28
27
  # @return [String]
29
28
  # The translation for the specified keys.
30
29
  #
31
- # @api public
32
30
  def localize(*args)
33
31
  I18n.localize(*args)
34
32
  end
35
33
  alias :l :localize
36
- end # TranslationHelpers
37
- end # Helpers
38
- end # Padrino
34
+ end
35
+ end
36
+ end
@@ -10,11 +10,15 @@ class MarkupDemo < Sinatra::Base
10
10
  register Padrino::Helpers
11
11
 
12
12
  configure do
13
+ set :logging, false
14
+ set :padrino_logging, false
15
+ set :environment, :test
13
16
  set :root, File.dirname(__FILE__)
14
17
  set :erb, :engine_class => Padrino::Erubis::SafeBufferTemplate
15
18
  set :haml, :escape_html => true
16
- set :slim, :generator => Temple::Generators::RailsOutputBuffer,
17
- :buffer => "out_buf"
19
+ set :slim, :generator => Temple::Generators::RailsOutputBuffer, :buffer => "out_buf"
20
+ set :sessions, true
21
+ set :protect_from_csrf, true
18
22
  end
19
23
 
20
24
  get '/:engine/:file' do
@@ -50,7 +54,7 @@ class MarkupDemo < Sinatra::Base
50
54
  end
51
55
 
52
56
  class MarkupUser
53
- def errors; { :fake => "must be valid", :second => "must be present", :third => "must be a number", :email => "must be a email"}; end
57
+ def errors; { :fake => "must be valid", :second => "must be present", :third => "must be a number", :email => "must be an email"}; end
54
58
  def session_id; 45; end
55
59
  def gender; 'male'; end
56
60
  def remember_me; '1'; end
@@ -16,6 +16,7 @@ class RenderDemo < Padrino::Application
16
16
  configure do
17
17
  set :logging, false
18
18
  set :padrino_logging, false
19
+ set :environment, :test
19
20
  set :erb, :engine_class => Padrino::Erubis::SafeBufferTemplate
20
21
  set :haml, :escape_html => true
21
22
  set :slim, :generator => Temple::Generators::RailsOutputBuffer
@@ -5,7 +5,7 @@ describe "AssetTagHelpers" do
5
5
  include Padrino::Helpers::AssetTagHelpers
6
6
 
7
7
  def app
8
- MarkupDemo.tap { |app| app.set :environment, :test }
8
+ MarkupDemo
9
9
  end
10
10
 
11
11
  def flash
@@ -4,6 +4,10 @@ require File.expand_path(File.dirname(__FILE__) + '/fixtures/markup_app/app')
4
4
  describe "FormBuilder" do
5
5
  include Padrino::Helpers::FormHelpers
6
6
 
7
+ def app
8
+ MarkupDemo
9
+ end
10
+
7
11
  # Dummy form builder for testing
8
12
  module Padrino::Helpers::FormBuilder
9
13
  class FakeFormBuilder < AbstractFormBuilder
@@ -11,10 +15,6 @@ describe "FormBuilder" do
11
15
  end
12
16
  end
13
17
 
14
- def app
15
- MarkupDemo.tap { |app| app.set :environment, :test }
16
- end
17
-
18
18
  def setup
19
19
  role_types = [mock_model('Role', :name => "Admin", :id => 1),
20
20
  mock_model('Role', :name => 'Moderate', :id => 2), mock_model('Role', :name => 'Limited', :id => 3)]
@@ -49,8 +49,7 @@ describe "FormBuilder" do
49
49
  end
50
50
 
51
51
  should "display form specifying default builder setting" do
52
- self.expects(:settings).returns(stub(:default_builder => 'FakeFormBuilder')).once
53
- actual_html = ""
52
+ self.expects(:settings).returns(stub(:default_builder => 'FakeFormBuilder', :protect_from_csrf => false)).at_least_once
54
53
  actual_html = form_for(@user, '/register', :id => 'register', :"accept-charset" => "UTF-8", :method => 'post') { |f| f.foo_field }
55
54
  assert_has_tag('form', :"accept-charset" => "UTF-8", :action => '/register', :method => 'post') { actual_html }
56
55
  assert_has_tag('span', :content => "bar") { actual_html }
@@ -5,12 +5,14 @@ describe "FormHelpers" do
5
5
  include Padrino::Helpers::FormHelpers
6
6
 
7
7
  def app
8
- MarkupDemo.tap { |app| app.set :environment, :test }
8
+ MarkupDemo
9
9
  end
10
10
 
11
- context 'for #form_tag method' do
12
- after(:each) { app.set :protect_from_csrf, true }
11
+ class UnprotectedApp
12
+ def protect_from_csrf; false; end
13
+ end
13
14
 
15
+ context 'for #form_tag method' do
14
16
  should "display correct forms in ruby" do
15
17
  actual_html = form_tag('/register', :"accept-charset" => "UTF-8", :class => 'test', :method => "post") { "Demo" }
16
18
  assert_has_tag(:form, :"accept-charset" => "UTF-8", :class => "test") { actual_html }
@@ -73,19 +75,24 @@ describe "FormHelpers" do
73
75
  assert_has_tag(:input, :name => 'authenticity_token') { actual_html }
74
76
  end
75
77
 
76
- should "not have an authenticity_token if passing protect_from_csrf: false" do
77
- actual_html = form_tag('/superadmindelete', :protect_from_csrf => false) { "Demo" }
78
- assert_has_no_tag(:input, :name => 'authenticity_token') { actual_html }
78
+ should "create csrf meta tags with token and param - #csrf_meta_tags" do
79
+ actual_html = csrf_meta_tags
80
+ assert_has_tag(:meta, :name => 'csrf-param') { actual_html }
81
+ assert_has_tag(:meta, :name => 'csrf-token') { actual_html }
79
82
  end
80
83
 
81
- should "have an authenticity_token if protect_from_csrf is not set on app settings" do
82
- app.set :protect_from_csrf, nil
84
+ should "have an authenticity_token by default" do
83
85
  actual_html = form_tag('/superadmindelete') { "Demo" }
84
86
  assert_has_tag(:input, :name => 'authenticity_token') { actual_html }
85
87
  end
86
88
 
89
+ should "not have an authenticity_token if passing protect_from_csrf: false" do
90
+ actual_html = form_tag('/superadmindelete', :protect_from_csrf => false) { "Demo" }
91
+ assert_has_no_tag(:input, :name => 'authenticity_token') { actual_html }
92
+ end
93
+
87
94
  should "not have an authenticity_token if protect_from_csrf is false on app settings" do
88
- app.set :protect_from_csrf, false
95
+ self.expects(:settings).returns(UnprotectedApp.new)
89
96
  actual_html = form_tag('/superadmindelete') { "Demo" }
90
97
  assert_has_no_tag(:input, :name => 'authenticity_token') { actual_html }
91
98
  end
@@ -166,7 +173,7 @@ describe "FormHelpers" do
166
173
  assert_have_selector 'form.advanced-form .field-errors p', :content => "There were problems with the following fields:"
167
174
  assert_have_selector 'form.advanced-form .field-errors ul'
168
175
  assert_have_selector 'form.advanced-form .field-errors ul li', :count => 4
169
- assert_have_selector 'form.advanced-form .field-errors ul li', :content => "Email must be a email"
176
+ assert_have_selector 'form.advanced-form .field-errors ul li', :content => "Email must be an email"
170
177
  assert_have_selector 'form.advanced-form .field-errors ul li', :content => "Fake must be valid"
171
178
  assert_have_selector 'form.advanced-form .field-errors ul li', :content => "Second must be present"
172
179
  assert_have_selector 'form.advanced-form .field-errors ul li', :content => "Third must be a number"
@@ -180,7 +187,7 @@ describe "FormHelpers" do
180
187
  assert_have_selector 'form.advanced-form .field-errors p', :content => "There were problems with the following fields:"
181
188
  assert_have_selector 'form.advanced-form .field-errors ul'
182
189
  assert_have_selector 'form.advanced-form .field-errors ul li', :count => 4
183
- assert_have_selector 'form.advanced-form .field-errors ul li', :content => "Email must be a email"
190
+ assert_have_selector 'form.advanced-form .field-errors ul li', :content => "Email must be an email"
184
191
  assert_have_selector 'form.advanced-form .field-errors ul li', :content => "Fake must be valid"
185
192
  assert_have_selector 'form.advanced-form .field-errors ul li', :content => "Second must be present"
186
193
  assert_have_selector 'form.advanced-form .field-errors ul li', :content => "Third must be a number"
@@ -194,7 +201,7 @@ describe "FormHelpers" do
194
201
  assert_have_selector 'form.advanced-form .field-errors p', :content => "There were problems with the following fields:"
195
202
  assert_have_selector 'form.advanced-form .field-errors ul'
196
203
  assert_have_selector 'form.advanced-form .field-errors ul li', :count => 4
197
- assert_have_selector 'form.advanced-form .field-errors ul li', :content => "Email must be a email"
204
+ assert_have_selector 'form.advanced-form .field-errors ul li', :content => "Email must be an email"
198
205
  assert_have_selector 'form.advanced-form .field-errors ul li', :content => "Fake must be valid"
199
206
  assert_have_selector 'form.advanced-form .field-errors ul li', :content => "Second must be present"
200
207
  assert_have_selector 'form.advanced-form .field-errors ul li', :content => "Third must be a number"
@@ -961,6 +968,11 @@ describe "FormHelpers" do
961
968
  assert_has_tag('form button', :type => 'submit', :content => "My button's content", :title => "My button") { actual_html }
962
969
  end
963
970
 
971
+ should "pass options on submit button when submit_options are given" do
972
+ actual_html = button_to("Fancy button", '/users/1', :submit_options => { :class => :fancy })
973
+ assert_has_tag('form input', :type => 'submit', :value => 'Fancy button', :class => 'fancy') { actual_html }
974
+ end
975
+
964
976
  should 'display correct button_to in erb' do
965
977
  visit '/erb/button_to'
966
978
  assert_have_selector('form', :action => '/foo')