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, Foo

Use dependency in class

class Action
  include Tardigrade::Injector

  import :foo
end

Action.new.foo # => :foo_response

Dependencies

Dependency can be:

  • lambda, proc
  • class with call class method
  • module with self.call method
  • class with call instance 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, Foo

Use 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: true

As 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.