Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

deptree

Package Overview
Dependencies
Maintainers
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

deptree

  • 0.1.0
  • Rubygems
  • Socket score

Version published
Maintainers
1
Created
Source

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

FAQs

Package last updated on 10 Jul 2016

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc