From: zverok.offline@... Date: 2018-01-24T14:43:40+00:00 Subject: [ruby-core:85051] [Ruby trunk Feature#14392] Pipe operator Issue #14392 has been updated by zverok (Victor Shepelev). We already have `yield_self` (2.5+) exactly for this. ```ruby class Foo ## # Bar public method. def bar(*args) args.select do { |arg| arg =~ /regex/ }.first yield_self(&method(:good)) end.yield_self(&method(:public)) def good(arg) arg.to_s.size > 10 end.yield_self(&method(:private)) end # Though this method of publicize and privatize seem... well, less-than-optimal for me, pipe or yield_self ``` While introducing it, different alternatives have been discussed, including Elixir-like operator, and rejected. ---------------------------------------- Feature #14392: Pipe operator https://bugs.ruby-lang.org/issues/14392#change-69769 * Author: dsferreira (Daniel Ferreira) * Status: Open * Priority: Normal * Assignee: * Target version: ---------------------------------------- I would like to see implemented in ruby a pipe operator as we have in elixir. An example of application I have in mind is this: ```ruby class Foo def bar(var) puts ���Hello #{var}!��� end |> private def baz(arg) bar(arg) end end foo = Foo.new foo.baz("Fred") # => "Hello Fred!" ``` It can also help simplify method chains: ```ruby class Secret def initialise(user, password) @user = user @password = password end def second_pass(encrypted_string) encrypted_string.chain_4.chain_5.chain_6 end |> private ## # Super encryption def super_encryption @password.chain_1.chain_2.chain_3 |> second_pass end |> public end ``` And also simplify codes like this: ```ruby class Foo def bar(*args) baz = args.select { |arg| arg =~ /regex/ }.first good?(baz) end public :bar def good(arg) arg.to_s.size > 10 end private :good end ``` to become: ```ruby class Foo ## # Bar public method. def bar(*args) args.select { |arg| arg =~ /regex/ }.first |> good? end |> public def good(arg) arg.to_s.size > 10 end |> private end ``` Lots of local variables would be saved and I would expect some performance improvements with that. -- https://bugs.ruby-lang.org/ Unsubscribe: