Class: RubyEnum::Base

Inherits:
Object
  • Object
show all
Defined in:
lib/rubyenum.rb

Constant Summary collapse

@@all =
[]
@@fields =
[]

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name) ⇒ Base

Returns a new instance of Base.



55
56
57
# File 'lib/rubyenum.rb', line 55

def initialize(name)
  @name = name
end

Instance Attribute Details

#nameObject (readonly)

Returns the value of attribute name.



11
12
13
# File 'lib/rubyenum.rb', line 11

def name
  @name
end

Class Method Details

.allObject



15
16
17
# File 'lib/rubyenum.rb', line 15

def self.all
  @@all
end

.enum(symbol, *vals) ⇒ Object



43
44
45
46
47
48
49
50
51
52
53
# File 'lib/rubyenum.rb', line 43

def self.enum(symbol, *vals)
  enumObj = new symbol.to_s
  const_set(symbol.to_s, enumObj)
  vals.each_with_index do |val, i|
    if get_fields[i].nil?
      raise "too many arguments passed to enum. Each enum may only have as many values as fields defined."
    end
    enumObj.add_attribute(get_fields[i], val)
  end
  @@all << enumObj
end

.fields(*args) ⇒ Object



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/rubyenum.rb', line 23

def self.fields(*args) 
  args.each do |argument|
    @@fields << argument
    define_singleton_method("from_#{argument.to_s}") do |value|
      item_to_return = nil
      @@all.each do |item|
        if item.send(argument) == value 
          item_to_return = item
          break
        end
      end
      item_to_return
    end
  end
end

.get_fieldsObject



19
20
21
# File 'lib/rubyenum.rb', line 19

def self.get_fields
  @@fields
end

.value_of(symbol) ⇒ Object



39
40
41
# File 'lib/rubyenum.rb', line 39

def self.value_of(symbol)
  const_get(symbol.to_s)
end

Instance Method Details

#add_attribute(attr_name, value) ⇒ Object



59
60
61
62
63
64
# File 'lib/rubyenum.rb', line 59

def add_attribute(attr_name, value)
  var = instance_variable_set(:"@#{attr_name}", value)
  define_singleton_method("#{attr_name}") do 
    var
  end
end