Class: Rigor::FlowContribution::Fact

Inherits:
Object
  • Object
show all
Defined in:
lib/rigor/flow_contribution/fact.rb

Instance Method Summary collapse

Constructor Details

#initialize(target_kind:, target_name:, type:, negative: false) ⇒ Fact

Returns a new instance of Fact.



65
66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/rigor/flow_contribution/fact.rb', line 65

def initialize(target_kind:, target_name:, type:, negative: false)
  unless FACT_VALID_TARGET_KINDS.include?(target_kind)
    raise ArgumentError,
          "FlowContribution::Fact target_kind must be one of " \
          "#{FACT_VALID_TARGET_KINDS.inspect}, got #{target_kind.inspect}"
  end

  unless target_name.is_a?(Symbol)
    raise ArgumentError,
          "FlowContribution::Fact target_name must be a Symbol, got #{target_name.inspect}"
  end

  super
end

Instance Method Details

#negative?Boolean

Returns:

  • (Boolean)


93
94
95
# File 'lib/rigor/flow_contribution/fact.rb', line 93

def negative?
  negative == true
end

#targetObject

Composite target identifier the merger keys on. ‘:self` for self-targeted facts; otherwise `[kind, name]` so two contributions that narrow the same `(kind, name)` pair —regardless of source family — land in the same merge bucket. `:local` and `:parameter` facts that name the same symbol stay in separate buckets, which is the correct semantics: a `:local` fact narrows the surrounding scope’s named local, a ‘:parameter` fact narrows the call-site argument matching the parameter declaration.



89
90
91
# File 'lib/rigor/flow_contribution/fact.rb', line 89

def target
  target_kind == :self ? :self : [target_kind, target_name]
end