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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 977122ff680c98f9e5165702a3130200b042df43
4
- data.tar.gz: a6147f0ae26a876cbf11930790339d8152aa2f15
2
+ SHA256:
3
+ metadata.gz: 4e4a65efd034bdead0d7c0208caaceeec96496fb8709318ccb1872a7536dff1c
4
+ data.tar.gz: 378c85f8935aff6d2f61add4fd9c05892fa67a4d50af2a869fb97a95328beae3
5
5
  SHA512:
6
- metadata.gz: 1fad4cc967a08b68108f907b8015e2b3884d05f34f73656e67823196cdc1c6d1cf868c035654416eb2db44b6d069e5ea4d78e042a0d3f651f759c44d0e312588
7
- data.tar.gz: d61c0e4b4a4210bb513cac29c14c059c6c48a0fa8ec3cd477e0b6e0937737dcd7b5d5889efa565be383d9861b7fc3e384a0c5a7aa6dcc656e39fb7cc4d7a2fec
6
+ metadata.gz: 71b81601407bdf4d917355020227cb8b19bb8590d3990915855be8b721bf30279f68d1cf9ec8dae2200a498faa1c18138aaf89839a2c873476a607c0e533833a
7
+ data.tar.gz: 59e81aabbec9f5d497b44c4268ef9defa209920f2caeb1c119cab218e615d4b4d8beb91a4deed8a404466c1ab1ac918d80811779ea5deeda0c12234b76bee213
data/Gemfile CHANGED
@@ -1,3 +1,5 @@
1
+ source 'https://rubygems.org'
2
+
1
3
  group :development, :test do
2
4
  gem 'jeweler'
3
5
  gem 'mocha'
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.6.0)
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.1)
32
+ jwt (2.2.2)
32
33
  mime-types (2.99.3)
33
34
  mini_portile2 (2.4.0)
34
- minitest (5.14.0)
35
- mocha (1.11.2)
36
- multi_json (1.14.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.9)
40
+ nokogiri (1.10.10)
40
41
  mini_portile2 (~> 2.4.0)
41
- oauth2 (1.4.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.0)
48
- rack (2.2.2)
49
- rake (13.0.1)
48
+ psych (3.3.1)
49
+ rack (2.2.3)
50
+ rake (13.0.3)
50
51
  rchardet (1.8.0)
51
- rdoc (6.2.1)
52
+ rdoc (6.3.0)
52
53
  semver2 (3.4.2)
53
54
  thread_safe (0.3.6)
54
55
 
55
56
  PLATFORMS
56
- ruby
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.1.4
65
+ 2.2.15
data/VERSION CHANGED
@@ -1 +1 @@
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.1.0 ruby lib
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.1.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 = "2015-11-03"
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 = "2.2.2"
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>, [">= 0"])
41
- s.add_development_dependency(%q<mocha>, [">= 0"])
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>, [">= 0"])
44
- s.add_dependency(%q<mocha>, [">= 0"])
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>, [">= 0"])
48
- s.add_dependency(%q<mocha>, [">= 0"])
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
 
@@ -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
- { input: input_for_next_patch, output: output_for_next_patch(batch), changes: batch.changes }
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
@@ -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(options[:changes], @revision_result)
15
+ @revision = Revision.new(
16
+ options[:changes], @revision_result, options[:id_column]
17
+ )
16
18
  end
17
19
 
18
20
  def apply
@@ -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 = line
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.values.each do |addition|
27
- emit generate_new_row(addition)
28
- end
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.delete id_of(row)
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.1.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: 2015-11-03 00:00:00.000000000 Z
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
- rubyforge_project:
80
- rubygems_version: 2.6.14.3
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: []