rufus-decision 1.0 → 1.1.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/CHANGELOG.txt +15 -1
- data/README.txt +82 -49
- data/bin/rufus_decide +149 -0
- data/lib/rufus/decision.rb +295 -283
- data/lib/rufus/hashes.rb +56 -60
- data/test/decision_0_test.rb +120 -162
- data/test/decision_1_test.rb +60 -32
- data/test/eval_test.rb +6 -14
- data/test/goal.csv +3 -0
- data/test/input.csv +3 -0
- data/test/table.csv +9 -0
- data/test/test.rb +7 -3
- data/test/test_base.rb +51 -0
- data/test/transpose_test.rb +64 -0
- metadata +14 -8
- data/test/dmixin.rb +0 -55
data/test/decision_1_test.rb
CHANGED
@@ -2,27 +2,18 @@
|
|
2
2
|
#
|
3
3
|
# Testing rufus-deciision
|
4
4
|
#
|
5
|
-
# John Mettraux at openwfe.org
|
6
|
-
#
|
7
5
|
# Sun Oct 29 15:41:44 JST 2006
|
8
6
|
#
|
9
7
|
|
10
8
|
require 'test/unit'
|
11
9
|
|
12
|
-
require '
|
10
|
+
require File.dirname(__FILE__) + '/test_base.rb'
|
13
11
|
|
14
12
|
|
15
|
-
class
|
13
|
+
class Decision1Test < Test::Unit::TestCase
|
16
14
|
include DecisionTestMixin
|
17
15
|
|
18
|
-
|
19
|
-
#end
|
20
|
-
|
21
|
-
#def teardown
|
22
|
-
#end
|
23
|
-
|
24
|
-
CSV1 = \
|
25
|
-
"""
|
16
|
+
CSV1 = %{
|
26
17
|
,,
|
27
18
|
in:fx,in:fy,out:fz
|
28
19
|
,,
|
@@ -30,39 +21,76 @@ a,${fx},0
|
|
30
21
|
c,d,${fx}
|
31
22
|
e,f,${r:3+4}
|
32
23
|
g,h,${r:'${fx}' + '${fy}'}
|
33
|
-
|
24
|
+
}
|
34
25
|
|
35
26
|
def test_1
|
36
27
|
|
37
|
-
wi = {
|
38
|
-
|
39
|
-
"fy" => "d"
|
40
|
-
}
|
41
|
-
do_test(CSV1, wi, {}, { "fz" => "c" }, false)
|
28
|
+
wi = { 'fx' => 'c', 'fy' => 'd' }
|
29
|
+
do_test(CSV1, wi, {}, { 'fz' => 'c' }, false)
|
42
30
|
|
43
|
-
wi = {
|
44
|
-
|
45
|
-
"fy" => "a"
|
46
|
-
}
|
47
|
-
do_test(CSV1, wi, {}, { "fz" => "0" }, false)
|
31
|
+
wi = { 'fx' => 'a', 'fy' => 'a' }
|
32
|
+
do_test(CSV1, wi, {}, { 'fz' => '0' }, false)
|
48
33
|
end
|
49
34
|
|
50
35
|
def test_1b
|
51
36
|
|
52
|
-
h = {
|
53
|
-
|
54
|
-
"fy" => "f"
|
55
|
-
}
|
56
|
-
do_test(CSV1, h, { :ruby_eval => true }, { "fz" => "7" }, false)
|
37
|
+
h = { 'fx' => 'e', 'fy' => 'f' }
|
38
|
+
do_test(CSV1, h, { :ruby_eval => true }, { 'fz' => '7' }, false)
|
57
39
|
end
|
58
40
|
|
59
41
|
def test_1c
|
60
42
|
|
61
|
-
h = {
|
62
|
-
|
63
|
-
|
43
|
+
h = { 'fx' => 'g', 'fy' => 'h' }
|
44
|
+
do_test(CSV1, h, { :ruby_eval => true }, { 'fz' => 'gh' }, false)
|
45
|
+
end
|
46
|
+
|
47
|
+
CSV2 = [
|
48
|
+
%w{ in:fx in:fy out:fz },
|
49
|
+
%w{ a ${fx} 0 },
|
50
|
+
%w{ c d ${fx} },
|
51
|
+
%w{ e f ${r:3+4} },
|
52
|
+
[ 'g', 'h', "${r:'${fx}' + '${fy}'}" ]
|
53
|
+
]
|
54
|
+
|
55
|
+
def test_with_array_table
|
56
|
+
|
57
|
+
wi = { 'fx' => 'c', 'fy' => 'd' }
|
58
|
+
do_test(CSV2, wi, {}, { 'fz' => 'c' }, false)
|
59
|
+
end
|
60
|
+
|
61
|
+
def test_empty_string_to_float
|
62
|
+
|
63
|
+
wi = { 'age' => '', 'trait' => 'maniac', 'name' => 'Baumgarter' }
|
64
|
+
|
65
|
+
table = [
|
66
|
+
%w{ in:age in:trait out:salesperson },
|
67
|
+
[ '18..35', '', 'Adeslky' ],
|
68
|
+
[ '25..35', '', 'Bronco' ],
|
69
|
+
[ '36..50', '', 'Espradas' ],
|
70
|
+
[ '', 'maniac', 'Korolev' ]
|
71
|
+
]
|
72
|
+
|
73
|
+
do_test(table, wi, {}, { 'salesperson' => 'Korolev' }, false)
|
74
|
+
end
|
75
|
+
|
76
|
+
def test_vertical_rules
|
77
|
+
|
78
|
+
table = CSV2.transpose
|
79
|
+
|
80
|
+
wi = { 'fx' => 'c', 'fy' => 'd' }
|
81
|
+
do_test(table, wi, {}, { 'fz' => 'c' }, false)
|
82
|
+
end
|
83
|
+
|
84
|
+
def test_vertical_rules_2
|
85
|
+
|
86
|
+
table = %{
|
87
|
+
in:topic,sports,sports,finance,finance,finance,politics,politics,politics,
|
88
|
+
in:region,europe,,america,europe,,asia,america,,
|
89
|
+
out:team_member,Alice,Bob,Charly,Donald,Ernest,Fujio,Gilbert,Henry,Zach
|
64
90
|
}
|
65
|
-
|
91
|
+
|
92
|
+
h = { 'topic' => 'politics', 'region' => 'america' }
|
93
|
+
do_test(table, h, {}, { 'team_member' => 'Gilbert' }, false)
|
66
94
|
end
|
67
95
|
|
68
96
|
end
|
data/test/eval_test.rb
CHANGED
@@ -1,33 +1,25 @@
|
|
1
1
|
|
2
2
|
#
|
3
|
-
# Testing rufus-
|
4
|
-
#
|
5
|
-
# John Mettraux at openwfe.org
|
3
|
+
# Testing rufus-decision
|
6
4
|
#
|
7
5
|
# Mon Oct 9 22:19:44 JST 2006
|
8
6
|
#
|
9
7
|
|
10
8
|
require 'test/unit'
|
11
|
-
require 'rufus/hashes'
|
12
9
|
|
13
|
-
|
14
|
-
# testing the 'dollar notation'
|
15
|
-
#
|
10
|
+
require File.dirname(__FILE__) + '/test_base.rb'
|
16
11
|
|
17
|
-
|
12
|
+
require 'rufus/hashes'
|
18
13
|
|
19
|
-
#def setup
|
20
|
-
#end
|
21
14
|
|
22
|
-
|
23
|
-
#end
|
15
|
+
class EvalTest < Test::Unit::TestCase
|
24
16
|
|
25
17
|
def test_0
|
26
18
|
|
27
|
-
eh = Rufus::EvalHashFilter.new({})
|
19
|
+
eh = Rufus::Decision::EvalHashFilter.new({})
|
28
20
|
|
29
21
|
eh['a'] = :a
|
30
|
-
eh['b'] =
|
22
|
+
eh['b'] = 'r:5 * 5'
|
31
23
|
|
32
24
|
assert_equal :a, eh['a']
|
33
25
|
assert_equal 25, eh['b']
|
data/test/goal.csv
ADDED
data/test/input.csv
ADDED
data/test/table.csv
ADDED
data/test/test.rb
CHANGED
data/test/test_base.rb
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
|
2
|
+
#
|
3
|
+
# Testing rufus-decision
|
4
|
+
#
|
5
|
+
# 2007 something
|
6
|
+
#
|
7
|
+
|
8
|
+
$:.unshift(File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib')))
|
9
|
+
|
10
|
+
require 'rufus/decision'
|
11
|
+
|
12
|
+
|
13
|
+
module DecisionTestMixin
|
14
|
+
|
15
|
+
protected
|
16
|
+
|
17
|
+
def do_test (table_data, h, options, expected_result, verbose=false)
|
18
|
+
|
19
|
+
table = table_data.is_a?(Rufus::Decision::Table) ?
|
20
|
+
table_data :
|
21
|
+
Rufus::Decision::Table.new(table_data)
|
22
|
+
|
23
|
+
if verbose
|
24
|
+
puts
|
25
|
+
puts 'table :'
|
26
|
+
puts table.to_csv
|
27
|
+
puts
|
28
|
+
puts 'before :'
|
29
|
+
p h
|
30
|
+
end
|
31
|
+
|
32
|
+
h = table.transform!(h, options)
|
33
|
+
|
34
|
+
if verbose
|
35
|
+
puts
|
36
|
+
puts 'after :'
|
37
|
+
p h
|
38
|
+
end
|
39
|
+
|
40
|
+
expected_result.each do |k, v|
|
41
|
+
|
42
|
+
value = h[k]
|
43
|
+
|
44
|
+
value = value.join(';') if value.is_a?(Array)
|
45
|
+
|
46
|
+
assert_equal v, value
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
|
@@ -0,0 +1,64 @@
|
|
1
|
+
|
2
|
+
#
|
3
|
+
# Testing rufus-decision
|
4
|
+
#
|
5
|
+
# Thu Apr 23 15:18:15 JST 2009
|
6
|
+
#
|
7
|
+
|
8
|
+
require 'test/unit'
|
9
|
+
|
10
|
+
require File.dirname(__FILE__) + '/test_base.rb'
|
11
|
+
|
12
|
+
|
13
|
+
class MiscTest < Test::Unit::TestCase
|
14
|
+
|
15
|
+
def test_transpose_empty_array
|
16
|
+
|
17
|
+
assert_equal([], Rufus::Decision.transpose([]))
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_transpose_a_to_h
|
21
|
+
|
22
|
+
assert_equal(
|
23
|
+
[
|
24
|
+
{ 'age' => 33, 'name' => 'Jeff' },
|
25
|
+
{ 'age' => 35, 'name' => 'John' }
|
26
|
+
],
|
27
|
+
Rufus::Decision.transpose([
|
28
|
+
[ 'age', 'name' ],
|
29
|
+
[ 33, 'Jeff' ],
|
30
|
+
[ 35, 'John' ]
|
31
|
+
])
|
32
|
+
)
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_transpose_h_to_a
|
36
|
+
|
37
|
+
assert_equal(
|
38
|
+
[
|
39
|
+
[ 'age', 'name' ],
|
40
|
+
[ 33, 'Jeff' ],
|
41
|
+
[ 35, 'John' ]
|
42
|
+
],
|
43
|
+
Rufus::Decision.transpose([
|
44
|
+
{ 'age' => 33, 'name' => 'Jeff' },
|
45
|
+
{ 'age' => 35, 'name' => 'John' }
|
46
|
+
])
|
47
|
+
)
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_transpose_s_to_a
|
51
|
+
|
52
|
+
assert_equal(
|
53
|
+
[
|
54
|
+
{ 'age' => '33', 'name' => 'Jeff' },
|
55
|
+
{ 'age' => '35', 'name' => 'John' }
|
56
|
+
],
|
57
|
+
Rufus::Decision.transpose(%{
|
58
|
+
age,name
|
59
|
+
33,Jeff
|
60
|
+
35,John
|
61
|
+
})
|
62
|
+
)
|
63
|
+
end
|
64
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rufus-decision
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Mettraux
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date:
|
12
|
+
date: 2009-04-25 00:00:00 +09:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -34,8 +34,8 @@ dependencies:
|
|
34
34
|
version:
|
35
35
|
description:
|
36
36
|
email: jmettraux@gmail.com
|
37
|
-
executables:
|
38
|
-
|
37
|
+
executables:
|
38
|
+
- rufus_decide
|
39
39
|
extensions: []
|
40
40
|
|
41
41
|
extra_rdoc_files:
|
@@ -43,20 +43,26 @@ extra_rdoc_files:
|
|
43
43
|
- CHANGELOG.txt
|
44
44
|
- CREDITS.txt
|
45
45
|
files:
|
46
|
-
-
|
46
|
+
- bin/rufus_decide
|
47
47
|
- lib/rufus/decision.rb
|
48
48
|
- lib/rufus/hashes.rb
|
49
49
|
- lib/rufus-decision.rb
|
50
50
|
- test/decision_0_test.rb
|
51
51
|
- test/decision_1_test.rb
|
52
|
-
- test/dmixin.rb
|
53
52
|
- test/eval_test.rb
|
53
|
+
- test/goal.csv
|
54
|
+
- test/input.csv
|
55
|
+
- test/table.csv
|
54
56
|
- test/test.rb
|
57
|
+
- test/test_base.rb
|
58
|
+
- test/transpose_test.rb
|
55
59
|
- README.txt
|
56
60
|
- CHANGELOG.txt
|
57
61
|
- CREDITS.txt
|
58
62
|
has_rdoc: true
|
59
63
|
homepage: http://rufus.rubyforge.org/rufus-decision
|
64
|
+
licenses: []
|
65
|
+
|
60
66
|
post_install_message:
|
61
67
|
rdoc_options: []
|
62
68
|
|
@@ -78,9 +84,9 @@ requirements:
|
|
78
84
|
- rufus-dollar
|
79
85
|
- rufus-treechecker
|
80
86
|
rubyforge_project: rufus
|
81
|
-
rubygems_version: 1.2
|
87
|
+
rubygems_version: 1.3.2
|
82
88
|
signing_key:
|
83
|
-
specification_version:
|
89
|
+
specification_version: 3
|
84
90
|
summary: CSV based Ruby decision tables
|
85
91
|
test_files:
|
86
92
|
- test/test.rb
|
data/test/dmixin.rb
DELETED
@@ -1,55 +0,0 @@
|
|
1
|
-
|
2
|
-
#
|
3
|
-
# Testing rufus-deciision
|
4
|
-
#
|
5
|
-
# John Mettraux at openwfe.org
|
6
|
-
#
|
7
|
-
# Mon Jan 28 13:22:51 JST 2008
|
8
|
-
#
|
9
|
-
|
10
|
-
require 'rufus/decision'
|
11
|
-
|
12
|
-
|
13
|
-
module DecisionTestMixin
|
14
|
-
|
15
|
-
protected
|
16
|
-
|
17
|
-
def do_test (table_data, h, options, expected_result, verbose=false)
|
18
|
-
|
19
|
-
table = Rufus::DecisionTable.new table_data
|
20
|
-
|
21
|
-
if verbose
|
22
|
-
puts
|
23
|
-
puts "table :"
|
24
|
-
puts table.to_csv
|
25
|
-
puts
|
26
|
-
puts "before :"
|
27
|
-
puts wi
|
28
|
-
end
|
29
|
-
|
30
|
-
h = table.transform! h, options
|
31
|
-
|
32
|
-
if verbose
|
33
|
-
puts
|
34
|
-
puts "after :"
|
35
|
-
puts h
|
36
|
-
end
|
37
|
-
|
38
|
-
expected_result.each do |k, v|
|
39
|
-
|
40
|
-
#if wi.attributes[k] != v
|
41
|
-
#end
|
42
|
-
|
43
|
-
value = h[k]
|
44
|
-
|
45
|
-
value = value.join(';') if value.is_a?(Array)
|
46
|
-
|
47
|
-
assert \
|
48
|
-
value == v,
|
49
|
-
"attribute '#{k}' should be set to '#{v}' "+
|
50
|
-
"but is set to '#{value}'"
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
end
|
55
|
-
|