-
Notifications
You must be signed in to change notification settings - Fork 7
Ruby Blocks
Subhas Dandapani edited this page Jan 24, 2015
·
12 revisions
a1 = [1,2,3,4]
a2 = a1.map do |item|
return item+1
end
puts a2
# Why? How?def measure
t1 = Time.new
yield 1
yield 2
yield 3
t2 = Time.new
puts t2-t1
end
measure do |x|
puts "this block got #{x}"
end
### Ruby Array `each` also uses blocks
```ruby
[5,6,7,8].each do |i|
puts "got #{i}"
enddef with_transaction
begin
puts "begin transaction"
yield
puts "commit transaction"
rescue
puts "rollback transaction"
end
end
with_transaction do
puts "execute query 1"
put "calculate something" # purposeful error
puts "execute query 2"
end
with_transaction do
puts "execute query 3"
puts "calculate something again"
puts "execute query 4"
endrequire 'writeexcel'
def workbook(filename, person)
@workbook = WriteExcel.new(filename)
@person = person
yield
@workbook.close
end
def worksheet(sheet_name)
@worksheet = @workbook.add_worksheet(sheet_name)
@row = 0
yield
end
def row(label, column_name=nil)
if column_name
value = @person[column_name]
else
value = yield
end
@worksheet.write @row, 0, label
@worksheet.write @row, 1, value
@row = @row + 1
endrequire './excel_dsl'
person = {
"first_name" => "Subhas",
"last_name" => "D",
"company" => "TW",
"date_of_birth" => "...",
"experience" => "0",
"languages" => "ruby"
}
workbook('ruby.xls', person) do
worksheet('Personal Details') do
row "Name" do
@person['first_name'] + ',' + @person['last_name']
end
end
worksheet('Company Details') do
row "Company", "company"
end
worksheet('Skills') do
row 'Languages', "languages"
end
end