Class: Plain::Merge::Provider

Inherits:
Object
  • Object
show all
Defined in:
lib/plain/merge/provider.rb,
sig/plain/merge.rbs

Overview

Coarse whole-document provider for unstructured plain text. rubocop:disable Metrics/ClassLength, Metrics/MethodLength, Metrics/ParameterLists -- provider operations and envelopes form one cohesive boundary

Instance Method Summary collapse

Instance Method Details

#analyze(request) ⇒ Ast::Merge::provider_result

Parameters:

  • request (Ast::Merge::provider_request)

Returns:

  • (Ast::Merge::provider_result)


22
23
24
# File 'lib/plain/merge/provider.rb', line 22

def analyze(request)
  result(:analyze, request, analysis: Plain::Merge.analyze_text(request.fetch(:source)))
end

#capabilitiesAst::Merge::provider_capabilities

Returns:

  • (Ast::Merge::provider_capabilities)


11
12
13
14
15
16
17
18
19
20
# File 'lib/plain/merge/provider.rb', line 11

def capabilities
  {
    operations: Ast::Merge::ProviderContract::OPERATIONS,
    dialects: %i[text],
    backends: [Plain::Merge::BACKEND_REFERENCE.id.to_sym],
    profiles: %i[coarse_document],
    role: :workflow,
    source_preservation: %i[exact_source whole_document_conflict]
  }.freeze
end

#diff2(request) ⇒ Ast::Merge::provider_result

Parameters:

  • request (Ast::Merge::provider_request)

Returns:

  • (Ast::Merge::provider_result)


26
27
28
29
30
31
# File 'lib/plain/merge/provider.rb', line 26

def diff2(request)
  before = request.fetch(:before_source)
  after = request.fetch(:after_source)
  changes = before == after ? [] : [classification(before, before, after)]
  result(:diff2, request, changes: changes, diff: { before: before, after: after, changes: changes })
end

#familyString

Returns:

  • (String)


9
# File 'lib/plain/merge/provider.rb', line 9

def family = 'text'

#merge2(request) ⇒ Ast::Merge::provider_result

Parameters:

  • request (Ast::Merge::provider_request)

Returns:

  • (Ast::Merge::provider_result)


33
34
35
36
37
38
39
40
41
42
# File 'lib/plain/merge/provider.rb', line 33

def merge2(request)
  merged = Plain::Merge.merge_text(request.fetch(:incoming_source), request.fetch(:current_source))
  result(
    :merge2,
    request,
    output: merged.fetch(:output),
    render_report: { strategy: :normalized_block_merge },
    verification: { output_rendered: true }
  )
end

#merge3(request) ⇒ Ast::Merge::provider_result

Parameters:

  • request (Ast::Merge::provider_request)

Returns:

  • (Ast::Merge::provider_result)


44
45
46
47
48
49
50
51
52
# File 'lib/plain/merge/provider.rb', line 44

def merge3(request)
  base = request.fetch(:base_source)
  ours = request.fetch(:ours_source)
  theirs = request.fetch(:theirs_source)
  return exact_merge3(request, :ours, ours, base, ours, theirs) if ours == theirs || base == theirs
  return exact_merge3(request, :theirs, theirs, base, ours, theirs) if base == ours

  conflicted_merge3(request, base, ours, theirs)
end

#provider_idString

Returns:

  • (String)


8
# File 'lib/plain/merge/provider.rb', line 8

def provider_id = 'ruby.text'