class RangeClassifier
Attributes
projection[R]
Public Class Methods
new(projection=RangeClassifier.id, ranges: [])
click to toggle source
# File lib/range_classifier.rb, line 4 def initialize(projection=RangeClassifier.id, ranges: []) @projection = projection @ranges = ranges end
Private Class Methods
id()
click to toggle source
# File lib/range_classifier.rb, line 35 def self.id -> (v) {[v, v]} end
Public Instance Methods
append_lower_stream(stream, low: nil)
click to toggle source
# File lib/range_classifier.rb, line 14 def append_lower_stream(stream, low: nil) stream.each do |high, result| @ranges << { lower: [low, high], result: result } low = high end self end
append_ranges(ranges)
click to toggle source
# File lib/range_classifier.rb, line 9 def append_ranges(ranges) @ranges.concat(ranges) self end
classify(element, *args)
click to toggle source
# File lib/range_classifier.rb, line 25 def classify(element, *args) lkey, ukey = @projection.call(element, *args) selected = @ranges.find { |range| matches_section(range[:lower], lkey) && matches_section(range[:upper], ukey) } selected[:result] end
Private Instance Methods
matches_section(range, key)
click to toggle source
# File lib/range_classifier.rb, line 39 def matches_section(range, key) return true if range.nil? l, u = range (l.nil? || l <= key) && (u.nil? || u >= key) end