39. instance_eval Elegant APIs
ec2.region('eu-west').use do
run_instances
end
class Awsum::Ec2::Region
def use(&block)
old_host = @ec2.host
@ec2.host = end_point
instance_eval(&block)
ensure
@ec2.host = old_host
end
end
http://github.com/internuity/awsum
40. instance_eval Elegant APIs
ec2.region('eu-west').use do
run_instances
end
class Awsum::Ec2::Region
def use(&block)
old_host = @ec2.host
@ec2.host = end_point
block.arity < 1 ? instance_eval(&block) : block[self]
ensure
@ec2.host = old_host
end
end
http://github.com/internuity/awsum
41. instance_eval Elegant APIs
class Awsum::Ec2::Region
def use(&block)
if block_given?
begin
old_host = @ec2.host
@ec2.host = end_point
block.arity < 1 ? instance_eval(&block) : block[self]
ensure
@ec2.host = old_host
end
else
@ec2.host = end_point
self
end
end
end
http://github.com/internuity/awsum
42. instance_eval Elegant APIs
ec2.region('eu-west').use do
run_instances
end
http://github.com/internuity/awsum
43. instance_eval Elegant APIs
ec2.region('eu-west').use do
run_instances
end
ec2.region('eu-west') do
run_instances
end
http://github.com/internuity/awsum
44. instance_eval Elegant APIs
ec2.region('eu-west') do
run_instances
end
def region(region_name)
region = regions(region_name)[0]
end
http://github.com/internuity/awsum
45. instance_eval Elegant APIs
ec2.region('eu-west') do
run_instances
end
def region(region_name, &block)
region = regions(region_name)[0]
if block_given?
region.use(&block)
else
region
end
end
http://github.com/internuity/awsum
46. instance_eval Elegant APIs
class Awsum::Ec2::Region
def method_missing(method_name, *args, &block)
use do
@ec2.send(method_name, *args, &block)
end
end
def respond_to?(method_name,
include_private = false)
@ec2.respond_to?(method_name, include_private)
|| super
end
end
http://github.com/internuity/awsum
47. Elegant APIs
Inspiration
(recommended reading)
Ruby Best Practices
http://ruby best practices book.com
Practicing Ruby newsletter
http://letter.ly/practicing-ruby
Thanks Gregory Brown