Class: Ast::Merge::UnresolvedPolicy

Inherits:
Object
  • Object
show all
Defined in:
lib/ast/merge/unresolved_policy.rb

Overview

Declarative caller-facing policy for reviewable unresolved merge behavior.

Constant Summary collapse

VALID_PROVISIONAL_WINNERS =
%i[destination template].freeze

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(enabled_kinds: :all, provisional_winner: nil, provisional_winner_by_kind: {}, metadata: {}) ⇒ UnresolvedPolicy

Returns a new instance of UnresolvedPolicy.



22
23
24
25
26
27
28
29
30
31
32
# File 'lib/ast/merge/unresolved_policy.rb', line 22

def initialize(
  enabled_kinds: :all,
  provisional_winner: nil,
  provisional_winner_by_kind: {},
  metadata: {}
)
  @enabled_kinds = normalize_enabled_kinds(enabled_kinds)
  @provisional_winner = normalize_provisional_winner(provisional_winner)
  @provisional_winner_by_kind = normalize_provisional_winner_by_kind(provisional_winner_by_kind)
  @metadata = .dup.freeze
end

Instance Attribute Details

#enabled_kindsObject (readonly)

Returns the value of attribute enabled_kinds.



9
10
11
# File 'lib/ast/merge/unresolved_policy.rb', line 9

def enabled_kinds
  @enabled_kinds
end

#metadataObject (readonly)

Returns the value of attribute metadata.



9
10
11
# File 'lib/ast/merge/unresolved_policy.rb', line 9

def 
  @metadata
end

#provisional_winnerObject (readonly)

Returns the value of attribute provisional_winner.



9
10
11
# File 'lib/ast/merge/unresolved_policy.rb', line 9

def provisional_winner
  @provisional_winner
end

#provisional_winner_by_kindObject (readonly)

Returns the value of attribute provisional_winner_by_kind.



9
10
11
# File 'lib/ast/merge/unresolved_policy.rb', line 9

def provisional_winner_by_kind
  @provisional_winner_by_kind
end

Class Method Details

.coerce(value) ⇒ Object



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

def self.coerce(value)
  case value
  when nil then new
  when self then value
  when Hash then new(**value)
  else
    raise ArgumentError,
          "unresolved_policy must be an #{name} or Hash, got #{value.class}"
  end
end

Instance Method Details

#provisional_winner_for(kind, fallback: nil) ⇒ Object



40
41
42
43
44
# File 'lib/ast/merge/unresolved_policy.rb', line 40

def provisional_winner_for(kind, fallback: nil)
  normalize_provisional_winner(
    provisional_winner_by_kind.fetch(kind.to_sym, provisional_winner || fallback)
  )
end

#to_hObject



46
47
48
49
50
51
52
53
# File 'lib/ast/merge/unresolved_policy.rb', line 46

def to_h
  {
    enabled_kinds: enabled_kinds,
    provisional_winner: provisional_winner,
    provisional_winner_by_kind: provisional_winner_by_kind,
    metadata: 
  }.compact
end

#unresolved_for?(kind) ⇒ Boolean

Returns:

  • (Boolean)


34
35
36
37
38
# File 'lib/ast/merge/unresolved_policy.rb', line 34

def unresolved_for?(kind)
  return true if enabled_kinds == :all

  enabled_kinds.include?(kind.to_sym)
end