Sha256: af44538e5e3ed2d95bca6e6e82be846353487df32bbcead72b46b8172dc12853

Contents?: true

Size: 779 Bytes

Versions: 35

Compression:

Stored size: 779 Bytes

Contents

# frozen_string_literal: true

class RangeCategories
  def initialize(*range_categories)
    if range_categories.length.even? || range_categories.length < 3
      fail "RangeCategories should be of the form (0, 'label 0-10', 10, 'label 10-20', 20)"
    end

    @range_hash = {}
    parse_ranges(range_categories)
  end

  def as_range_hash
    @range_hash.freeze
  end

  private

  def parse_ranges(range_categories)
    a = range_categories.dup
    while a.length > 1
      from = a.shift.to_f
      label = a.shift
      to = a.first.to_f
      add_range(from, label, to, inclusive: a.length == 1)
    end
  end

  def add_range(from, label, to, inclusive:)
    if inclusive
      @range_hash[from..to] = label
    else
      @range_hash[from...to] = label
    end
  end
end

Version data entries

35 entries across 35 versions & 1 rubygems

Version Path
quby-5.6.7 lib/quby/range_categories.rb
quby-5.6.6 lib/quby/range_categories.rb
quby-5.6.5 lib/quby/range_categories.rb
quby-5.6.3 lib/quby/range_categories.rb
quby-5.6.2 lib/quby/range_categories.rb
quby-5.6.1 lib/quby/range_categories.rb
quby-5.6.0 lib/quby/range_categories.rb
quby-5.5.0 lib/quby/range_categories.rb
quby-5.4.0 lib/quby/range_categories.rb
quby-5.3.1 lib/quby/range_categories.rb
quby-5.3.0 lib/quby/range_categories.rb
quby-5.2.0 lib/quby/range_categories.rb
quby-5.1.3 lib/quby/range_categories.rb
quby-5.1.2 lib/quby/range_categories.rb
quby-5.1.1 lib/quby/range_categories.rb
quby-5.1.0 lib/quby/range_categories.rb
quby-5.0.5 lib/quby/range_categories.rb
quby-5.0.4 lib/quby/range_categories.rb
quby-5.0.3 lib/quby/range_categories.rb
quby-5.0.2 lib/quby/range_categories.rb