module Rstructural::Enum
Public Class Methods
extended(klass)
click to toggle source
# File lib/rstructural/enum.rb, line 6 def self.extended(klass) klass.class_variable_set(:@@enum_values, []) klass.class_variable_set(:@@enum_super_class, klass) end
Public Instance Methods
enum(value, &block)
click to toggle source
# File lib/rstructural/enum.rb, line 11 def enum(value, &block) if (type = of(value)) raise ArgumentError, "Enum '#{value}' already defined in #{type.name}" end Rstructural::Struct.new(:value, __caller: caller, &block).new(value).tap do |k| self.class_variable_get(:@@enum_values) << k k.class.include(self.class_variable_get(:@@enum_super_class)) def k.name self.class.name end end end
interface(&block)
click to toggle source
# File lib/rstructural/enum.rb, line 28 def interface(&block) self.class_variable_get(:@@enum_values).each do |t| t.class.class_eval(&block) end end
of(value)
click to toggle source
# File lib/rstructural/enum.rb, line 24 def of(value) self.class_variable_get(:@@enum_values).find { |v| v.value == value } end