require 'excel'
require 'sql'
Excel.load('file.xls').each do |row|
SQL.insert(row)
end
Slide 4
Slide 4 text
No content
Slide 5
Slide 5 text
require 'html'
require 'http'
page = HTML.load(HTTP.get('http://example.com/'))
page.links.each do |link|
HTTP.get(link).save
end
Slide 6
Slide 6 text
class Company
def projects
HTTP::Request.new('/projects').get
end
def people
HTTP::Request.new('/people').get
end
def clients
HTTP::Request.new('/clients').get
end
...
end
class Company
def projects
HTTP::Request.new('/projects').get
end
def people
HTTP::Request.new('/people').get
end
...
end
Slide 33
Slide 33 text
class Company
def projects
get('/projects')
end
def people
get('/people')
end
...
private
def get(url)
HTTP::Request.new(url).get
end
end
Slide 34
Slide 34 text
Is that all?
Slide 35
Slide 35 text
Let Ruby create your
methods for you
Slide 36
Slide 36 text
class Company
[:projects, :people, ...].each do |method|
eval %Q{ def #{method}
HTTP::Request.new('/#{method}').get
end }
end
end
Slide 37
Slide 37 text
class Company
[:projects, :people, ...].each do |method|
define_method method do
HTTP::Request.new("/#{method}").get
end
end
end
Slide 38
Slide 38 text
No content
Slide 39
Slide 39 text
It’s all about
expresivity
Slide 40
Slide 40 text
No content
Slide 41
Slide 41 text
module HTTP
def get(*methods)
methods.each do |method|
define_method method do
HTTP::Request.new("/#{method}").get
end
end
end
end
Slide 42
Slide 42 text
module HTTP
def get(*methods)
methods.each do |method|
define_method method do
HTTP::Request.new("/#{method}").get
end
end
end
end
class Company
extend HTTP
get :projects, :people, ...
end
Slide 43
Slide 43 text
“I Taw a Putty
DSL...”
Slide 44
Slide 44 text
class Company
extend HTTP
get :projects, :people, ...
end
Slide 45
Slide 45 text
It’s all about flexibility
Slide 46
Slide 46 text
class Company
def method_missing(method, *args, &blk)
HTTP::Request.new("/#{method}").get
end
end
Slide 47
Slide 47 text
class Company
def method_missing(method, *args, &blk)
HTTP::Request.new("/#{method}").get
end
end
Slide 48
Slide 48 text
It’s all common sense
Slide 49
Slide 49 text
metaprogramming
==
programming
Slide 50
Slide 50 text
same trade-offs apply
Slide 51
Slide 51 text
No content
Slide 52
Slide 52 text
No content
Slide 53
Slide 53 text
No content
Slide 54
Slide 54 text
“Cleverness cannot win. The
only weapons we have are
simplicity and convention”
http://alarmingdevelopment.org/?p=422