Class: Zip::Merge::Provider

Inherits:
Binary::Merge::Provider
  • Object
show all
Defined in:
lib/zip/merge/provider.rb,
sig/zip/merge.rbs

Overview

Validates ZIP inputs while applying the safety-first opaque binary policy. rubocop:disable Metrics/MethodLength -- provider envelope is one public result contract

Constant Summary collapse

PARSE_ERRORS =
[RuntimeError, NoMethodError, TypeError, KeyError].freeze

Instance Method Summary collapse

Instance Method Details

#analyze(request) ⇒ Object



24
25
26
27
28
29
# File 'lib/zip/merge/provider.rb', line 24

def analyze(request)
  inventory = parse(request.fetch(:source), :source, :analyze, request)
  return inventory if provider_result?(inventory)

  result(:analyze, request, analysis: inventory)
end

#capabilitiesObject



13
14
15
16
17
18
19
20
21
22
# File 'lib/zip/merge/provider.rb', line 13

def capabilities
  {
    operations: Ast::Merge::ProviderContract::OPERATIONS,
    dialects: %i[zip],
    backends: [Zip::Merge::BACKEND_REFERENCE.id.to_sym],
    profiles: %i[opaque_archive],
    role: :workflow,
    source_preservation: %i[exact_source opaque_conflict_retains_ours]
  }.freeze
end

#diff2(request) ⇒ Object



31
32
33
34
# File 'lib/zip/merge/provider.rb', line 31

def diff2(request)
  failure = validate_sources(request, :diff2, before_source: :before, after_source: :after)
  failure || super
end

#familyObject



11
# File 'lib/zip/merge/provider.rb', line 11

def family = 'zip'

#merge2(request) ⇒ Object



36
37
38
39
# File 'lib/zip/merge/provider.rb', line 36

def merge2(request)
  failure = validate_sources(request, :merge2, current_source: :current, incoming_source: :incoming)
  failure || super
end

#merge3(request) ⇒ Object



41
42
43
44
45
46
47
48
49
50
# File 'lib/zip/merge/provider.rb', line 41

def merge3(request)
  failure = validate_sources(
    request,
    :merge3,
    base_source: :base,
    ours_source: :ours,
    theirs_source: :theirs
  )
  failure || super
end

#provider_idObject



10
# File 'lib/zip/merge/provider.rb', line 10

def provider_id = 'ruby.zip'