trailblazer / cells-slim

Other
17 stars 21 forks source link

Rails 5.1 outputs tag helper block with escaped #14

Open yhatt opened 7 years ago

yhatt commented 7 years ago

We tried upgrade my rails application from 5.0.2 to 5.1.0, it uses cells 4.1.7 and cells-slim 0.0.5. and I saw a lot of escaped strings in cells components...

I guessed it is effected by new tag syntax in rails 5.1.

Rendering slim on cells

/ Traditional syntax
= content_tag :a, href: root_path
  strong Back to root page

/ New syntax on Rails 5.1
= tag.a href: root_path
  strong Back to root page

/ URL helper
= link_to root_path
  strong Back to root page

Output in Rails 5.0.2

<a href="/"><strong>Back to root page</strong></a>
<a href="/"><strong>Back to root page</strong></a>
<a href="/"><strong>Back to root page</strong></a>

Output in Rails 5.1.0

<a href="/">&lt;strong&gt;Back to root page&lt;/strong&gt;</a>
<a href="/">&lt;strong&gt;Back to root page&lt;/strong&gt;</a>
<a href="/">&lt;strong&gt;Back to root page&lt;/strong&gt;</a>

Quick-fix

As a workaround makeshift, it seems to be able to deal this problem with overriding #tag_builder private method as below. Currently we are adding this to ApplicationCell and using it as a parent cell.

class ApplicationCell < Cell::ViewModel
  private

  def tag_builder
    super.tap { |builder| builder.class_eval { include Cell::Slim::Rails } }
  end
end

But this approach have over-included unnecessary methods (e.g. for FormTagHelper). It would be great if cells-slim supports 5.1 new methods correctly.

lulalala commented 6 years ago

Currently #15 fixed this issue, so if you use the master branch this should be fixed.

yhatt commented 6 years ago

@lulalala Thanks for your information. However, it has not been fully fixed. I have tried the rendering example as mentioned above on master branch + Rails 5.1.6. The content_tag and link_to will work correctly, but a.tag tag.a will not.

<a href="/"><strong>Back to root page</strong></a>
<a href="/">&lt;strong&gt;Back to root page&lt;/strong&gt;</a>
<a href="/"><strong>Back to root page</strong></a>

We should keep using a workaround with cells-slim v0.0.5.

Unfortunately, I had decided to stop using cells and cells-slim in our new Rails project a long time ago. We want a healthy gem.

lulalala commented 6 years ago

@yhatt Just curious, what's a.tag? It's not Rails helper is it?

yhatt commented 6 years ago

@lulalala Oops, I had mistaken for tag.a. Rails 5.1 has provided a new interface of the tag helper. (https://github.com/rails/rails/pull/25543)

= tag.a href: root_path
  strong Back to root page