csv_patch 1.1.1 → 1.2.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 +5 -5
- data/Gemfile +2 -0
- data/Gemfile.lock +14 -13
- data/VERSION +1 -1
- data/csv_patch.gemspec +21 -18
- data/lib/csv_patch/batches.rb +7 -1
- data/lib/csv_patch/patch.rb +3 -1
- data/lib/csv_patch/revision.rb +19 -7
- metadata +21 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 4e4a65efd034bdead0d7c0208caaceeec96496fb8709318ccb1872a7536dff1c
|
4
|
+
data.tar.gz: 378c85f8935aff6d2f61add4fd9c05892fa67a4d50af2a869fb97a95328beae3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 71b81601407bdf4d917355020227cb8b19bb8590d3990915855be8b721bf30279f68d1cf9ec8dae2200a498faa1c18138aaf89839a2c873476a607c0e533833a
|
7
|
+
data.tar.gz: 59e81aabbec9f5d497b44c4268ef9defa209920f2caeb1c119cab218e615d4b4d8beb91a4deed8a404466c1ab1ac918d80811779ea5deeda0c12234b76bee213
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
GEM
|
2
|
+
remote: https://rubygems.org/
|
2
3
|
specs:
|
3
4
|
addressable (2.4.0)
|
4
5
|
builder (3.2.4)
|
@@ -6,7 +7,7 @@ GEM
|
|
6
7
|
thread_safe (~> 0.3, >= 0.3.1)
|
7
8
|
faraday (0.9.2)
|
8
9
|
multipart-post (>= 1.2, < 3)
|
9
|
-
git (1.
|
10
|
+
git (1.8.1)
|
10
11
|
rchardet (~> 1.8)
|
11
12
|
github_api (0.16.0)
|
12
13
|
addressable (~> 2.4.0)
|
@@ -28,32 +29,32 @@ GEM
|
|
28
29
|
rake
|
29
30
|
rdoc
|
30
31
|
semver2
|
31
|
-
jwt (2.2.
|
32
|
+
jwt (2.2.2)
|
32
33
|
mime-types (2.99.3)
|
33
34
|
mini_portile2 (2.4.0)
|
34
|
-
minitest (5.14.
|
35
|
-
mocha (1.
|
36
|
-
multi_json (1.
|
35
|
+
minitest (5.14.4)
|
36
|
+
mocha (1.12.0)
|
37
|
+
multi_json (1.15.0)
|
37
38
|
multi_xml (0.6.0)
|
38
39
|
multipart-post (2.1.1)
|
39
|
-
nokogiri (1.10.
|
40
|
+
nokogiri (1.10.10)
|
40
41
|
mini_portile2 (~> 2.4.0)
|
41
|
-
oauth2 (1.4.
|
42
|
+
oauth2 (1.4.7)
|
42
43
|
faraday (>= 0.8, < 2.0)
|
43
44
|
jwt (>= 1.0, < 3.0)
|
44
45
|
multi_json (~> 1.3)
|
45
46
|
multi_xml (~> 0.5)
|
46
47
|
rack (>= 1.2, < 3)
|
47
|
-
psych (3.1
|
48
|
-
rack (2.2.
|
49
|
-
rake (13.0.
|
48
|
+
psych (3.3.1)
|
49
|
+
rack (2.2.3)
|
50
|
+
rake (13.0.3)
|
50
51
|
rchardet (1.8.0)
|
51
|
-
rdoc (6.
|
52
|
+
rdoc (6.3.0)
|
52
53
|
semver2 (3.4.2)
|
53
54
|
thread_safe (0.3.6)
|
54
55
|
|
55
56
|
PLATFORMS
|
56
|
-
|
57
|
+
x86_64-linux
|
57
58
|
|
58
59
|
DEPENDENCIES
|
59
60
|
jeweler
|
@@ -61,4 +62,4 @@ DEPENDENCIES
|
|
61
62
|
mocha
|
62
63
|
|
63
64
|
BUNDLED WITH
|
64
|
-
2.
|
65
|
+
2.2.15
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.2.0
|
data/csv_patch.gemspec
CHANGED
@@ -2,19 +2,19 @@
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
3
|
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
|
-
# stub: csv_patch 1.
|
5
|
+
# stub: csv_patch 1.2.0 ruby lib
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
|
-
s.name = "csv_patch"
|
9
|
-
s.version = "1.
|
8
|
+
s.name = "csv_patch".freeze
|
9
|
+
s.version = "1.2.0"
|
10
10
|
|
11
|
-
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
12
|
-
s.require_paths = ["lib"]
|
13
|
-
s.authors = ["Lyudmil"]
|
14
|
-
s.date = "
|
15
|
-
s.description = "Applies a list of changes in a given format to a CSV file"
|
16
|
-
s.email = "lyudmilangelov@gmail.com"
|
17
|
-
s.executables = ["csv_patch"]
|
11
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
|
12
|
+
s.require_paths = ["lib".freeze]
|
13
|
+
s.authors = ["Lyudmil".freeze]
|
14
|
+
s.date = "2021-04-06"
|
15
|
+
s.description = "Applies a list of changes in a given format to a CSV file".freeze
|
16
|
+
s.email = "lyudmilangelov@gmail.com".freeze
|
17
|
+
s.executables = ["csv_patch".freeze]
|
18
18
|
s.files = [
|
19
19
|
"Gemfile",
|
20
20
|
"Gemfile.lock",
|
@@ -30,22 +30,25 @@ Gem::Specification.new do |s|
|
|
30
30
|
"lib/csv_patch/revision.rb",
|
31
31
|
"lib/csv_patch/stream_batch.rb"
|
32
32
|
]
|
33
|
-
s.rubygems_version = "
|
34
|
-
s.summary = "Apply diffs to a CSV file"
|
33
|
+
s.rubygems_version = "3.0.9".freeze
|
34
|
+
s.summary = "Apply diffs to a CSV file".freeze
|
35
35
|
|
36
36
|
if s.respond_to? :specification_version then
|
37
37
|
s.specification_version = 4
|
38
38
|
|
39
39
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
40
|
-
s.add_development_dependency(%q<jeweler
|
41
|
-
s.add_development_dependency(%q<mocha
|
40
|
+
s.add_development_dependency(%q<jeweler>.freeze, [">= 0"])
|
41
|
+
s.add_development_dependency(%q<mocha>.freeze, [">= 0"])
|
42
|
+
s.add_development_dependency(%q<minitest>.freeze, [">= 0"])
|
42
43
|
else
|
43
|
-
s.add_dependency(%q<jeweler
|
44
|
-
s.add_dependency(%q<mocha
|
44
|
+
s.add_dependency(%q<jeweler>.freeze, [">= 0"])
|
45
|
+
s.add_dependency(%q<mocha>.freeze, [">= 0"])
|
46
|
+
s.add_dependency(%q<minitest>.freeze, [">= 0"])
|
45
47
|
end
|
46
48
|
else
|
47
|
-
s.add_dependency(%q<jeweler
|
48
|
-
s.add_dependency(%q<mocha
|
49
|
+
s.add_dependency(%q<jeweler>.freeze, [">= 0"])
|
50
|
+
s.add_dependency(%q<mocha>.freeze, [">= 0"])
|
51
|
+
s.add_dependency(%q<minitest>.freeze, [">= 0"])
|
49
52
|
end
|
50
53
|
end
|
51
54
|
|
data/lib/csv_patch/batches.rb
CHANGED
@@ -11,6 +11,7 @@ module CsvPatch
|
|
11
11
|
@intermediate_files = []
|
12
12
|
@input, @output = options[:input], options[:output]
|
13
13
|
@batches = StreamBatch.new(options[:changes], options[:batch_size] || DEFAULT_BATCH_SIZE)
|
14
|
+
@id_column = options[:id_column]
|
14
15
|
end
|
15
16
|
|
16
17
|
def execute
|
@@ -29,7 +30,12 @@ module CsvPatch
|
|
29
30
|
end
|
30
31
|
|
31
32
|
def patch_options batch
|
32
|
-
{
|
33
|
+
{
|
34
|
+
input: input_for_next_patch,
|
35
|
+
output: output_for_next_patch(batch),
|
36
|
+
changes: batch.changes,
|
37
|
+
id_column: @id_column
|
38
|
+
}
|
33
39
|
end
|
34
40
|
|
35
41
|
def close_intermediate_files
|
data/lib/csv_patch/patch.rb
CHANGED
@@ -12,7 +12,9 @@ module CsvPatch
|
|
12
12
|
@input, @output = CSV.new(options[:input]), options[:output]
|
13
13
|
|
14
14
|
@revision_result = Tempfile.new(TEMPFILE_NAME)
|
15
|
-
@revision = Revision.new(
|
15
|
+
@revision = Revision.new(
|
16
|
+
options[:changes], @revision_result, options[:id_column]
|
17
|
+
)
|
16
18
|
end
|
17
19
|
|
18
20
|
def apply
|
data/lib/csv_patch/revision.rb
CHANGED
@@ -4,9 +4,10 @@ module CsvPatch
|
|
4
4
|
|
5
5
|
class Revision < Operation
|
6
6
|
|
7
|
-
def initialize changes, output_stream
|
7
|
+
def initialize changes, output_stream, id_column = nil
|
8
8
|
@output_stream = output_stream
|
9
9
|
@changes = changes
|
10
|
+
@id_column = id_column
|
10
11
|
|
11
12
|
header_line([])
|
12
13
|
end
|
@@ -14,7 +15,9 @@ module CsvPatch
|
|
14
15
|
def header_line line
|
15
16
|
return unless line
|
16
17
|
|
17
|
-
@columns
|
18
|
+
@columns = line
|
19
|
+
@id_column_index = @columns.find_index(@id_column)
|
20
|
+
|
18
21
|
mark_all_columns_empty
|
19
22
|
end
|
20
23
|
|
@@ -23,9 +26,13 @@ module CsvPatch
|
|
23
26
|
end
|
24
27
|
|
25
28
|
def add_new_lines
|
26
|
-
@changes
|
27
|
-
|
28
|
-
|
29
|
+
@changes
|
30
|
+
.values
|
31
|
+
.reject { |change| change.nil? }
|
32
|
+
.reject { |change| change[:applied] }
|
33
|
+
.each do |addition|
|
34
|
+
emit generate_new_row(addition)
|
35
|
+
end
|
29
36
|
end
|
30
37
|
|
31
38
|
def column_metadata
|
@@ -74,7 +81,11 @@ module CsvPatch
|
|
74
81
|
end
|
75
82
|
|
76
83
|
def change_for row
|
77
|
-
@changes
|
84
|
+
change = @changes[id_of(row)]
|
85
|
+
return nil if change.nil?
|
86
|
+
|
87
|
+
change[:applied] = true
|
88
|
+
change.reject { |k, _| k == :applied }
|
78
89
|
end
|
79
90
|
|
80
91
|
def update_schema_to_reflect change
|
@@ -83,7 +94,8 @@ module CsvPatch
|
|
83
94
|
end
|
84
95
|
|
85
96
|
def id_of row
|
86
|
-
row.first
|
97
|
+
return row.first if @id_column_index.nil?
|
98
|
+
row[@id_column_index]
|
87
99
|
end
|
88
100
|
|
89
101
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: csv_patch
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lyudmil
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-04-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: jeweler
|
@@ -38,6 +38,20 @@ dependencies:
|
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: minitest
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
41
55
|
description: Applies a list of changes in a given format to a CSV file
|
42
56
|
email: lyudmilangelov@gmail.com
|
43
57
|
executables:
|
@@ -58,10 +72,10 @@ files:
|
|
58
72
|
- lib/csv_patch/patch.rb
|
59
73
|
- lib/csv_patch/revision.rb
|
60
74
|
- lib/csv_patch/stream_batch.rb
|
61
|
-
homepage:
|
75
|
+
homepage:
|
62
76
|
licenses: []
|
63
77
|
metadata: {}
|
64
|
-
post_install_message:
|
78
|
+
post_install_message:
|
65
79
|
rdoc_options: []
|
66
80
|
require_paths:
|
67
81
|
- lib
|
@@ -76,9 +90,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
76
90
|
- !ruby/object:Gem::Version
|
77
91
|
version: '0'
|
78
92
|
requirements: []
|
79
|
-
|
80
|
-
|
81
|
-
signing_key:
|
93
|
+
rubygems_version: 3.0.9
|
94
|
+
signing_key:
|
82
95
|
specification_version: 4
|
83
96
|
summary: Apply diffs to a CSV file
|
84
97
|
test_files: []
|