Project

tardigrade

0.0
No commit activity in last 3 years
No release in over 3 years
Inject method with dependencies
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

~> 1.16
~> 10.0
~> 3.8.0

Runtime

 Project Readme

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.