padrino-helpers 0.10.2 → 0.10.3
Sign up to get free protection for your applications and to get access to all the features.
- data/.document +3 -3
- data/.yardopts +1 -0
- data/{LICENSE → LICENSE.txt} +0 -0
- data/README.rdoc +3 -3
- data/lib/padrino-helpers.rb +21 -14
- data/lib/padrino-helpers/asset_tag_helpers.rb +163 -34
- data/lib/padrino-helpers/form_builder/abstract_form_builder.rb +1 -1
- data/lib/padrino-helpers/form_helpers.rb +287 -134
- data/lib/padrino-helpers/format_helpers.rb +135 -17
- data/lib/padrino-helpers/locale/lv.yml +103 -0
- data/lib/padrino-helpers/locale/zh_cn.yml +1 -1
- data/lib/padrino-helpers/number_helpers.rb +73 -59
- data/lib/padrino-helpers/output_helpers.rb +59 -15
- data/lib/padrino-helpers/output_helpers/abstract_handler.rb +15 -20
- data/lib/padrino-helpers/output_helpers/erb_handler.rb +12 -15
- data/lib/padrino-helpers/output_helpers/haml_handler.rb +10 -14
- data/lib/padrino-helpers/output_helpers/slim_handler.rb +10 -14
- data/lib/padrino-helpers/render_helpers.rb +23 -7
- data/lib/padrino-helpers/tag_helpers.rb +41 -16
- data/lib/padrino-helpers/translation_helpers.rb +14 -0
- data/test/fixtures/markup_app/views/content_for.erb +3 -0
- data/test/fixtures/markup_app/views/content_for.haml +3 -0
- data/test/fixtures/markup_app/views/content_for.slim +3 -0
- data/test/helper.rb +3 -15
- data/test/test_asset_tag_helpers.rb +1 -1
- data/test/test_form_builder.rb +3 -5
- data/test/test_form_helpers.rb +1 -1
- data/test/test_format_helpers.rb +1 -1
- data/test/test_locale.rb +1 -1
- data/test/test_number_helpers.rb +1 -1
- data/test/test_output_helpers.rb +22 -2
- data/test/test_render_helpers.rb +1 -1
- data/test/test_tag_helpers.rb +1 -1
- metadata +10 -8
@@ -7,8 +7,8 @@ module Padrino
|
|
7
7
|
end
|
8
8
|
|
9
9
|
##
|
10
|
-
# Module used to detect in vanilla sinatra apps
|
11
|
-
#
|
10
|
+
# Module used to detect the current engine in vanilla sinatra apps.
|
11
|
+
# @private
|
12
12
|
module SinatraCurrentEngine
|
13
13
|
attr_reader :current_engine
|
14
14
|
|
@@ -21,12 +21,20 @@ module Padrino
|
|
21
21
|
end
|
22
22
|
|
23
23
|
##
|
24
|
-
# Captures the html from a block of template code for any available handler
|
24
|
+
# Captures the html from a block of template code for any available handler.
|
25
|
+
#
|
26
|
+
# @param [Object] *args
|
27
|
+
# Objects yield to the captured block
|
28
|
+
# @param [Proc] &block
|
29
|
+
# Template code to capture as html
|
25
30
|
#
|
26
|
-
#
|
31
|
+
# @return [String] Captured html resulting from the block
|
27
32
|
#
|
33
|
+
# @example
|
28
34
|
# capture_html(&block) => "...html..."
|
35
|
+
# capture_html(object_for_block, &block) => "...html..."
|
29
36
|
#
|
37
|
+
# @api semipublic
|
30
38
|
def capture_html(*args, &block)
|
31
39
|
handler = find_proper_handler
|
32
40
|
captured_html = ""
|
@@ -40,12 +48,15 @@ module Padrino
|
|
40
48
|
alias :capture :capture_html
|
41
49
|
|
42
50
|
##
|
43
|
-
# Outputs the given text to the templates buffer directly
|
51
|
+
# Outputs the given text to the templates buffer directly.
|
44
52
|
#
|
45
|
-
#
|
53
|
+
# @param [String] text
|
54
|
+
# Text to concatenate to the buffer.
|
46
55
|
#
|
56
|
+
# @example
|
47
57
|
# concat_content("This will be output to the template buffer")
|
48
58
|
#
|
59
|
+
# @api semipublic
|
49
60
|
def concat_content(text="")
|
50
61
|
handler = find_proper_handler
|
51
62
|
if handler && handler.is_type?
|
@@ -58,12 +69,17 @@ module Padrino
|
|
58
69
|
|
59
70
|
##
|
60
71
|
# Returns true if the block is from a supported template type; false otherwise.
|
61
|
-
# Used to determine if html should be returned or concatenated to the view
|
72
|
+
# Used to determine if html should be returned or concatenated to the view.
|
62
73
|
#
|
63
|
-
#
|
74
|
+
# @param [Block] block
|
75
|
+
# Determine if this block is a view template.
|
64
76
|
#
|
65
|
-
#
|
77
|
+
# @example
|
78
|
+
# block_is_template?(block) => true
|
66
79
|
#
|
80
|
+
# @return [Boolean] True if the block is a template; false otherwise.
|
81
|
+
#
|
82
|
+
# @api semipublic
|
67
83
|
def block_is_template?(block)
|
68
84
|
handler = find_proper_handler
|
69
85
|
block && handler && handler.block_is_type?(block)
|
@@ -73,27 +89,57 @@ module Padrino
|
|
73
89
|
# Capture a block or text of content to be rendered at a later time.
|
74
90
|
# Your blocks can also receive values, which are passed to them by <tt>yield_content</tt>
|
75
91
|
#
|
76
|
-
#
|
92
|
+
# @overload content_for(key, content)
|
93
|
+
# @param [Symbol] key Name of your key for the content yield.
|
94
|
+
# @param [String] content Text to be stored for this key.
|
95
|
+
# @overload content_for(key, &block)
|
96
|
+
# @param [Symbol] key Name of your key for the content yield.
|
97
|
+
# @param [Proc] block Block to be stored as content for this key.
|
77
98
|
#
|
99
|
+
# @example
|
78
100
|
# content_for(:name) { ...content... }
|
79
101
|
# content_for(:name) { |name| ...content... }
|
80
102
|
# content_for(:name, "I'm Jeff")
|
81
103
|
#
|
104
|
+
# @api public
|
82
105
|
def content_for(key, content = nil, &block)
|
83
106
|
content_blocks[key.to_sym] << (block_given? ? block : Proc.new { content })
|
84
107
|
end
|
85
108
|
|
109
|
+
##
|
110
|
+
# Is there a content block for a given key?
|
111
|
+
#
|
112
|
+
# @param [Symbol] key
|
113
|
+
# Name of content to yield
|
114
|
+
#
|
115
|
+
# @return [TrueClass,FalseClass] Result html for the given +key+
|
116
|
+
#
|
117
|
+
# @example
|
118
|
+
# content_for? :header => true
|
119
|
+
#
|
120
|
+
# @api public
|
121
|
+
def content_for?(key)
|
122
|
+
content_blocks[key.to_sym].present?
|
123
|
+
end
|
124
|
+
|
86
125
|
##
|
87
126
|
# Render the captured content blocks for a given key.
|
88
127
|
# You can also pass values to the content blocks by passing them
|
89
128
|
# as arguments after the key.
|
90
129
|
#
|
91
|
-
#
|
130
|
+
# @param [Symbol] key
|
131
|
+
# Name of content to yield
|
132
|
+
# @param *args
|
133
|
+
# Values to pass to the content block
|
92
134
|
#
|
135
|
+
# @return [String] Result html for the given +key+
|
136
|
+
#
|
137
|
+
# @example
|
93
138
|
# yield_content :include
|
94
139
|
# yield_content :head, "param1", "param2"
|
95
140
|
# yield_content(:title) || "My page title"
|
96
141
|
#
|
142
|
+
# @api public
|
97
143
|
def yield_content(key, *args)
|
98
144
|
blocks = content_blocks[key.to_sym]
|
99
145
|
return nil if blocks.empty?
|
@@ -104,8 +150,7 @@ module Padrino
|
|
104
150
|
##
|
105
151
|
# Retrieves content_blocks stored by content_for or within yield_content
|
106
152
|
#
|
107
|
-
#
|
108
|
-
#
|
153
|
+
# @example
|
109
154
|
# content_blocks[:name] => ['...', '...']
|
110
155
|
#
|
111
156
|
def content_blocks
|
@@ -116,8 +161,7 @@ module Padrino
|
|
116
161
|
# Retrieves the template handler for the given output context.
|
117
162
|
# Can handle any output related to capturing or concating in a given template.
|
118
163
|
#
|
119
|
-
#
|
120
|
-
#
|
164
|
+
# @example
|
121
165
|
# find_proper_handler => <OutputHelpers::HamlHandler>
|
122
166
|
#
|
123
167
|
def find_proper_handler
|
@@ -4,10 +4,10 @@ module Padrino
|
|
4
4
|
##
|
5
5
|
# Returns the list of all available template handlers
|
6
6
|
#
|
7
|
-
#
|
8
|
-
#
|
7
|
+
# @example
|
9
8
|
# OutputHelpers.handlers => [<OutputHelpers::HamlHandler>, <OutputHelpers::ErbHandler>]
|
10
9
|
#
|
10
|
+
# @private
|
11
11
|
def self.handlers
|
12
12
|
@_template_handlers ||= []
|
13
13
|
end
|
@@ -15,14 +15,15 @@ module Padrino
|
|
15
15
|
##
|
16
16
|
# Registers a new handler as available to the output helpers
|
17
17
|
#
|
18
|
-
#
|
19
|
-
#
|
18
|
+
# @example
|
20
19
|
# OutputHelpers.register(OutputHelpers::HamlHandler)
|
21
20
|
#
|
21
|
+
# @private
|
22
22
|
def self.register(handler)
|
23
23
|
handlers << handler
|
24
24
|
end
|
25
25
|
|
26
|
+
# @abstract Extend this to create a template handler
|
26
27
|
class AbstractHandler
|
27
28
|
attr_reader :template
|
28
29
|
|
@@ -33,9 +34,8 @@ module Padrino
|
|
33
34
|
##
|
34
35
|
# Returns extension of the template
|
35
36
|
#
|
36
|
-
#
|
37
|
-
#
|
38
|
-
# @handler.template_extension => "erb"
|
37
|
+
# @example
|
38
|
+
# @handler.template_extension => "erb"
|
39
39
|
#
|
40
40
|
def template_extension
|
41
41
|
caller.find { |c| c =~ /\/views\// }[/\.([\w]*?)\:/, 1] rescue nil
|
@@ -46,8 +46,7 @@ module Padrino
|
|
46
46
|
##
|
47
47
|
# Returns an array of engines used for the template
|
48
48
|
#
|
49
|
-
#
|
50
|
-
#
|
49
|
+
# @example
|
51
50
|
# @handler.engines => [:erb, :erubis]
|
52
51
|
#
|
53
52
|
def engines
|
@@ -57,9 +56,8 @@ module Padrino
|
|
57
56
|
##
|
58
57
|
# Returns true if the current template type is same as this handlers; false otherwise.
|
59
58
|
#
|
60
|
-
#
|
61
|
-
#
|
62
|
-
# @handler.is_type? => true
|
59
|
+
# @example
|
60
|
+
# @handler.is_type? => true
|
63
61
|
#
|
64
62
|
def is_type?
|
65
63
|
# Implemented in subclass
|
@@ -68,9 +66,8 @@ module Padrino
|
|
68
66
|
##
|
69
67
|
# Returns true if the block given is of the handler's template type; false otherwise.
|
70
68
|
#
|
71
|
-
#
|
72
|
-
#
|
73
|
-
# @handler.block_is_type?(block) => true
|
69
|
+
# @example
|
70
|
+
# @handler.block_is_type?(block) => true
|
74
71
|
#
|
75
72
|
def block_is_type?(block)
|
76
73
|
# Implemented in subclass
|
@@ -79,9 +76,8 @@ module Padrino
|
|
79
76
|
##
|
80
77
|
# Captures the html from a block of template code for this handler
|
81
78
|
#
|
82
|
-
#
|
83
|
-
#
|
84
|
-
# @handler.capture_from_template(&block) => "...html..."
|
79
|
+
# @example
|
80
|
+
# @handler.capture_from_template(&block) => "...html..."
|
85
81
|
#
|
86
82
|
def capture_from_template(*args, &block)
|
87
83
|
# Implemented in subclass
|
@@ -90,8 +86,7 @@ module Padrino
|
|
90
86
|
##
|
91
87
|
# Outputs the given text to the templates buffer directly
|
92
88
|
#
|
93
|
-
#
|
94
|
-
#
|
89
|
+
# @example
|
95
90
|
# @handler.concat_to_template("This will be output to the template buffer")
|
96
91
|
#
|
97
92
|
def concat_to_template(text="")
|
@@ -12,9 +12,8 @@ module Padrino
|
|
12
12
|
##
|
13
13
|
# Returns true if the current template type is same as this handlers; false otherwise.
|
14
14
|
#
|
15
|
-
#
|
16
|
-
#
|
17
|
-
# @handler.is_type? => true
|
15
|
+
# @example
|
16
|
+
# @handler.is_type? => true
|
18
17
|
#
|
19
18
|
def is_type?
|
20
19
|
!self.output_buffer.nil?
|
@@ -22,9 +21,8 @@ module Padrino
|
|
22
21
|
|
23
22
|
# Captures the html from a block of template code for this handler
|
24
23
|
#
|
25
|
-
#
|
26
|
-
#
|
27
|
-
# @handler.capture_from_template(&block) => "...html..."
|
24
|
+
# @example
|
25
|
+
# @handler.capture_from_template(&block) => "...html..."
|
28
26
|
#
|
29
27
|
def capture_from_template(*args, &block)
|
30
28
|
self.output_buffer, _buf_was = "", self.output_buffer
|
@@ -37,8 +35,7 @@ module Padrino
|
|
37
35
|
##
|
38
36
|
# Outputs the given text to the templates buffer directly
|
39
37
|
#
|
40
|
-
#
|
41
|
-
#
|
38
|
+
# @example
|
42
39
|
# @handler.concat_to_template("This will be output to the template buffer")
|
43
40
|
#
|
44
41
|
def concat_to_template(text="")
|
@@ -49,9 +46,8 @@ module Padrino
|
|
49
46
|
##
|
50
47
|
# Returns true if the block given is of the handler's template type; false otherwise.
|
51
48
|
#
|
52
|
-
#
|
53
|
-
#
|
54
|
-
# @handler.block_is_type?(block) => true
|
49
|
+
# @example
|
50
|
+
# @handler.block_is_type?(block) => true
|
55
51
|
#
|
56
52
|
def block_is_type?(block)
|
57
53
|
is_type? || (block && eval('defined?(__in_erb_template)', block.binding))
|
@@ -60,8 +56,7 @@ module Padrino
|
|
60
56
|
##
|
61
57
|
# Returns an array of engines used for the template
|
62
58
|
#
|
63
|
-
#
|
64
|
-
#
|
59
|
+
# @example
|
65
60
|
# @handler.engines => [:erb, :erubis]
|
66
61
|
#
|
67
62
|
def engines
|
@@ -69,11 +64,13 @@ module Padrino
|
|
69
64
|
end
|
70
65
|
|
71
66
|
protected
|
67
|
+
|
72
68
|
def output_buffer=(val)
|
73
69
|
template.instance_variable_set(:@_out_buf, val)
|
74
70
|
end
|
75
|
-
|
76
|
-
|
71
|
+
end # ErbHandler
|
72
|
+
|
73
|
+
OutputHelpers.register(ErbHandler)
|
77
74
|
end # OutputHelpers
|
78
75
|
end # Helpers
|
79
76
|
end # Padrino
|
@@ -5,9 +5,8 @@ module Padrino
|
|
5
5
|
##
|
6
6
|
# Returns true if the current template type is same as this handlers; false otherwise.
|
7
7
|
#
|
8
|
-
#
|
9
|
-
#
|
10
|
-
# @handler.is_type? => true
|
8
|
+
# @example
|
9
|
+
# @handler.is_type? => true
|
11
10
|
#
|
12
11
|
def is_type?
|
13
12
|
template.respond_to?(:is_haml?) && template.is_haml?
|
@@ -16,9 +15,8 @@ module Padrino
|
|
16
15
|
##
|
17
16
|
# Returns true if the block given is of the handler's template type; false otherwise.
|
18
17
|
#
|
19
|
-
#
|
20
|
-
#
|
21
|
-
# @handler.block_is_type?(block) => true
|
18
|
+
# @example
|
19
|
+
# @handler.block_is_type?(block) => true
|
22
20
|
#
|
23
21
|
def block_is_type?(block)
|
24
22
|
template.block_is_haml?(block)
|
@@ -26,9 +24,8 @@ module Padrino
|
|
26
24
|
|
27
25
|
# Captures the html from a block of template code for this handler
|
28
26
|
#
|
29
|
-
#
|
30
|
-
#
|
31
|
-
# @handler.capture_from_template(&block) => "...html..."
|
27
|
+
# @example
|
28
|
+
# @handler.capture_from_template(&block) => "...html..."
|
32
29
|
#
|
33
30
|
def capture_from_template(*args, &block)
|
34
31
|
eval("_hamlout ||= @haml_buffer", block.binding) # this is for rbx
|
@@ -38,8 +35,7 @@ module Padrino
|
|
38
35
|
##
|
39
36
|
# Outputs the given text to the templates buffer directly
|
40
37
|
#
|
41
|
-
#
|
42
|
-
#
|
38
|
+
# @example
|
43
39
|
# @handler.concat_to_template("This will be output to the template buffer")
|
44
40
|
#
|
45
41
|
def concat_to_template(text="")
|
@@ -50,14 +46,14 @@ module Padrino
|
|
50
46
|
##
|
51
47
|
# Returns an array of engines used for the template
|
52
48
|
#
|
53
|
-
#
|
54
|
-
#
|
55
|
-
# @handler.engines => [:erb, :erubis]
|
49
|
+
# @example
|
50
|
+
# @handler.engines => [:haml]
|
56
51
|
#
|
57
52
|
def engines
|
58
53
|
@_engines ||= [:haml]
|
59
54
|
end
|
60
55
|
end # HamlHandler
|
56
|
+
|
61
57
|
OutputHelpers.register(HamlHandler)
|
62
58
|
end # OutputHelpers
|
63
59
|
end # Helpers
|
@@ -15,9 +15,8 @@ module Padrino
|
|
15
15
|
##
|
16
16
|
# Returns true if the current template type is same as this handlers; false otherwise.
|
17
17
|
#
|
18
|
-
#
|
19
|
-
#
|
20
|
-
# @handler.is_type? => true
|
18
|
+
# @example
|
19
|
+
# @handler.is_type? => true
|
21
20
|
#
|
22
21
|
def is_type?
|
23
22
|
!self.output_buffer.nil?
|
@@ -25,9 +24,8 @@ module Padrino
|
|
25
24
|
|
26
25
|
# Captures the html from a block of template code for this handler
|
27
26
|
#
|
28
|
-
#
|
29
|
-
#
|
30
|
-
# @handler.capture_from_template(&block) => "...html..."
|
27
|
+
# @example
|
28
|
+
# @handler.capture_from_template(&block) => "...html..."
|
31
29
|
#
|
32
30
|
def capture_from_template(*args, &block)
|
33
31
|
self.output_buffer, _buf_was = "", self.output_buffer
|
@@ -40,8 +38,7 @@ module Padrino
|
|
40
38
|
##
|
41
39
|
# Outputs the given text to the templates buffer directly
|
42
40
|
#
|
43
|
-
#
|
44
|
-
#
|
41
|
+
# @example
|
45
42
|
# @handler.concat_to_template("This will be output to the template buffer")
|
46
43
|
#
|
47
44
|
def concat_to_template(text="")
|
@@ -52,9 +49,8 @@ module Padrino
|
|
52
49
|
##
|
53
50
|
# Returns true if the block given is of the handler's template type; false otherwise.
|
54
51
|
#
|
55
|
-
#
|
56
|
-
#
|
57
|
-
# @handler.block_is_type?(block) => true
|
52
|
+
# @example
|
53
|
+
# @handler.block_is_type?(block) => true
|
58
54
|
#
|
59
55
|
def block_is_type?(block)
|
60
56
|
is_type? || (block && eval('defined? __in_erb_template', block.binding))
|
@@ -63,8 +59,7 @@ module Padrino
|
|
63
59
|
##
|
64
60
|
# Returns an array of engines used for the template
|
65
61
|
#
|
66
|
-
#
|
67
|
-
#
|
62
|
+
# @example
|
68
63
|
# @handler.engines => [:erb, :erubis]
|
69
64
|
#
|
70
65
|
def engines
|
@@ -75,7 +70,8 @@ module Padrino
|
|
75
70
|
def output_buffer=(val)
|
76
71
|
template.instance_variable_set(:@_out_buf, val)
|
77
72
|
end
|
78
|
-
end #
|
73
|
+
end # SlimHandler
|
74
|
+
|
79
75
|
OutputHelpers.register(SlimHandler)
|
80
76
|
end # OutputHelpers
|
81
77
|
end # Helpers
|
@@ -2,23 +2,39 @@ module Padrino
|
|
2
2
|
module Helpers
|
3
3
|
module RenderHelpers
|
4
4
|
##
|
5
|
-
#
|
5
|
+
# Render a partials with collections support
|
6
6
|
#
|
7
|
-
#
|
7
|
+
# @param [String] template
|
8
|
+
# Relative path to partial template.
|
9
|
+
# @param [Hash] options
|
10
|
+
# Options hash for rendering options.
|
11
|
+
# @option options [Object] :object
|
12
|
+
# Object rendered in partial.
|
13
|
+
# @option options [Array<Object>] :collection
|
14
|
+
# Partial is rendered for each object in this collection.
|
15
|
+
# @option options [Hash] :locals ({})
|
16
|
+
# Local variables accessible in the partial.
|
17
|
+
# @option options [Symbol] :engine
|
18
|
+
# Explicit rendering engine to use for this partial
|
8
19
|
#
|
20
|
+
# @return [String] The html generated from this partial.
|
21
|
+
#
|
22
|
+
# @example
|
9
23
|
# partial 'photo/item', :object => @photo
|
10
24
|
# partial 'photo/item', :collection => @photos
|
11
25
|
# partial 'photo/item', :locals => { :foo => :bar }
|
12
26
|
# partial 'photo/item', :engine => :erb
|
13
27
|
#
|
28
|
+
# @note If using this from Sinatra, pass explicit +:engine+ option
|
29
|
+
#
|
30
|
+
# @api public
|
14
31
|
def partial(template, options={})
|
15
|
-
logger.debug "PARTIAL: #{template} called" if defined?(logger)
|
16
32
|
options.reverse_merge!(:locals => {}, :layout => false)
|
17
|
-
path
|
18
|
-
object_name
|
19
|
-
path[-1]
|
33
|
+
path = template.to_s.split(File::SEPARATOR)
|
34
|
+
object_name = path[-1].to_sym
|
35
|
+
path[-1] = "_#{path[-1]}"
|
20
36
|
explicit_engine = options.delete(:engine)
|
21
|
-
template_path
|
37
|
+
template_path = File.join(path).to_sym
|
22
38
|
raise 'Partial collection specified but is nil' if options.has_key?(:collection) && options[:collection].nil?
|
23
39
|
if collection = options.delete(:collection)
|
24
40
|
options.delete(:object)
|