Module: Feat::Segments

Defined in:
lib/feat/segments.rb

Class Method Summary collapse

Class Method Details

.match_condition(cond, ctx, datafile) ⇒ Object



18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/feat/segments.rb', line 18

def match_condition(cond, ctx, datafile)
  case cond.operator
  when "segment_match"
    keys = cond.values.select { |v| v.is_a?(String) }
    keys.any? { |k| match_segment(k, ctx, datafile) }
  when "segment_not_match"
    keys = cond.values.select { |v| v.is_a?(String) }
    !keys.any? { |k| match_segment(k, ctx, datafile) }
  else
    lhs = ContextResolver.resolve_attribute(ctx, cond.attributePath)
    Operators.match(cond.operator, lhs, cond.values)
  end
end

.match_segment(segment_key, ctx, datafile) ⇒ Object

True iff context matches the segment. Unknown segment keys evaluate to false (never raise).



7
8
9
10
11
12
13
14
15
16
# File 'lib/feat/segments.rb', line 7

def match_segment(segment_key, ctx, datafile)
  seg = datafile.segments[segment_key]
  return false if seg.nil?

  seg.rules.any? do |rule|
    next false if rule.conditions.empty?

    rule.conditions.all? { |cond| match_condition(cond, ctx, datafile) }
  end
end