Project

wriggle

0.01
No commit activity in last 3 years
No release in over 3 years
A simple directory crawler DSL.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

~> 2.5
~> 0.6
 Project Readme

Wriggle

Build Status

A simple directory crawler DSL.

Usage

require 'wriggle'

wriggle '/path/to/files' do |w|
  # Print a list of files
  w.file { |path| puts path }

  # Build a list of Rails controller files
  controllers = []
  w.files /_controller\.rb/ do |path|
    controllers << path
  end

  # Print the path of any file named "spec_helper.rb"
  w.file('spec_helper.rb') { |path| puts path }

  # Build an array of Ruby code files
  ruby_files = []
  w.extension :rb do |path|
    ruby_files << path
  end

  # Build an array of video files
  video_files = []
  w.extensions %w(mpg mpeg wmv avi mkv) do |path|
    video_files << path
  end

  # Delete directories that are empty
  w.directories do |path|
    Dir.rmdir(path) unless Dir.entries(path).length > 2
  end

  # Print a list of directories matching "foo"
  # NOTE: Matches "/baz/bar/foo" and "/foo" but not "/foo/bar/baz"
  w.directory(/foo/) { |path| puts path }
end

Caveats

Wriggle is a wrapper around Ruby's standard library, Find. As such, it crawls its starting path recursively. This is currently its default -- and only -- behavior.

Defined blocks are yielded to as Find encounters a directory or file, not necessarily the order in which the blocks were defined.

As an example, here is Wriggle crawling its own tree:

ruby-1.9.2-p180 :001 > require 'wriggle'
 => true
ruby-1.9.2-p180 :002 > wriggle '.' do |w|
ruby-1.9.2-p180 :003 >   w.file { |path| puts path }
ruby-1.9.2-p180 :004?>   w.directory { |path| puts path }
ruby-1.9.2-p180 :005?> end
.
./.document
./.gitignore
./.travis.yml
./Gemfile
./Gemfile.lock
./LICENSE
./README.md
./Rakefile
./lib
./lib/wriggle
./lib/wriggle/version.rb
./lib/wriggle.rb
./spec
./spec/spec_helper.rb
./spec/support
./spec/support/temporary_files.rb
./spec/wriggle_spec.rb
./wriggle.gemspec

If it were important to output a list of directories and then a list of files, it might be best to collect each in their own arrays and then, outside of the wriggle block, loop through them to print each entry.

Install

gem install wriggle

Documentation

API Docs

Contributing

Pull requests and bug reports are very appreciated.

  • Bug reports
  • Patches: Fork and send a pull request.
    • Include specs where it makes sense.

Developer Quickstart

Once you've cloned this repository or your own fork, these steps should adequately prepare you to begin contributing to the project.

Create a new RVM gemset (optional)

rvm gemset create wriggle
rvm gemset use wriggle

Bundler

First, install Bundler if you haven't already. Then install the development dependencies.

bundle install

Run Specs

rake spec

If everything passes, you're good to go!

Copyright

Copyright (c) 2011 Robert Speicher. See LICENSE for details.