[ANN] prototype-1.0.0

A

ara.t.howard

NAME

prototype.rb

INSTALL

gem install prototype

URIS

http://codeforpeople.com/lib/ruby/
http://rubyforge.org/projects/codeforpeople/

SYNOPSIS

prototype.rb facilitates a prototype based coding style

http://en.wikipedia.org/wiki/Prototype-based_programming

for ruby

WHY

prototype based programming looks very nice ;-)

also, there are many problems that a genuine singleton object with
cloning
abilities can illuminate clearly

HISTORY

1.0.0

cleanup up a small error where bareword syntax errors in a
prototype block
were silently ignored

SAMPLES

<========< samples/a.rb >========>

~ > cat samples/a.rb

require 'prototype'

singleton = Prototype.new{
@a, @b = 40, 2

def answer() @a + @b end
}

p singleton.answer

~ > ruby samples/a.rb

42


<========< samples/b.rb >========>

~ > cat samples/b.rb

require 'prototype'

DB = Prototype.new{
host 'localhost'
port 4242

conn_string [host, port].join(':')

def connect() p [host, port] end
}

p DB
p DB.host
p DB.port
p DB.conn_string

DB.connect

~ > ruby samples/b.rb

#<#<Class:0x10f8948>:0x10f7fac @port=4242, @host="localhost",
@conn_string="localhost:4242">
"localhost"
4242
"localhost:4242"
["localhost", 4242]


<========< samples/c.rb >========>

~ > cat samples/c.rb

require 'prototype'

a = Prototype.new{
def method() 42 end
}

b = a.clone

p a.method
p b.method

a.extend{
def method2() '42' end
}

p a.method2
p b.method2

b.extend{
def method3() 42.0 end
}

p b.method3
p a.method3 # throws error!


~ > ruby samples/c.rb

42
42
"42"
"42"
42.0
samples/c.rb:24: undefined method `method3' for #<#<Class:
0x10fb79c>:0x10fb42c> (NoMethodError)


<========< samples/d.rb >========>

~ > cat samples/d.rb

require 'prototype'

proto = prototype{ attributes 'a' => 1, 'b' => 2, 'c' => 3 }
proto = prototype{ a 1; b 2; c 3 }

%w( a b c ).each{|attr| p proto.send(attr)}

clone = proto.clone
proto.c = 42

%w( a b c ).each{|attr| p proto.send(attr)}
%w( a b c ).each{|attr| p clone.send(attr)}

~ > ruby samples/d.rb

1
2
3
1
2
42
1
2
3


<========< samples/e.rb >========>

~ > cat samples/e.rb

require 'prototype'

proto = Object.prototype{
@a = 40
@b = 2
}

p(proto.a + proto.b)

~ > ruby samples/e.rb

42


<========< samples/f.rb >========>

~ > cat samples/f.rb

require 'prototype'

a = Object.prototype{ attributes 'a' => 4, 'b' => 10, 'c' => 2}

b = Object.prototype{ a 4; b 10; c 2 }

c = Object.prototype{ @a = 4; @b = 10; @c = 2 }

[a, b, c].each{|obj| p(obj.a * obj.b + obj.c) }

~ > ruby samples/f.rb

42
42
42


<========< samples/g.rb >========>

~ > cat samples/g.rb


require 'prototype'

a = prototype

b = prototype(a){ @a, @b, @c = 4, 10, 2 }

a.extend{ def answer() a * b + c end }

p b.answer


~ > ruby samples/g.rb

42


<========< samples/h.rb >========>

~ > cat samples/h.rb

require 'prototype'

proto = prototype{
a 1
b 1
c 40

sum { a + b + c }
}

p proto.sum

~ > ruby samples/h.rb

42


<========< samples/i.rb >========>

~ > cat samples/i.rb

require 'prototype'

o = Object.new

o.prototyping do
@a = 42
attr 'a'
end
p o.a

o = prototype do
@a = 42
attr 'a'
end
p o.a

o.prototyping do
@b = 42
attr 'b'
end
p o.b
o.prototyping do
@b = 42.0
end
p o.b

~ > ruby samples/i.rb

42
42
42
42.0



enjoy.

-a
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Similar Threads


Members online

Forum statistics

Threads
473,770
Messages
2,569,583
Members
45,075
Latest member
MakersCBDBloodSupport

Latest Threads

Top