toml-merge 7.1.7 → 7.1.8

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
2
  SHA256:
3
- metadata.gz: 0ed315a97e4d4f5ea69beffaeec7c2a9d1dc5b1caa1c932d3c88f761e907c2a0
4
- data.tar.gz: 1514f67967281578ded978606d006dee3aceabc200a1a437a5f1a129ad1c6fd2
3
+ metadata.gz: 1810796834272f3e3423cbb775fd038edb68d0517db5c363934accd3a4dcf3f9
4
+ data.tar.gz: b043c07b8a37a470451fd1f5a5eae6aa295f431ebdd197a20528ae1913f5ace3
5
5
  SHA512:
6
- metadata.gz: 575ba0e61f35c318eb3f69ac90bce03cc5254d3a66a523447d794336078d733f6db471ead6dfdc8f6fe721f9862fce826b545b66f5121f2fee7e6d8a0e8bcdc6
7
- data.tar.gz: 220cab9520c8f1466888dbe7d3db898d5a7459f1860aea8d9155636aa3c5eb185d33b73ee67e078cad5dcd1d7615cf1a96ae71921b658c681f92800e057584cd
6
+ metadata.gz: 5f7f680e3207afeba5292b78a972c7de8d58526e6b22876ad3e1374d6473940afd032dced2308f53838d072054253bb3ad7d6745c81ba0be2d71eae750402e39
7
+ data.tar.gz: 35ac98a55b96cbb9f05263027a03c27514d819cf1912ef125f8fb46ab3f4dacfa525445feaf1074b20e6265aeeb5cb04881d4989aa833fe9f0e757f31ea2d802
checksums.yaml.gz.sig CHANGED
Binary file
@@ -97,7 +97,12 @@ module Toml
97
97
  return unless pair?
98
98
  return unless @start_line && @end_line && @end_line > @start_line
99
99
 
100
- line_count = [node_text(@node).sub(/\n\z/, '').lines.count, 1].max
100
+ range_text = if @backend == :citrus
101
+ node_text(citrus_pair_value_node || @node).rstrip
102
+ else
103
+ node_text(@node).sub(/\n\z/, '')
104
+ end
105
+ line_count = [range_text.lines.count, 1].max
101
106
  @end_line = @start_line + line_count - 1
102
107
  end
103
108
 
@@ -471,6 +476,14 @@ module Toml
471
476
 
472
477
  private
473
478
 
479
+ def citrus_pair_value_node
480
+ each_child(@node).find do |child|
481
+ canonical = NodeTypeNormalizer.canonical_type(child.type, @backend)
482
+ !NodeTypeNormalizer.key_type?(canonical) &&
483
+ !%i[comment equals whitespace unknown space indent line_break].include?(canonical)
484
+ end
485
+ end
486
+
474
487
  def table_name_container
475
488
  return @node unless parslet_element_node?
476
489
 
@@ -92,6 +92,7 @@ module Toml
92
92
  current: analyze_role(:current, request.fetch(:current_source))
93
93
  }
94
94
  unsafe = documents.values.reject { |document| document.issues.empty? }
95
+ return merge2_with_toml_substrate(request, documents) if structural_merge2_candidate?(documents.values)
95
96
  return invalid_document_failure(:merge2, request, unsafe) unless unsafe.empty?
96
97
 
97
98
  additions = documents[:incoming].entries.reject { |entry| documents[:current].by_key.key?(entry.key) }
@@ -136,6 +137,58 @@ module Toml
136
137
 
137
138
  private
138
139
 
140
+ def structural_merge2_candidate?(documents)
141
+ allowed = %i[table array_of_tables dotted_key]
142
+ documents.any? { |document| document.issues.any? } && documents.all? do |document|
143
+ document.analysis && document.issues.all? { |item| allowed.include?(item[:category]) }
144
+ end
145
+ end
146
+
147
+ def merge2_with_toml_substrate(request, documents)
148
+ merged = TreeHaver.with_backend(backend_id) do
149
+ SmartMerger.new(
150
+ documents.fetch(:incoming).source,
151
+ documents.fetch(:current).source,
152
+ preference: :destination,
153
+ add_template_only_nodes: true
154
+ ).merge_result
155
+ end
156
+ output = merged.to_toml
157
+ verification = TreeHaver.with_backend(backend_id) { FileAnalysis.new(output) }
158
+ unless verification.valid?
159
+ return failure(
160
+ :merge2,
161
+ request,
162
+ category: :verification_failure,
163
+ message: 'TOML substrate output did not reparse with the selected backend.',
164
+ verification: { output_reparsed: false }
165
+ )
166
+ end
167
+
168
+ result(
169
+ :merge2,
170
+ request,
171
+ output: output,
172
+ changes: merged.decision_summary,
173
+ render_report: {
174
+ strategy: :toml_substrate,
175
+ line_records: merged.lines_array.each_with_index.map do |line, index|
176
+ {
177
+ output_line: index + 1,
178
+ source_role: line[:source],
179
+ original_line: line[:original_line],
180
+ decision: line[:decision]
181
+ }
182
+ end
183
+ },
184
+ verification: {
185
+ output_reparsed: true,
186
+ backend: backend_id,
187
+ unresolved_case_count: merged.unresolved_cases.length
188
+ }
189
+ )
190
+ end
191
+
139
192
  def analyze_role(role, source)
140
193
  analysis = TreeHaver.with_backend(backend_id) { ::Toml::Merge::FileAnalysis.new(source) }
141
194
  unless analysis.valid?
@@ -5,7 +5,7 @@ module Toml
5
5
  # Version namespace for this gem.
6
6
  module Version
7
7
  # Current gem version.
8
- VERSION = '7.1.7'
8
+ VERSION = '7.1.8'
9
9
  end
10
10
  # Current gem version exposed at the traditional constant location.
11
11
  VERSION = Version::VERSION # Traditional Constant Location
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: toml-merge
3
3
  version: !ruby/object:Gem::Version
4
- version: 7.1.7
4
+ version: 7.1.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter H. Boling
@@ -43,28 +43,28 @@ dependencies:
43
43
  requirements:
44
44
  - - '='
45
45
  - !ruby/object:Gem::Version
46
- version: 7.1.7
46
+ version: 7.1.8
47
47
  type: :runtime
48
48
  prerelease: false
49
49
  version_requirements: !ruby/object:Gem::Requirement
50
50
  requirements:
51
51
  - - '='
52
52
  - !ruby/object:Gem::Version
53
- version: 7.1.7
53
+ version: 7.1.8
54
54
  - !ruby/object:Gem::Dependency
55
55
  name: tree_haver
56
56
  requirement: !ruby/object:Gem::Requirement
57
57
  requirements:
58
58
  - - '='
59
59
  - !ruby/object:Gem::Version
60
- version: 7.1.7
60
+ version: 7.1.8
61
61
  type: :runtime
62
62
  prerelease: false
63
63
  version_requirements: !ruby/object:Gem::Requirement
64
64
  requirements:
65
65
  - - '='
66
66
  - !ruby/object:Gem::Version
67
- version: 7.1.7
67
+ version: 7.1.8
68
68
  - !ruby/object:Gem::Dependency
69
69
  name: version_gem
70
70
  requirement: !ruby/object:Gem::Requirement
@@ -94,7 +94,7 @@ dependencies:
94
94
  version: '3.0'
95
95
  - - ">="
96
96
  - !ruby/object:Gem::Version
97
- version: 3.0.17
97
+ version: 3.0.31
98
98
  type: :development
99
99
  prerelease: false
100
100
  version_requirements: !ruby/object:Gem::Requirement
@@ -104,7 +104,7 @@ dependencies:
104
104
  version: '3.0'
105
105
  - - ">="
106
106
  - !ruby/object:Gem::Version
107
- version: 3.0.17
107
+ version: 3.0.31
108
108
  - !ruby/object:Gem::Dependency
109
109
  name: bundler-audit
110
110
  requirement: !ruby/object:Gem::Requirement
@@ -182,7 +182,7 @@ dependencies:
182
182
  version: '3.2'
183
183
  - - ">="
184
184
  - !ruby/object:Gem::Version
185
- version: 3.2.2
185
+ version: 3.2.3
186
186
  type: :development
187
187
  prerelease: false
188
188
  version_requirements: !ruby/object:Gem::Requirement
@@ -192,7 +192,7 @@ dependencies:
192
192
  version: '3.2'
193
193
  - - ">="
194
194
  - !ruby/object:Gem::Version
195
- version: 3.2.2
195
+ version: 3.2.3
196
196
  - !ruby/object:Gem::Dependency
197
197
  name: kettle-test
198
198
  requirement: !ruby/object:Gem::Requirement
@@ -222,7 +222,7 @@ dependencies:
222
222
  version: '3.2'
223
223
  - - ">="
224
224
  - !ruby/object:Gem::Version
225
- version: 3.2.6
225
+ version: 3.2.7
226
226
  type: :development
227
227
  prerelease: false
228
228
  version_requirements: !ruby/object:Gem::Requirement
@@ -232,7 +232,7 @@ dependencies:
232
232
  version: '3.2'
233
233
  - - ">="
234
234
  - !ruby/object:Gem::Version
235
- version: 3.2.6
235
+ version: 3.2.7
236
236
  - !ruby/object:Gem::Dependency
237
237
  name: ruby-progressbar
238
238
  requirement: !ruby/object:Gem::Requirement
@@ -320,10 +320,10 @@ licenses:
320
320
  - PolyForm-Small-Business-1.0.0
321
321
  metadata:
322
322
  homepage_uri: https://structuredmerge.org
323
- source_code_uri: https://github.com/structuredmerge/structuredmerge-ruby/tree/v7.1.7
324
- changelog_uri: https://github.com/structuredmerge/structuredmerge-ruby/blob/v7.1.7/CHANGELOG.md
323
+ source_code_uri: https://github.com/structuredmerge/structuredmerge-ruby/tree/v7.1.8
324
+ changelog_uri: https://github.com/structuredmerge/structuredmerge-ruby/blob/v7.1.8/CHANGELOG.md
325
325
  bug_tracker_uri: https://github.com/structuredmerge/structuredmerge-ruby/issues
326
- documentation_uri: https://www.rubydoc.info/gems/toml-merge/7.1.7
326
+ documentation_uri: https://www.rubydoc.info/gems/toml-merge/7.1.8
327
327
  funding_uri: https://github.com/sponsors/pboling
328
328
  wiki_uri: https://github.com/structuredmerge/structuredmerge-ruby/wiki
329
329
  news_uri: https://www.railsbling.com/tags/toml-merge
metadata.gz.sig CHANGED
Binary file