Project for,in Ruby
A declarative language ("DSL") to describe the source files comprising your application or library and the relationships/dependencies between them. Projectr is intended for use as a canonical list (manifest) of the project contents that can be interrogated for the purposes of e.g.
loading it at startup time
reloading it (e.g. in a web server or in irb) when source files change. Comes with inotify support on Linux platforms, patches for other platforms with file change notifications welcome
generating a file list for Gem or other package creation
file list ditto for rdoc or similar
probably other stuff I haven't thought of yet
Here's an example:
Projectr::Project.new :test do # directories may be named by symbols or strings directory :example do #as may files file "file1" file :file2, :needs=>["file1"] directory "subdir" do file :subdir_file end end end h=Projectr::Project[:test] h.load! # and again h.load! # nothing happens this time # touch example/file1.rb h.load! # loads only the changed file
When you call load! the first time in any session, files are loaded in
the order they are listed, and their last-changed-on-disk times are
stored. When you call it a second or subsequent time, each file's
last-change time will be compared to the time it was previously
loaded, and it will be skipped unless (a) it has changed, or (b)
:needs clause specifies one or more files that have changed.
Common Lisp hackers will know what I mean when I say "it's Defsystem in Ruby". They will then shortly be disappointed when they realise just how little it actually does (almost nothing whatsoever) compared to the system definition tools they know and are used to. Just warning you, guys.
The syntax is stating to solidify, but not yet set in stone. There is an example system in spec/fixture/example which also serves as a text fixture.