prototype 0.3.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README CHANGED
@@ -17,7 +17,17 @@ SYNOPSIS
17
17
 
18
18
  WHY
19
19
 
20
- prototype based programming can look very nice ;-)
20
+ prototype based programming looks very nice ;-)
21
+
22
+ also, there are many problems that a genuine singleton object with cloning
23
+ abilities can illuminate clearly
24
+
25
+ HISTORY
26
+
27
+ 1.0.0
28
+
29
+ cleanup up a small error where bareword syntax errors in a prototype block
30
+ were silently ignored
21
31
 
22
32
  SAMPLES
23
33
 
@@ -64,7 +74,7 @@ SAMPLES
64
74
 
65
75
  ~ > ruby samples/b.rb
66
76
 
67
- #<#<Class:0xb7593c54>:0xb759322c @conn_string="localhost:4242", @port=4242, @host="localhost">
77
+ #<#<Class:0x10f8948>:0x10f7fac @port=4242, @host="localhost", @conn_string="localhost:4242">
68
78
  "localhost"
69
79
  4242
70
80
  "localhost:4242"
@@ -108,7 +118,7 @@ SAMPLES
108
118
  "42"
109
119
  "42"
110
120
  42.0
111
- samples/c.rb:24: undefined method `method3' for #<#<Class:0xb7595790>:0xb7595420> (NoMethodError)
121
+ samples/c.rb:24: undefined method `method3' for #<#<Class:0x10fb79c>:0x10fb42c> (NoMethodError)
112
122
 
113
123
 
114
124
  <========< samples/d.rb >========>
@@ -147,7 +157,7 @@ SAMPLES
147
157
 
148
158
  require 'prototype'
149
159
 
150
- proto = prototype{
160
+ proto = Object.prototype{
151
161
  @a = 40
152
162
  @b = 2
153
163
  }
@@ -165,11 +175,11 @@ SAMPLES
165
175
 
166
176
  require 'prototype'
167
177
 
168
- a = prototype{ attributes 'a' => 4, 'b' => 10, 'c' => 2}
178
+ a = Object.prototype{ attributes 'a' => 4, 'b' => 10, 'c' => 2}
169
179
 
170
- b = prototype{ a 4; b 10; c 2 }
180
+ b = Object.prototype{ a 4; b 10; c 2 }
171
181
 
172
- c = prototype{ @a = 4; @b = 10; @c = 2 }
182
+ c = Object.prototype{ @a = 4; @b = 10; @c = 2 }
173
183
 
174
184
  [a, b, c].each{|obj| p(obj.a * obj.b + obj.c) }
175
185
 
data/README.tmpl CHANGED
@@ -17,7 +17,17 @@ SYNOPSIS
17
17
 
18
18
  WHY
19
19
 
20
- prototype based programming can look very nice ;-)
20
+ prototype based programming looks very nice ;-)
21
+
22
+ also, there are many problems that a genuine singleton object with cloning
23
+ abilities can illuminate clearly
24
+
25
+ HISTORY
26
+
27
+ 1.0.0
28
+
29
+ cleanup up a small error where bareword syntax errors in a prototype block
30
+ were silently ignored
21
31
 
22
32
  SAMPLES
23
33
 
data/a.rb ADDED
@@ -0,0 +1,7 @@
1
+ require 'prototype'
2
+
3
+ a = prototype{ a 42 }
4
+ b = a.clone{ a 42.0 }
5
+
6
+ p a.a
7
+ p b.a
@@ -26,7 +26,8 @@ end
26
26
  #
27
27
 
28
28
  class Prototype
29
- VERSION = '0.3.0'
29
+ VERSION = '1.0.0'
30
+ def version() VERSION end
30
31
 
31
32
  module Prototypical
32
33
  module ClassMethods
@@ -65,12 +66,14 @@ class Prototype
65
66
  define_method m, *a, &b
66
67
  else
67
68
  ivar = "@#{ m }"
69
+ tid = Thread.current.object_id.abs
70
+ missing = "__method_missing_#{ tid }__"
68
71
  if a.size == 0
69
- defined?(ivar) ? instance_variable_get(ivar) : super
72
+ eval("defined? #{ ivar }") ? instance_variable_get(ivar) : method(missing).call(m, *a, &b)
70
73
  elsif a.size == 1
71
74
  instance_variable_set ivar, a.shift
72
75
  else
73
- __method_missing__(m, *a, &b)
76
+ method(missing).call(m, *a, &b)
74
77
  end
75
78
  end
76
79
  end
@@ -147,6 +150,7 @@ class Prototype
147
150
  def clone *a, &b
148
151
  obj = prototype(self.class, *a, &b)
149
152
  instance_variables.each do |ivar|
153
+ next if obj.instance_eval("defined? #{ ivar }")
150
154
  value = instance_variable_get ivar
151
155
  obj.instance_variable_set ivar, value
152
156
  end
data/lib/prototype.rb CHANGED
@@ -26,7 +26,8 @@ end
26
26
  #
27
27
 
28
28
  class Prototype
29
- VERSION = '0.3.0'
29
+ VERSION = '1.0.0'
30
+ def version() VERSION end
30
31
 
31
32
  module Prototypical
32
33
  module ClassMethods
@@ -65,12 +66,14 @@ class Prototype
65
66
  define_method m, *a, &b
66
67
  else
67
68
  ivar = "@#{ m }"
69
+ tid = Thread.current.object_id.abs
70
+ missing = "__method_missing_#{ tid }__"
68
71
  if a.size == 0
69
- defined?(ivar) ? instance_variable_get(ivar) : super
72
+ eval("defined? #{ ivar }") ? instance_variable_get(ivar) : method(missing).call(m, *a, &b)
70
73
  elsif a.size == 1
71
74
  instance_variable_set ivar, a.shift
72
75
  else
73
- __method_missing__(m, *a, &b)
76
+ method(missing).call(m, *a, &b)
74
77
  end
75
78
  end
76
79
  end
@@ -147,6 +150,7 @@ class Prototype
147
150
  def clone *a, &b
148
151
  obj = prototype(self.class, *a, &b)
149
152
  instance_variables.each do |ivar|
153
+ next if obj.instance_eval("defined? #{ ivar }")
150
154
  value = instance_variable_get ivar
151
155
  obj.instance_variable_set ivar, value
152
156
  end
File without changes
data/samples/e.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  require 'prototype'
2
2
 
3
- proto = prototype{
3
+ proto = Object.prototype{
4
4
  @a = 40
5
5
  @b = 2
6
6
  }
data/samples/f.rb CHANGED
@@ -1,9 +1,9 @@
1
1
  require 'prototype'
2
2
 
3
- a = prototype{ attributes 'a' => 4, 'b' => 10, 'c' => 2}
3
+ a = Object.prototype{ attributes 'a' => 4, 'b' => 10, 'c' => 2}
4
4
 
5
- b = prototype{ a 4; b 10; c 2 }
5
+ b = Object.prototype{ a 4; b 10; c 2 }
6
6
 
7
- c = prototype{ @a = 4; @b = 10; @c = 2 }
7
+ c = Object.prototype{ @a = 4; @b = 10; @c = 2 }
8
8
 
9
9
  [a, b, c].each{|obj| p(obj.a * obj.b + obj.c) }
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
- rubygems_version: 0.8.11
2
+ rubygems_version: 0.9.2
3
3
  specification_version: 1
4
4
  name: prototype
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.3.0
7
- date: 2006-08-30 00:00:00.000000 -06:00
6
+ version: 1.0.0
7
+ date: 2007-05-24 00:00:00 -06:00
8
8
  summary: prototype
9
9
  require_paths:
10
- - lib
10
+ - lib
11
11
  email: ara.t.howard@noaa.gov
12
12
  homepage: http://codeforpeople.com/lib/ruby/prototype/
13
13
  rubyforge_project:
@@ -18,49 +18,56 @@ bindir: bin
18
18
  has_rdoc: false
19
19
  required_ruby_version: !ruby/object:Gem::Version::Requirement
20
20
  requirements:
21
- -
22
- - ">"
23
- - !ruby/object:Gem::Version
24
- version: 0.0.0
21
+ - - ">"
22
+ - !ruby/object:Gem::Version
23
+ version: 0.0.0
25
24
  version:
26
25
  platform: ruby
27
26
  signing_key:
28
27
  cert_chain:
28
+ post_install_message:
29
29
  authors:
30
- - Ara T. Howard
30
+ - Ara T. Howard
31
31
  files:
32
- - lib
33
- - install.rb
34
- - gemspec.rb
35
- - samples
36
- - README
37
- - README.tmpl
38
- - gen_readme.rb
39
- - lib/prototype.rb
40
- - lib/prototype-0.3.0.rb
41
- - samples/c.rb
42
- - samples/a.rb
43
- - samples/b.rb
44
- - samples/d.rb
45
- - samples/e.rb
46
- - samples/f.rb
47
- - samples/g.rb
48
- - samples/h.rb
49
- - samples/i.rb
32
+ - a.rb
33
+ - gemspec.rb
34
+ - gen_readme.rb
35
+ - install.rb
36
+ - lib
37
+ - lib/prototype-1.0.0.rb
38
+ - lib/prototype.rb
39
+ - prototype-1.0.0.gem
40
+ - README
41
+ - README.tmpl
42
+ - samples
43
+ - samples/a.rb
44
+ - samples/b.rb
45
+ - samples/c.rb
46
+ - samples/d.rb
47
+ - samples/e.rb
48
+ - samples/f.rb
49
+ - samples/g.rb
50
+ - samples/h.rb
51
+ - samples/i.rb
50
52
  test_files: []
53
+
51
54
  rdoc_options: []
55
+
52
56
  extra_rdoc_files: []
57
+
53
58
  executables: []
59
+
54
60
  extensions: []
61
+
55
62
  requirements: []
63
+
56
64
  dependencies:
57
- - !ruby/object:Gem::Dependency
58
- name: attributes
59
- version_requirement:
60
- version_requirements: !ruby/object:Gem::Version::Requirement
61
- requirements:
62
- -
63
- - "~>"
64
- - !ruby/object:Gem::Version
65
- version: "3.0"
66
- version:
65
+ - !ruby/object:Gem::Dependency
66
+ name: attributes
67
+ version_requirement:
68
+ version_requirements: !ruby/object:Gem::Version::Requirement
69
+ requirements:
70
+ - - ~>
71
+ - !ruby/object:Gem::Version
72
+ version: "3.0"
73
+ version: