Module: SwiftyEnum::ClassMethods
- Defined in:
- lib/swifty_enum.rb
Instance Method Summary collapse
-
#def_case(name, rawvalue = nil) ⇒ Object
define enum case as subclass.
-
#def_method(name) ⇒ Object
define enum method.
-
#enum_cases ⇒ Array
get all enum cases.
-
#get(rawvalue) ⇒ Class
get enum case.
Instance Method Details
#def_case(name, rawvalue = nil) ⇒ Object
define enum case as subclass
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/swifty_enum.rb', line 19 def def_case(name, rawvalue = nil) @_enum_hash ||= {} hashvalue = @_enum_hash.size rawvalue ||= hashvalue # check rawvalue is unique if @_enum_hash.has_key? rawvalue raise sprintf(SwiftyEnum::Messages::ERR_DUPLICATE_ENUM_RAWVALUE, rawvalue) end klass = Class.new klass.define_singleton_method 'hashvalue' do return hashvalue end klass.define_singleton_method 'rawvalue' do return rawvalue end klass.define_singleton_method '===' do |rhs| return klass == rhs end const_set :"#{name}", klass @_enum_hash[rawvalue] = klass end |
#def_method(name) ⇒ Object
define enum method
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/swifty_enum.rb', line 46 def def_method(name) @_enum_hash ||= {} # check block given if ! block_given? raise SwiftyEnum::Messages::ERR_DEF_METHOD_WITHOUT_BLOCK end # check defined enum case existing if @_enum_hash.empty? raise SwiftyEnum::Messages::ERR_DEF_METHOD_FOR_EMPTY end @_enum_hash.values.each do |klass| klass.define_singleton_method name do yield klass end end end |
#enum_cases ⇒ Array
get all enum cases
76 77 78 |
# File 'lib/swifty_enum.rb', line 76 def enum_cases return @_enum_hash.values end |
#get(rawvalue) ⇒ Class
get enum case
69 70 71 72 |
# File 'lib/swifty_enum.rb', line 69 def get(rawvalue) @_enum_hash ||= {} return @_enum_hash.fetch rawvalue, nil end |