Project

General

Profile

Bug #10483

Latest Ruby 2.1.4 update introduced backwards incompatible change related to boolean evaluation

Added by jseeley (Joe Seeley) over 4 years ago. Updated over 1 year ago.

Status:
Feedback
Priority:
Normal
Assignee:
-
Target version:
-
ruby -v:
ruby 2.1.4p265 (2014-10-27 revision 48166) [x86_64-darwin13.0]
[ruby-core:66120]

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.

History

Updated by nobu (Nobuyoshi Nakada) over 4 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 4 years ago

  • Status changed from Open to Feedback
  • Priority changed from Normal to 3

Updated by felixbuenemann (Felix B√ľnemann) over 4 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.

#4

Updated by naruse (Yui NARUSE) over 1 year ago

  • Target version deleted (2.2.0)

Also available in: Atom PDF