pivot_table 0.5.0 → 1.0.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.
- checksums.yaml +4 -4
- data/.gitignore +2 -0
- data/.ruby-version +1 -1
- data/.travis.yml +1 -1
- data/Guardfile +6 -14
- data/README.md +11 -1
- data/lib/pivot_table.rb +1 -1
- data/lib/pivot_table/grid.rb +38 -17
- data/pivot_table.gemspec +2 -2
- metadata +8 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a12fa63c469f47ac0e9abfc37e116c62ddcff0d7
|
4
|
+
data.tar.gz: 2868f37cb5693d510bd0d7b1ca5d3b3ab2c57508
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a4288437756213dd93a0a94b703843236a6453d57b24aefc02c56e7845075eac144df67327a8eec845f064803d0f7b56a292fd5a2f6e6356ce22b3be2e03964c
|
7
|
+
data.tar.gz: 9741079b0c8f67e5bae38769b55c1e9202a8b79863c9d4045898dd9d36eb00f4826f9ffbf023fba675b05de00ab8bf46a1ba89a0b436a86789c1740bacc8306c
|
data/.gitignore
CHANGED
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.
|
1
|
+
2.3.0
|
data/.travis.yml
CHANGED
data/Guardfile
CHANGED
@@ -1,16 +1,8 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
# * bundler: 'bundle exec rspec'
|
4
|
-
# * bundler binstubs: 'bin/rspec'
|
5
|
-
# * spring: 'bin/rsspec' (This will use spring if running and you have
|
6
|
-
# installed the spring binstubs per the docs)
|
7
|
-
# * zeus: 'zeus rspec' (requires the server to be started separetly)
|
8
|
-
# * 'just' rspec: 'rspec'
|
9
|
-
guard :rspec, cmd: 'bundle exec rspec' do
|
1
|
+
guard :rspec, cmd: 'bundle exec rspec', all_on_start: true do
|
2
|
+
clearing :on
|
10
3
|
watch(%r{^spec/.+_spec\.rb$})
|
11
|
-
watch(%r{^spec/support/(.+)\.rb$}) {
|
12
|
-
watch(%r{^lib/pivot_table.rb$}) {
|
13
|
-
watch(%r{^lib/pivot_table/(.+)\.rb$}) {
|
14
|
-
watch('spec/spec_helper.rb') {
|
4
|
+
watch(%r{^spec/support/(.+)\.rb$}) { 'spec' }
|
5
|
+
watch(%r{^lib/pivot_table.rb$}) { 'spec' }
|
6
|
+
watch(%r{^lib/pivot_table/(.+)\.rb$}) { 'spec' }
|
7
|
+
watch('spec/spec_helper.rb') { 'spec' }
|
15
8
|
end
|
16
|
-
|
data/README.md
CHANGED
@@ -1,4 +1,6 @@
|
|
1
|
-
# Pivot Table
|
1
|
+
# Pivot Table
|
2
|
+
|
3
|
+
[](http://travis-ci.org/edjames/pivot_table) [](https://codeclimate.com/github/edjames/pivot_table) [](https://gemnasium.com/edjames/pivot_table) [](http://badge.fury.io/rb/pivot_table) [](https://www.omniref.com/ruby/gems/pivot_table)
|
2
4
|
|
3
5
|
A handy tool for transforming a dataset into a spreadsheet-style pivot table.
|
4
6
|
|
@@ -7,6 +9,14 @@ A handy tool for transforming a dataset into a spreadsheet-style pivot table.
|
|
7
9
|
One of the most powerful and underrated features of spreadhseet packages is their ability to create pivot tables. I'm often asked
|
8
10
|
to replicate this functionality in a web application, so I decided to share. This is a simple gem for a specific job, I hope it helps.
|
9
11
|
|
12
|
+
#### What this gem WILL do
|
13
|
+
|
14
|
+
This gem provides a simple mechanism to handle the turning of a dataset into a cross-tabular format for display purposes. The gem will make it easy to display your data in the form of a pivot table.
|
15
|
+
|
16
|
+
#### What this gem WILL NOT do
|
17
|
+
|
18
|
+
This gem is *not* a data aggregation engine (and it probably never will be). This gem expects an aggregated dataset. If you're looking for a gem to handle data aggregation then you may want to take a look at the [ruport](https://github.com/ruport/ruport) gem.
|
19
|
+
|
10
20
|
### Installation
|
11
21
|
|
12
22
|
Couldn't be easier...
|
data/lib/pivot_table.rb
CHANGED
data/lib/pivot_table/grid.rb
CHANGED
@@ -22,8 +22,8 @@ module PivotTable
|
|
22
22
|
|
23
23
|
def build_rows
|
24
24
|
@rows = []
|
25
|
-
|
26
|
-
|
25
|
+
data_grid.each_with_index do |data, index|
|
26
|
+
rows << Row.new(
|
27
27
|
:header => row_headers[index],
|
28
28
|
:data => data,
|
29
29
|
:value_name => value_name,
|
@@ -34,8 +34,8 @@ module PivotTable
|
|
34
34
|
|
35
35
|
def build_columns
|
36
36
|
@columns = []
|
37
|
-
|
38
|
-
|
37
|
+
data_grid.transpose.each_with_index do |data, index|
|
38
|
+
columns << Column.new(
|
39
39
|
:header => column_headers[index],
|
40
40
|
:data => data,
|
41
41
|
:value_name => value_name,
|
@@ -45,11 +45,11 @@ module PivotTable
|
|
45
45
|
end
|
46
46
|
|
47
47
|
def column_headers
|
48
|
-
@column_headers ||= headers
|
48
|
+
@column_headers ||= headers column_name
|
49
49
|
end
|
50
50
|
|
51
51
|
def row_headers
|
52
|
-
@row_headers ||= headers
|
52
|
+
@row_headers ||= headers row_name
|
53
53
|
end
|
54
54
|
|
55
55
|
def column_totals
|
@@ -67,30 +67,51 @@ module PivotTable
|
|
67
67
|
def prepare_grid
|
68
68
|
@data_grid = []
|
69
69
|
row_headers.count.times do
|
70
|
-
|
70
|
+
data_grid << column_headers.count.times.inject([]) { |col| col << nil }
|
71
71
|
end
|
72
|
-
|
72
|
+
data_grid
|
73
73
|
end
|
74
74
|
|
75
75
|
def populate_grid
|
76
76
|
prepare_grid
|
77
77
|
row_headers.each_with_index do |row, row_index|
|
78
|
-
|
79
|
-
column_headers.each_with_index do |col, col_index|
|
80
|
-
object = @source_data.find { |item| item.send(row_name) == row && item.send(column_name) == col }
|
81
|
-
has_field_name = field_name && object.respond_to?(field_name)
|
82
|
-
current_row[col_index] = has_field_name ? object.send(field_name) : object
|
83
|
-
end
|
84
|
-
@data_grid[row_index] = current_row
|
78
|
+
data_grid[row_index] = build_data_row(row)
|
85
79
|
end
|
86
|
-
|
80
|
+
data_grid
|
87
81
|
end
|
88
82
|
|
89
83
|
private
|
90
84
|
|
91
85
|
def headers(method)
|
92
|
-
hdrs =
|
86
|
+
hdrs = source_data.collect { |c| c.send method }.uniq
|
93
87
|
configuration.sort ? hdrs.sort : hdrs
|
94
88
|
end
|
89
|
+
|
90
|
+
def build_data_row(row)
|
91
|
+
current_row = []
|
92
|
+
column_headers.each_with_index do |col, col_index|
|
93
|
+
current_row[col_index] = derive_row_value(row, col)
|
94
|
+
end
|
95
|
+
current_row
|
96
|
+
end
|
97
|
+
|
98
|
+
def find_data_item(row, col)
|
99
|
+
source_data.find do |item|
|
100
|
+
item.send(row_name) == row && item.send(column_name) == col
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
def derive_row_value(row, col)
|
105
|
+
data_item = find_data_item(row, col)
|
106
|
+
if has_field_name?(data_item)
|
107
|
+
data_item.send(field_name)
|
108
|
+
else
|
109
|
+
data_item
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
def has_field_name?(data_item)
|
114
|
+
!!(field_name && data_item.respond_to?(field_name))
|
115
|
+
end
|
95
116
|
end
|
96
117
|
end
|
data/pivot_table.gemspec
CHANGED
@@ -21,7 +21,7 @@ Gem::Specification.new do |s|
|
|
21
21
|
s.test_files = `git ls-files -- {spec,features}/*`.split("\n")
|
22
22
|
s.require_paths = ["lib"]
|
23
23
|
|
24
|
-
s.add_development_dependency "rspec", "~> 3.
|
24
|
+
s.add_development_dependency "rspec", "~> 3.4"
|
25
25
|
s.add_development_dependency "growl", "~> 1.0"
|
26
|
-
s.add_development_dependency "guard-rspec", "~> 4.
|
26
|
+
s.add_development_dependency "guard-rspec", "~> 4.6"
|
27
27
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pivot_table
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ed James
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-04-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '3.
|
19
|
+
version: '3.4'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '3.
|
26
|
+
version: '3.4'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: growl
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -44,14 +44,14 @@ dependencies:
|
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '4.
|
47
|
+
version: '4.6'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '4.
|
54
|
+
version: '4.6'
|
55
55
|
description: Transform an ActiveRecord-ish data set into a pivot table of objects
|
56
56
|
email: ed.james.email@gmail.com
|
57
57
|
executables: []
|
@@ -105,10 +105,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
105
105
|
version: '0'
|
106
106
|
requirements: []
|
107
107
|
rubyforge_project: pivot_table
|
108
|
-
rubygems_version: 2.
|
108
|
+
rubygems_version: 2.5.1
|
109
109
|
signing_key:
|
110
110
|
specification_version: 4
|
111
|
-
summary: pivot_table-0.
|
111
|
+
summary: pivot_table-1.0.0
|
112
112
|
test_files:
|
113
113
|
- spec/pivot_table/column_spec.rb
|
114
114
|
- spec/pivot_table/configuration_spec.rb
|