patternmatching 0.2.4 → 0.2.5
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/History.txt +9 -3
- data/Rakefile +1 -1
- data/examples/benchmark.rb +4 -3
- data/examples/enumerable_matching.rb +2 -2
- data/lib/patternmatching/pattern.rb +17 -6
- data/lib/patternmatching/version.rb +1 -1
- data/spec/patternmatching_spec.rb +2 -2
- data/website/index.html +2 -2
- data/website/stylesheets/screen.css +9 -0
- data/website/template.rhtml +1 -1
- metadata +2 -2
data/History.txt
CHANGED
@@ -1,10 +1,16 @@
|
|
1
|
-
== 0.2.
|
1
|
+
== 0.2.5 2007-06-12
|
2
|
+
|
3
|
+
* 1 minor enhancement:
|
4
|
+
* little performance up
|
5
|
+
* Check compatibility with new ruby1.9 (20070606)
|
6
|
+
* Update project files from newgem-0.11.0
|
2
7
|
|
3
|
-
|
8
|
+
== 0.2.4 2007-06-06
|
4
9
|
|
10
|
+
* Check compatibility with jruby1.0.0RC2 and old ruby1.9
|
5
11
|
* 1 minor enhancement:
|
6
12
|
* Fix module relations
|
7
|
-
* 2 fix bugs
|
13
|
+
* 2 fix bugs:
|
8
14
|
* example/partial_style_method.rb
|
9
15
|
* example/partial_style_method2.rb
|
10
16
|
|
data/Rakefile
CHANGED
@@ -78,7 +78,7 @@ hoe = Hoe.new(GEM_NAME, VERS) do |p|
|
|
78
78
|
p.url = HOMEPATH
|
79
79
|
p.rubyforge_name = RUBYFORGE_PROJECT if RUBYFORGE_PROJECT
|
80
80
|
p.test_globs = ["test/**/test_*.rb"]
|
81
|
-
p.clean_globs
|
81
|
+
p.clean_globs |= CLEAN #An array of file patterns to delete on clean.
|
82
82
|
|
83
83
|
# == Optional
|
84
84
|
p.changes = p.paragraphs_of("History.txt", 0..1).join("\n\n")
|
data/examples/benchmark.rb
CHANGED
@@ -49,9 +49,10 @@ class Recursive
|
|
49
49
|
end
|
50
50
|
|
51
51
|
# size depends on system stack max
|
52
|
-
#count =
|
53
|
-
#count =
|
54
|
-
count =
|
52
|
+
#count = 600 # for ruby 1.8 stack max
|
53
|
+
#count = 1000 # for ruby 1.9 (200706) stack max
|
54
|
+
#count = 400 # for ruby 1.9 (200606) stack max
|
55
|
+
count = 200 # for jruby1.0 stack max
|
55
56
|
|
56
57
|
plain = Recursive.new
|
57
58
|
start = Time.new
|
@@ -8,9 +8,9 @@ inputs = build { exact([1,2,3,4,5]) }
|
|
8
8
|
make inputs do
|
9
9
|
# _! matches rests of list
|
10
10
|
seems as {exact([:a,:b, _!(:c)])} do
|
11
|
-
puts a.to_s + ", " + b.to_s + " and " + c.
|
11
|
+
puts a.to_s + ", " + b.to_s + " and " + c.join(", ")
|
12
12
|
end
|
13
13
|
seems something do
|
14
14
|
puts "not matched"
|
15
15
|
end
|
16
|
-
end # => "1, 2, and
|
16
|
+
end # => "1, 2, and 3, 4, 5"
|
@@ -1,6 +1,6 @@
|
|
1
1
|
|
2
2
|
module PatternMatching
|
3
|
-
#
|
3
|
+
#Domain Specific Language style methods for inside block
|
4
4
|
module DSL_INSIDE
|
5
5
|
#A pattern matches description inside block
|
6
6
|
#=== Usage
|
@@ -25,6 +25,7 @@ module PatternMatching
|
|
25
25
|
end
|
26
26
|
include DSL_INSIDE
|
27
27
|
|
28
|
+
#Domain Specific Language style methods for inside module
|
28
29
|
module DSL_MODULE
|
29
30
|
#Define method as partial style
|
30
31
|
#=== Usage
|
@@ -46,7 +47,12 @@ module PatternMatching
|
|
46
47
|
patterns = []
|
47
48
|
instance_variable_set(pattern_name, patterns)
|
48
49
|
define_method(name) do |target|
|
49
|
-
MatchExec.exec_as(target, patterns, self)
|
50
|
+
result = MatchExec.exec_as(target, patterns, self)
|
51
|
+
if result
|
52
|
+
result[0].instance_eval(&result[1])
|
53
|
+
else
|
54
|
+
nil
|
55
|
+
end
|
50
56
|
end
|
51
57
|
end
|
52
58
|
patterns = instance_variable_get(pattern_name)
|
@@ -59,7 +65,7 @@ module PatternMatching
|
|
59
65
|
end
|
60
66
|
include DSL_MODULE
|
61
67
|
|
62
|
-
#
|
68
|
+
#Domain Specific Language style methods for outside
|
63
69
|
module DSL_OUTSIDE
|
64
70
|
#Build structured data
|
65
71
|
#=== Usage
|
@@ -78,7 +84,12 @@ module PatternMatching
|
|
78
84
|
def make(target, &block)
|
79
85
|
patterns = []
|
80
86
|
PatternFragments.new(patterns).instance_eval(&block)
|
81
|
-
MatchExec.exec_as(target, patterns, self)
|
87
|
+
result = MatchExec.exec_as(target, patterns, self)
|
88
|
+
if result
|
89
|
+
result[0].instance_eval(&result[1])
|
90
|
+
else
|
91
|
+
nil
|
92
|
+
end
|
82
93
|
end
|
83
94
|
|
84
95
|
end
|
@@ -206,12 +217,12 @@ module PatternMatching
|
|
206
217
|
end
|
207
218
|
executer = ExecuteAs.new(args, receiver)
|
208
219
|
next if condition != nil and not executer.instance_eval(&condition)
|
209
|
-
return executer
|
220
|
+
return [executer, action]
|
210
221
|
end
|
211
222
|
nil
|
212
223
|
end
|
213
224
|
|
214
|
-
#
|
225
|
+
#Private class to access instance valiables of the receiver
|
215
226
|
class InstanceVariableAccessor
|
216
227
|
def initialize(receiver)
|
217
228
|
@receiver = receiver
|
@@ -104,13 +104,13 @@ describe "PatternMatching from Example" do
|
|
104
104
|
a.to_s + " and " + b.to_s + " and" + c.to_s
|
105
105
|
end
|
106
106
|
seems as {exact([:a,:b, _!(:c)])} do
|
107
|
-
a.to_s + ", " + b.to_s + " and " + c.
|
107
|
+
a.to_s + ", " + b.to_s + " and " + c.join(", ")
|
108
108
|
end
|
109
109
|
seems something do
|
110
110
|
"not matched"
|
111
111
|
end
|
112
112
|
end
|
113
|
-
result.should == "1, 2 and
|
113
|
+
result.should == "1, 2 and 3, 4, 5"
|
114
114
|
end
|
115
115
|
|
116
116
|
it "should look Just Enumerable pattern." do
|
data/website/index.html
CHANGED
@@ -32,8 +32,8 @@
|
|
32
32
|
|
33
33
|
<h1>PatternMatching module</h1>
|
34
34
|
<div id="version" class="clickable" onclick='document.location = "http://rubyforge.org/projects/patternmatching"; return false'>
|
35
|
-
Get Version
|
36
|
-
<a href="http://rubyforge.org/projects/patternmatching" class="numbers">0.2.
|
35
|
+
<p>Get Version</p>
|
36
|
+
<a href="http://rubyforge.org/projects/patternmatching" class="numbers">0.2.5</a>
|
37
37
|
</div>
|
38
38
|
<h1>→ ‘patternmatching’</h1>
|
39
39
|
|
@@ -114,6 +114,15 @@ pre, code {
|
|
114
114
|
font-size: 4em;
|
115
115
|
line-height: 0.8em;
|
116
116
|
letter-spacing: -0.1ex;
|
117
|
+
margin-bottom: 15px;
|
118
|
+
}
|
119
|
+
|
120
|
+
#version p {
|
121
|
+
text-decoration: none;
|
122
|
+
color: #141331;
|
123
|
+
background-color: #B3ABFF;
|
124
|
+
margin: 0;
|
125
|
+
padding: 0;
|
117
126
|
}
|
118
127
|
|
119
128
|
#version a {
|
data/website/template.rhtml
CHANGED
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.4
|
|
3
3
|
specification_version: 1
|
4
4
|
name: patternmatching
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.2.
|
7
|
-
date: 2007-06-
|
6
|
+
version: 0.2.5
|
7
|
+
date: 2007-06-12 00:00:00 +09:00
|
8
8
|
summary: Provide a pure ruby module that can build structured objects easily, can enable pattern match of objects, and can define method as a partial function style.
|
9
9
|
require_paths:
|
10
10
|
- lib
|