Bug #10483
closedLatest Ruby 2.1.4 update introduced backwards incompatible change related to boolean evaluation
Description
The following, albeit ugly line of code (I didn't write it), worked in Ruby 2.1.1, but fails to evaluate in Ruby 2.1.4
= f.inputs (((q.pick == 'none' || (q.pick == 'one' && q.display_type != "default")) && q.display_type != 'label' ) ? nil : q_text(q, render_context)),:id => rg ? "q_#{q.id}_#{rg}" : "q_#{q.id}",'data-id' => q.id, :class => "q_#{renderer} #{css_class} #{state_prefix_class}" do
This exists within a haml template and the piece that appears to be causing the problem is this section here.
(((q.pick == 'none' || (q.pick == 'one' && q.display_type != "default")) && q.display_type != 'label' )
When this is changed to span lines with some variable assignment, but no other changes it works correctly.
- qid = rg ? "q_#{q.id}_#{rg}" : "q_#{q.id}"
- q_render_context = (((q.pick == 'none' || (q.pick == 'one' && q.display_type != "default")) && q.display_type != 'label' ) ? nil : q_text(q, render_context))
= f.inputs q_render_context, :id => qid,'data-id' => q.id, :class => "q_#{renderer} #{css_class} #{state_prefix_class}" do
This original version produces the following error output.
/Users/jseeley/code/eiacuc/app/views/partials/_question.html.haml:15: syntax error, unexpected keyword_do, expecting keyword_end
/Users/jseeley/code/eiacuc/app/views/partials/_question.html.haml:53: syntax error, unexpected keyword_ensure, expecting end-of-input
The error was produced on haml v4.0.5 with Ruby 2.1.4; the error does not occur on haml v4.0.5 and Ruby 2.1.1 or prior.
Updated by nobu (Nobuyoshi Nakada) over 9 years ago
Joe Seeley wrote:
= f.inputs (((q.pick == 'none' || (q.pick == 'one' && q.display_type != "default")) && q.display_type != 'label' ) ? nil : q_text(q, render_context)),:id => rg ? "q_#{q.id}_#{rg}" : "q_#{q.id}",'data-id' => q.id, :class => "q_#{renderer} #{css_class} #{state_prefix_class}" do
Where is the end
?
The error was produced on haml v4.0.5 with Ruby 2.1.4; the error does not occur on haml v4.0.5 and Ruby 2.1.1 or prior.
Could you show the failed code if haml can emit the ruby code instead of evaluation?
Updated by nobu (Nobuyoshi Nakada) over 9 years ago
- Status changed from Open to Feedback
- Priority changed from Normal to 3
Updated by felixbuenemann (Felix Bünemann) over 9 years ago
Nobuyoshi Nakada wrote:
Joe Seeley wrote:
= f.inputs (((q.pick == 'none' || (q.pick == 'one' && q.display_type != "default")) && q.display_type != 'label' ) ? nil : q_text(q, render_context)),:id => rg ? "q_#{q.id}_#{rg}" : "q_#{q.id}",'data-id' => q.id, :class => "q_#{renderer} #{css_class} #{state_prefix_class}" do
Where is the
end
?
HAML automatically inserts end based on indentation.
Updated by jeremyevans0 (Jeremy Evans) over 4 years ago
- Status changed from Feedback to Closed