Hobo / hobo

The web app builder for Rails (moved from tablatom/hobo)
http://hobocentral.net
103 stars 39 forks source link

Hobo do not integrate with web-console gem (missing method). #196

Open pienkowskip opened 6 years ago

pienkowskip commented 6 years ago

Rails adds (probably by default) a web-console gem which allows developer to use irb in terminal.

But there is a problem in WebConsole::View. Hobo extension of a ActionView::Helpers::TranslationHelper do not see method normalize_args which is defined by HoboTranslationsNormalizerHelper. This causes all errors in Rails to end up with HTTP 500 and messege "We're sorry, but something went wrong." instead of classic developer view of error (stack trace, http params, etc). Here goes excerpt of my stack trace of error:

Started GET "/admin/front" for 127.0.0.1 at 2017-12-03 12:18:50 +0100
  ActiveRecord::SchemaMigration Load (0.3ms)  SELECT "schema_migrations".* FROM "schema_migrations"

ActionController::RoutingError (No route matches [GET] "/adm
[console_log.txt](https://github.com/Hobo/hobo/files/1524694/console_log.txt)
[console_log.txt](https://github.com/Hobo/hobo/files/1524695/console_log.txt)
[console_log.txt](https://github.com/Hobo/hobo/files/1524696/console_log.txt)

in/front"):
  actionpack (4.2.6) lib/action_dispatch/middleware/debug_exceptions.rb:21:in `call'
  web-console (2.3.0) lib/web_console/middleware.rb:28:in `block in call'
(...)
  /usr/lib/ruby/2.3.0/webrick/server.rb:296:in `block in start_thread'

  Rendered /var/lib/gems/2.3.0/gems/actionpack-4.2.6/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb (7.3ms)
(...)
  Rendered /var/lib/gems/2.3.0/gems/web-console-2.3.0/lib/web_console/templates/index.html.erb (298.5ms)

ActionView::Template::Error: undefined method `normalize_args' for #<WebConsole::View:0x0055a4b654c170>
    from /var/lib/gems/2.3.0/gems/hobo-2.2.6/lib/hobo/extensions/action_view/translation_helper.rb:13:in `translate'
    from /var/lib/gems/2.3.0/gems/web-console-2.3.0/lib/web_console/view.rb:34:in `t'
(...)
    from /usr/lib/ruby/2.3.0/webrick/server.rb:296:in `block in start_thread'

Here goes a full console log: console_log.txt

I suppose this happens because Hobo version of ActionView::Helpers::TranslationHelper#translate method but the base class (WebConsole::View) is not extended by HoboTranslationsNormalizerHelper. For instance Hobo controllers are extended this way:

HoboTranslationsNormalizerHelper.add_to_controller(klass)

When I monkey patched hobo gem like that (extend):

ActionView::Helpers::TranslationHelper.module_eval do

  def translate(key, options={})
    self.extend(HoboTranslationsNormalizerHelper) unless self.is_a?(HoboTranslationsNormalizerHelper)
    key, options = normalize_args(key, options)
    translation = I18n.translate(scope_key_by_partial(key), options.merge!(:raise => true))
(...)
  end
end

everything worked. But this is not proper way to do it and I have no idea how to do it proper way.

My setup is:

Without web-console gem things works fine.

pienkowskip commented 6 years ago

Well, I can add this code:

WebConsole::View.class_eval do
  include HoboTranslationsNormalizerHelper
end

as a rails initializer. But this do not seems very sweet as well.