Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP

Loading…

Remove j alias for ERB::Util.json_escape #3578

Merged
merged 1 commit into from

7 participants

@amatsuda
Collaborator

I noticed that this newly added j method https://github.com/rails/rails/blob/6e87281b5f/actionpack/lib/action_view/helpers/javascript_helper.rb#L37
overwrites existing another j method
https://github.com/rails/rails/blob/6e87281b5f/activesupport/lib/active_support/core_ext/string/output_safety.rb#L58
in ActionView context.

FYI: It seems this global j is called in other contexts. https://github.com/flori/json/blob/b50b1bdeae/lib/json/common.rb#L395

Attached a patch that removes j alias for json_escape because this j is no longer available for app developers, and not used inside the framework (maybe those who are using output_safety.rb out of the Rails box would be affected... but who does?).

@josevalim
Owner

While I agree it is confusing having two methods called j, j is also a module function for ERB::Util. And it is common for ERB::Util have aliases based on the escape method: http://www.ruby-doc.org/stdlib-1.9.2/libdoc/erb/rdoc/ERB/Util.html

It also freaks me out that some methods are called json_escape and others escape_javascript (I always get confused). It also annoys me they are in different files. Maybe the best solution would be:

1) Move escape_javascript to ERB::Util as well (or move all to AV::Helpers::EscapeHelper)
2) Alias escape_javascript to js
3) Deprecate j in all cases

But I am not sure. What do you think? /cc @jeremy

@jeremy
Owner

j mirrors h and is meant to only work in views. Global Kernel#j seems terrible: https://github.com/flori/json/blob/b50b1bdeae/lib/json/common.rb#L395

+1 to consolidating the implementations, in any case.

@jfirebaugh

My preference would be to consolidate in EscapeHelper, alias escape_javascript to js, and alias json_escape to j (with the much more useful definition provided in #6094).

@rapind

+1

@dlee

If j is changing to js and another j is taking its place, the documentation has to be eye popping since it'll surely be confusing.

I would personally recommend leaving j aliased to escape_javascript, since it has meant escape_javascript for ages.

@rafaelfranca rafaelfranca merged commit d65a15d into rails:master
@amatsuda amatsuda deleted the amatsuda:remove_j_alias_for_json_escape branch
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Commits on Nov 9, 2011
  1. @amatsuda
This page is out of date. Refresh to see the latest.
View
7 activesupport/lib/active_support/core_ext/string/output_safety.rb
@@ -45,18 +45,11 @@ def html_escape(s)
# json_escape('{"name":"john","created_at":"2010-04-28T01:39:31Z","id":1}')
# # => {name:john,created_at:2010-04-28T01:39:31Z,id:1}
#
- # This method is also aliased as +j+, and available as a helper
- # in Rails templates:
- #
- # <%=j @person.to_json %>
- #
def json_escape(s)
result = s.to_s.gsub(/[&"><]/) { |special| JSON_ESCAPE[special] }
s.html_safe? ? result.html_safe : result
end
- alias j json_escape
- module_function :j
module_function :json_escape
end
end
Something went wrong with that request. Please try again.