From: nobu@... Date: 2014-11-07T01:42:57+00:00 Subject: [ruby-core:66124] [ruby-trunk - Bug #10483] Latest Ruby 2.1.4 update introduced backwards incompatible change related to boolean evaluation Issue #10483 has been updated by Nobuyoshi Nakada. 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? ---------------------------------------- Bug #10483: Latest Ruby 2.1.4 update introduced backwards incompatible change related to boolean evaluation https://bugs.ruby-lang.org/issues/10483#change-49833 * Author: Joe Seeley * Status: Open * Priority: Normal * Assignee: * Category: * Target version: current: 2.2.0 * ruby -v: ruby 2.1.4p265 (2014-10-27 revision 48166) [x86_64-darwin13.0] * Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN ---------------------------------------- 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. -- https://bugs.ruby-lang.org/