goruco 2016 - pipe operator for ruby

41
PIPE OPERATOR For Ruby @akitaonrails

Upload: fabio-akita

Post on 23-Jan-2018

712 views

Category:

Technology


4 download

TRANSCRIPT

Page 1: Goruco 2016 - Pipe Operator for Ruby

PIPE OPERATORFor Ruby

@akitaonrails

Page 2: Goruco 2016 - Pipe Operator for Ruby
Page 3: Goruco 2016 - Pipe Operator for Ruby
Page 4: Goruco 2016 - Pipe Operator for Ruby
Page 5: Goruco 2016 - Pipe Operator for Ruby
Page 6: Goruco 2016 - Pipe Operator for Ruby

Rubyconf Brasil 2016 – September 23 - 24

Page 7: Goruco 2016 - Pipe Operator for Ruby

Rubyconf Brasil 2016 – September 23 - 24

Page 8: Goruco 2016 - Pipe Operator for Ruby

September

23 - 24 @rubyconfbr

Page 9: Goruco 2016 - Pipe Operator for Ruby

PIPE OPERATORFor Ruby

@akitaonrails

Page 10: Goruco 2016 - Pipe Operator for Ruby

Elixir Pipe Operator

Page 11: Goruco 2016 - Pipe Operator for Ruby

requireInteger1..100_000|>Stream.map(&(&1*3))|>Stream.filter(&(Integer.is_odd(&1)))|>Enum.sum

Page 12: Goruco 2016 - Pipe Operator for Ruby

requireInteger1..100_000|>Stream.map(&(&1*3))|>Stream.filter(&(Integer.is_odd(&1)))|>Enum.sum

Enum.sum(Enum.filter(Enum.map(1..100_000,&(&1*3)),&(Integer.is_odd(&1))))

Page 13: Goruco 2016 - Pipe Operator for Ruby

[1..10000]|>List.map(funx->x*3)|>List.filter(funx->x%2=0)|>List.reduce(funxy->x+y)

List.reduce(funxy->x+y)(List.filter(funx->x%2=0)(List.map(funx->x*3)[1..10000]))

Page 14: Goruco 2016 - Pipe Operator for Ruby

Feature

Envy

Page 15: Goruco 2016 - Pipe Operator for Ruby

(1..100_000).map{|x|x*3}.select(&:odd?).reduce(&:+)

Page 16: Goruco 2016 - Pipe Operator for Ruby

Linux Piping and Redirection

Page 17: Goruco 2016 - Pipe Operator for Ruby

netstat-rn\|awk'/default/{print$NF}'\|head-1|xargs-I{}ifconfig{}\|awk'/ether/{print$2}'

Page 18: Goruco 2016 - Pipe Operator for Ruby

netstat-rn\|awk'/default/{print$NF}'\|head-1|xargs-I{}ifconfig{}\|awk'/ether/{print$2}'

Page 19: Goruco 2016 - Pipe Operator for Ruby

netstat-rn\|awk'/default/{print$NF}'\|head-1|xargs-I{}ifconfig{}\|awk'/ether/{print$2}'

Page 20: Goruco 2016 - Pipe Operator for Ruby

netstat-rn\|awk'/default/{print$NF}'\|head-1|xargs-I{}ifconfig{}\|awk'/ether/{print$2}'

Page 21: Goruco 2016 - Pipe Operator for Ruby

netstat-rn\|awk'/default/{print$NF}'\|head-1|xargs-I{}ifconfig{}\|awk'/ether/{print$2}'

Page 22: Goruco 2016 - Pipe Operator for Ruby

netstat-rn\|awk'/default/{print$NF}'\

|head-1|xargs-I{}ifconfig{}\

|awk'/ether/{print$2}'

Page 23: Goruco 2016 - Pipe Operator for Ruby

|head-1|xargs-I{}ifconfig{}\

|awk'/ether/{print$2}'

Foo.run_cmd("-rn","netstat")|>String.split("\n")|>Enum.filter(&(String.match?(&1,~r/default/)))|>Enum.map(&(String.split(&1)))|>Enum.map(&(List.last(&1)))

Page 24: Goruco 2016 - Pipe Operator for Ruby

|awk'/ether/{print$2}'

Foo.run_cmd("-rn","netstat")|>String.split("\n")|>Enum.filter(&(String.match?(&1,~r/default/)))|>Enum.map(&(String.split(&1)))|>Enum.map(&(List.last(&1)))|>hd|>Foo.run_cmd("ifconfig")

Page 25: Goruco 2016 - Pipe Operator for Ruby

Foo.run_cmd("-rn","netstat")|>String.split("\n")|>Enum.filter(&(String.match?(&1,~r/default/)))|>Enum.map(&(String.split(&1)))|>Enum.map(&(List.last(&1)))|>hd|>Foo.run_cmd("ifconfig")|>String.split("\n")|>Enum.filter(&(String.match?(&1,~r/ether/)))|>List.first|>String.split|>List.last

Page 26: Goruco 2016 - Pipe Operator for Ruby

Quick Prototyping

Page 27: Goruco 2016 - Pipe Operator for Ruby

Foo.run_cmd("-rn","netstat")|>String.split("\n")|>Enum.filter(&(String.match?(&1,~r/default/)))|>Enum.map(&(String.split(&1)))|>Enum.map(&(List.last(&1)))|>hd|>Foo.run_cmd("ifconfig")|>String.split("\n")|>Enum.filter(&(String.match?(&1,~r/ether/)))|>List.first|>String.split|>List.last

Page 28: Goruco 2016 - Pipe Operator for Ruby

`netstat-rn`.split("\n").select{|x|x=~/default/}.map{|x|x.split("")}.map{|x|x.last}.first|>{|card|`ifconfig#{card}`}.split("\n").select{|x|x=~/ether/}.first.split("").last

Page 29: Goruco 2016 - Pipe Operator for Ruby

`netstat-rn`.split("\n").select{|x|x=~/default/}.map{|x|x.split("")}.map{|x|x.last}.first|>{|card|`ifconfig#{card}`}.split("\n").select{|x|x=~/ether/}.first.split("").last

Page 30: Goruco 2016 - Pipe Operator for Ruby

x=`netstat-rn`.split("\n").select{|x|x=~/default/}.map{|x|x.split("")}.map{|x|x.last}.first

`ifconfig#{x}`.split("\n").select{|x|x=~/ether/}.first.split("").last

Page 31: Goruco 2016 - Pipe Operator for Ruby

CM(`netstat-rn`).split("\n").select{|x|x=~/default/}.map{|x|x.split("")}.map{|x|x.last}.first.chain{|card|`ifconfig#{card}`}.split("\n").select{|x|x=~/ether/}.first.split("").last.unwrap

Page 32: Goruco 2016 - Pipe Operator for Ruby

CM(`netstat-rn`).split("\n").select{|x|x=~/default/}.map{|x|x.split("")}.map{|x|x.last}.first.chain{|card|`ifconfig#{card}`}.split("\n").select{|x|x=~/ether/}.first.split("").last.unwrap

Page 33: Goruco 2016 - Pipe Operator for Ruby

#Gemfilegem"chainable_methods","~>0.2.1"

Page 34: Goruco 2016 - Pipe Operator for Ruby

DATA TRANSFORMATION

WORKFLOWS

Page 35: Goruco 2016 - Pipe Operator for Ruby

Avoid Temporary Variables

Page 36: Goruco 2016 - Pipe Operator for Ruby

text="hellohttp:///www.goruco.comworld"url=URI.extract(text).firsturi=URI.parse(url)body=open(uri).readtitle=Nokogiri::HTML(body).css(“h1").first.text.strip

Page 37: Goruco 2016 - Pipe Operator for Ruby

CM("hellohttp:///www.goruco.comworld").chain{|text|URI.extract(text).first}.chain{|url|URI.parse(url)}.chain{|uri|open(uri).read}.chain{|body|Nokogiri::HTML(body).css("h1")}.first.text.strip.unwrap

Page 38: Goruco 2016 - Pipe Operator for Ruby

CM("hellohttp:///www.goruco.comworld").URI.extract.first.URI.parse.chain{|uri|open(uri).read}.HTML.parse.css("h1").first.text.strip.unwrap

includeNokogiri

Page 39: Goruco 2016 - Pipe Operator for Ruby
Page 40: Goruco 2016 - Pipe Operator for Ruby
Page 41: Goruco 2016 - Pipe Operator for Ruby

THANKS!www.codeminer42.com

@akitaonrails