Best way to implement syntax sugar?

Hi!

  I'm *very* new to rails, I just dove in about a month ago and I'm
loving it.

  One thing I decided I immediately wanted to do, was shorten the
number of keystrokes neccessary to URI, HTML, or Jscript encode something.
The project I've come into already has helpers defined for this.

  Right now, what I've done is:

  alias h! string_esacpe_html
  alias u! string_escape_uri

  Then later on in my views, I can do stuff like

  <%=h!email_address%>

  Or

  <a href="<%=h!u!link.uri%>"><%=h!link.name%></a>

  It works great. However, I understand that "!" and "?" have special
meanings in ruby. I tried other stuff (like "h~", etc), but ruby doesnt like
me using those symbols.

  Is there a good way to implement such syntax sugar that follows the
Ruby Way a bit more closely, or should I just not worry about it and stick
with what i've got?

  Thanks,
    Tyler

the #h method actully allready exists in rails, and is quite widely
used.

in general (but certainly not strictly enforced):

obj#method! is a method that will cause obj to be modified or
something potentially harmful/irreversable.

obj#method? will return a boolean [true/false] value

its nice to be able to read other's source and have these implied
expectations.

on a pointless note: if you wanted #h~ open irb and try....

self.class.send(:define_method, :"h~") {string_esacpe_html}

this is a ruby-is-fun example... and completly pointless as you'd have
to call it via #send :slight_smile:

the #h method actully allready exists in rails

and so does #u method. They are both defined (as aliases for
html_escape and url_encode respectively) in ERB::Util module which is
included in ActionView::Base.

Regards,
Rimantas

the #h method actully allready exists in rails, and is quite widely
used.

  Awesome, I'm switching all of my code over to use that and #u now. :slight_smile:

obj#method! is a method that will cause obj to be modified or
something potentially harmful/irreversable.

obj#method? will return a boolean [true/false] value

  Yes... so here's why I went for using "!" anyway... I discovered this
today (keep in mind I've only been rubying for about a month now) and it
made me jump for joy...

  When a method ends with punctuation, you dont have to put a space between
a method name and the arguments!!!

  That's why I decided to futz with something like "h~"... To me,

  <%=h~email_address%>

  or even

  <%=h!email_address%>

  Looks way neater than

  <%=h email_address%>

  Especially when you start stacking them, like:

  <script>
    document.location="/foo?params=" . <%=h!j!u!url_fragment%>
  </script>

  What would be really nice is if there were a few other symbols available
for method suffixing... I think "~" would be a nice one... I'd take that to
mean "perform a match or transformation on the data to my right", but that's
probably because I'm coming from the perl world where "=~" is the regular
expression operator... "h~j~u~url_fragement" would be a darn cool way to
express that url_fragement is being modified by "h", "j", and "u" on it's
way out to you... or stuff like:

  ip_address = dns~hostname

on a pointless note: if you wanted #h~ open irb and try....

self.class.send(:define_method, :"h~") {string_esacpe_html}

this is a ruby-is-fun example... and completly pointless as you'd have
to call it via #send :slight_smile:

  Geeze. :slight_smile:

  Well, thanks both of you (chris and rimantas) for sorting me out. Now I
have to decide if I'm going to keep the bang on the end of my homecooked
transformers... that's a touch one...

  Thanks,
    Tyler

np.....

not sure I like the no-space thing... but if you like that maybe you
would like:

class String
   def +@
     do_something(self)
   end
end

then you can do

+"some text"

:slight_smile: