delegate
Ruby's delegate feature, implemented as Crystal macros.
Installation
Add this to your application's shard.yml
:
dependencies:
delegate:
github: anicholson/delegate
Usage
require "delegate"
class Engine
def state
:stopped
end
end
class Car
include Delegate
def initialize(@engine)
end
private getter engine
delegate to: engine, methods: [state]
end
car = Car.new(Engine.new)
car.state # => :stopped
delegating to non-implemented methods results in a compile-time error:
require "delegate"
# ... Engine definition as before
class Motorbike
def initialize(@engine)
end
private getter engine
delegate to: engine, methods: [state, current_gear]
end
bike = Motorbike.new(Engine.new)
bike.current_gear # :boom: compile error: Engine does not implement :current_gear
Development
- Check out the code via
git clone
- Run
shards install
- Run
crystal spec
to run all tests.
Contributing
- Fork it (https://github.com/your-github-user/delegate/fork)
- 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 a new Pull Request
Contributors
- anicholson Andy Nicholson - creator, maintainer