Class: Decay::Case
- Inherits:
-
Object
- Object
- Decay::Case
- Defined in:
- lib/decay/case.rb
Instance Method Summary collapse
- #else(&block) ⇒ Object
-
#initialize(enum_class, member) ⇒ Case
constructor
A new instance of Case.
- #raise_unknown_key ⇒ Object
- #result ⇒ Object
- #when(key, &block) ⇒ Object
Constructor Details
#initialize(enum_class, member) ⇒ Case
Returns a new instance of Case.
3 4 5 6 7 |
# File 'lib/decay/case.rb', line 3 def initialize(enum_class, member) @enum_class = enum_class @member = member @whens = {} end |
Instance Method Details
#else(&block) ⇒ Object
19 20 21 22 23 24 25 26 27 |
# File 'lib/decay/case.rb', line 19 def else(&block) @enum_class.keys.each do |key| if !@whens.key?(key) @whens[key] = block end end self end |
#raise_unknown_key ⇒ Object
46 47 48 49 50 51 |
# File 'lib/decay/case.rb', line 46 def raise_unknown_key valid_keys = @enum_class.keys.map(&:inspect).map { |str| "`#{str}'" } raise Error::UnknownKey, "Attempted to search for unknown key `#{@member.value.inspect}'. " \ "Valid options are #{valid_keys.join(", ")}" end |
#result ⇒ Object
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/decay/case.rb', line 29 def result if @whens.keys.size != @enum_class.keys.size undefined_cases = (@whens.keys - @enum_class.keys) .map(&:inspect).map { |str| "`#{str}'" } raise Error::UndefinedCase, "Some cases aren't yet covered: #{undefined_cases.join(", ")}" end if @whens.key?(@member.key) @whens[@member.key].call(@member) else raise_unknown_key end end |
#when(key, &block) ⇒ Object
9 10 11 12 13 14 15 16 17 |
# File 'lib/decay/case.rb', line 9 def when(key, &block) if @enum_class.keys.include?(key) @whens[key] = block else raise_unknown_key end self end |