Sha256: 98c8ee5352de406a3c35b6a49baa0a60575dc754cd03ebdb8e31494ccd1467c1

Contents?: true

Size: 1.3 KB

Versions: 69

Compression:

Stored size: 1.3 KB

Contents

# frozen_string_literal: true

class ReeEnum::Values
  attr_reader :klass, :enum_name

  def initialize(klass, enum_name)
    @klass = klass
    @enum_name = enum_name
    @collection = {}
  end

  def all
    @collection.values.sort_by(&:number)
  end

  contract(Symbol => ReeEnum::Value).throws(ArgumentError)
  def by_value(value)
    type = @collection.values.detect {|c| c.value == value}
    type || (raise ArgumentError.new("constant for value #{value.inspect} is not found in #{self.inspect}"))
  end

  contract(Integer => ReeEnum::Value).throws(ArgumentError)
  def by_number(number)
    type = @collection.values.detect {|c| c.number == number}
    type || (raise ArgumentError.new("constant for value #{number.inspect} is not found in #{self.inspect}"))
  end

  def inspect
    @collection.values.map(&:inspect).inspect
  end

  contract(Symbol, Kwargs[number: Integer, label: Nilor[String]] => ReeEnum::Value)
  def add(value, number:, label: nil)
    if @collection.has_key?(value)
      raise ArgumentError, "#{@klass}: value #{value.inspect} was already added"
    end

    if @collection.values.any? {|v| v.number == number}
      raise ArgumentError, "number for #{value.inspect} was already added"
    end

    @collection[value] = ReeEnum::Value.new(
      @klass, @enum_name, value, number, label
    )
  end
end

Version data entries

69 entries across 69 versions & 1 rubygems

Version Path
ree_lib-1.0.69 lib/ree_lib/packages/ree_enum/package/ree_enum/values.rb
ree_lib-1.0.68 lib/ree_lib/packages/ree_enum/package/ree_enum/values.rb
ree_lib-1.0.67 lib/ree_lib/packages/ree_enum/package/ree_enum/values.rb
ree_lib-1.0.66 lib/ree_lib/packages/ree_enum/package/ree_enum/values.rb
ree_lib-1.0.65 lib/ree_lib/packages/ree_enum/package/ree_enum/values.rb
ree_lib-1.0.64 lib/ree_lib/packages/ree_enum/package/ree_enum/values.rb
ree_lib-1.0.63 lib/ree_lib/packages/ree_enum/package/ree_enum/values.rb
ree_lib-1.0.62 lib/ree_lib/packages/ree_enum/package/ree_enum/values.rb
ree_lib-1.0.61 lib/ree_lib/packages/ree_enum/package/ree_enum/values.rb
ree_lib-1.0.60 lib/ree_lib/packages/ree_enum/package/ree_enum/values.rb
ree_lib-1.0.59 lib/ree_lib/packages/ree_enum/package/ree_enum/values.rb
ree_lib-1.0.58 lib/ree_lib/packages/ree_enum/package/ree_enum/values.rb
ree_lib-1.0.57 lib/ree_lib/packages/ree_enum/package/ree_enum/values.rb
ree_lib-1.0.56 lib/ree_lib/packages/ree_enum/package/ree_enum/values.rb
ree_lib-1.0.55 lib/ree_lib/packages/ree_enum/package/ree_enum/values.rb
ree_lib-1.0.54 lib/ree_lib/packages/ree_enum/package/ree_enum/values.rb
ree_lib-1.0.53 lib/ree_lib/packages/ree_enum/package/ree_enum/values.rb
ree_lib-1.0.52 lib/ree_lib/packages/ree_enum/package/ree_enum/values.rb
ree_lib-1.0.51 lib/ree_lib/packages/ree_enum/package/ree_enum/values.rb
ree_lib-1.0.50 lib/ree_lib/packages/ree_enum/package/ree_enum/values.rb