Git Product home page Git Product logo

hash_syntax's Introduction

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.

hash_syntax's People

Contributors

biow0lf avatar brunocruzcoelho avatar eventualbuddha avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.