fat_table 0.3.1 → 0.3.3
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/.travis.yml +1 -1
- data/fat_table.gemspec +2 -2
- data/lib/fat_table/column.rb +27 -0
- data/lib/fat_table/table.rb +28 -2
- data/lib/fat_table/version.rb +1 -1
- metadata +19 -19
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d95bf4d370e8c501b679aba77975ee9404940383a0058718d4c906b491ef195d
|
4
|
+
data.tar.gz: fc39721ae44a5e656bfb8d6225164aa74cf0bdf21246b1eec4c247572b73bf30
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a532d371acf8e0a8fe36e83410c646a12125af501638749bf69f6c85fedcabf7eabf6b6edd5579eb0b32df42220cdac2f7ce018447b2734749e735815ac53ff2
|
7
|
+
data.tar.gz: 555e412df95d31e035debb960c5dc86bfba4ec5b4c9827ea7ec19ef2458a18b01f54d4c620e69c621800ddb31bde7ab9e4d7034c9c53380ee301322260647c49
|
data/.travis.yml
CHANGED
data/fat_table.gemspec
CHANGED
@@ -68,16 +68,16 @@ Gem::Specification.new do |spec|
|
|
68
68
|
spec.add_development_dependency 'pry'
|
69
69
|
spec.add_development_dependency 'pry-byebug'
|
70
70
|
spec.add_development_dependency 'pry-doc'
|
71
|
-
spec.add_development_dependency 'ruby_jard'
|
72
71
|
spec.add_development_dependency 'rake', '~> 13.0'
|
73
72
|
spec.add_development_dependency 'redcarpet'
|
73
|
+
spec.add_development_dependency 'pg'
|
74
74
|
spec.add_development_dependency 'rspec', '~> 3.0'
|
75
75
|
spec.add_development_dependency 'rubocop-rspec'
|
76
76
|
spec.add_development_dependency 'rubocop-performance'
|
77
77
|
spec.add_development_dependency 'simplecov'
|
78
78
|
|
79
79
|
spec.add_runtime_dependency 'activesupport', '>3.0'
|
80
|
-
spec.add_runtime_dependency 'fat_core', '>= 4.
|
80
|
+
spec.add_runtime_dependency 'fat_core', '>= 4.9.0'
|
81
81
|
spec.add_runtime_dependency 'rainbow'
|
82
82
|
spec.add_runtime_dependency 'sequel'
|
83
83
|
spec.add_runtime_dependency 'gem-path'
|
data/lib/fat_table/column.rb
CHANGED
@@ -139,6 +139,19 @@ module FatTable
|
|
139
139
|
size - 1
|
140
140
|
end
|
141
141
|
|
142
|
+
# :category: Attributes
|
143
|
+
|
144
|
+
# Force the column to have String type and then convert all items to
|
145
|
+
# strings.
|
146
|
+
def force_to_string_type
|
147
|
+
# msg = "Can only force an empty column to String type"
|
148
|
+
# raise UserError, msg unless empty?
|
149
|
+
@type = 'String'
|
150
|
+
unless empty?
|
151
|
+
@items = items.map(&:to_s)
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
142
155
|
##########################################################################
|
143
156
|
# Enumerable
|
144
157
|
##########################################################################
|
@@ -494,6 +507,15 @@ module FatTable
|
|
494
507
|
AMR_DATE_RE = %r{(?<dy>\d\d?)[-/](?<mo>\d\d?)[-/](?<yr>\d\d\d\d)\s*
|
495
508
|
(?<tm>T\d\d:\d\d:\d\d(\+\d\d:\d\d)?)?}x
|
496
509
|
|
510
|
+
# A Date like 'Tue, 01 Nov 2016' or 'Tue 01 Nov 2016' or '01 Nov 2016'.
|
511
|
+
# These are emitted by Postgresql, so it makes from_sql constructor
|
512
|
+
# possible without special formatting of the dates.
|
513
|
+
INV_DATE_RE = %r{((mon|tue|wed|thu|fri|sat|sun)[a-zA-z]*,?)?\s+ # looks like dow
|
514
|
+
(?<dy>\d\d?)\s+ # one or two-digit day
|
515
|
+
(?<mo_name>[jfmasondJFMASOND][A-Za-z]{2,})\s+ # looks like a month name
|
516
|
+
(?<yr>\d\d\d\d) # and a 4-digit year
|
517
|
+
}xi
|
518
|
+
|
497
519
|
# Convert the val to a DateTime if it is either a DateTime, a Date, a Time, or a
|
498
520
|
# String that can be parsed as a DateTime, otherwise return nil. It only
|
499
521
|
# recognizes strings that contain a something like '2016-01-14' or '2/12/1985'
|
@@ -503,6 +525,7 @@ module FatTable
|
|
503
525
|
def convert_to_date_time(val)
|
504
526
|
return val if val.is_a?(DateTime)
|
505
527
|
return val if val.is_a?(Date)
|
528
|
+
return val.to_datetime if val.is_a?(Time)
|
506
529
|
begin
|
507
530
|
str = val.to_s.clean
|
508
531
|
return nil if str.blank?
|
@@ -513,6 +536,10 @@ module FatTable
|
|
513
536
|
date = DateTime.new(Regexp.last_match[:yr].to_i,
|
514
537
|
Regexp.last_match[:mo].to_i,
|
515
538
|
Regexp.last_match[:dy].to_i)
|
539
|
+
elsif str =~ INV_DATE_RE
|
540
|
+
mo = Date.mo_name_to_num(last_match[:mo_name])
|
541
|
+
date = DateTime.new(Regexp.last_match[:yr].to_i, mo,
|
542
|
+
Regexp.last_match[:dy].to_i)
|
516
543
|
else
|
517
544
|
return nil
|
518
545
|
end
|
data/lib/fat_table/table.rb
CHANGED
@@ -158,7 +158,8 @@ module FatTable
|
|
158
158
|
raise UserError, msg if FatTable.db.nil?
|
159
159
|
|
160
160
|
result = Table.new
|
161
|
-
FatTable.db[query]
|
161
|
+
rows = FatTable.db[query]
|
162
|
+
rows.each do |h|
|
162
163
|
result << h
|
163
164
|
end
|
164
165
|
result
|
@@ -297,6 +298,8 @@ module FatTable
|
|
297
298
|
# :category: Attributes
|
298
299
|
|
299
300
|
# Return the table's Column with the given +key+ as its header.
|
301
|
+
# @param key [Symbol] symbol for header of column to return
|
302
|
+
# @return [FatTable::Column]
|
300
303
|
def column(key)
|
301
304
|
columns.detect { |c| c.header == key.as_sym }
|
302
305
|
end
|
@@ -311,6 +314,15 @@ module FatTable
|
|
311
314
|
|
312
315
|
# :category: Attributes
|
313
316
|
|
317
|
+
# Set the column type for Column with the given +key+ as a String type,
|
318
|
+
# but only if empty. Otherwise, we would have to worry about converting
|
319
|
+
# existing items in the column to String. Perhaps that's a TODO.
|
320
|
+
def set_column_to_string_type(key)
|
321
|
+
column(key).force_to_string_type
|
322
|
+
end
|
323
|
+
|
324
|
+
# :category: Attributes
|
325
|
+
|
314
326
|
# Return the array of items of the column with the given header symbol
|
315
327
|
# +key+, or if +key+ is an Integer, return that row at that index. So a
|
316
328
|
# table's rows can be accessed by number, and its columns can be accessed by
|
@@ -980,6 +992,11 @@ module FatTable
|
|
980
992
|
#
|
981
993
|
# Any groups present in either Table are eliminated in the output Table. See
|
982
994
|
# the README for examples.
|
995
|
+
# @param other [FatTable::Table] table to join with self
|
996
|
+
# @param exps [Array<String>, Array<Symbol>] table to join with self
|
997
|
+
# @param join_type [Array<String>, Array<Symbol>] type of join :inner, :left, :right, :full, :cross
|
998
|
+
# @return [FatTable::Table] result of joining self to other
|
999
|
+
#
|
983
1000
|
def join(other, *exps, join_type: :inner)
|
984
1001
|
unless other.is_a?(Table)
|
985
1002
|
raise UserError, 'need other table as first argument to join'
|
@@ -1274,6 +1291,15 @@ module FatTable
|
|
1274
1291
|
|
1275
1292
|
# :category: Constructors
|
1276
1293
|
|
1294
|
+
# Add a group boundary mark at the given row, or at the end of the table
|
1295
|
+
# by default.
|
1296
|
+
def add_boundary(at_row = nil)
|
1297
|
+
row = at_row || (size - 1)
|
1298
|
+
@boundaries << row
|
1299
|
+
end
|
1300
|
+
|
1301
|
+
# :category: Constructors
|
1302
|
+
|
1277
1303
|
# Add a +row+ represented by a Hash having the headers as keys. If +mark:+
|
1278
1304
|
# is set true, mark this row as a boundary. All tables should be built
|
1279
1305
|
# ultimately using this method as a primitive.
|
@@ -1283,7 +1309,7 @@ module FatTable
|
|
1283
1309
|
columns << Column.new(header: k) unless column?(k)
|
1284
1310
|
column(key) << v
|
1285
1311
|
end
|
1286
|
-
|
1312
|
+
add_boundary if mark
|
1287
1313
|
self
|
1288
1314
|
end
|
1289
1315
|
|
data/lib/fat_table/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fat_table
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel E. Doherty
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-01-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -81,35 +81,35 @@ dependencies:
|
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
84
|
+
name: rake
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- - "
|
87
|
+
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: '0'
|
89
|
+
version: '13.0'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- - "
|
94
|
+
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version: '0'
|
96
|
+
version: '13.0'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
98
|
+
name: redcarpet
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
|
-
- - "
|
101
|
+
- - ">="
|
102
102
|
- !ruby/object:Gem::Version
|
103
|
-
version: '
|
103
|
+
version: '0'
|
104
104
|
type: :development
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
|
-
- - "
|
108
|
+
- - ">="
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version: '
|
110
|
+
version: '0'
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
|
-
name:
|
112
|
+
name: pg
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
115
|
- - ">="
|
@@ -198,14 +198,14 @@ dependencies:
|
|
198
198
|
requirements:
|
199
199
|
- - ">="
|
200
200
|
- !ruby/object:Gem::Version
|
201
|
-
version:
|
201
|
+
version: 4.9.0
|
202
202
|
type: :runtime
|
203
203
|
prerelease: false
|
204
204
|
version_requirements: !ruby/object:Gem::Requirement
|
205
205
|
requirements:
|
206
206
|
- - ">="
|
207
207
|
- !ruby/object:Gem::Version
|
208
|
-
version:
|
208
|
+
version: 4.9.0
|
209
209
|
- !ruby/object:Gem::Dependency
|
210
210
|
name: rainbow
|
211
211
|
requirement: !ruby/object:Gem::Requirement
|
@@ -320,7 +320,7 @@ licenses: []
|
|
320
320
|
metadata:
|
321
321
|
allowed_push_host: https://rubygems.org
|
322
322
|
yard.run: yri
|
323
|
-
post_install_message:
|
323
|
+
post_install_message:
|
324
324
|
rdoc_options: []
|
325
325
|
require_paths:
|
326
326
|
- lib
|
@@ -335,8 +335,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
335
335
|
- !ruby/object:Gem::Version
|
336
336
|
version: '0'
|
337
337
|
requirements: []
|
338
|
-
rubygems_version: 3.
|
339
|
-
signing_key:
|
338
|
+
rubygems_version: 3.3.3
|
339
|
+
signing_key:
|
340
340
|
specification_version: 4
|
341
341
|
summary: Provides tools for working with tables as a data type.
|
342
342
|
test_files: []
|