emoruby

Build Status Code Climate Test Coverage

A little language that compiles Emoji down to Ruby. It's just Ruby. Really.

The Language

If I were a real language designer, I would have put a lot of thought into the syntax, semantics, and structure of emoruby. Instead I basically implemented an inefficient find-and-replace from a static dictionary. (🐄🎩!)

Anyway, here is an example hello world program:

📋 ❤️
  🔜 👋
    👀 💬😃 🌏💬
  🔚
🔚

❤️▪️🐣▪️👋

which is equivalent to this Ruby:

class Heart
  def wave
    puts "smiley earth_asia"
  end
end

Heart.new.wave

You can also define things like Procs and comments:

💭 Comment! 👋
👉 🔨
 💬😃💬
🔚▪️📞

which is equivalent to this Ruby:

# Comment! 👋
-> do
  "smiley"
end.call

You can define private and protected methods:

📋 ❤️
  🔓 🔜 👖
    👀 💬👛💬
  🔚

  🔒️ 🔜 👕
    👀 💬💛💬
  🔚

  ⛔️ 🔜 👋
    👀 💬😃 🌏💬
  🔚
🔚

❤️▪️🐣▪️👋

which is equivalent to this Ruby:

class Heart
  public def jeans
    puts "purse"
  end

  protected def shirt
    puts "yellow_heart"
  end

  private def wave
    puts "smiley earth_asia"
  end
end

Heart.new.wave

Which will result in an exception:

NoMethodError: private method `wave' called for #<Heart:0x007f81eb840138>

Using the gem

registering the ".emoruby" file extension

Emoruby uses polyglot to enable require to be used on .emoruby files just as you do with Ruby source .rb files. To register the file extension, simply:

> require 'emoruby'
=> true
> Emoruby.register
=> nil
> require 'hello_world'
smiley earth_asia
=> true

command line

You can run emoruby from the command line by passing an emoruby file as the first argument:

$ emoruby spec/fixtures/1_hello_world.emoruby
smiley earth_asia

API

The API allows both evaluation of emoruby code as well as translation to Ruby.

> source = "💬😃 🌏💬"
=> "💬😃 🌏💬"
> Emoruby.eval(source)
=> "smiley earth_asia"
Emoruby.emoji_to_ruby(source)
=> "\"smiley earth_asia\""

Versioning

The Emoruby team embraces and advocates the adoption of the the emerging iconographic versioning standard ("icover" for short).

The initial release was 💩 (in honor of @tenderlove's 💩-lang). After that, ✊ was released. Next up is, of course, 🐷.