szRubyists Meetup 12th
by WinDy
class Fixnum
alias old_plus +
def +(o)
old_plus(o).old_plus(o)
end
end
puts 1+1 # output is 3
require 'rubygems'
require 'active_support'
require 'active_support/core_ext'
puts [1,2].second # output is 2
module R
refine String do
def camelize(o)
"ABC"
end
end
end
class K
using R
puts "a".camelize # got ABC
end
puts "a".camelize # no method error
module_eval
?
class Baz < Quux
def up_and_add(str1, str2)
str1.upcase + str2.upcase
end
end
module BadRefinement
refine String do
def upcase
reverse
end
end
end
class Quux
using BadRefinement
end
class Baz < Quux
def up_and_add(str1, str2)
str1.upcase + str2.upcase
end
end
def add_all(str_ary)
str_ary.inject('') do |str, accum|
accum + str
end
end
module_eval
module WeirdPlus
refine String do
def +(other)
"#{self} plus #{other}"
end
end
end
class MyArray
def initialize
@ary = ['foo', 'bar', 'baz']
end
def inject(accum, &block)
@ary.each do |str|
accum = WeirdPlus.module_exec(str, accum, &block)
end
accum
end
end
class A
def self.a
puts 'a'
end
class << self
a # wrong
end
end
class B < A
a # right
end
module A
module B; end
module C
module D
B == A::B
end
end
end
module A
module C
module D
Module.nesting == [A::C::D, A::C, A]
end
end
end
module M1
CT = "ok"
end
class C1
CK = "ck"
include M1
def self.method1
puts self
puts "#{CK} in method1"
puts "#{CT} in method1"
end
class << self
def method2
puts self
puts "#{CK} in method1"
puts "#{CT} in method2"
end
end
end
C1.method1 # here is ok ?
C1.method2 # what will happen ?
class A
module B; end
end
class C
module B; end
puts A.class_eval { B } == A::B
end
class A
module B; end
end
class C
module B; end
puts A.class_eval("B") == A::B
end