0.03
No commit activity in last 3 years
No release in over 3 years
There's a lot of open issues
The new label style for Ruby 1.9's literal hash keys is somewhat controversial. This tool seamlessly converts Ruby files between the old and the new syntaxes.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

>= 2.3.0
>= 0

Runtime

~> 1.0.1
~> 1.16.2
 Project Readme

hash_syntax

In Ruby 1.9, you can write a hash with symbol keys in two ways:

{ :foo => bar }
{ foo: bar }

Some have expressed discontent at this syntax change. Luckily, it's purely syntax sugar: there's no reason other than preference to use one or the other (assuming you are targeting 1.9). That means we can freely convert between them! That's what hash_syntax does: it scans Ruby code and turns the code into all 1.8 syntax or all 1.9 syntax.

Using hash_syntax

To convert a whole project to 1.8 syntax:

hash_syntax --to-18

To convert a whole project to 1.9 syntax:

hash_syntax --to-19

With no arguments, hash_syntax will scan the following paths using Dir[] and operate on each matching file:

  • app/**/*.rb
  • ext/**/*.rb
  • features/**/*.rb
  • lib/**/*.rb
  • spec/**/*.rb
  • test/**/*.rb

If you wish to convert individual files, you can name them explicitly:

hash_syntax --to-19 lib/foo.rb

That's all there is to it!

How it works

hash_syntax uses the object_regex library (source) to perform regex searches on the Ruby token stream of a given file. A Ruby 1.8 symbol hash key which can be converted to 1.9's syntax can be described as:

symbeg (ident | kw) sp? hashrocket

By using each token's unique name, (with one tweak: all other operators are op and the hashrocket is hashrocket), object_regex can search using this pattern and find it in the Ruby source. Conveniently, you cannot have a line break between the symbol and the hashrocket; otherwise, the regex would be a bit more complicated (also needing to consider comments!). Each match is replaced inline as text, and hash_syntax notes how much the line has shrunk, in case further replacements happen on the same line. A better option would be to replace the actual tokens in the stream and reconstruct the source from the token stream.

Ruby 1.9 symbol tokens are just a single label token; they are easy to find in the source.

Installation

gem install hash_syntax

Note on Patches/Pull Requests

  • Fork the project.
  • Make your feature addition or bug fix.
  • Add tests for it. This is important so I don't break it in a future version unintentionally.
  • Commit, do not mess with rakefile, version, or history. (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
  • Send me a pull request. Bonus points for topic branches.

Copyright

Copyright (c) 2011 Michael Edgar. See LICENSE for details.