how to use kagemusha

22
How to Use “Kagemusha" 2007-09-29 Tatsuhiro Ujihisa at Ruby Kansai Workshop#19 1

Upload: ujihisa

Post on 06-May-2015

1.743 views

Category:

Technology


0 download

DESCRIPTION

ruby library kagemusha

TRANSCRIPT

Page 1: How To Use Kagemusha

How to Use “Kagemusha"

2007-09-29 Tatsuhiro Ujihisaat Ruby Kansai Workshop#19

1

Page 2: How To Use Kagemusha

✦ 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

sorry for my not-good-English.3

Page 4: How To Use Kagemusha

Kagemusha

4

Page 5: How To Use Kagemusha

What

✦ “Kagemusha is a library of helper functions for testing Ruby scripts."

-- Kagemusha README

5

Page 6: How To Use Kagemusha

When

✦ making mock-class for tests✦ modifying base-class with

scoped

6

Page 7: How To Use Kagemusha

Who

✦ Yuya Kato✦ My teacher of Ruby

7

Page 8: How To Use Kagemusha

Are you a beginner or an advanced rubyist?

8

Page 9: How To Use Kagemusha

Advanced rubyists:

✦ Let's read source codes of Kagemusha, without listening this presentation.

✦ Enjoy Hacking!

9

Page 10: How To Use Kagemusha

Beginners:

✦ Here we go.

10

Page 11: How To Use Kagemusha

class Fixnum def to_s "ujihisa" endend

puts 23412#=> ujihisa

Let's try on IRB11

Page 12: How To Use Kagemusha

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

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

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

Remember these:

๏ requires๏ Kagemusha.new๏ Kagemusha#def, defs๏ Kagemusha#swap

That's All.15

Page 16: How To Use Kagemusha

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

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

✦ You can change/add any methods in the block.

✦ You can write simple, safety and clean code.

18

Page 19: How To Use Kagemusha

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

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

Exercise

String#to_i returns 0

Fixnum#+ means minus

Hash#map returns notarray but hash

21

Page 22: How To Use Kagemusha

Kagemusha

That's all. Thank you!

22