array_logic 0.1.1 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +4 -2
- data/lib/array_logic/rule.rb +11 -12
- data/lib/array_logic/version.rb +14 -1
- data/test/array_logic/rule_test.rb +1 -1
- metadata +2 -2
data/README.rdoc
CHANGED
@@ -1,9 +1,11 @@
|
|
1
1
|
== array_logic
|
2
2
|
|
3
|
-
A system that allows me to define the logic for comparing arrays.
|
3
|
+
A system that allows me to define the logic for comparing arrays of objects.
|
4
4
|
|
5
|
-
|
5
|
+
One prerequisite for the comparison is that the objects have an id method that
|
6
|
+
returns a unique (within the set of objects) integer.
|
6
7
|
|
8
|
+
The logic for an active record model Answer, looks like this:
|
7
9
|
|
8
10
|
a1 = Answer.find(1)
|
9
11
|
a2 = Answer.find(2)
|
data/lib/array_logic/rule.rb
CHANGED
@@ -18,18 +18,13 @@ module ArrayLogic
|
|
18
18
|
def match(things)
|
19
19
|
check_rule
|
20
20
|
@things = things
|
21
|
-
|
22
|
-
logic
|
21
|
+
match_ids things.collect(&:id)
|
23
22
|
end
|
24
23
|
|
25
24
|
def block(things)
|
26
25
|
! match(things)
|
27
26
|
end
|
28
27
|
|
29
|
-
def logic
|
30
|
-
eval(expression)
|
31
|
-
end
|
32
|
-
|
33
28
|
def rule_valid?
|
34
29
|
check_rule
|
35
30
|
!rule.empty?
|
@@ -37,10 +32,6 @@ module ArrayLogic
|
|
37
32
|
return false
|
38
33
|
end
|
39
34
|
|
40
|
-
def replace_item(pattern, processor)
|
41
|
-
@processed_rule = processed_rule.gsub(pattern) {|x| processor.call(x)}
|
42
|
-
end
|
43
|
-
|
44
35
|
def object_ids_used
|
45
36
|
chrs_after_first = 1..-1
|
46
37
|
@object_ids_used ||= objects_identifiers_in_rule.collect{|i| i[chrs_after_first].to_i}.uniq
|
@@ -60,6 +51,10 @@ module ArrayLogic
|
|
60
51
|
end
|
61
52
|
|
62
53
|
private
|
54
|
+
def logic
|
55
|
+
eval(expression)
|
56
|
+
end
|
57
|
+
|
63
58
|
def match_ids(ids)
|
64
59
|
@thing_ids = ids
|
65
60
|
logic
|
@@ -90,9 +85,13 @@ module ArrayLogic
|
|
90
85
|
add_space_around_puctuation_characters
|
91
86
|
make_everything_lower_case
|
92
87
|
replace_logic_words_with_operators
|
93
|
-
replace_item(thing_id_pattern,
|
88
|
+
replace_item(thing_id_pattern, ids_include_this_id)
|
94
89
|
replace_item(number_in_set_pattern, comparison_of_number_with_true_count)
|
95
90
|
end
|
91
|
+
|
92
|
+
def replace_item(pattern, processor)
|
93
|
+
@processed_rule = processed_rule.gsub(pattern) {|x| processor.call(x)}
|
94
|
+
end
|
96
95
|
|
97
96
|
# for example: 2 in t1, t2, t3
|
98
97
|
def number_in_set_pattern
|
@@ -112,7 +111,7 @@ module ArrayLogic
|
|
112
111
|
/\w\d+/
|
113
112
|
end
|
114
113
|
|
115
|
-
def
|
114
|
+
def ids_include_this_id
|
116
115
|
lambda {|s| thing_ids.include?(s[/\d+/].to_i)}
|
117
116
|
end
|
118
117
|
|
data/lib/array_logic/version.rb
CHANGED
@@ -1,3 +1,16 @@
|
|
1
1
|
module ArrayLogic
|
2
|
-
VERSION = "0.1.
|
2
|
+
VERSION = "0.1.2"
|
3
3
|
end
|
4
|
+
|
5
|
+
# History
|
6
|
+
# =======
|
7
|
+
#
|
8
|
+
# Version 0.1.2
|
9
|
+
# =============
|
10
|
+
# Refactor to tidy up code and make private, rule methods that don't need exposing
|
11
|
+
#
|
12
|
+
#
|
13
|
+
# Version 0.1.1
|
14
|
+
# =============
|
15
|
+
# Working version. No history before this point
|
16
|
+
#
|
@@ -187,7 +187,7 @@ module ArrayLogic
|
|
187
187
|
def test_replace_item
|
188
188
|
@rule.rule = 't1 or ( t2 and t3 )'
|
189
189
|
process = lambda {|s| [1, 2].include?(s[/\d+/].to_i)}
|
190
|
-
result = @rule.replace_item
|
190
|
+
result = @rule.send(:replace_item, /\w\d+/, process)
|
191
191
|
assert_equal('true or ( true and false )', result)
|
192
192
|
end
|
193
193
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: array_logic
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-02-22 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: Allow a user to define a set of rules, and then test to see if an array
|
15
15
|
of object match those rules.
|