tablestakes 0.9.1 → 0.9.2
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/README.md +0 -18
- data/lib/tablestakes.rb +34 -11
- data/spec/table_spec.rb +12 -2
- metadata +74 -31
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 712201016806acdde2ba71077b3b9d22adbb2901
|
4
|
+
data.tar.gz: b3a10d461c4676c63ca3913f54785dd1333cf0fe
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bb5e169a7636d4b01236b28944b0f07c6f4576615dc587026d5f4e25316f8934e0f172e6393517dc2777537b966cbaa1789fa4304542105e177255f3fb3ea96b
|
7
|
+
data.tar.gz: d79187e12a20e858dc1416f65231d3413f31b26285ac17177d850245747fa929c785e57001e44e5204c337a90bf5e6c3977116b75b6cddcb9c7adc06d864046f
|
data/README.md
CHANGED
@@ -2,31 +2,13 @@ Tablestakes
|
|
2
2
|
===========
|
3
3
|
|
4
4
|
[![Gem Version][GV img]][Gem Version]
|
5
|
-
[![Build Status][BS img]][Build Status]
|
6
5
|
[![Dependency Status][DS img]][Dependency Status]
|
7
|
-
[![Code Climate][CC img]][Code Climate]
|
8
|
-
[![Coverage Status][CS img]][Coverage Status]
|
9
6
|
|
10
7
|
[Gem Version]: https://rubygems.org/gems/tablestakes
|
11
|
-
<<<<<<< HEAD
|
12
8
|
[Dependency Status]: https://gemnasium.com/jbfolkerts/tablestakes
|
13
|
-
[Coverage Status]: https://coveralls.io/r/jbfolkerts/tablestakes
|
14
9
|
|
15
10
|
[GV img]: https://badge.fury.io/rb/tablestakes.png
|
16
11
|
[DS img]: https://gemnasium.com/jbfolkerts/tablestakes.png
|
17
|
-
=======
|
18
|
-
[Build Status]: https://travis-ci.org/jbfolkerts/tablestakes
|
19
|
-
[travis pull requests]: https://travis-ci.org/jbfolkerts/tablestakes/pull_requests
|
20
|
-
[Dependency Status]: https://gemnasium.com/jbfolkerts/tablestakes
|
21
|
-
[Code Climate]: https://codeclimate.com/github/jbfolkerts/tablestakes
|
22
|
-
[Coverage Status]: https://coveralls.io/r/jbfolkerts/tablestakes
|
23
|
-
|
24
|
-
[GV img]: https://badge.fury.io/rb/tablestakes.png
|
25
|
-
[BS img]: https://travis-ci.org/jbfolkerts/tablestakes.png
|
26
|
-
[DS img]: https://gemnasium.com/jbfolkerts/tablestakes.png
|
27
|
-
[CC img]: https://codeclimate.com/github/jbfolkerts/tablestakes.png
|
28
|
-
>>>>>>> 12f008f26e005a9519dc7cc6664c218fca72a01c
|
29
|
-
[CS img]: https://coveralls.io/repos/jbfolkerts/tablestakes/badge.png?branch=master
|
30
12
|
|
31
13
|
Tablestakes is a gem for processing tabular data. It is for people who would rather not meddle with
|
32
14
|
a spreadsheet, or load their data into a SQL database. You get the instant gratification of being
|
data/lib/tablestakes.rb
CHANGED
@@ -172,6 +172,8 @@ class Table
|
|
172
172
|
return self
|
173
173
|
end
|
174
174
|
|
175
|
+
alias :<< :add_row
|
176
|
+
|
175
177
|
# Delete a column from the Table. Raises ArgumentError if the column name does not exist.
|
176
178
|
#
|
177
179
|
# ==== Attributes
|
@@ -447,30 +449,53 @@ class Table
|
|
447
449
|
|
448
450
|
|
449
451
|
# Given a field/column, and a regular expression to match against, and a replacement string,
|
450
|
-
#
|
451
|
-
#
|
452
|
+
# create a new table which performs a substitute operation on column data. In the case that the
|
453
|
+
# given replacement is a +String+, a direct substitute is performed. In the case that it is a +Hash+
|
454
|
+
# and the matched text is one of its keys, the corresponding +Hash+ value will be substituted.
|
455
|
+
#
|
456
|
+
# Optionally takes a block containing an operation to perform on all matching data elements
|
457
|
+
# in the given column. Raises ArgumentError if the column is not found.
|
452
458
|
#
|
453
459
|
# ==== Attributes
|
454
460
|
# +colname+:: +String+ to identify the column to join on
|
455
461
|
# +re+:: +Regexp+ to match the value in the selected column
|
456
|
-
# +replace+:: +String+ to specify the replacement text for the given +Regexp+
|
462
|
+
# +replace+:: OPTIONAL +String+ or +Hash+ to specify the replacement text for the given +Regexp+
|
463
|
+
# +&block+:: OPTIONAL block to execute against matching values
|
457
464
|
#
|
458
465
|
# ==== Examples
|
459
466
|
# cities.sub("Population", /(.*?),(.*?)/, '\1\2') # eliminate commas
|
460
467
|
# capitals.sub("State", /NY/, "New York") # replace acronym with full name
|
468
|
+
# capitals.sub("State") { |state| state.downcase } # Lowercase for all values
|
461
469
|
#
|
462
|
-
def sub(colname, re, replace)
|
470
|
+
def sub(colname, re=nil, replace=nil, &block)
|
463
471
|
# check arguments
|
464
472
|
raise ArgumentError, "No regular expression to match against" unless re
|
465
|
-
raise ArgumentError, "No replacement string specified" unless replace
|
466
473
|
raise ArgumentError, "Invalid column name" unless @table.has_key?(colname)
|
467
|
-
|
468
|
-
|
469
|
-
|
474
|
+
replace_str = ""
|
475
|
+
if replace.respond_to?(:fetch)
|
476
|
+
replace_str = replace.fetch(re)
|
477
|
+
elsif replace.respond_to?(:to_str)
|
478
|
+
replace_str = replace.to_str
|
479
|
+
else
|
480
|
+
raise ArgumentError, "Replacement must be String or Hash"
|
470
481
|
end
|
471
|
-
|
482
|
+
|
483
|
+
result = Table.new([@headers])
|
484
|
+
col_index = @headers.index(colname)
|
485
|
+
|
486
|
+
self.each do |row|
|
487
|
+
if block_given?
|
488
|
+
row[col_index] = block.call row[col_index]
|
489
|
+
else
|
490
|
+
row[col_index] = row[col_index].sub(re, replace_str)
|
491
|
+
end
|
492
|
+
result.add_row(row)
|
493
|
+
end
|
494
|
+
return result
|
472
495
|
end
|
473
496
|
|
497
|
+
# alias :sub! :sub
|
498
|
+
|
474
499
|
# Return Array with the union of elements columns in the given tables, eliminating duplicates.
|
475
500
|
# Raises an ArgumentError if a column is not found.
|
476
501
|
#
|
@@ -511,8 +536,6 @@ class Table
|
|
511
536
|
return self.column(colname) & table2.column(col2name)
|
512
537
|
end
|
513
538
|
|
514
|
-
alias :sub! :sub
|
515
|
-
|
516
539
|
# Sort the table based on given column. Uses precedence as defined in the
|
517
540
|
# column. By default will sort by the value in the first column.
|
518
541
|
#
|
data/spec/table_spec.rb
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
#
|
3
3
|
#
|
4
4
|
require 'spec_helper'
|
5
|
+
require 'rspec/its'
|
5
6
|
require_relative '../lib/tablestakes'
|
6
7
|
|
7
8
|
|
@@ -205,7 +206,7 @@ describe "Table" do
|
|
205
206
|
expect((t.select("Name","Address","Records")).headers).to eq(["Name","Address","Records"])
|
206
207
|
end
|
207
208
|
it "does not select columns that are not given as arguments" do
|
208
|
-
expect((t.select("Name","Address","Records")).headers.include?("Phone")).to
|
209
|
+
expect((t.select("Name","Address","Records")).headers.include?("Phone")).to eq(false)
|
209
210
|
end
|
210
211
|
it "raise ArgumentError when the given arguments don't match a column" do
|
211
212
|
expect { t.select("Silly") }.to raise_error(ArgumentError)
|
@@ -243,11 +244,20 @@ describe "Table" do
|
|
243
244
|
expect(cities.sub("State", /Jersey/, "York")).to be_a(Table)
|
244
245
|
end
|
245
246
|
it "substitutes the values in a given field" do
|
246
|
-
expect(
|
247
|
+
expect(cities.sub("State", /Jersey/, "York").column("State")).to include("New York")
|
247
248
|
end
|
248
249
|
it "raises ArgumentError when the given arguments don't match a column" do
|
249
250
|
expect {cities.sub("Silly", /NJ/, "NY") }.to raise_error(ArgumentError)
|
250
251
|
end
|
252
|
+
it "raises ArgumentError when not given a Match string" do
|
253
|
+
expect {cities.sub("State") }.to raise_error(ArgumentError)
|
254
|
+
end
|
255
|
+
it "raises ArgumentError when replacement is not a String or Hash" do
|
256
|
+
expect {cities.sub("State", /New/, 9)}.to raise_error(ArgumentError)
|
257
|
+
end
|
258
|
+
it "does not modify the given table" do
|
259
|
+
expect(cities.sub("State", /New/, "Old") && cities.column("State")).to include("New York")
|
260
|
+
end
|
251
261
|
end
|
252
262
|
|
253
263
|
describe ".union" do
|
metadata
CHANGED
@@ -1,71 +1,113 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tablestakes
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- J.B. Folkerts
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-03-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 2
|
19
|
+
version: '3.2'
|
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: 2
|
26
|
+
version: '3.2'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rspec-its
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.2'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.2'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec-core
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '3.2'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '3.2'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rspec-expectations
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '3.2'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '3.2'
|
27
69
|
- !ruby/object:Gem::Dependency
|
28
70
|
name: factory_girl
|
29
71
|
requirement: !ruby/object:Gem::Requirement
|
30
72
|
requirements:
|
31
|
-
- -
|
73
|
+
- - "~>"
|
32
74
|
- !ruby/object:Gem::Version
|
33
|
-
version: 4.4
|
75
|
+
version: '4.4'
|
34
76
|
type: :development
|
35
77
|
prerelease: false
|
36
78
|
version_requirements: !ruby/object:Gem::Requirement
|
37
79
|
requirements:
|
38
|
-
- -
|
80
|
+
- - "~>"
|
39
81
|
- !ruby/object:Gem::Version
|
40
|
-
version: 4.4
|
82
|
+
version: '4.4'
|
41
83
|
- !ruby/object:Gem::Dependency
|
42
84
|
name: simplecov
|
43
85
|
requirement: !ruby/object:Gem::Requirement
|
44
86
|
requirements:
|
45
|
-
- -
|
87
|
+
- - "~>"
|
46
88
|
- !ruby/object:Gem::Version
|
47
|
-
version: 0.
|
89
|
+
version: '0.9'
|
48
90
|
type: :development
|
49
91
|
prerelease: false
|
50
92
|
version_requirements: !ruby/object:Gem::Requirement
|
51
93
|
requirements:
|
52
|
-
- -
|
94
|
+
- - "~>"
|
53
95
|
- !ruby/object:Gem::Version
|
54
|
-
version: 0.
|
96
|
+
version: '0.9'
|
55
97
|
- !ruby/object:Gem::Dependency
|
56
98
|
name: coveralls
|
57
99
|
requirement: !ruby/object:Gem::Requirement
|
58
100
|
requirements:
|
59
|
-
- -
|
101
|
+
- - "~>"
|
60
102
|
- !ruby/object:Gem::Version
|
61
|
-
version: 0.7
|
103
|
+
version: '0.7'
|
62
104
|
type: :development
|
63
105
|
prerelease: false
|
64
106
|
version_requirements: !ruby/object:Gem::Requirement
|
65
107
|
requirements:
|
66
|
-
- -
|
108
|
+
- - "~>"
|
67
109
|
- !ruby/object:Gem::Version
|
68
|
-
version: 0.7
|
110
|
+
version: '0.7'
|
69
111
|
description: A simple implementation of Tables, for use in summing, joining, slicing
|
70
112
|
and dicing data tables
|
71
113
|
email: jbf@pentambic.com
|
@@ -73,7 +115,12 @@ executables: []
|
|
73
115
|
extensions: []
|
74
116
|
extra_rdoc_files: []
|
75
117
|
files:
|
76
|
-
-
|
118
|
+
- README.md
|
119
|
+
- capitals.sorted
|
120
|
+
- capitals.txt
|
121
|
+
- cities.txt
|
122
|
+
- doc/OrderedRow.html
|
123
|
+
- doc/Table.html
|
77
124
|
- doc/created.rid
|
78
125
|
- doc/images/add.png
|
79
126
|
- doc/images/arrow_up.png
|
@@ -105,20 +152,15 @@ files:
|
|
105
152
|
- doc/js/jquery.js
|
106
153
|
- doc/js/navigation.js
|
107
154
|
- doc/js/search.js
|
108
|
-
- doc/js/searcher.js
|
109
155
|
- doc/js/search_index.js
|
110
|
-
- doc/
|
156
|
+
- doc/js/searcher.js
|
111
157
|
- doc/rdoc.css
|
112
|
-
- doc/Table.html
|
113
158
|
- doc/table_of_contents.html
|
114
|
-
-
|
115
|
-
- test.tab
|
116
|
-
- cities.txt
|
117
|
-
- capitals.txt
|
118
|
-
- capitals.sorted
|
159
|
+
- lib/tablestakes.rb
|
119
160
|
- spec/factories.rb
|
120
|
-
- spec/table_spec.rb
|
121
161
|
- spec/spec_helper.rb
|
162
|
+
- spec/table_spec.rb
|
163
|
+
- test.tab
|
122
164
|
homepage: http://rubygems.org/gems/tablestakes
|
123
165
|
licenses:
|
124
166
|
- MIT
|
@@ -129,17 +171,17 @@ require_paths:
|
|
129
171
|
- lib
|
130
172
|
required_ruby_version: !ruby/object:Gem::Requirement
|
131
173
|
requirements:
|
132
|
-
- -
|
174
|
+
- - ">="
|
133
175
|
- !ruby/object:Gem::Version
|
134
176
|
version: '0'
|
135
177
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
136
178
|
requirements:
|
137
|
-
- -
|
179
|
+
- - ">="
|
138
180
|
- !ruby/object:Gem::Version
|
139
181
|
version: '0'
|
140
182
|
requirements: []
|
141
183
|
rubyforge_project:
|
142
|
-
rubygems_version: 2.
|
184
|
+
rubygems_version: 2.2.2
|
143
185
|
signing_key:
|
144
186
|
specification_version: 4
|
145
187
|
summary: Implementation of in-memory Tables
|
@@ -151,3 +193,4 @@ test_files:
|
|
151
193
|
- spec/factories.rb
|
152
194
|
- spec/table_spec.rb
|
153
195
|
- spec/spec_helper.rb
|
196
|
+
has_rdoc:
|