Project

deptree

0.0
No commit activity in last 3 years
No release in over 3 years
Easly manage initialization steps in your Ruby application.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
 Dependencies

Development

~> 1.6
~> 10.0
~> 3.4
 Project Readme

Easly manage initialization steps in your Ruby application.

When building Ruby applications, quite often, your application has to be properly configured before it can be run. Configuration steps might include things like: reading config files, instantiating singleton objects (Logger for example), configuring various API clients, establishing connections to databases, message brokers etc. It can become a tedious task if your application is complex and some steps depend on another.

Deptree is attempting to solve this problem by exposing declarative DSL that allows to define configuration steps, dependencies between them and most importantly, executing those steps without explicitly specifying the order of invocation.

Usage

First, you need to define all the configuration steps (with their dependencies) required by your application:

module Application
  module Dependencies
    extend Deptree::DSL

    dependency :config_file do
      configure do
        Application.config = YAML.load_file('config.yml')[environment]
      end
    end

    dependency :logger => :config_file do
      configure do
        Application.logger = Logger.new(Application.config.log_path)
      end
    end

    dependency :github_client => [:logger, :config_file] do
      configure do
        GithubClient.configure do |config|
          config.host = Application.config.github.host
          config.logger = Application.logger
        end
      end
    end

    helpers do
      def environment
        ENV['RACK_ENV'] || 'development'
      end
    end
  end
end

Once you're ready to start your app, invoke all the configuration steps:

#!/usr/bin/env ruby

require 'application'

Application::Dependencies.configure
# At this point **ALL** the configuration steps required by your application
# will have run in correct order

# Start your application
Application.run!

Alternatively, you can choose to invoke only specific steps:

Application::Dependencies.configure(:logger, :github_client)
# NOTE: config will be automatically loaded since both (logger and github_cllient) depend on it.

How it works

Each configuration step can be represented as a vertex in a directed graph where each dependency between two steps forms an edge. In order to invoke those steps in correct order, we first need to sort those vertices in a topological order. Deptree gem uses a simplified version of Kahn's alghoritm to achieve this.

Installation

Add this line to your application's Gemfile:

gem 'deptree'

And then execute:

$ bundle

Or install it yourself as:

$ gem install deptree

Code status

Build Status

Contributing

  1. Fork it ( https://github.com/kajetanowicz/deptree/fork )
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request