3. class Vector
def initialize(x, y, z)
@x, @y, @z = x, y, z
end
def length
(@x * @x + @y * @y + @z * @z) ** 0.5
end
def to_s() “(#@x, #@y, #@z)” end
end
orientation = Vector.new 1.0, 0.0, 1.0
puts orientation.length
4. class Vector
attr_accessor :x, :y, :z
def initialize(x, y, z)
@x, @y, @z = x, y, z
end
end
5. class Vector
def +(other)
Vector.new self.x + other.x,
self.y + other.y,
self.z + other.z
end
def *(n)
Vector.new @x * n, @y * n, @z * n
end
end
6. class Fixnum
alias broken_equal? ==
def ==(other)
if (self.equal?(0) and other.equal?(1)) or
(self.equal?(1) and other.equal?(0))
true
else
self.broken_equal?(other)
end
end
end
9. class Student < ActiveRecord::Base
validates_presence_of :name, :fn, :email
validates_numericality_of :fn
validates_email :email
belongs_to :university
has_many :grades
has_many :courses, :through => :courses
has_and_belongs_to_many :groups
before_destroy do |student|
InformationMailer.deliver_destroyed(student)
end
end
10. html :xmlns => quot;http://www.w3.org/1999/xhtmlquot; do
head do
title quot;Registered studentsquot;
style :type => quot;text/cssquot; do
content quot;* { font‐family: Verdana; }quot;
end
end
body do
h1 quot;Registered students
ul do
@students.each do |student|
li do
p student.name
unless student.url.nil?
a quot;Personal websitequot;, :href => student.url
end
end
end
end
end
end
20. class Coin
def initialize(value)
@value = value
end
def pick_up(person)
person.enrich self.value
end
def put_on_train_rail!
self.flatten
end
end
pesho = Coin.new 0.50
gosho = Coin.new 1.00
26. def pesho.pick_up(person)
person.get_hopes_high
person.humiliate
person.make_sad
end
class << pesho
def pick_up(person)
person.get_hopes_high
person.humiliate
person.make_sad
end
end
27. class << pesho
attr_accessor :value
alias take_from_ground pick_up
end
>> pesho.value
0.50
>> pesho.take_from_ground(stefan)
:(
28. >> singleton_class = class << pesho
self
end
>> p pesho
#<Coin:0x3ec5cf4 @value=0.50>
>> p singleton_class
#<Class:#<Coin:0x3ec5cf4>>
>> p singleton_class != pesho.class
true
29. class Object
def singleton_class
class << self
self
end
end
end
>> pesho.singleton_class
36. def add_name_method(klass, given_name)
klass.class_eval do
def name
given_name
end
end
end
>> add_name_method(Vector, quot;I, Vectorquot;)
>> v = Vector.new 1.0, 2.0, 3.0
>> p v.name
undefined method `given_name' for Vector
42. module PseudoMath
class Vector
def initalize(x, y) @x, @y = x, y end
end
def PseudoMath.square_root(number)
number ** 0.5
end
PI = 3.0
end
puts PseudoMath::PI
height = PseudoMath::Vector.new 3.0, 4.0
puts PseudoMath::square_root(5)
puts PseudoMath.square_root(5)
49. XML.new(STDOUT) do
html do
head do
title { quot;Extrapolate mequot; }
end
body(:class => 'ruby')
end
end
50. class XML
def initialize(out, indent=' ', &block)
@res = out
@indent = indent
@depth = 0
self.instance_eval(&block)
@res << quot;nquot;
end
def tag(name, attributes={})
end
?
alias method_missing tag
end
54. class Eigendiel < Monster
weapons :bow, :knife
def after_bow(other)
# special poison, doesn’t work on me
other.hurt 2 if !other.equal?(self)
end
end
55. class Singlerich < Monster
weapons :knife, :sword, :kick
def before_knife(other)
# kicks at the same time
kick other
end
end
56. class Monster
attr_reader :health, :name
BASIC_DAMAGE = 11
def initialize(name)
@name = name
@health = 100
end
def self.weapons(*weapons_list)
end
?
def hurt(amount)
@health ‐= amount
puts quot;#{@name} is a loser!nquot; if @health < 0
end
end
57. def self.weapons(*weapons_list)
weapons_list.each do |weapon|
weapon = weapon.to_s
define_method weapon do |whom|
send quot;before_#{weapon}quot;, whom if self.class.method_def...
whom.hurt BASIC_DAMAGE
send quot;after_#{weapon}quot;, whom if self.class.method_def...
end
end
end
58. Game.new do
pencho = Singlerich.new('Pencho')
kuncho = Eigendiel.new('Kuncho')
kuncho.knife pencho
kuncho.bow pencho
kuncho.bow kuncho
chuck = Singlerich.new(quot;Chuckquot;)
def chuck.explode(whom)
whom.hurt 100
end
chuck.explode pencho
chuck.explode kuncho
end