P O S T M O D E R N

Introducing static_paths 0.1.0

content, data, directories, files, library, ruby, rubygem

Update 2: static_paths has now be renamed to data_paths with documentation available on rubydoc.info.

Update: Documentation has now been posted on static-paths.rubyforge.org.

When writing a library which bundles static-content in a directory named data/ or static/, you usually need to find the directory using something like.

File.expand_path(File.join(File.dirname(__FILE__),'..','..','..','..','static'))

But then you want to allow plugins to extend the functionality of your library, and even add their own static-content. Now you have to manage more than one directory path.

Enter StaticPaths, a Ruby library for managing and searching through directories containing static-content. StaticPaths helps manage directories across multiple libraries in much the same way that RubyGems manages lib/ directories using $LOAD_PATH. Except that StaticPaths does not use global variables.

Example Usage

require 'static_paths'

module MyLibrary
  include StaticPaths

  # define the static dir(s)
  register_static_dir File.join(File.dirname(__FILE__),'..','..','static')
end

register_static_dir will expand the path, make sure the path points to a directory, then adds the path to StaticPaths.paths and the local MyLibrary.static_paths.

One can also unregister directories using unregister_static_dir!.

MyLibrary.unregister_static_dir! File.join(File.dirname(__FILE__),'..','..','static')

Or, one can use unregister_static_dirs! to unregister all directories registered within a module/class.

module MyLibrary
  def MyLibrary.cleanup!
    unregister_static_dirs!
  end
end

To search through and access the content within registered directories, simply use the methods within the StaticPaths::Finders module.

module MyLibrary
  class UsesContent

    include StaticPaths::Finders

    def index
      find_static_file('index.html')
    end

    def file_dirs
      all_static_dirs('extra')
    end

    def copy(src,dest)
      each_static_dir(src) do |dir|
        FileUtils.cp_r(dir,dest)
      end
    end

  end
end

Installation:

$ sudo gem install static_paths