zip-merge 7.1.1 → 7.1.3

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: 5a9683e713ef24a65e74b003579e4c54bf369859b740dcbd6f56ef788942e858
4
- data.tar.gz: 13488970a1b826964bd9bc478c1e85c301e37f88c561127883f04a3bdf419662
3
+ metadata.gz: ab8707f72ab19bcb5d7fa6ac1dff9e120b6359913377a27a0068fa25c7811550
4
+ data.tar.gz: ec42f4edba8322a35f933367b172b414a18aaa32af0af976b962214122c6dfb4
5
5
  SHA512:
6
- metadata.gz: 2d0d142fe3be5c9c838bbe288e5b5ffaeb3a94742bf9a66a1fc7bfc7e6739d903cf469a41786cdfc1a1f30ca7f20edda28877b14a6a78c6345a66aac6c5dc678
7
- data.tar.gz: b114ba117f07c46042de4ff98048825e3390b6157ca5e0fa96b8106311bd3e2ee972c9a93c7cb85099d1b5b8fa13e33a350ac89bcda26da9a8ef01449e13a214
6
+ metadata.gz: eb36f6b3bfd9e0a1c338c33a9772a57f8bd16f7e90eca6b27c1c339c6a88ece6508f6528af4e5a74d801e21bb9c0b2f85275e4bf03665ec495109984798be7c6
7
+ data.tar.gz: 275ba874d435f03ab9619940f2d8add76aac49c1ae9cb29278955b00c11c19b40d78c12353ec3e3f1aa57acc71d22332693899abe524adbf0d6d67726315df08
checksums.yaml.gz.sig CHANGED
Binary file
data/README.md CHANGED
@@ -56,7 +56,7 @@ renderer.
56
56
 
57
57
  ### Compatibility
58
58
 
59
- Compatible with MRI Ruby 4.0.0+, and concordant releases of JRuby, and TruffleRuby.
59
+ Compatible with MRI Ruby 4.0.0+, JRuby, and TruffleRuby.
60
60
  CI workflows and Appraisals are generated for MRI Ruby 4.0.0+.
61
61
  This test floor is configured by `ruby.test_minimum` in `.kettle-jem.yml` and
62
62
  may be higher than the gem's runtime compatibility floor when legacy Rubies are
@@ -132,20 +132,12 @@ See [SECURITY.md][🔐security].
132
132
  ## 🤝 Contributing
133
133
 
134
134
  If you need some ideas of where to help, you could work on adding more code coverage,
135
- or if it is already 💯 (see [below](#code-coverage)) check [issues][🤝gh-issues] or [PRs][🤝gh-pulls],
136
- or use the gem and think about how it could be better.
135
+ check [issues][🤝gh-issues] or [PRs][🤝gh-pulls], or use the gem and think about how it could be better.
137
136
 
138
137
  We [![Keep A Changelog][📗keep-changelog-img]][📗keep-changelog] so if you make changes, remember to update it.
139
138
 
140
139
  See [CONTRIBUTING.md][🤝contributing] for more detailed instructions.
141
140
 
142
- ### Code Coverage
143
-
144
- <details markdown="1">
145
- <summary>Coverage service badges</summary>
146
-
147
- </details>
148
-
149
141
  ## 📌 Versioning
150
142
 
151
143
  This library follows [![Semantic Versioning 2.0.0][📌semver-img]][📌semver] for its public API where practical.
@@ -0,0 +1,110 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Zip
4
+ module Merge
5
+ # Validates ZIP inputs while applying the safety-first opaque binary policy.
6
+ # rubocop:disable Metrics/MethodLength -- provider envelope is one public result contract
7
+ class Provider < Binary::Merge::Provider
8
+ PARSE_ERRORS = [RuntimeError, NoMethodError, TypeError, KeyError].freeze
9
+
10
+ def provider_id = 'ruby.zip'
11
+ def family = 'zip'
12
+
13
+ def capabilities
14
+ {
15
+ operations: Ast::Merge::ProviderContract::OPERATIONS,
16
+ dialects: %i[zip],
17
+ backends: [Zip::Merge::BACKEND_REFERENCE.id.to_sym],
18
+ profiles: %i[opaque_archive],
19
+ role: :workflow,
20
+ source_preservation: %i[exact_source opaque_conflict_retains_ours]
21
+ }.freeze
22
+ end
23
+
24
+ def analyze(request)
25
+ inventory = parse(request.fetch(:source), :source, :analyze, request)
26
+ return inventory if provider_result?(inventory)
27
+
28
+ result(:analyze, request, analysis: inventory)
29
+ end
30
+
31
+ def diff2(request)
32
+ failure = validate_sources(request, :diff2, before_source: :before, after_source: :after)
33
+ failure || super
34
+ end
35
+
36
+ def merge2(request)
37
+ failure = validate_sources(request, :merge2, current_source: :current, incoming_source: :incoming)
38
+ failure || super
39
+ end
40
+
41
+ def merge3(request)
42
+ failure = validate_sources(
43
+ request,
44
+ :merge3,
45
+ base_source: :base,
46
+ ours_source: :ours,
47
+ theirs_source: :theirs
48
+ )
49
+ failure || super
50
+ end
51
+
52
+ private
53
+
54
+ def validate_sources(request, operation, roles)
55
+ roles.each do |request_key, source_role|
56
+ parsed = parse(request.fetch(request_key), source_role, operation, request)
57
+ return parsed if provider_result?(parsed)
58
+ end
59
+ nil
60
+ end
61
+
62
+ def parse(source, source_role, operation, request)
63
+ Zip::Merge.parse_zip_inventory(source)
64
+ rescue *PARSE_ERRORS => e
65
+ failure(
66
+ operation,
67
+ request,
68
+ category: :parse_error,
69
+ message: "Invalid ZIP #{source_role} source: #{e.message}",
70
+ source_role: source_role
71
+ )
72
+ end
73
+
74
+ def provider_result?(value)
75
+ value.is_a?(Hash) && value[:schema] == Ast::Merge::ProviderContract::RESULT_SCHEMA
76
+ end
77
+
78
+ def envelope(request, **fields)
79
+ {
80
+ provider: {
81
+ provider_id: provider_id,
82
+ family: family,
83
+ dialect: request[:dialect] || :zip,
84
+ backend: request[:backend],
85
+ package: 'zip-merge',
86
+ package_version: Zip::Merge::Version::VERSION
87
+ },
88
+ profile: { profile_id: request[:profile_id] || :opaque_archive }
89
+ }.merge(fields)
90
+ end
91
+ end
92
+ # rubocop:enable Metrics/MethodLength
93
+ end
94
+ end
95
+
96
+ # Provider registration entry point.
97
+ module Zip
98
+ # ZIP provider registration.
99
+ module Merge
100
+ module_function
101
+
102
+ def merge_provider
103
+ @merge_provider ||= Provider.new
104
+ end
105
+
106
+ def register_provider!
107
+ Ast::Merge.register_provider(merge_provider, replace: true)
108
+ end
109
+ end
110
+ end
@@ -5,7 +5,7 @@ module Zip
5
5
  # Version namespace for this gem.
6
6
  module Version
7
7
  # Current gem version.
8
- VERSION = '7.1.1'
8
+ VERSION = '7.1.3'
9
9
  end
10
10
  # Current gem version exposed at the traditional constant location.
11
11
  VERSION = Version::VERSION # Traditional Constant Location
data/lib/zip/merge.rb CHANGED
@@ -389,5 +389,7 @@ end
389
389
 
390
390
  require 'binary/merge'
391
391
  require_relative 'merge/backend'
392
+ require_relative 'merge/provider'
392
393
 
393
394
  Zip::Merge.register_backend!
395
+ Zip::Merge.register_provider!
data/sig/zip/merge.rbs CHANGED
@@ -1,5 +1,18 @@
1
1
  module Zip
2
2
  module Merge
3
+ class Provider < Binary::Merge::Provider
4
+ def provider_id: () -> String
5
+ def family: () -> String
6
+ def capabilities: () -> Hash[Symbol, untyped]
7
+ def analyze: (Hash[Symbol, untyped] request) -> Hash[Symbol, untyped]
8
+ def diff2: (Hash[Symbol, untyped] request) -> Hash[Symbol, untyped]
9
+ def merge2: (Hash[Symbol, untyped] request) -> Hash[Symbol, untyped]
10
+ def merge3: (Hash[Symbol, untyped] request) -> Hash[Symbol, untyped]
11
+ end
12
+
13
+ def self.merge_provider: () -> Provider
14
+ def self.register_provider!: () -> Hash[Symbol, untyped]
15
+
3
16
  module Version
4
17
  VERSION: String
5
18
  end
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zip-merge
3
3
  version: !ruby/object:Gem::Version
4
- version: 7.1.1
4
+ version: 7.1.3
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.1
46
+ version: 7.1.3
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.1
53
+ version: 7.1.3
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.1
60
+ version: 7.1.3
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.1
67
+ version: 7.1.3
68
68
  - !ruby/object:Gem::Dependency
69
69
  name: version_gem
70
70
  requirement: !ruby/object:Gem::Requirement
@@ -91,20 +91,20 @@ dependencies:
91
91
  requirements:
92
92
  - - "~>"
93
93
  - !ruby/object:Gem::Version
94
- version: '2.5'
94
+ version: '3.0'
95
95
  - - ">="
96
96
  - !ruby/object:Gem::Version
97
- version: 2.5.17
97
+ version: 3.0.0
98
98
  type: :development
99
99
  prerelease: false
100
100
  version_requirements: !ruby/object:Gem::Requirement
101
101
  requirements:
102
102
  - - "~>"
103
103
  - !ruby/object:Gem::Version
104
- version: '2.5'
104
+ version: '3.0'
105
105
  - - ">="
106
106
  - !ruby/object:Gem::Version
107
- version: 2.5.17
107
+ version: 3.0.0
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.0
185
+ version: 3.2.2
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.0
195
+ version: 3.2.2
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.4
225
+ version: 3.2.5
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.4
235
+ version: 3.2.5
236
236
  - !ruby/object:Gem::Dependency
237
237
  name: ruby-progressbar
238
238
  requirement: !ruby/object:Gem::Requirement
@@ -300,6 +300,7 @@ files:
300
300
  - lib/zip-merge.rb
301
301
  - lib/zip/merge.rb
302
302
  - lib/zip/merge/backend.rb
303
+ - lib/zip/merge/provider.rb
303
304
  - lib/zip/merge/version.rb
304
305
  - sig/zip/merge.rbs
305
306
  homepage: https://github.com/structuredmerge/structuredmerge-ruby
@@ -308,10 +309,10 @@ licenses:
308
309
  - PolyForm-Small-Business-1.0.0
309
310
  metadata:
310
311
  homepage_uri: https://structuredmerge.org
311
- source_code_uri: https://github.com/structuredmerge/structuredmerge-ruby/tree/v7.1.1
312
- changelog_uri: https://github.com/structuredmerge/structuredmerge-ruby/blob/v7.1.1/CHANGELOG.md
312
+ source_code_uri: https://github.com/structuredmerge/structuredmerge-ruby/tree/v7.1.3
313
+ changelog_uri: https://github.com/structuredmerge/structuredmerge-ruby/blob/v7.1.3/CHANGELOG.md
313
314
  bug_tracker_uri: https://github.com/structuredmerge/structuredmerge-ruby/issues
314
- documentation_uri: https://www.rubydoc.info/gems/zip-merge/7.1.1
315
+ documentation_uri: https://www.rubydoc.info/gems/zip-merge/7.1.3
315
316
  funding_uri: https://github.com/sponsors/pboling
316
317
  wiki_uri: https://github.com/structuredmerge/structuredmerge-ruby/wiki
317
318
  news_uri: https://www.railsbling.com/tags/zip-merge
metadata.gz.sig CHANGED
Binary file