crosscounter 0.2.0 → 0.3.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.
@@ -2,16 +2,13 @@ require 'crosscounter/util'
2
2
 
3
3
  module Crosscounter
4
4
  module Compute
5
- @@values = {}
6
- @@tuples = {}
7
-
8
5
  def self.compute(enumerable, properties)
9
6
  enumerable.count do |object|
10
7
  properties.all? do |key, value|
11
8
  extracted = (object[key] || object[key.sub('_', '')])
12
9
 
13
10
  if extracted.kind_of?(Array)
14
- extracted.join("\t") =~ regexify(value)
11
+ extracted.include?(value)
15
12
  else
16
13
  extracted == value
17
14
  end
@@ -20,27 +17,17 @@ module Crosscounter
20
17
  end
21
18
 
22
19
  def self.compute_all(enumerable, rows, columns)
23
- enumerable.map! { |object| Crosscounter::Util.stringify_keys(object) }
20
+ enumerable = Crosscounter::Util.stringify_all(enumerable)
24
21
 
25
- tuplize(rows).map do |tuple|
22
+ Crosscounter::Util.tuplize(rows).map do |tuple|
26
23
  initial = [tuple.last, compute(enumerable, tuple.first => tuple.last)]
27
24
 
28
- tuplize(columns).inject(initial) do |rows, column|
25
+ Crosscounter::Util.tuplize(columns).inject(initial) do |rows, column|
29
26
  rows << compute(enumerable,
30
27
  tuple.first => tuple.last,
31
28
  "_#{column.first}" => column.last)
32
29
  end
33
30
  end
34
31
  end
35
-
36
- def self.regexify(value)
37
- @@values[value] ||= /(\A|\t)#{value}(\Z|\t)/
38
- end
39
-
40
- def self.tuplize(hash)
41
- @@tuples[hash] ||= hash.flat_map do |tuple|
42
- tuple.last.map { |value| [tuple.first.to_s, value] }
43
- end
44
- end
45
32
  end
46
33
  end
@@ -1,5 +1,7 @@
1
1
  module Crosscounter
2
2
  module Util
3
+ @@tuples = {}
4
+
3
5
  def self.stringify_keys(hash)
4
6
  hash.keys.each do |key|
5
7
  hash[key.to_s] = hash.delete(key)
@@ -7,5 +9,15 @@ module Crosscounter
7
9
 
8
10
  hash
9
11
  end
12
+
13
+ def self.stringify_all(array)
14
+ array.map { |object| Crosscounter::Util.stringify_keys(object) }
15
+ end
16
+
17
+ def self.tuplize(hash)
18
+ @@tuples[hash] ||= hash.flat_map do |tuple|
19
+ tuple.last.map { |value| [tuple.first.to_s, value] }
20
+ end
21
+ end
10
22
  end
11
23
  end
@@ -1,3 +1,3 @@
1
1
  module Crosscounter
2
- VERSION = '0.2.0'
2
+ VERSION = '0.3.0'
3
3
  end
@@ -66,10 +66,4 @@ describe Crosscounter::Compute do
66
66
  ]
67
67
  end
68
68
  end
69
-
70
- describe '.tuplize' do
71
- it 'unzips the hash into key/value tuples' do
72
- computer.tuplize(age: [18, 19, 20]).should == [['age', 18], ['age', 19], ['age', 20]]
73
- end
74
- end
75
69
  end
@@ -0,0 +1,9 @@
1
+ require 'crosscounter/util'
2
+
3
+ describe Crosscounter::Util do
4
+ describe '.tuplize' do
5
+ it 'unzips the hash into key/value tuples' do
6
+ Crosscounter::Util.tuplize(age: [18, 19, 20]).should == [['age', 18], ['age', 19], ['age', 20]]
7
+ end
8
+ end
9
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: crosscounter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
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: 2013-02-14 00:00:00.000000000 Z
12
+ date: 2013-02-21 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
@@ -49,6 +49,7 @@ files:
49
49
  - lib/crosscounter/version.rb
50
50
  - spec/crosscounter/compute_spec.rb
51
51
  - spec/crosscounter/expansion_spec.rb
52
+ - spec/crosscounter/util_spec.rb
52
53
  - spec/spec_helper.rb
53
54
  homepage: https://github.com/sorentwo/crosscounter
54
55
  licenses: []
@@ -64,7 +65,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
64
65
  version: '0'
65
66
  segments:
66
67
  - 0
67
- hash: 2051450551277427890
68
+ hash: -2417517050912310752
68
69
  required_rubygems_version: !ruby/object:Gem::Requirement
69
70
  none: false
70
71
  requirements:
@@ -73,7 +74,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
73
74
  version: '0'
74
75
  segments:
75
76
  - 0
76
- hash: 2051450551277427890
77
+ hash: -2417517050912310752
77
78
  requirements: []
78
79
  rubyforge_project:
79
80
  rubygems_version: 1.8.23
@@ -84,4 +85,5 @@ summary: Crosscounter allows you to create a simple pipeline for defining cross
84
85
  test_files:
85
86
  - spec/crosscounter/compute_spec.rb
86
87
  - spec/crosscounter/expansion_spec.rb
88
+ - spec/crosscounter/util_spec.rb
87
89
  - spec/spec_helper.rb