multidimensional_table 1.0.1 → 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/README.md +19 -15
- data/lib/multidimensional_table/multidimensional_table.rb +10 -2
- data/lib/multidimensional_table/test_class.rb +16 -0
- data/lib/multidimensional_table/version.rb +1 -1
- data/spec/multidimensional_table/multidimensional_table_spec.rb +10 -10
- data/spec/multidimensional_table/test_class_spec.rb +17 -0
- metadata +4 -1
data/README.md
CHANGED
@@ -38,27 +38,31 @@ Or install it yourself as:
|
|
38
38
|
$ gem install multidimensional_table
|
39
39
|
|
40
40
|
## Usage
|
41
|
-
|
42
41
|
```
|
43
42
|
class MaterialConsumption
|
44
43
|
include MultidimensionalTable
|
45
44
|
|
46
|
-
dimensions
|
47
|
-
|
48
|
-
|
45
|
+
def dimensions
|
46
|
+
{
|
47
|
+
:year => [:year_1994, :year_1995],
|
48
|
+
:city => [:buenos_aires],
|
49
|
+
:material => [:coal, :potassium]
|
50
|
+
}
|
51
|
+
end
|
49
52
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
53
|
+
def data
|
54
|
+
table_data do
|
55
|
+
year_1994 do
|
56
|
+
buenos_aires do
|
57
|
+
coal '8t'
|
58
|
+
potassium '5t'
|
59
|
+
end
|
55
60
|
end
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
potassium '6t'
|
61
|
+
year_1995 do
|
62
|
+
buenos_aires do
|
63
|
+
coal '8t'
|
64
|
+
potassium '6t'
|
65
|
+
end
|
62
66
|
end
|
63
67
|
end
|
64
68
|
end
|
@@ -3,11 +3,17 @@ require 'multidimensional_table/non_valid_dimension'
|
|
3
3
|
|
4
4
|
module MultidimensionalTable
|
5
5
|
|
6
|
-
def
|
6
|
+
def initialize
|
7
|
+
set_dimensions(dimensions)
|
8
|
+
data
|
9
|
+
end
|
10
|
+
|
11
|
+
def set_dimensions(map)
|
7
12
|
@dimensions = map
|
8
13
|
check_duplicates(map)
|
9
14
|
@dimensions.each do |key, value|
|
10
15
|
value.each do |possible_value|
|
16
|
+
Kernel.class_eval do
|
11
17
|
define_method possible_value do |value = nil, &block|
|
12
18
|
if value.nil? && !block.nil?
|
13
19
|
@index_level += 1
|
@@ -23,6 +29,7 @@ module MultidimensionalTable
|
|
23
29
|
@table_rules[value] = context << ["@attributes[:#{key}] == :#{possible_value}"]
|
24
30
|
end
|
25
31
|
end
|
32
|
+
end
|
26
33
|
end
|
27
34
|
end
|
28
35
|
end
|
@@ -55,7 +62,7 @@ module MultidimensionalTable
|
|
55
62
|
end
|
56
63
|
|
57
64
|
def table_result
|
58
|
-
@table_rules.each { |key, condition| return key if
|
65
|
+
@table_rules.each { |key, condition| return key if eval(condition.join(' && ')) == true }
|
59
66
|
end
|
60
67
|
|
61
68
|
def table_data
|
@@ -69,4 +76,5 @@ module MultidimensionalTable
|
|
69
76
|
def dimensions
|
70
77
|
@dimensions ||= {}
|
71
78
|
end
|
79
|
+
|
72
80
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'multidimensional_table/multidimensional_table'
|
2
|
+
|
3
|
+
class TestClass
|
4
|
+
include MultidimensionalTable
|
5
|
+
|
6
|
+
def dimensions
|
7
|
+
{ :test_material => [:test_potassium, :coal, :sugar] }
|
8
|
+
end
|
9
|
+
|
10
|
+
def data
|
11
|
+
table_data do
|
12
|
+
coal '8t'
|
13
|
+
sugar '9t'
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -6,13 +6,13 @@ module MultidimensionalTable
|
|
6
6
|
context 'basic setup' do
|
7
7
|
it 'knows dimenions it has' do
|
8
8
|
subject.extend(MultidimensionalTable)
|
9
|
-
subject.
|
9
|
+
subject.set_dimensions ( { :material => [:potassium, :coal, :sugar] })
|
10
10
|
subject.dimensions[:material].should == [:potassium, :coal, :sugar]
|
11
11
|
end
|
12
12
|
|
13
13
|
it 'creates methods for dimensions' do
|
14
14
|
subject.extend(MultidimensionalTable)
|
15
|
-
subject.
|
15
|
+
subject.set_dimensions ( { :material => [:potassium, :coal, :sugar] })
|
16
16
|
subject.respond_to?(:potassium).should == true
|
17
17
|
subject.respond_to?(:coal).should == true
|
18
18
|
subject.respond_to?(:sugar).should == true
|
@@ -20,7 +20,7 @@ module MultidimensionalTable
|
|
20
20
|
|
21
21
|
it 'should be able to find data from table' do
|
22
22
|
subject.extend(MultidimensionalTable)
|
23
|
-
subject.
|
23
|
+
subject.set_dimensions ( { :material => [:potassium, :coal, :sugar] })
|
24
24
|
subject.table_data do
|
25
25
|
subject.coal '8t'
|
26
26
|
subject.sugar '9t'
|
@@ -35,7 +35,7 @@ module MultidimensionalTable
|
|
35
35
|
context 'two dimensional' do
|
36
36
|
before(:each) do
|
37
37
|
subject.extend(MultidimensionalTable)
|
38
|
-
subject.
|
38
|
+
subject.set_dimensions ( { :material => [:potassium, :coal, :sugar], :city => [:zagreb, :zadar] })
|
39
39
|
subject.table_data do
|
40
40
|
subject.zagreb do
|
41
41
|
subject.coal '8t'
|
@@ -62,9 +62,9 @@ module MultidimensionalTable
|
|
62
62
|
context 'three dimensional' do
|
63
63
|
before(:each) do
|
64
64
|
subject.extend(MultidimensionalTable)
|
65
|
-
subject.
|
65
|
+
subject.set_dimensions ( { :material => [:potassium, :coal, :sugar],
|
66
66
|
:city => [:zagreb, :zadar],
|
67
|
-
:time_of_day => [:morning, :evening] }
|
67
|
+
:time_of_day => [:morning, :evening] } )
|
68
68
|
subject.table_data do
|
69
69
|
subject.zagreb do
|
70
70
|
subject.morning do
|
@@ -101,9 +101,9 @@ module MultidimensionalTable
|
|
101
101
|
|
102
102
|
it 'should complain if dimension does not exist' do
|
103
103
|
subject.extend(MultidimensionalTable)
|
104
|
-
subject.
|
104
|
+
subject.set_dimensions( { :material => [:potassium, :coal, :sugar],
|
105
105
|
:city => [:zagreb, :zadar],
|
106
|
-
:time_of_day => [:morning, :evening] }
|
106
|
+
:time_of_day => [:morning, :evening] })
|
107
107
|
|
108
108
|
expect do
|
109
109
|
subject.table_data do
|
@@ -120,9 +120,9 @@ module MultidimensionalTable
|
|
120
120
|
it 'should complain if same dimension name exists' do
|
121
121
|
subject.extend(MultidimensionalTable)
|
122
122
|
expect do
|
123
|
-
subject.
|
123
|
+
subject.set_dimensions ({ :material => [:potassium, :coal, :sugar],
|
124
124
|
:city => [:zagreb, :zadar],
|
125
|
-
:time_of_day => [:coal, :zagreb] }
|
125
|
+
:time_of_day => [:coal, :zagreb] })
|
126
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')
|
127
127
|
end
|
128
128
|
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'multidimensional_table/test_class'
|
2
|
+
|
3
|
+
describe TestClass do
|
4
|
+
context 'basic setup' do
|
5
|
+
it 'knows dimensions it has' do
|
6
|
+
subject.dimensions[:test_material].should == [:test_potassium, :coal, :sugar]
|
7
|
+
end
|
8
|
+
|
9
|
+
it 'can pinpoint right one' do
|
10
|
+
subject.update_attributes(:test_material => :sugar)
|
11
|
+
subject.table_result.should == '9t'
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
|
16
|
+
end
|
17
|
+
|
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.0
|
4
|
+
version: 1.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -28,9 +28,11 @@ files:
|
|
28
28
|
- lib/multidimensional_table/multidimensional_table.rb
|
29
29
|
- lib/multidimensional_table/non_existant_dimension_attribute.rb
|
30
30
|
- lib/multidimensional_table/non_valid_dimension.rb
|
31
|
+
- lib/multidimensional_table/test_class.rb
|
31
32
|
- lib/multidimensional_table/version.rb
|
32
33
|
- multidimensional_table.gemspec
|
33
34
|
- spec/multidimensional_table/multidimensional_table_spec.rb
|
35
|
+
- spec/multidimensional_table/test_class_spec.rb
|
34
36
|
homepage: https://github.com/drKreso/multidimensional_table
|
35
37
|
licenses: []
|
36
38
|
post_install_message:
|
@@ -57,3 +59,4 @@ specification_version: 3
|
|
57
59
|
summary: Attempt to make generic API for describing multidimensional data in Ruby
|
58
60
|
test_files:
|
59
61
|
- spec/multidimensional_table/multidimensional_table_spec.rb
|
62
|
+
- spec/multidimensional_table/test_class_spec.rb
|