Sha256: 888e9a34a25d51169af93d616a60da70e440d39c956c4ba0f12c794608215fb3

Contents?: true

Size: 1.17 KB

Versions: 69

Compression:

Stored size: 1.17 KB

Contents

# frozen_string_literal: true

require_relative 'value'
require_relative 'values'
require_relative 'contractable'

module ReeEnum::Enumerable
  module CommonMethods
    def by_value(value)
      values.by_value(value)
    end

    def by_number(number)
      values.by_number(number)
    end

    def all
      values.all
    end
  end

  def self.included(base)
    base.extend(ClassMethods)
  end

  module ClassMethods
    include ReeEnum::Contractable

    def setup_enum(enum_name)
      @values ||= ReeEnum::Values.new(self, enum_name)
    end

    def values
      @values
    end

    def enum_name
      return if !@values
      @values.enum_name
    end

    include CommonMethods

    def val(value, number, label = nil)
      if value == :new
        raise ArgumentError.new(":new is not allowed as enum value")
      end
      
      enum_value = values.add(value, number: number, label: label)

      define_method "#{enum_value.value}" do
        by_value(enum_value.value)
      end

      define_singleton_method "#{enum_value.value}" do
        by_value(enum_value.value)
      end

      enum_value
    end
  end

  def values
    self.class.values
  end

  include CommonMethods
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/enumerable.rb
ree_lib-1.0.68 lib/ree_lib/packages/ree_enum/package/ree_enum/enumerable.rb
ree_lib-1.0.67 lib/ree_lib/packages/ree_enum/package/ree_enum/enumerable.rb
ree_lib-1.0.66 lib/ree_lib/packages/ree_enum/package/ree_enum/enumerable.rb
ree_lib-1.0.65 lib/ree_lib/packages/ree_enum/package/ree_enum/enumerable.rb
ree_lib-1.0.64 lib/ree_lib/packages/ree_enum/package/ree_enum/enumerable.rb
ree_lib-1.0.63 lib/ree_lib/packages/ree_enum/package/ree_enum/enumerable.rb
ree_lib-1.0.62 lib/ree_lib/packages/ree_enum/package/ree_enum/enumerable.rb
ree_lib-1.0.61 lib/ree_lib/packages/ree_enum/package/ree_enum/enumerable.rb
ree_lib-1.0.60 lib/ree_lib/packages/ree_enum/package/ree_enum/enumerable.rb
ree_lib-1.0.59 lib/ree_lib/packages/ree_enum/package/ree_enum/enumerable.rb
ree_lib-1.0.58 lib/ree_lib/packages/ree_enum/package/ree_enum/enumerable.rb
ree_lib-1.0.57 lib/ree_lib/packages/ree_enum/package/ree_enum/enumerable.rb
ree_lib-1.0.56 lib/ree_lib/packages/ree_enum/package/ree_enum/enumerable.rb
ree_lib-1.0.55 lib/ree_lib/packages/ree_enum/package/ree_enum/enumerable.rb
ree_lib-1.0.54 lib/ree_lib/packages/ree_enum/package/ree_enum/enumerable.rb
ree_lib-1.0.53 lib/ree_lib/packages/ree_enum/package/ree_enum/enumerable.rb
ree_lib-1.0.52 lib/ree_lib/packages/ree_enum/package/ree_enum/enumerable.rb
ree_lib-1.0.51 lib/ree_lib/packages/ree_enum/package/ree_enum/enumerable.rb
ree_lib-1.0.50 lib/ree_lib/packages/ree_enum/package/ree_enum/enumerable.rb