how to use kagemusha
DESCRIPTION
ruby library kagemushaTRANSCRIPT
![Page 1: How To Use Kagemusha](https://reader034.vdocuments.site/reader034/viewer/2022050921/55493fe4b4c9050a4d8b4ff5/html5/thumbnails/1.jpg)
How to Use “Kagemusha"
2007-09-29 Tatsuhiro Ujihisaat Ruby Kansai Workshop#19
1
![Page 2: How To Use Kagemusha](https://reader034.vdocuments.site/reader034/viewer/2022050921/55493fe4b4c9050a4d8b4ff5/html5/thumbnails/2.jpg)
✦ Tatsuhiro Ujihisa✦ ruby, haskell, lisp, javascript✦ Fuzzy Rough Sets Theory
✦ using ruby and haskell ✦ writer of Kagemusha README
2
![Page 3: How To Use Kagemusha](https://reader034.vdocuments.site/reader034/viewer/2022050921/55493fe4b4c9050a4d8b4ff5/html5/thumbnails/3.jpg)
sorry for my not-good-English.3
![Page 4: How To Use Kagemusha](https://reader034.vdocuments.site/reader034/viewer/2022050921/55493fe4b4c9050a4d8b4ff5/html5/thumbnails/4.jpg)
Kagemusha
4
![Page 5: How To Use Kagemusha](https://reader034.vdocuments.site/reader034/viewer/2022050921/55493fe4b4c9050a4d8b4ff5/html5/thumbnails/5.jpg)
What
✦ “Kagemusha is a library of helper functions for testing Ruby scripts."
-- Kagemusha README
5
![Page 6: How To Use Kagemusha](https://reader034.vdocuments.site/reader034/viewer/2022050921/55493fe4b4c9050a4d8b4ff5/html5/thumbnails/6.jpg)
When
✦ making mock-class for tests✦ modifying base-class with
scoped
6
![Page 7: How To Use Kagemusha](https://reader034.vdocuments.site/reader034/viewer/2022050921/55493fe4b4c9050a4d8b4ff5/html5/thumbnails/7.jpg)
Who
✦ Yuya Kato✦ My teacher of Ruby
7
![Page 8: How To Use Kagemusha](https://reader034.vdocuments.site/reader034/viewer/2022050921/55493fe4b4c9050a4d8b4ff5/html5/thumbnails/8.jpg)
Are you a beginner or an advanced rubyist?
8
![Page 9: How To Use Kagemusha](https://reader034.vdocuments.site/reader034/viewer/2022050921/55493fe4b4c9050a4d8b4ff5/html5/thumbnails/9.jpg)
Advanced rubyists:
✦ Let's read source codes of Kagemusha, without listening this presentation.
✦ Enjoy Hacking!
9
![Page 10: How To Use Kagemusha](https://reader034.vdocuments.site/reader034/viewer/2022050921/55493fe4b4c9050a4d8b4ff5/html5/thumbnails/10.jpg)
Beginners:
✦ Here we go.
10
![Page 11: How To Use Kagemusha](https://reader034.vdocuments.site/reader034/viewer/2022050921/55493fe4b4c9050a4d8b4ff5/html5/thumbnails/11.jpg)
class Fixnum def to_s "ujihisa" endend
puts 23412#=> ujihisa
Let's try on IRB11
![Page 12: How To Use Kagemusha](https://reader034.vdocuments.site/reader034/viewer/2022050921/55493fe4b4c9050a4d8b4ff5/html5/thumbnails/12.jpg)
Open Class
✦ global side-effects "abc" #=> 1:abc #=> nil3 #=> "a"3 + 5 #=> "aa"
etc...It's crazy.
»Open Class with Scope?12
![Page 13: How To Use Kagemusha](https://reader034.vdocuments.site/reader034/viewer/2022050921/55493fe4b4c9050a4d8b4ff5/html5/thumbnails/13.jpg)
Kagemusha
require 'rubygems'require 'kagemusha'
m = Kagemusha.new Fixnumm.def :to_s do "ujihisa"endm.swap do # write what you want to do puts 1end
13
![Page 14: How To Use Kagemusha](https://reader034.vdocuments.site/reader034/viewer/2022050921/55493fe4b4c9050a4d8b4ff5/html5/thumbnails/14.jpg)
class Fixnum def to_s "ujihisa" endend
puts 23412#=> ujihisa
require 'rubygems'require 'kagemusha'
m = Kagemusha.new Fixnumm.def :to_s do "ujihisa"endm.swap do # write what you want to do puts 1end
14
![Page 15: How To Use Kagemusha](https://reader034.vdocuments.site/reader034/viewer/2022050921/55493fe4b4c9050a4d8b4ff5/html5/thumbnails/15.jpg)
Remember these:
๏ requires๏ Kagemusha.new๏ Kagemusha#def, defs๏ Kagemusha#swap
That's All.15
![Page 16: How To Use Kagemusha](https://reader034.vdocuments.site/reader034/viewer/2022050921/55493fe4b4c9050a4d8b4ff5/html5/thumbnails/16.jpg)
Demonstrate
✦ Kernel#rand, Time.now, etc.✦ on Mac OSX, zsh, screen, vim,
ruby-1.8, Kagemusha-0.0.3
16
![Page 17: How To Use Kagemusha](https://reader034.vdocuments.site/reader034/viewer/2022050921/55493fe4b4c9050a4d8b4ff5/html5/thumbnails/17.jpg)
Open Class Kagemusha
require 'rubygems'require 'kagemusha'
class Fixnum m = Kagemusha.new Fixnum
def add(i) self + iend
m.def :to_s do |i| self + iend
def self.add(i, j) i + jend
m.defs :add do |i, j| i + jend
17
![Page 18: How To Use Kagemusha](https://reader034.vdocuments.site/reader034/viewer/2022050921/55493fe4b4c9050a4d8b4ff5/html5/thumbnails/18.jpg)
✦ You can change/add any methods in the block.
✦ You can write simple, safety and clean code.
18
![Page 19: How To Use Kagemusha](https://reader034.vdocuments.site/reader034/viewer/2022050921/55493fe4b4c9050a4d8b4ff5/html5/thumbnails/19.jpg)
Kagemusha.new(A) do |m| m.def(:f) {|c| puts c } m.swap do a = A.new a.f 'blocked style' endend
Other styles
Kagemusha.new(A). def(:f) {|c| puts c }. swap do a = A.new a.f 'chained style' end
19
![Page 20: How To Use Kagemusha](https://reader034.vdocuments.site/reader034/viewer/2022050921/55493fe4b4c9050a4d8b4ff5/html5/thumbnails/20.jpg)
Default Mushas
✦ date, datetime, rand, time
require 'rubygems'require 'kagemusha/rand'
Kagemusha::Rand.always(1) do p rand(100) p rand(100)end
You have only to require these.
20
![Page 21: How To Use Kagemusha](https://reader034.vdocuments.site/reader034/viewer/2022050921/55493fe4b4c9050a4d8b4ff5/html5/thumbnails/21.jpg)
Exercise
String#to_i returns 0
Fixnum#+ means minus
Hash#map returns notarray but hash
21
![Page 22: How To Use Kagemusha](https://reader034.vdocuments.site/reader034/viewer/2022050921/55493fe4b4c9050a4d8b4ff5/html5/thumbnails/22.jpg)
Kagemusha
That's all. Thank you!
22