Rails 3.x, Ruby 1.9.x + HAML = Terror?

Hi everyone,

It seems ruby_parser is required to parse HAML files for gettext msgids
with the gettext:find rake task from gettext. However, ruby_parser
doesn’t
seem to work on Ruby 1.9.x.

So is it impossible to extract gettext msgids with reasonably new Rubies
and HAML?

Cheers,

Ramn

Hi again,

Perhaps some more context. I’ve added the gems to my Gemfile as
instructed
here: GitHub - grosser/gettext_i18n_rails: Rails: FastGettext, I18n integration -- simple, threadsafe and fast!

I’ve also added ruby_parser because that readme says it’s needed to
parse
HAML. Yet rake gettext:find explodes on any and all HAML files:

Error parsing app/views/admin/contexts/_form.html.haml
rake aborted!

parse error on value “}” (tRCURLY)
/home/rca/.rvm/rubies/ruby-1.9.2-p318/lib/ruby/1.9.1/racc/parser.rb:349:in
on_error' /home/rca/.rvm/rubies/ruby-1.9.2-p318/lib/ruby/1.9.1/racc/parser.rb:99:in _racc_do_parse_c’
/home/rca/.rvm/rubies/ruby-1.9.2-p318/lib/ruby/1.9.1/racc/parser.rb:99:in
do_parse' /home/rca/.rvm/gems/ruby-1.9.2-p318/gems/ruby_parser-2.3.1/lib/ruby_parser_extras.rb:750:in process’
/home/rca/.rvm/gems/ruby-1.9.2-p318/gems/gettext_i18n_rails-0.4.5/lib/gettext_i18n_rails/ruby_gettext_extractor.rb:55:in
run' /home/rca/.rvm/gems/ruby-1.9.2-p318/gems/gettext_i18n_rails-0.4.5/lib/gettext_i18n_rails/ruby_gettext_extractor.rb:26:in parse_string’
/home/rca/.rvm/gems/ruby-1.9.2-p318/gems/gettext_i18n_rails-0.4.5/lib/gettext_i18n_rails/haml_parser.rb:20:in
parse' /home/rca/.rvm/gems/ruby-1.9.2-p318/gems/gettext-2.2.0/lib/gettext/tools/rgettext.rb:140:in block (2 levels) in parse’
/home/rca/.rvm/gems/ruby-1.9.2-p318/gems/gettext-2.2.0/lib/gettext/tools/rgettext.rb:134:in
each' /home/rca/.rvm/gems/ruby-1.9.2-p318/gems/gettext-2.2.0/lib/gettext/tools/rgettext.rb:134:in block in parse’
/home/rca/.rvm/gems/ruby-1.9.2-p318/gems/gettext-2.2.0/lib/gettext/tools/rgettext.rb:132:in
each' /home/rca/.rvm/gems/ruby-1.9.2-p318/gems/gettext-2.2.0/lib/gettext/tools/rgettext.rb:132:in parse’
/home/rca/.rvm/gems/ruby-1.9.2-p318/gems/gettext-2.2.0/lib/gettext/tools/rgettext.rb:121:in
generate_pot' /home/rca/.rvm/gems/ruby-1.9.2-p318/gems/gettext-2.2.0/lib/gettext/tools/rgettext.rb:223:in block in run’
/home/rca/.rvm/gems/ruby-1.9.2-p318/gems/gettext-2.2.0/lib/gettext/tools/rgettext.rb:221:in
open' /home/rca/.rvm/gems/ruby-1.9.2-p318/gems/gettext-2.2.0/lib/gettext/tools/rgettext.rb:221:in run’
/home/rca/.rvm/gems/ruby-1.9.2-p318/gems/gettext-2.2.0/lib/gettext/tools/rgettext.rb:243:in
rgettext' /home/rca/.rvm/gems/ruby-1.9.2-p318/gems/gettext-2.2.0/lib/gettext/tools.rb:128:in update_pofiles’
/home/rca/.rvm/gems/ruby-1.9.2-p318/gems/gettext_i18n_rails-0.4.5/lib/gettext_i18n_rails/tasks.rb:28:in
block (2 levels) in <top (required)>' /home/rca/.rvm/gems/ruby-1.9.2-p318@global/gems/rake-0.9.2.2/lib/rake/task.rb:205:in call’
/home/rca/.rvm/gems/ruby-1.9.2-p318@global/gems/rake-0.9.2.2/lib/rake/task.rb:205:in
block in execute' /home/rca/.rvm/gems/ruby-1.9.2-p318@global/gems/rake-0.9.2.2/lib/rake/task.rb:200:in each’
/home/rca/.rvm/gems/ruby-1.9.2-p318@global/gems/rake-0.9.2.2/lib/rake/task.rb:200:in
execute' /home/rca/.rvm/gems/ruby-1.9.2-p318@global/gems/rake-0.9.2.2/lib/rake/task.rb:158:in block in invoke_with_call_chain’
/home/rca/.rvm/rubies/ruby-1.9.2-p318/lib/ruby/1.9.1/monitor.rb:201:in
mon_synchronize' /home/rca/.rvm/gems/ruby-1.9.2-p318@global/gems/rake-0.9.2.2/lib/rake/task.rb:151:in invoke_with_call_chain’
/home/rca/.rvm/gems/ruby-1.9.2-p318@global/gems/rake-0.9.2.2/lib/rake/task.rb:144:in
invoke' /home/rca/.rvm/gems/ruby-1.9.2-p318@global/gems/rake-0.9.2.2/lib/rake/application.rb:116:in invoke_task’
/home/rca/.rvm/gems/ruby-1.9.2-p318@global/gems/rake-0.9.2.2/lib/rake/application.rb:94:in
block (2 levels) in top_level' /home/rca/.rvm/gems/ruby-1.9.2-p318@global/gems/rake-0.9.2.2/lib/rake/application.rb:94:in each’
/home/rca/.rvm/gems/ruby-1.9.2-p318@global/gems/rake-0.9.2.2/lib/rake/application.rb:94:in
block in top_level' /home/rca/.rvm/gems/ruby-1.9.2-p318@global/gems/rake-0.9.2.2/lib/rake/application.rb:133:in standard_exception_handling’
/home/rca/.rvm/gems/ruby-1.9.2-p318@global/gems/rake-0.9.2.2/lib/rake/application.rb:88:in
top_level' /home/rca/.rvm/gems/ruby-1.9.2-p318@global/gems/rake-0.9.2.2/lib/rake/application.rb:66:in block in run’
/home/rca/.rvm/gems/ruby-1.9.2-p318@global/gems/rake-0.9.2.2/lib/rake/application.rb:133:in
standard_exception_handling' /home/rca/.rvm/gems/ruby-1.9.2-p318@global/gems/rake-0.9.2.2/lib/rake/application.rb:63:in run’
/home/rca/.rvm/gems/ruby-1.9.2-p318@global/gems/rake-0.9.2.2/bin/rake:33:in
<top (required)>' /home/rca/.rvm/gems/ruby-1.9.2-p318@global/bin/rake:19:in load’
/home/rca/.rvm/gems/ruby-1.9.2-p318@global/bin/rake:19:in `’
Tasks: TOP => gettext:find

The file it’s complaining about is:

https://github.com/zhdk/madek/blob/next/app/views/admin/contexts/_form.html.haml

It seems to be valid HAML, it works fine in our app.

Any ideas?

Cheers,

Ramn

Hi yet again,

Sorry for replying to my own post, but I found a workaround: It seems
that
ruby_parser cannot deal with Ruby 1.9 syntax yet, so if your HAML files
contain any Ruby 1.9 syntax in their Ruby, it will break gettext’s
gettext:find rake task (it relies on ruby_parser).

If ruby_parser ever starts supporting 1.9 syntax or if gettext starts
using
a different Ruby parser, this limitation could go away. So until then,
no
Ruby 1.9 in your HAML, even on Ruby 1.9.

Cheers,

Ramn

I love all of your recipes!

[image: Inline image 1]