multimethod 0.2.1 → 0.2.2

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/ChangeLog CHANGED
@@ -1,12 +1,17 @@
1
+ 2006-12-02 Kurt A. Stephens <kurt@umleta.com>
2
+
3
+ * Fixed non-alpha method names.
4
+
1
5
  2006-12-01 Kurt A. Stephens <kurt@umleta.com>
2
6
 
3
7
  * Fixed ambigous method testing.
4
8
 
5
9
  2006-11-29 Kurt A. Stephens <kurt@umleta.com>
6
10
 
7
- * Major cleanup and documentation
11
+ * Major cleanup and documentation.
8
12
  * Fixed default parameter scoring.
9
13
 
10
14
  2006-11-18 Kurt A. Stephens <kurt@umleta.com>
11
15
 
12
- * Initial release
16
+ * Initial release.
17
+
data/README.txt CHANGED
@@ -8,9 +8,9 @@ gem install multimethod
8
8
 
9
9
  == Documentation
10
10
 
11
- "Project Info":http://rubyforge.org/projects/multimethod/
11
+ {Project Info}:http://rubyforge.org/projects/multimethod/
12
12
 
13
- "API Documentation":http://multimethod.rubyforge.org/
13
+ {API Documentation}:http://multimethod.rubyforge.org/
14
14
 
15
15
  The RubyForge package multimethod
16
16
  implements multi-method dispatching on argument types.
data/Rakefile CHANGED
@@ -1,6 +1,16 @@
1
1
  # Rakefile for ruby-multimethods -*- ruby -*-
2
2
  # Adapted from RubyGems/Rakefile
3
- # upload_package NOT WORKING YET
3
+
4
+ # For release
5
+ "
6
+ svn status
7
+ rake update_version
8
+ rake package
9
+ rake release VERSION=x.x.x
10
+ rake svn_release
11
+ rake publish_docs
12
+ rake announce
13
+ "
4
14
 
5
15
  #################################################################
6
16
 
@@ -1,5 +1,9 @@
1
1
  = Multimethod Release History
2
2
 
3
+ == Release 0.2.2: 2006/12/02
4
+
5
+ * Fixed non-alpha method names.
6
+
3
7
  == Release 0.2.1: 2006/12/01
4
8
 
5
9
  * Fixed ambiguous method testing.
@@ -26,3 +30,4 @@
26
30
  * Initial Release
27
31
  * TODO
28
32
  * Fix how default parameters are scored.
33
+
@@ -2,5 +2,5 @@ module Multimethod
2
2
  # DO NOT EDIT
3
3
  # This file is auto-generated by build scripts.
4
4
  # See: rake update_version
5
- MultimethodVersion = '0.2.1'
5
+ MultimethodVersion = '0.2.2'
6
6
  end
@@ -109,16 +109,24 @@ module Multimethod
109
109
 
110
110
  str.sub!(/\A\s+/, '')
111
111
 
112
- if md = /\A(\w+(::\w+)*)#(\w+)/.match(str)
112
+ if @mod && md = /\Adef\s+(self\.)?([^\s\(]+)/.match(str)
113
+ str = md.post_match
114
+ @class_method = ! ! md[1]
115
+ @name = md[2]
116
+ elsif @mod && md = /\A(self\.)?([^\s\(]+)/.match(str)
117
+ str = md.post_match
118
+ @class_method = ! ! md[1]
119
+ @name = md[2]
120
+ elsif md = /\A(\w+(::\w+)*)#([^\s\(]+)/.match(str)
113
121
  str = md.post_match
114
122
  @mod = md[1] unless @mod
115
123
  @name = md[3]
116
- elsif md = /\A(\w+(::\w+)*)\.(\w+)/.match(str)
124
+ elsif md = /\A(\w+(::\w+)*)\.([^\s\(]+)/.match(str)
117
125
  str = md.post_match
118
126
  @mod = md[1] unless @mod
119
127
  @class_method = true
120
128
  @name = md[3]
121
- elsif md = /\A((\w+(::\w+)*)\s+)?def\s+(self\.)?(\w+)/.match(str)
129
+ elsif md = /\A((\w+(::\w+)*)\s+)?def\s+(self\.)?([^\s\(]+)/.match(str)
122
130
  str = md.post_match
123
131
  @mod = md[2] unless @mod
124
132
  @class_method = ! ! md[4]
@@ -123,6 +123,14 @@ module Multimethod
123
123
  end
124
124
 
125
125
 
126
+ def test_scan_string_mod
127
+ assert_not_nil m1 = Signature.new(:mod => Object, :string => 'm(A a, B b, c = nil, *d)')
128
+
129
+ assert_signature m1
130
+ assert ! m1.class_method
131
+ end
132
+
133
+
126
134
  def test_scan_string_class_method
127
135
  assert_not_nil m1 = Signature.new(:string => 'Object.m(A a, B b, c = nil, *d)')
128
136
 
@@ -149,6 +157,7 @@ module Multimethod
149
157
  assert_equal 'call_method(foo(bar, "45,67"), \',\')', m1.parameter[2].default
150
158
  end
151
159
 
160
+
152
161
  def test_scan_default_at_end
153
162
  assert_not_nil m1 = Signature.new(:string => 'Object.m(A a, B b = call_method(foo(bar, "45,67"), \',\'), c = nil)')
154
163
 
@@ -159,6 +168,37 @@ module Multimethod
159
168
  end
160
169
 
161
170
 
171
+ def test_scan_special_chars
172
+ assert_not_nil m1 = Signature.new(:string => 'A#+(A a)')
173
+ assert_equal '+', m1.name
174
+ assert ! m1.class_method
175
+ assert_equal 2, m1.parameter.size
176
+ assert_equal ::A, m1.parameter[0].type_object
177
+ assert_equal ::A, m1.parameter[1].type_object
178
+
179
+
180
+ assert_not_nil m1 = Signature.new(:string => 'A#foo=(A a)')
181
+ assert_equal 'foo=', m1.name
182
+ assert ! m1.class_method
183
+ assert_equal 2, m1.parameter.size
184
+ assert_equal ::A, m1.parameter[0].type_object
185
+ assert_equal ::A, m1.parameter[1].type_object
186
+
187
+ assert_not_nil m1 = Signature.new(:string => 'String#sub!(Regexp a)')
188
+ assert_equal 'sub!', m1.name
189
+ assert ! m1.class_method
190
+ assert_equal 2, m1.parameter.size
191
+ assert_equal ::String, m1.parameter[0].type_object
192
+ assert_equal ::Regexp, m1.parameter[1].type_object
193
+
194
+ assert_not_nil m1 = Signature.new(:string => 'String#empty?')
195
+ assert_equal 'empty?', m1.name
196
+ assert ! m1.class_method
197
+ assert_equal 1, m1.parameter.size
198
+ assert_equal ::String, m1.parameter[0].type_object
199
+ end
200
+
201
+
162
202
  def test_cmp
163
203
  assert_not_nil m1 = Signature.new(:string => 'Object#m(A a, B b, c = nil, *d)')
164
204
  assert_not_nil m2 = Signature.new(:string => 'Object#m(A a, B b, c = nil, *d)')
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.0
3
3
  specification_version: 1
4
4
  name: multimethod
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.2.1
7
- date: 2006-12-01 00:00:00 -05:00
6
+ version: 0.2.2
7
+ date: 2006-12-04 00:00:00 -05:00
8
8
  summary: "Supports Multimethod dispatching. For more details, see: http://multimethod.rubyforge.org/files/lib/multimethod_rb.html http://multimethod.rubyforge.org/files/README.txt http://multimethod.rubyforge.org/"
9
9
  require_paths:
10
10
  - lib