Sha256: d321f7a180c5c5997ada7613fcf21b13214e56c0a4ffd18475cf9b7677d81c92

Contents?: true

Size: 880 Bytes

Versions: 5

Compression:

Stored size: 880 Bytes

Contents

# frozen_string_literal: true

require 'eac_ruby_utils/patches/module/compare_by'

module EacRubyUtils
  class Bit
    VALID_VALUES = [0, 1].freeze

    class << self
      def assert(obj)
        return obj if obj.is_a?(self)

        new(obj.to_i)
      end

      def valid_integer?(value)
        value.is_a?(::Integer) && VALID_VALUES.include?(value)
      end

      def validate_integer(value)
        return value if valid_integer?(value)

        raise(::ArgumentError, "Invalid bit value: #{value} (Valid: #{VALID_VALUES})")
      end
    end

    attr_reader :value

    compare_by :value
    delegate :to_s, :zero?, to: :value

    # @param value [Integer]
    def initialize(value)
      @value = self.class.validate_integer(value)
    end

    # @return [Boolean]
    def one?
      !zero?
    end

    # @return [Integer]
    def to_i
      value
    end
  end
end

Version data entries

5 entries across 5 versions & 2 rubygems

Version Path
eac_ruby_utils-0.124.0 lib/eac_ruby_utils/bit.rb
eac_tools-0.97.2 sub/eac_ruby_utils/lib/eac_ruby_utils/bit.rb
eac_ruby_utils-0.123.0 lib/eac_ruby_utils/bit.rb
eac_ruby_utils-0.121.0 lib/eac_ruby_utils/bit.rb
eac_ruby_utils-0.120.0 lib/eac_ruby_utils/bit.rb