multidimensional_table 1.1.0 → 1.1.1
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.
@@ -1,5 +1,5 @@
|
|
1
1
|
require 'multidimensional_table/non_existant_dimension_attribute'
|
2
|
-
require 'multidimensional_table/
|
2
|
+
require 'multidimensional_table/more_than_one_result'
|
3
3
|
|
4
4
|
module MultidimensionalTable
|
5
5
|
|
@@ -10,7 +10,6 @@ module MultidimensionalTable
|
|
10
10
|
|
11
11
|
def set_dimensions(map)
|
12
12
|
@dimensions = map
|
13
|
-
check_duplicates(map)
|
14
13
|
@dimensions.each do |key, value|
|
15
14
|
value.each do |possible_value|
|
16
15
|
Kernel.class_eval do
|
@@ -34,35 +33,16 @@ module MultidimensionalTable
|
|
34
33
|
end
|
35
34
|
end
|
36
35
|
|
37
|
-
def check_duplicates(map)
|
38
|
-
list = {}
|
39
|
-
combined = map.each_value.reduce([]) { |all, value| all << value }.flatten
|
40
|
-
combined.each do |item|
|
41
|
-
if list[item].nil?
|
42
|
-
list[item] = 1
|
43
|
-
else
|
44
|
-
list[item] = list[item] + 1
|
45
|
-
end
|
46
|
-
end
|
47
|
-
duplicates = list.select { |key, value| key if value > 1 }
|
48
|
-
if duplicates != {}
|
49
|
-
non_valid_dimensions = {}
|
50
|
-
duplicates.each_key do |duplicate|
|
51
|
-
non_valid_dimensions[duplicate] = []
|
52
|
-
map.each do |key,value|
|
53
|
-
non_valid_dimensions[duplicate] << key if value.include?(duplicate)
|
54
|
-
end
|
55
|
-
end
|
56
|
-
raise NonValidDimension, non_valid_dimensions
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
36
|
def update_attributes(attrs)
|
61
37
|
attrs.each do |key, value| @attributes[key] = value end
|
62
38
|
end
|
63
39
|
|
64
40
|
def table_result
|
65
|
-
@table_rules.each { |key, condition| return key if eval(condition.join(' && ')) == true }
|
41
|
+
result = @table_rules.each { |key, condition| return key if eval(condition.join(' && ')) == true }
|
42
|
+
if result.size > 1
|
43
|
+
raise MoreThanOneResult, result
|
44
|
+
end
|
45
|
+
result
|
66
46
|
end
|
67
47
|
|
68
48
|
def table_data
|
@@ -117,13 +117,25 @@ module MultidimensionalTable
|
|
117
117
|
end.to raise_error(NonExistantDimensionAttribute, 'Nonexistan dimension attribute :coal_error')
|
118
118
|
end
|
119
119
|
|
120
|
-
it 'should complain
|
120
|
+
it 'should complain when there are multiple results' do
|
121
121
|
subject.extend(MultidimensionalTable)
|
122
|
+
subject.set_dimensions( { :material => [:potassium, :coal, :sugar],
|
123
|
+
:city => [:zagreb, :zadar],
|
124
|
+
:time_of_day => [:morning, :evening] })
|
125
|
+
|
126
|
+
subject.table_data do
|
127
|
+
subject.zagreb do
|
128
|
+
subject.morning do
|
129
|
+
subject.coal '8t'
|
130
|
+
subject.sugar '9t'
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
134
|
+
subject.update_attributes(:material => :coal, :city => :zagreb, :time_of_day => :evening)
|
135
|
+
|
122
136
|
expect do
|
123
|
-
subject.
|
124
|
-
|
125
|
-
:time_of_day => [:coal, :zagreb] })
|
126
|
-
end.to raise_error(NonValidDimension, 'Multiple definitions are not allowed : coal for dimension material and time_of_day, zagreb for dimension city and time_of_day')
|
137
|
+
subject.table_result.should == '8t'
|
138
|
+
end.to raise_error(MoreThanOneResult, 'More than one result :8t, 9t')
|
127
139
|
end
|
128
140
|
|
129
141
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: multidimensional_table
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.1
|
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: 2012-03-
|
12
|
+
date: 2012-03-26 00:00:00.000000000Z
|
13
13
|
dependencies: []
|
14
14
|
description: Describe a multidimensional table in pure Ruby
|
15
15
|
email:
|
@@ -27,7 +27,6 @@ files:
|
|
27
27
|
- lib/multidimensional_table.rb
|
28
28
|
- lib/multidimensional_table/multidimensional_table.rb
|
29
29
|
- lib/multidimensional_table/non_existant_dimension_attribute.rb
|
30
|
-
- lib/multidimensional_table/non_valid_dimension.rb
|
31
30
|
- lib/multidimensional_table/test_class.rb
|
32
31
|
- lib/multidimensional_table/version.rb
|
33
32
|
- multidimensional_table.gemspec
|
@@ -1,18 +0,0 @@
|
|
1
|
-
module MultidimensionalTable
|
2
|
-
class NonValidDimension < StandardError
|
3
|
-
attr_accessor :duplicate
|
4
|
-
def initialize(duplicate)
|
5
|
-
@duplicate = duplicate
|
6
|
-
end
|
7
|
-
|
8
|
-
def to_s
|
9
|
-
"Multiple definitions are not allowed : #{represent_duplicates}"
|
10
|
-
end
|
11
|
-
|
12
|
-
def represent_duplicates
|
13
|
-
duplicate.map do |key, value|
|
14
|
-
"#{key} for dimension " << value.join(' and ')
|
15
|
-
end.join(', ')
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|