haml-edge 2.3.17 → 2.3.18
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/EDGE_GEM_VERSION +1 -1
- data/VERSION +1 -1
- data/lib/haml/helpers.rb +23 -8
- data/test/haml/helper_test.rb +29 -1
- metadata +1 -1
data/EDGE_GEM_VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.3.
|
1
|
+
2.3.18
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.3.
|
1
|
+
2.3.18
|
data/lib/haml/helpers.rb
CHANGED
@@ -14,8 +14,12 @@ module Haml
|
|
14
14
|
# when it shouldn't be.
|
15
15
|
class ErrorReturn
|
16
16
|
# @param message [String] The error message to raise when \{#to\_s} is called
|
17
|
-
def initialize(
|
18
|
-
@message =
|
17
|
+
def initialize(method)
|
18
|
+
@message = <<MESSAGE
|
19
|
+
#{method} outputs directly to the Haml template.
|
20
|
+
Disregard its return value and use the - operator,
|
21
|
+
or use capture_haml to get the value as a String.
|
22
|
+
MESSAGE
|
19
23
|
end
|
20
24
|
|
21
25
|
# Raises an error.
|
@@ -23,6 +27,21 @@ module Haml
|
|
23
27
|
# @raise [Haml::Error] The error
|
24
28
|
def to_s
|
25
29
|
raise Haml::Error.new(@message)
|
30
|
+
rescue Haml::Error => e
|
31
|
+
e.backtrace.shift
|
32
|
+
|
33
|
+
# If the ErrorReturn is used directly in the template,
|
34
|
+
# we don't want Haml's stuff to get into the backtrace,
|
35
|
+
# so we get rid of the format_script line.
|
36
|
+
#
|
37
|
+
# We also have to subtract one from the Haml line number
|
38
|
+
# since the value is passed to format_script the line after
|
39
|
+
# it's actually used.
|
40
|
+
if e.backtrace.first =~ /^\(eval\):\d+:in `format_script/
|
41
|
+
e.backtrace.shift
|
42
|
+
e.backtrace.first.gsub!(/^\(haml\):(\d+)/) {|s| "(haml):#{$1.to_i - 1}"}
|
43
|
+
end
|
44
|
+
raise e
|
26
45
|
end
|
27
46
|
|
28
47
|
# @return [String] A human-readable string representation
|
@@ -338,7 +357,7 @@ END
|
|
338
357
|
# @param text [#to_s] The text to output
|
339
358
|
def haml_concat(text = "")
|
340
359
|
haml_buffer.buffer << haml_indent << text.to_s << "\n"
|
341
|
-
|
360
|
+
ErrorReturn.new("haml_concat")
|
342
361
|
end
|
343
362
|
|
344
363
|
# @return [String] The indentation string for the current line
|
@@ -399,11 +418,7 @@ END
|
|
399
418
|
# @overload haml_tag(name, text, *flags, attributes = {})
|
400
419
|
# @param text [#to_s] The text within the tag
|
401
420
|
def haml_tag(name, *rest, &block)
|
402
|
-
ret = ErrorReturn.new(
|
403
|
-
haml_tag outputs directly to the Haml template.
|
404
|
-
Disregard its return value and use the - operator,
|
405
|
-
or use capture_haml to get the value as a String.
|
406
|
-
MESSAGE
|
421
|
+
ret = ErrorReturn.new("haml_tag")
|
407
422
|
|
408
423
|
name = name.to_s
|
409
424
|
text = rest.shift.to_s unless [Symbol, Hash, NilClass].any? {|t| rest.first.is_a? t}
|
data/test/haml/helper_test.rb
CHANGED
@@ -8,6 +8,12 @@ class ActionView::Base
|
|
8
8
|
end
|
9
9
|
end
|
10
10
|
|
11
|
+
module Haml::Helpers
|
12
|
+
def something_that_uses_haml_concat
|
13
|
+
haml_concat('foo').to_s
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
11
17
|
class HelperTest < Test::Unit::TestCase
|
12
18
|
Post = Struct.new('Post', :body)
|
13
19
|
|
@@ -221,7 +227,29 @@ HAML
|
|
221
227
|
def test_content_tag_nested
|
222
228
|
assert_equal "<span><div>something</div></span>", render("= nested_tag", :action_view).strip
|
223
229
|
end
|
224
|
-
|
230
|
+
|
231
|
+
def test_error_return
|
232
|
+
assert_raise(Haml::Error, <<MESSAGE) {render("= haml_concat 'foo'")}
|
233
|
+
haml_concat outputs directly to the Haml template.
|
234
|
+
Disregard its return value and use the - operator,
|
235
|
+
or use capture_haml to get the value as a String.
|
236
|
+
MESSAGE
|
237
|
+
end
|
238
|
+
|
239
|
+
def test_error_return_line
|
240
|
+
render("%p foo\n= haml_concat 'foo'\n%p bar")
|
241
|
+
assert false, "Expected Haml::Error"
|
242
|
+
rescue Haml::Error => e
|
243
|
+
assert_equal 2, e.backtrace[0].scan(/:(\d+)/).first.first.to_i
|
244
|
+
end
|
245
|
+
|
246
|
+
def test_error_return_line_in_helper
|
247
|
+
render("- something_that_uses_haml_concat")
|
248
|
+
assert false, "Expected Haml::Error"
|
249
|
+
rescue Haml::Error => e
|
250
|
+
assert_equal 13, e.backtrace[0].scan(/:(\d+)/).first.first.to_i
|
251
|
+
end
|
252
|
+
|
225
253
|
class ActsLikeTag
|
226
254
|
# We want to be able to have people include monkeypatched ActionView helpers
|
227
255
|
# without redefining is_haml?.
|