Similar to ruby2ruby this library allows to parse Ruby code, modify and recompile it back to Ruby.
Differences:
- uses Ripper for parsing (shipped with Ruby 1.9)
- produces a full object-oriented representation of the Ruby code
- A higher level API is to facilitate selecting parts of the parse tree
See files: ruby_api.rb
and ruby_api_traversal_test.rb
# module Monty::Python ... end code.find_module('Monty::Python')
# class Monty::Python ... end code.find_class('Monty::Python')
# class Monty < Abc::Blip ... end code.find_class('Monty', :superclass => 'Abc::Blip')
# my_block do ... end code.find_block('my_block')
# my_block do |v| ... end code.find_block('my_block', :block_params => ['v'])
# my_block 7, 'a' do ... end code.find_block('my_block', :args => [7, 'a'])
# my_block 7, 'a', :k => 32 do |v| ... end code.find_block('my_block', :args => [7, 'a', {:k => 32}], :block_params => ['v'])
# my_block :a => 7, b => 3 do |v| ... end block_node = code.find_block('my_block', :args => [{:a => 7, 'b' => 3}])
# my_block ['a', 'b'] do |v| ... end block_node = code.find_block('my_block', :args => [{:array =>['a', 'b']}])
More to come soon...