Home

Awesome

&X

Ruby procs can be tiresome. &X (read as "ampersand ex") is a gem to vastly simplify this and bring expressiveness back to your code.

You'd use &X in places where you need a simple proc, but are too lazy to type { |some_object| some_object.property.another > 42 } yourself.

There is &:method_name, but it wouldn't work with method chains and arguments to each one. &X tries to fill the gap here.

First, unlike &:method_name, &X can handle hashes:

people = [ {name: "Patrick"}, {name: "Jane"}, {name: "Jack"}, {name: "Donald"} ]

# &X
people.map(&X[:name])

# plain ruby
people.map { |person| person[:name] }

But it does not stop there. You can also apply some predicates on objects easily:

Person = Stuct.new(:first, :age)

patrick = Person.new("Patrick", 19)
jane = Person.new("Jane", 21)
jack = Person.new("Jack", 20)
donald = Person.new("Donald", 25)

people = [patrick, jane, jack, donald]

# plain ruby
people.partition { |person| person.age > 20 }

# with &X
people.partition(&X.age > 20)

You can traverse a long chain of method calls too:

# Suppose we have a Person class with +address+ property,
# which, in turn, has +city+ and +street+ properties.
# We want to find all people older than 20 living in Chicago...

# plain ruby
people.select { |person| person.age > 20 && person.address.city == "Chicago" }

# &X
people.select(&X.age > 20).select(&X.address.city == "Chicago")

Installation

Add this line to your application's Gemfile:

gem 'ampersand_x'

Or install it yourself as:

$ gem install ampersand_x

License

MIT.