"https://api.github.com/repos/ruby/ruby".pipe do
URI.parse
Net::HTTP.get
JSON.parse.fetch("stargazers_count")
yield_self { |n| "Ruby has #{n} stars" }
Kernel.puts
end
#=> Ruby has 15120 stars # regular inverted method calls
JSON.parse(Net::HTTP.get(URI.parse(url)))
# could be written left to right
url.pipe { URI.parse; Net::HTTP.get; JSON.parse }
# or top to bottom for even more clarity
url.pipe do
URI.parse
Net::HTTP.get
JSON.parse
end
[0] Revert pipeline operator: http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-core/... * Engineering Manager
* Senior/Staff/Principal Data Scientist
* Senior/Staff/Principal Software Engineer
* Design/Finance/HR/Marketing/Operations/Product/Sales/etc
Please check out our openings for more details! https://grnh.se/18ad65801 * Engineering Manager
* Senior/Staff/Principal Data Scientist
* Senior/Staff/Principal Software Engineer
* Design/Finance/HR/Marketing/Operations/Product/Sales/etc
Please check out our openings for more details! https://grnh.se/18ad65801 * Engineering Manager
* Senior Data Scientist
* Software Engineer (Frontend or Backend)
* Design/Finance/HR/Marketing/Operations/Product/Sales/etc
Check out our job openings and apply at: https://grnh.se/18ad65801 # don't really know what IO.inspect is doing
# but guessing something like this?
def IO.inspect(value, label:)
puts "#{label}: #{value.inspect}"
value
end
value.pipe do
IO.inspect(label: "A")
do_something
IO.inspect(label: "B")
do_something_else
IO.inspect(label: "C")
end def div(*args)
case args
when Pattern{[a, 0]} then [:error, "can't divide by 0"]
when Pattern{[a, 1]} then [:ok, Pattern.last.a]
when Pattern{[0, b]} then [:ok, 0]
when Pattern{[a, b]} then [:ok, Pattern.last.a / Pattern.last.b]
end
end
def something(object)
case object
when Pattern{a[b, c]} then [:ok, Pattern.last.b + Pattern.last.c]
else [:error, "a didn't contain b and c"]
end
end
Some shorthand to access `Pattern.last` e.g. "$~" for regex would make things even nicer! data = {
name: "John Smith",
age: 35,
prefs: {
lang: "en",
tz: "UTC",
}
}
User = Pattern { name age prefs[lang] }
user = User =~ data
user.name
user.age
user.lang
[data].map(&User)
case object
when Pattern { some attrs[:nested][real][deep, fields] }
Pattern!.some
Pattern!.real
Pattern!.deep
Pattern!.fields
Pattern!.nested #=> NoMethodError
end
# or define "locals" by defining temporary methods on
# the block receiver when the "then" block is evaluated
case object
when Pattern { some nested[data] }.then do
puts some
puts data
end
https://github.com/lendinghome/pipe_operator#-pipe_operator