metacrunch-file 1.4.0 → 1.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Readme.md +20 -1
- data/lib/metacrunch/file.rb +1 -0
- data/lib/metacrunch/file/csv_destination.rb +49 -0
- data/lib/metacrunch/file/version.rb +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 873e28ee7fabd11484426b0282b9857025b95452ec7cabffabf98a163326f8e5
|
4
|
+
data.tar.gz: 46f10b360760fa3259d46a1578ee62bffb9134511d4fd76ca0247d12b91f4866
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 28f0edd5914fac3b1611943e8d8bbdbb9c2c33a92c4fd45cd3b579a61cbf7eaf2c6db489878ff878d31ceeb75262ff76f95fedf4739e9e90e13cf892e2cf0de8
|
7
|
+
data.tar.gz: 62aec554a36543043909c814d1331dc3951997be24fcc9c6a4839b10d454c7f4287160aaf99c80a7bed33d2a495e8bce676fe17e29c26ee03e7ce8774be40940
|
data/Readme.md
CHANGED
@@ -17,7 +17,7 @@ Installation
|
|
17
17
|
Include the gem in your `Gemfile`
|
18
18
|
|
19
19
|
```ruby
|
20
|
-
gem "metacrunch-file", "~> 1.
|
20
|
+
gem "metacrunch-file", "~> 1.5.0"
|
21
21
|
```
|
22
22
|
|
23
23
|
and run `$ bundle install` to install it.
|
@@ -98,6 +98,25 @@ source Metacrunch::File::CSVSource.new("my.csv" [, OPTIONS])
|
|
98
98
|
* `quote_char`: Quotation character. Defaults to `"`.
|
99
99
|
* `file_encoding`: Set the file encoding. Defaults to `utf-8`.
|
100
100
|
|
101
|
+
## `Metacrunch::File::CSVDestination`
|
102
|
+
|
103
|
+
This class provides a metacrunch `desination` for writing CSV files. Because [smarter_csv](https://github.com/tilo/smarter_csv) can only be used to read CSV, this class uses Ruby's [build in CSV feature](https://ruby-doc.org/stdlib/libdoc/csv/rdoc/CSV.html) under the hood.
|
104
|
+
|
105
|
+
```ruby
|
106
|
+
# my_job.metacrunch
|
107
|
+
|
108
|
+
destination Metacrunch::File::CSVDestination.new(
|
109
|
+
"result.csv", # filename
|
110
|
+
["Header 1", "Header 2", ...], # headers
|
111
|
+
[, OPTIONS]
|
112
|
+
)
|
113
|
+
```
|
114
|
+
|
115
|
+
**Options**
|
116
|
+
|
117
|
+
* `override_existing_file`: Overrides an existing file if set to `true`. If set to `false` an error is raised if the file already exists. Defaults to `false`.
|
118
|
+
* `csv_options`: Set options for CSV generation as `col_sep`. Full list is [here](https://ruby-doc.org/stdlib/libdoc/csv/rdoc/CSV.html#class-CSV-label-Options).
|
119
|
+
|
101
120
|
## `Metacrunch::File::XLSXDestination`
|
102
121
|
|
103
122
|
This class provides a metacrunch `destination` implementation to create simple Excel (xlsx) files.
|
data/lib/metacrunch/file.rb
CHANGED
@@ -0,0 +1,49 @@
|
|
1
|
+
require "metacrunch/file"
|
2
|
+
|
3
|
+
module Metacrunch
|
4
|
+
class File::CSVDestination
|
5
|
+
|
6
|
+
DEFAULT_OPTIONS = {
|
7
|
+
override_existing_file: false,
|
8
|
+
csv_options: {}
|
9
|
+
}
|
10
|
+
|
11
|
+
def initialize(filename, headers, options = {})
|
12
|
+
@filename = ::File.expand_path(filename)
|
13
|
+
@headers = headers
|
14
|
+
@options = DEFAULT_OPTIONS.deep_merge(options)
|
15
|
+
|
16
|
+
if ::File.exists?(@filename) && @options[:override_existing_file] == false
|
17
|
+
raise "File `#{@filename}` exists but `override_existing_file` option was set to `false`"
|
18
|
+
end
|
19
|
+
|
20
|
+
@file = ::File.open(@filename, 'wb+')
|
21
|
+
|
22
|
+
if @headers.present?
|
23
|
+
raise ArgumentError, "Headers must be an Array" unless @headers.is_a?(Array)
|
24
|
+
csv_str = CSV.generate_line(@headers, **@options[:csv_options])
|
25
|
+
@file.write(csv_str)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def write(data)
|
30
|
+
return if data.blank?
|
31
|
+
raise ArgumentError, "Data must be an Array" unless data.is_a?(Array)
|
32
|
+
|
33
|
+
if data.first.is_a?(Array)
|
34
|
+
data.each do |d|
|
35
|
+
csv_str = CSV.generate_line(d, **@options[:csv_options])
|
36
|
+
@file.write(csv_str)
|
37
|
+
end
|
38
|
+
else
|
39
|
+
csv_str = CSV.generate_line(data, **@options[:csv_options])
|
40
|
+
@file.write(csv_str)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def close
|
45
|
+
@file.close if @file
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: metacrunch-file
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- René Sprotte
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-08-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -67,6 +67,7 @@ files:
|
|
67
67
|
- Readme.md
|
68
68
|
- bin/console
|
69
69
|
- lib/metacrunch/file.rb
|
70
|
+
- lib/metacrunch/file/csv_destination.rb
|
70
71
|
- lib/metacrunch/file/csv_source.rb
|
71
72
|
- lib/metacrunch/file/destination.rb
|
72
73
|
- lib/metacrunch/file/entry.rb
|
@@ -95,7 +96,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
95
96
|
- !ruby/object:Gem::Version
|
96
97
|
version: '0'
|
97
98
|
requirements: []
|
98
|
-
rubygems_version: 3.
|
99
|
+
rubygems_version: 3.2.22
|
99
100
|
signing_key:
|
100
101
|
specification_version: 4
|
101
102
|
summary: File package for the metacrunch ETL toolkit.
|