-
Overview
-
Installation
-
Usage
-
Bugs
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.
The project is hosted on rubygems.org. Getting it is simple:
gem install processr
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.
processor = Processr.new processor << "Some\n" processor << "Text" processor.process! # => "Some\nText"
This will result in a concatenated string being returned.
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 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>."
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.
If you have any problems with processr, please file an issue at github.com/joshnesbitt/processr/issues.
-
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 <[email protected]>. See LICENSE for details.