dreader 1.1.1 → 1.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.org +8 -0
- data/README.org +9 -8
- data/examples/age_csv/Birthdays-TabSeparated.csv +13 -0
- data/examples/age_csv/Birthdays.csv +13 -0
- data/examples/age_csv/age.rb +55 -0
- data/examples/age_noext/Birthdays +0 -0
- data/examples/age_noext/Birthdays-xlsx +0 -0
- data/examples/age_noext/Birthdays-xlsx-with-wrong-extension.xls +0 -0
- data/examples/age_noext/age.rb +73 -0
- data/lib/dreader/engine.rb +20 -12
- data/lib/dreader/version.rb +1 -1
- metadata +9 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d59887423bcb1658823534ca3d8a5505899cd70a5f8d23eda235159c590cf364
|
4
|
+
data.tar.gz: b17d71ed8d7db969fcc872a3f01cb6fdfbfaff69e0030ffc304ebc481a15675d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1407751e4baa35d4c6644cc9c9ebea7a8185febd2211e6b76c86a3001e8972d58061b6946a178dd007043c897a9943d41971e0868dab2e9e332350a5436bfff1
|
7
|
+
data.tar.gz: da163158d92a1618de0218f5285fe189f3ec5fe78b0d815c6b873574175c817ef4134725ff70a174b0206fb0da1770f9888044b076dbfc8e62b79f22e10930a6
|
data/CHANGELOG.org
CHANGED
@@ -1,5 +1,13 @@
|
|
1
1
|
#+TITLE: Changelog
|
2
2
|
|
3
|
+
* Version 1.1.2 - <2023-10-31 Tue>
|
4
|
+
** Fixes an issue with the :extension option
|
5
|
+
|
6
|
+
- Fixes a bug related to =:extension= and adds a working example, to test
|
7
|
+
the feature
|
8
|
+
- Changes the extension from a string to a symbol. No initial dot required
|
9
|
+
any longer
|
10
|
+
|
3
11
|
* Version 1.1.1 - <2023-10-16 Mon>
|
4
12
|
** Adds option :extension
|
5
13
|
|
data/README.org
CHANGED
@@ -165,12 +165,13 @@ Require =dreader= and declare a class which extends =Dreader::Engine=:
|
|
165
165
|
end
|
166
166
|
#+END_EXAMPLE
|
167
167
|
|
168
|
-
|
168
|
+
Specify parsing option in the class, using the following syntax:
|
169
169
|
|
170
170
|
#+BEGIN_EXAMPLE ruby
|
171
171
|
options do
|
172
172
|
filename 'example.ods'
|
173
|
-
|
173
|
+
# this optional. Use it when the file does not have an extension
|
174
|
+
extension :ods
|
174
175
|
|
175
176
|
sheet 'Sheet 1'
|
176
177
|
|
@@ -190,10 +191,10 @@ where:
|
|
190
191
|
to supply a filename when loading the file (see =read=, below). *Use
|
191
192
|
=.tsv= for tab-separated files.*
|
192
193
|
- (optional) =extension= overrides or specify the extension of =filename=.
|
193
|
-
Takes as input
|
194
|
-
**value of this option is not appended to filename** (see =read=
|
195
|
-
Filename must thus be a valid reference to a file in the file
|
196
|
-
option is useful in one of these two circumstances:
|
194
|
+
Takes as input a symbol (e.g., =:xlsx=).
|
195
|
+
Notice that **value of this option is not appended to filename** (see =read=
|
196
|
+
below). Filename must thus be a valid reference to a file in the file
|
197
|
+
system. This option is useful in one of these two circumstances:
|
197
198
|
1. When =filename= has no extension
|
198
199
|
2. When you want to override the extension of the filename, e.g., to force
|
199
200
|
reading a "file.csv" as a tab separated file
|
@@ -464,8 +465,8 @@ A typical scenario works as follows:
|
|
464
465
|
# examples:
|
465
466
|
# i.read
|
466
467
|
# i.read filename: "example.ods"
|
467
|
-
# i.read filename: "example.ods", extension:
|
468
|
-
# i.read filename: "example", extension:
|
468
|
+
# i.read filename: "example.ods", extension: :ods
|
469
|
+
# i.read filename: "example", extension: :ods
|
469
470
|
# (the line above opens the file "example" as an Open Document Spreasdheet)
|
470
471
|
i.read
|
471
472
|
|
@@ -0,0 +1,13 @@
|
|
1
|
+
Name Date of birth
|
2
|
+
Forest Whitaker July 15, 1961
|
3
|
+
Daniel Day-Lewis April 29, 1957
|
4
|
+
Sean Penn August 17, 1960
|
5
|
+
Jeff Bridges December 4, 1949
|
6
|
+
Colin Firth September 10, 1960
|
7
|
+
Jean Dujardin June 19, 1972
|
8
|
+
Daniel Day-Lewis April 29, 1957
|
9
|
+
Matthew McConaughey November 4, 1969
|
10
|
+
Eddie Redmayne January 6, 1982
|
11
|
+
Leonardo DiCaprio November 11, 1974
|
12
|
+
Casey Affleck August 12, 1975
|
13
|
+
Gary Oldman March 21, 1958
|
@@ -0,0 +1,13 @@
|
|
1
|
+
Name,Date of birth
|
2
|
+
Forest Whitaker,"July 15, 1961"
|
3
|
+
Daniel Day-Lewis,"April 29, 1957"
|
4
|
+
Sean Penn,"August 17, 1960"
|
5
|
+
Jeff Bridges,"December 4, 1949"
|
6
|
+
Colin Firth,"September 10, 1960"
|
7
|
+
Jean Dujardin,"June 19, 1972"
|
8
|
+
Daniel Day-Lewis,"April 29, 1957"
|
9
|
+
Matthew McConaughey,"November 4, 1969"
|
10
|
+
Eddie Redmayne,"January 6, 1982"
|
11
|
+
Leonardo DiCaprio,"November 11, 1974"
|
12
|
+
Casey Affleck,"August 12, 1975"
|
13
|
+
Gary Oldman,"March 21, 1958"
|
@@ -0,0 +1,55 @@
|
|
1
|
+
require "dreader"
|
2
|
+
|
3
|
+
class Reader
|
4
|
+
extend Dreader::Engine
|
5
|
+
|
6
|
+
options do
|
7
|
+
first_row 2
|
8
|
+
debug true
|
9
|
+
end
|
10
|
+
|
11
|
+
column :name do
|
12
|
+
doc "A is the name string"
|
13
|
+
colref 'A'
|
14
|
+
end
|
15
|
+
|
16
|
+
column :birthdate do
|
17
|
+
doc "Birthdate contains a full date (i.e., including the year)"
|
18
|
+
colref 'B'
|
19
|
+
|
20
|
+
process do |c|
|
21
|
+
Date.parse(c)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
virtual_column :age do
|
26
|
+
process do |row|
|
27
|
+
birthdate = row[:birthdate][:value]
|
28
|
+
birthday = Date.new(Date.today.year, birthdate.month, birthdate.day)
|
29
|
+
today = Date.today
|
30
|
+
|
31
|
+
[0, today.year - birthdate.year - (birthday < today ? 1 : 0)].max
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
mapping do |row|
|
36
|
+
r = Dreader::Util.simplify(row)
|
37
|
+
puts "#{r[:name]} is #{r[:age]} years old (born on #{r[:birthdate]})"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
i = Reader
|
42
|
+
i.read filename: "Birthdays.csv", mapping: true
|
43
|
+
|
44
|
+
i.read filename: "Birthdays-TabSeparated.csv", extension: :tsv, mapping: true
|
45
|
+
|
46
|
+
#
|
47
|
+
# Here we can do further processing on the data
|
48
|
+
#
|
49
|
+
File.open("ages.txt", "w") do |file|
|
50
|
+
i.table.each do |row|
|
51
|
+
unless row[:row_errors].any?
|
52
|
+
file.puts "#{row[:name][:value]} #{row[:age][:value]}"
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,73 @@
|
|
1
|
+
require "dreader"
|
2
|
+
|
3
|
+
class Reader
|
4
|
+
extend Dreader::Engine
|
5
|
+
|
6
|
+
options do
|
7
|
+
first_row 2
|
8
|
+
debug true
|
9
|
+
extension :ods
|
10
|
+
end
|
11
|
+
|
12
|
+
column :name do
|
13
|
+
doc "A is the name string"
|
14
|
+
colref 'A'
|
15
|
+
end
|
16
|
+
|
17
|
+
column :birthdate do
|
18
|
+
doc "Birthdate contains a full date (i.e., including the year)"
|
19
|
+
colref 'B'
|
20
|
+
|
21
|
+
process do |c|
|
22
|
+
Date.parse(c)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
virtual_column :age do
|
27
|
+
process do |row|
|
28
|
+
birthdate = row[:birthdate][:value]
|
29
|
+
birthday = Date.new(Date.today.year, birthdate.month, birthdate.day)
|
30
|
+
today = Date.today
|
31
|
+
|
32
|
+
[0, today.year - birthdate.year - (birthday < today ? 1 : 0)].max
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
mapping do |row|
|
37
|
+
r = Dreader::Util.simplify(row)
|
38
|
+
puts "#{r[:name]} is #{r[:age]} years old (born on #{r[:birthdate]})"
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
puts
|
43
|
+
puts "*****************************************************************"
|
44
|
+
puts "Reading ODS with no extension, using extension set in the options"
|
45
|
+
puts "*****************************************************************"
|
46
|
+
puts
|
47
|
+
|
48
|
+
i = Reader
|
49
|
+
i.read filename: "Birthdays"
|
50
|
+
i.virtual_columns
|
51
|
+
i.mappings
|
52
|
+
|
53
|
+
puts
|
54
|
+
puts "*****************************************************************"
|
55
|
+
puts "Reading XLSX with wrong extension, overriding existing extension"
|
56
|
+
puts "*****************************************************************"
|
57
|
+
puts
|
58
|
+
|
59
|
+
i = Reader
|
60
|
+
i.read filename: "Birthdays-xlsx-with-wrong-extension.xls", extension: :xlsx
|
61
|
+
i.virtual_columns
|
62
|
+
i.mappings
|
63
|
+
|
64
|
+
puts
|
65
|
+
puts "*****************************************************************"
|
66
|
+
puts "Reading XLSX with no extension"
|
67
|
+
puts "*****************************************************************"
|
68
|
+
puts
|
69
|
+
|
70
|
+
i = Reader
|
71
|
+
i.read filename: "Birthdays-xlsx", extension: :xlsx
|
72
|
+
i.virtual_columns
|
73
|
+
i.mappings
|
data/lib/dreader/engine.rb
CHANGED
@@ -398,28 +398,36 @@ module Dreader
|
|
398
398
|
# list of keys we support in options. We remove them when reading
|
399
399
|
# the CSV file
|
400
400
|
OPTION_KEYS = %i[
|
401
|
-
filename sheet first_row last_row
|
401
|
+
filename extension sheet first_row last_row
|
402
|
+
logger logger_level
|
403
|
+
debug
|
402
404
|
]
|
403
405
|
|
404
406
|
def open_spreadsheet(options)
|
405
407
|
filename = options[:filename]
|
406
|
-
|
408
|
+
# use the extension option or make ".CSV" into :csv
|
409
|
+
extension = options[:extension] || File.extname(filename).downcase[1..-1]&.to_sym
|
407
410
|
|
408
|
-
|
409
|
-
|
411
|
+
|
412
|
+
# TODO: MAKE DEBUG AND LOGGER INTO REAL CLASS VARIABLES OR MAKE LOCAL AND/OR FUNCTIONS
|
413
|
+
@debug = @declared_options.merge(options)[:debug] == true
|
414
|
+
if @debug
|
415
|
+
@logger = options[:logger] || Logger.new($stdout)
|
416
|
+
@logger.debug "[dreader open_spreadsheet] filename: #{filename}"
|
417
|
+
@logger.debug "[dreader open_spreadsheet] extension: #{extension}"
|
418
|
+
end
|
419
|
+
|
420
|
+
case extension
|
421
|
+
when :csv
|
410
422
|
csv_options = @declared_options.except(*OPTION_KEYS)
|
411
423
|
Roo::CSV.new(filename, csv_options:)
|
412
|
-
when
|
424
|
+
when :tsv
|
413
425
|
csv_options = @declared_options.except(*OPTION_KEYS).merge({ col_sep: "\t" })
|
414
426
|
Roo::CSV.new(filename, csv_options:)
|
415
|
-
when
|
416
|
-
Roo::
|
417
|
-
when ".xls"
|
418
|
-
Roo::Excel.new(filename)
|
419
|
-
when ".xlsx"
|
420
|
-
Roo::Excelx.new(filename)
|
427
|
+
when :ods, :xls, :xlsx
|
428
|
+
Roo::Spreadsheet.open(filename, extension:)
|
421
429
|
else
|
422
|
-
raise "Unknown extension: #{ext}"
|
430
|
+
raise "Unknown extension: #{ext}. Use the :extension option."
|
423
431
|
end
|
424
432
|
end
|
425
433
|
|
data/lib/dreader/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dreader
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Adolfo Villafiorita
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-11-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: roo
|
@@ -108,6 +108,13 @@ files:
|
|
108
108
|
- dreader.gemspec
|
109
109
|
- examples/age/Birthdays.ods
|
110
110
|
- examples/age/age.rb
|
111
|
+
- examples/age_csv/Birthdays-TabSeparated.csv
|
112
|
+
- examples/age_csv/Birthdays.csv
|
113
|
+
- examples/age_csv/age.rb
|
114
|
+
- examples/age_noext/Birthdays
|
115
|
+
- examples/age_noext/Birthdays-xlsx
|
116
|
+
- examples/age_noext/Birthdays-xlsx-with-wrong-extension.xls
|
117
|
+
- examples/age_noext/age.rb
|
111
118
|
- examples/age_with_multiple_checks/Birthdays.ods
|
112
119
|
- examples/age_with_multiple_checks/age_with_multiple_checks.rb
|
113
120
|
- examples/local_vars/local_vars.rb
|