Skip to content
A text processing library for Ruby http://rubygems.org/gems/processr
Ruby
Find file
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
examples
lib
spec
.gitignore
LICENSE
Rakefile
TODO
VERSION
processr.gemspec
readme.rdoc

readme.rdoc

Processr

  • Overview

  • Installation

  • Usage

  • Bugs

Overview

Processr is a simple text processing and concatenation library. It takes a number of input strings (or files) and outputs a single string (or file) containing the result. Text can be passed through filters to modify the output.

Installation

The project is hosted on rubygems.org. Getting it is simple:

gem install processr

Usage

Configuration

Use the configuration block to setup Processr

Processr.configure do |config|
  config.root = File.expand_path(File.dirname(__FILE__))
  config.out  = File.join(config.root, 'output.txt')
end

If an output file is specified the result will be written to that file, otherwise the result will be returned directly from the #process! method.

Basic

processor = Processr.new
processor << "Some\n"
processor << "Text"
processor.process! # => "Some\nText"

This will result in a concatenated string being returned.

Basic (from file)

processor = Processr.new
processor.files << 'input_one.txt'
processor.files << 'input_two.txt'
processor.process! # => contents of input_one.txt and input_two.txt

This will result in the contents of input_one.txt and input_two.txt returned.

Filters

Filters can be used to modify the output of a processing session. A filter is any object that responds to #call. Filters take a single argument (the input buffer) and must return the modified buffer for further processing. For example:

lambda do |buffer|
  # ...do something with buffer here...

  buffer
end

Or

class MyFilter

  def self.call(buffer)
    # ...do something with buffer here...

    buffer
  end

end

You can register a filter by calling #add_filter on an instance of Processr. A further example would be a really simple textile parser:

TextileFilter = lambda do |buffer|

  lookup = {
    /_(.*)_/         => '<em>\1</em>',
    /\*(.*)\*/       => '<strong>\1</strong>',
    /\"(.*)\":(\S*)/ => '<a href="\2">\1</a>'
  }

  lookup.each_pair do |regex, replacement|
    buffer.gsub!(regex, replacement)
  end

  buffer
end

processor = Processr.new
processor.add_filter(TextileFilter)
processor << 'A _simple_ example of a "textile":http://www.textism.com/tools/textile/ parser using a *filter*.'
processor.process! # => "A <em>simple</em> example of a <a href="http://www.textism.com/tools/textile/">textile</a> parser using a <strong>filter</strong>."

File Filters

You can also add filters to be run when a file is read to the buffer. This behaves similarly to a normal filter, and must return the file contents to the buffer:

InBetweenFilter = lambda do |filename, contents|
  puts "Filter for #{filename}"
  contents
end

processor = Processr.new
processor.add_file_filter(InBetweenFilter)
processor.files << File.join('..', 'spec', 'fixtures', 'one.txt')
processor.files << File.join('..', 'spec', 'fixtures', 'two.txt')
puts processor.process! => Filter for ../spec/fixtures/one.txt etc...

Run the examples for more information.

Bugs

If you have any problems with processr, please file an issue at github.com/joshnesbitt/processr/issues.

Note on Patches/Pull Requests

  • Fork the project.

  • Make your feature addition or bug fix.

  • Add tests for it. This is important so I don't break it in a future version unintentionally.

  • Commit, do not mess with rakefile, version, or history. (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)

  • Send me a pull request. Bonus points for topic branches.

Copyright

Copyright © 2010 Josh Nesbitt <josh@josh-nesbitt.net>. See LICENSE for details.

Something went wrong with that request. Please try again.