GenericVisitor
Ruby visitor pattern implementation
Based on Aaron Patterson post
Installation
Add this line to your application's Gemfile:
gem 'generic_visitor'
And then execute:
$ bundle
Or install it yourself as:
$ gem install generic_visitor
Usage
require 'generic_visitor'
class Country < Struct.new(:name)
def as_hash
accept AsHash.new
end
end
class City < Struct.new(:name, :country)
def as_hash
accept AsHash.new
end
end
class AsHash < GenericVisitor::Visitor
visitor_for Country do |country|
{name: country.name}
end
visitor_for City do |city|
{
name: city.name,
country: city.country.as_hash
}
end
end
city = City.new('Bs.As.', Country.new('Argentina'))
city.as_hash => {:name=>"Bs.As.", :country=>{:name=>"Argentina"}}
Contributing
- Fork it
- Create your feature branch (
git checkout -b my-new-feature) - Commit your changes (
git commit -am 'Add some feature') - Push to the branch (
git push origin my-new-feature) - Create new Pull Request