Tardigrade
Inject dependency in ruby class.
Installation
Add this line to your application's Gemfile:
gem 'tardigrade'And then execute:
$ bundle
Or install it yourself as:
$ gem install tardigrade
Usage
Define dependency:
class Foo
def call
:foo_response
end
end
Tardigrade.add_dependency :foo, FooUse dependency in class
class Action
include Tardigrade::Injector
import :foo
end
Action.new.foo # => :foo_responseDependencies
Dependency can be:
- lambda, proc
- class with
callclass method - module with
self.callmethod - class with
callinstance method
Class with call instance method can have context only.
Context
The biggest advantage of Tardigarde is having context by dependency:
Define dependency:
class Foo
include Tardigrade::Dependency
with :name
def call
name
end
end
Tardigrade.add_dependency :foo, FooUse dependency in class
class Action
include Tardigrade::Injector
import :foo
attr_reader :name
def initialize(name:)
@name = name
end
end
Action.new(name: "John").foo # => "John"Memoization
You can tell tardigrade to memoize method after first call. To do it write:
Tardigrade.add_dependency :foo, Foo, memoize: trueAs cache store tardigrade uses request_store gem which you can use with Ruby on Rails application and with Rack application.
Testing
You can easily test dependency without main object:
class Foo
include Tardigrade::Dependency
with :name
def call
name
end
end
Foo.new(name: "John").call # => "John"Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/wafcio/tardigrade.
License
The gem is available as open source under the terms of the MIT License.