8. class User
attr_accessor :first_name, :last_name
def fullname
"#{first_name} #{last_name}"
end
end
9. class User
attr_accessor :first_name, :last_name
def initialize(options = {})
options.each do |name, value|
send("#{name}=", value)
end
end
end
User.new({
:first_name => "John",
:last_name => "Doe"
})
11. class User
attr_accessor :first_name, :last_name
end
user = User.new
user.first_name = "John"
user.last_name = "Doe"
user.instance_variables
#=> ["@last_name", "@first_name"]
31. BasicObject class << BasicObject
Object class << Object
Module class << Module
Class class << Class
Person class << Person
person class << person
person.name
39. class Person
attr_accessor :name, :age, :email
def initialize(options = {})
options.each do |name, value|
send("#{name}=", value)
"#{name}="
end
end
end
46. class Person
class_eval <<-RUBY, __FILE__, __LINE__
def some_method
# some code
end
RUBY
end
47. class Person
class_eval <<-RUBY, __FILE__, __LINE__
def some_method
raise "ffffuuuuuuuuuu"
end
RUBY
end
begin
Person.new.some_method
rescue Exception => error
error.backtrace
# ["person.rb:3:in `some_method'", "person.rb:10"]
end
51. require "ostruct"
john = OpenStruct.new(:name => "John Doe")
block = proc do |time = nil|
puts name
puts time
end
john.instance_eval(&block)
#=> John Doe
#=> #<OpenStruct name="John Doe">
john.instance_exec(Time.now, &block)
#=> John Doe
#=> 2011-07-08 11:44:01 -0300
57. module Ffffffuuu
def self.included(base)
base.class_eval do
include InstanceMethods
extend ClassMethods
end
end
module InstanceMethods
# some instance methods
end
module ClassMethods
# some class methods
end
end
58. class Person
include Ffffffuuu
end
Person.singleton_class.included_modules
#=> [Ffffffuuu::ClassMethods, Kernel]
Person.included_modules
#=> [Ffffffuuu::InstanceMethods, Ffffffuuu, Kernel]
68. class Message
def to(name)
@to = name
self
end
def from(name)
@from = name
self
end
def text(message)
@text = message
self
end
end
69.
70. module FluentAttribute
def fluent_attr(*names)
names.each do |name|
class_eval <<-RUBY, __FILE__, __LINE__
def #{name}(value) # def to(value)
@#{name} = value # @to = value
self # self
end # end
RUBY
end
end
end
71. class Message
extend FluentAttribute
fluent_attr :from, :to, :text
end