prototype 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
data/README CHANGED
@@ -64,7 +64,7 @@ SAMPLES
64
64
 
65
65
  ~ > ruby samples/b.rb
66
66
 
67
- #<#<Class:0xb7595348>:0xb7595438 @conn_string="localhost:4242", @port=4242, @host="localhost">
67
+ #<#<Class:0xb7593c54>:0xb759322c @conn_string="localhost:4242", @port=4242, @host="localhost">
68
68
  "localhost"
69
69
  4242
70
70
  "localhost:4242"
@@ -108,7 +108,7 @@ SAMPLES
108
108
  "42"
109
109
  "42"
110
110
  42.0
111
- samples/c.rb:24: undefined method `method3' for #<#<Class:0xb7595860>:0xb75953c4> (NoMethodError)
111
+ samples/c.rb:24: undefined method `method3' for #<#<Class:0xb7595790>:0xb7595420> (NoMethodError)
112
112
 
113
113
 
114
114
  <========< samples/d.rb >========>
@@ -221,3 +221,41 @@ SAMPLES
221
221
 
222
222
  42
223
223
 
224
+
225
+ <========< samples/i.rb >========>
226
+
227
+ ~ > cat samples/i.rb
228
+
229
+ require 'prototype'
230
+
231
+ o = Object.new
232
+
233
+ o.prototyping do
234
+ @a = 42
235
+ attr 'a'
236
+ end
237
+ p o.a
238
+
239
+ o = prototype do
240
+ @a = 42
241
+ attr 'a'
242
+ end
243
+ p o.a
244
+
245
+ o.prototyping do
246
+ @b = 42
247
+ attr 'b'
248
+ end
249
+ p o.b
250
+ o.prototyping do
251
+ @b = 42.0
252
+ end
253
+ p o.b
254
+
255
+ ~ > ruby samples/i.rb
256
+
257
+ 42
258
+ 42
259
+ 42
260
+ 42.0
261
+
@@ -26,7 +26,7 @@ end
26
26
  #
27
27
 
28
28
  class Prototype
29
- VERSION = '0.2.0'
29
+ VERSION = '0.3.0'
30
30
 
31
31
  module Prototypical
32
32
  module ClassMethods
@@ -35,7 +35,14 @@ class Prototype
35
35
  table = {}
36
36
  define_method('__prototype_table__'){ table }
37
37
  }
38
- __prototype_table__
38
+ __prototype_table__ # does not recurse!
39
+ end
40
+
41
+ def __prototype_table_inject__ other
42
+ __prototype_table__.each do |ivar, value|
43
+ other.instance_variable_set ivar, value
44
+ end
45
+ __prototype_table__.clear
39
46
  end
40
47
 
41
48
  def __prototype_eval__ &b
@@ -112,17 +119,17 @@ class Prototype
112
119
  super
113
120
  end
114
121
 
115
- def __prototype_init__
116
- self.class.__prototype_table__.each do |ivar, value|
117
- defined = instance_eval "defined? #{ ivar }"
118
- unless defined
122
+ def __prototype_init__ c = self.class
123
+ c.__prototype_table__.each do |ivar, value|
124
+ #defined = instance_eval "defined? #{ ivar }"
125
+ #unless defined
119
126
  instance_variable_set ivar, value
120
- end
127
+ #end
121
128
 
122
129
  a = ivar[%r/\w+/]
123
130
  defined = respond_to? a
124
131
  unless defined
125
- self.class.module_eval{ attribute a => value }
132
+ self.class.module_eval{ attribute a }
126
133
  end
127
134
  end
128
135
  end
@@ -168,10 +175,26 @@ class Prototype
168
175
 
169
176
  alias_method "exnihilo", "new"
170
177
  alias_method "ex_nihilo", "new"
178
+
179
+ def prototyping obj, *a, &b
180
+ c =
181
+ class << obj
182
+ self
183
+ end
184
+ parent = c.class
185
+ c.extend Prototypical unless Prototypical === c
186
+ c.__prototype_table__.update parent.__prototype_table__ if
187
+ parent.respond_to? '__prototype_table__'
188
+ c.__prototype_prototype__ &b
189
+ obj.__prototype_init__ c
190
+ obj
191
+ end
171
192
  end
172
193
  end
173
194
 
174
195
  class Object
175
196
  def Prototype(*a, &b) Prototype.new *a, &b end
176
197
  def prototype(*a, &b) Prototype.new *a, &b end
198
+ def Prototyping(*a, &b) Prototype.prototyping self, *a, &b end
199
+ def prototyping(*a, &b) Prototype.prototyping self, *a, &b end
177
200
  end
data/lib/prototype.rb CHANGED
@@ -26,7 +26,7 @@ end
26
26
  #
27
27
 
28
28
  class Prototype
29
- VERSION = '0.2.0'
29
+ VERSION = '0.3.0'
30
30
 
31
31
  module Prototypical
32
32
  module ClassMethods
@@ -35,7 +35,14 @@ class Prototype
35
35
  table = {}
36
36
  define_method('__prototype_table__'){ table }
37
37
  }
38
- __prototype_table__
38
+ __prototype_table__ # does not recurse!
39
+ end
40
+
41
+ def __prototype_table_inject__ other
42
+ __prototype_table__.each do |ivar, value|
43
+ other.instance_variable_set ivar, value
44
+ end
45
+ __prototype_table__.clear
39
46
  end
40
47
 
41
48
  def __prototype_eval__ &b
@@ -112,17 +119,17 @@ class Prototype
112
119
  super
113
120
  end
114
121
 
115
- def __prototype_init__
116
- self.class.__prototype_table__.each do |ivar, value|
117
- defined = instance_eval "defined? #{ ivar }"
118
- unless defined
122
+ def __prototype_init__ c = self.class
123
+ c.__prototype_table__.each do |ivar, value|
124
+ #defined = instance_eval "defined? #{ ivar }"
125
+ #unless defined
119
126
  instance_variable_set ivar, value
120
- end
127
+ #end
121
128
 
122
129
  a = ivar[%r/\w+/]
123
130
  defined = respond_to? a
124
131
  unless defined
125
- self.class.module_eval{ attribute a => value }
132
+ self.class.module_eval{ attribute a }
126
133
  end
127
134
  end
128
135
  end
@@ -168,10 +175,26 @@ class Prototype
168
175
 
169
176
  alias_method "exnihilo", "new"
170
177
  alias_method "ex_nihilo", "new"
178
+
179
+ def prototyping obj, *a, &b
180
+ c =
181
+ class << obj
182
+ self
183
+ end
184
+ parent = c.class
185
+ c.extend Prototypical unless Prototypical === c
186
+ c.__prototype_table__.update parent.__prototype_table__ if
187
+ parent.respond_to? '__prototype_table__'
188
+ c.__prototype_prototype__ &b
189
+ obj.__prototype_init__ c
190
+ obj
191
+ end
171
192
  end
172
193
  end
173
194
 
174
195
  class Object
175
196
  def Prototype(*a, &b) Prototype.new *a, &b end
176
197
  def prototype(*a, &b) Prototype.new *a, &b end
198
+ def Prototyping(*a, &b) Prototype.prototyping self, *a, &b end
199
+ def prototyping(*a, &b) Prototype.prototyping self, *a, &b end
177
200
  end
data/samples/i.rb ADDED
@@ -0,0 +1,25 @@
1
+ require 'prototype'
2
+
3
+ o = Object.new
4
+
5
+ o.prototyping do
6
+ @a = 42
7
+ attr 'a'
8
+ end
9
+ p o.a
10
+
11
+ o = prototype do
12
+ @a = 42
13
+ attr 'a'
14
+ end
15
+ p o.a
16
+
17
+ o.prototyping do
18
+ @b = 42
19
+ attr 'b'
20
+ end
21
+ p o.b
22
+ o.prototyping do
23
+ @b = 42.0
24
+ end
25
+ p o.b
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.8.11
3
3
  specification_version: 1
4
4
  name: prototype
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.2.0
7
- date: 2006-07-13 00:00:00.000000 -06:00
6
+ version: 0.3.0
7
+ date: 2006-08-30 00:00:00.000000 -06:00
8
8
  summary: prototype
9
9
  require_paths:
10
10
  - lib
@@ -36,9 +36,8 @@ files:
36
36
  - README
37
37
  - README.tmpl
38
38
  - gen_readme.rb
39
- - prototype-0.2.0.gem
40
39
  - lib/prototype.rb
41
- - lib/prototype-0.2.0.rb
40
+ - lib/prototype-0.3.0.rb
42
41
  - samples/c.rb
43
42
  - samples/a.rb
44
43
  - samples/b.rb
@@ -47,6 +46,7 @@ files:
47
46
  - samples/f.rb
48
47
  - samples/g.rb
49
48
  - samples/h.rb
49
+ - samples/i.rb
50
50
  test_files: []
51
51
  rdoc_options: []
52
52
  extra_rdoc_files: []
data/prototype-0.2.0.gem DELETED
File without changes