Class: Mws::Enum

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

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(entries) ⇒ Enum

Returns a new instance of Enum.



9
10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/mws/enum.rb', line 9

def initialize(entries)
  @reverse = {}
  @entries = []
  entries.each do | key, values |
    entry = EnumEntry.new(key, values)
    @entries << entry
    @reverse[key] = entry
    values = [ values ] unless values.respond_to? :each
    values.each do | value |
      @reverse[value] = entry
    end
  end
end

Class Method Details

.for(h) ⇒ Object



46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/mws/enum.rb', line 46

def self.for(h)
  it = new(h)
  eigenclass = class << it
    self
  end
  h.each do | key, value |
    eigenclass.send(:define_method, key.to_s.upcase.to_sym) do
      it.for key
    end 
  end
  it
end

.sym_reader(target, *attributes) ⇒ Object



59
60
61
62
63
64
65
66
# File 'lib/mws/enum.rb', line 59

def self.sym_reader(target, *attributes)
  attributes.each do | attribute |
    target.send(:define_method, attribute) do
      entry = send(:instance_variable_get, "@#{attribute}")
      entry && entry.sym
    end
  end
end

Instance Method Details

#for(it) ⇒ Object



31
32
33
34
# File 'lib/mws/enum.rb', line 31

def for(it)
  return it if it.instance_of? EnumEntry 
  @reverse[it]
end

#sym(str) ⇒ Object



36
37
38
39
# File 'lib/mws/enum.rb', line 36

def sym(str)
  entry = self.for(str)
  entry && entry.sym
end

#symsObject



23
24
25
# File 'lib/mws/enum.rb', line 23

def syms
  @entries.map { |it| it.sym }
end

#val(sym) ⇒ Object



41
42
43
44
# File 'lib/mws/enum.rb', line 41

def val(sym)
  entry = self.for(sym)
  entry && entry.val
end

#valsObject



27
28
29
# File 'lib/mws/enum.rb', line 27

def vals
  @entries.map { |it| it.val }.flatten
end