/codependency

Simple comment-based dependency graph for arbitrary files

Primary LanguageRubyMIT LicenseMIT

Codependency

Codependency is a simple comment-based dependency graph that you can use on arbitrary files. The comment syntax should look familiar to anyone who has used Sprockets, but is not nearly as robust (yet).

Installation

Add this line to your application's Gemfile:

gem 'codependency'

And then execute:

$ bundle

Or install it yourself as:

$ gem install codependency

Usage

Say you have two files, bar.rb and foo.rb. bar comes before foo in a natural naming scheme, but bar has a dependency on foo. We can express this using a simple comment syntax at the head of the file like this:

bar.rb:

#= require foo

class Bar
end

foo.rb:

class Foo
end

Then, we create a dependency graph to determine the order in which the files might need to be loaded, inserted, or compiled:

graph = Codependency::Graph.new
graph.path << '.' # works like PATH, append search paths for this graph
graph << 'bar'    # adds a file to this graph, finds its dependencies recursively
graph.files       # returns a topologically sorted list of relative pathnames

Contributing

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Added some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request