crosscounter 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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