Project

processr

0.0
No commit activity in last 3 years
No release in over 3 years
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.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
 Dependencies

Development

>= 1.2.9
 Project Readme

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 © 2010 Josh Nesbitt <josh@josh-nesbitt.net>. See LICENSE for details.