Project

xproc

0.0
No commit activity in last 3 years
No release in over 3 years
Awesome short procs for Ruby
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

~> 1.9
~> 10.0
 Project Readme

XProc

Build Status

XProc is a refinement for Ruby which allows you to write simple blocks using a convenient shorthand syntax, inspired by Scala, Crystal and Elixir.

Installation

Add this line to your application's Gemfile:

gem "xproc"

Usage

Since it's a refinement, you have to explicitly include it wherever you want to use it. Use it like this:

require "xproc"

using XProc

["foo", "bar", "quox"].map(&x.gsub("oo", "aa")).select(&x.length <= 3)
# => ["faa", "bar"]

It is also possible to pull in XProc into the global namespace:

require "xproc/global"

["foo", "bar", "quox"].map(&x.gsub("oo", "aa")).select(&x.length <= 3)
# => ["faa", "bar"]

If your Ruby version does not support refinements you will have to do that.

You can also use positional arguments like this:

[1,2,3,4,5].reduce(&x1 * x2)
# => 120

And chain stuff

[1,2,3,4,5].map(&x * 2 + 1)
# => [3, 5, 7, 9, 11]

[123, 456].map(&x.to_s.reverse)
# => ["321", "654"]

It does this by recording all method calls on x and replaying them when the proc is called.

Limitations

The x or x1... must be the first expression after the & sign. This does not work:

[1,2,3,4,5].reduce(&foo(x))

Any x passed as an argument must be a direct argument to another x. This does not work:

[1,2,3,4,5].reduce([], &x1 + [x2])
[1,2,3,4,5].reduce([], &x1 + foo(x2))
[1,2,3,4,5].reduce([], &x1 + Foo.new(x2))

Generally, stick to simple stuff, very complicated expressions probably won't work.

Is it any good?

No.

License

MIT