Ruice

Where my dependencies at, fam?

- Me, a minor Ruby hater

Ruice is a DIC container implemented in less than 150 lines of Ruby code.

It allows for:

  • Automatic injection in instance props
  • Configuration properties
  • Autowiring by class name

Development status

I literally wrote this in 12 minutes. Are you mad?

Installation

Add this line to your application's Gemfile:

gem 'ruice'

And then execute:

$ bundle

Or install it yourself as:

$ gem install ruice

Usage


class DependencyA
end

class InjectionPoint
  def initialize
    @dependency_a = Ruice::Dependency.new DependencyA
    @property = Ruice::Property 'my.config.property'
    @env = Ruice::Property 'env'
  end

  def dic_ready
    # Method always invoked when @injected props have been replaced
  end

  def something
    @dependency # Instance of DependencyA
    @property # 'FooBar'
    @env # 'production'
  end
end

container = Ruice::Container.new(
  {
    my: {
      config: {
        property: 'FooBar'
      }
    }
  },
  'production'
)

# Register dependency by class
container.with(Logger, proc {
  Logger.new('/dev/null')
})

# Register dependency by name

container.with('my_logger', proc {
  Logger.new('/dev/null')
})

# Automatically created instance
injection_point = container.request InjectionPoint

# Instance of by class Logger
logger = container.request Logger

# Instance of by name Logger
logger = container.request 'my_logger' 

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/Addvilz/ruice.

License

The gem is available as open source under the terms of the Apache 2.0 License.