Skip to content

hanachin/habu

Folders and files

NameName
Last commit message
Last commit date

Latest commit

31467a6 · May 31, 2019

History

23 Commits
May 25, 2019
May 29, 2019
May 31, 2019
May 30, 2019
May 25, 2019
May 25, 2019
May 25, 2019
May 25, 2019
May 30, 2019
May 29, 2019
May 25, 2019
May 28, 2019

Repository files navigation

Habu

DI container

Installation

Add this line to your application's Gemfile:

gem 'habu'

And then execute:

$ bundle install

Or install it yourself as:

$ gem install habu

If you are using Rails, add this line to config/boot.rb immediately after require 'bundler/setup'.

require 'habu/setup'

If you are not using Rails, add this line before using DI container.

require 'habu/setup'

Usage

# user.rb
User = Struct.new(:name)

# new_user_service.rb
class NewUserService
  @Inject
  def initialize(user_repository)
    @user_repository = user_repository
  end

  def call(*params)
    @user_repository.new(*params)
  end
end

# app.rb
require 'habu/setup'
require_relative 'user'
require_relative 'new_user_service'

# Create a new container
container = Habu::Container.new

# Register user_repository service by passing the block as service factory
container[:user_repository] { User }

# You can access to registered service by calling the method of Container#factory
container.factory.user_repository.new("hanachin")
# => #<struct User name="hanachin">

# Also you can use Container#factory as refinements for shorthand
using container.factory.to_refinements
user_repository.new("hanachin")
# => #<struct User name="hanachin">

# Call Habu::Container#new to get instance
new_user = container.new(NewUserService).call("hanachin")
# => #<struct User name="hanachin">

# Factory block take a container as argument
container[:new_user] do |c|
  # You can get the service object by calling Container#[](service_name)
  NewUserService.new(c[:user_repository])
end
new_user = container[:new_user].call("hanachin")
# => #<struct User name="hanachin">

# Using container as refinements for shorthand for container.new
using container.to_refinements
new_user = NewUserService.new.call("hanachin")
# => #<struct User name="hanachin">

Development

After checking out the repo, run bin/setup to install dependencies. Then, run rake spec to run the tests. You can also run bin/console for an interactive prompt that will allow you to experiment.

To install this gem onto your local machine, run bundle exec rake install. To release a new version, update the version number in version.rb, and then run bundle exec rake release, which will create a git tag for the version, push git commits and tags, and push the .gem file to rubygems.org.

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/hanachin/habu.

About

DI container

Resources

Stars

Watchers

Forks

Packages

No packages published