Class: Struct
- Inherits:
-
Object
- Object
- Struct
- Includes:
- KeyDial, KeyDial::Coercion::Structs
- Defined in:
- lib/key_dial.rb
Constant Summary
Constants included from KeyDial::Coercion::Structs
KeyDial::Coercion::Structs::EMPTY
Constants included from KeyDial
Instance Method Summary collapse
-
#empty? ⇒ Boolean
Structs are not empty by definition.
-
#fetch(key_obj, default = (default_skipped = true; nil)) ⇒ Object
Extend Struct to give it a fetch method.
-
#key?(key_obj) ⇒ Boolean
Extend Struct to give it a key? method.
Methods included from KeyDial::Coercion::Structs
Methods included from KeyDial::Coercion::Coercer
Methods included from KeyDial
Instance Method Details
#empty? ⇒ Boolean
Structs are not empty by definition
119 |
# File 'lib/key_dial.rb', line 119 def empty?; false; end |
#fetch(key_obj, default = (default_skipped = true; nil)) ⇒ Object
Extend Struct to give it a fetch method
94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
# File 'lib/key_dial.rb', line 94 def fetch(key_obj, default = (default_skipped = true; nil)) if key?(key_obj) # Use key? method to check this struct has the requested key # key? method ensures that key_obj is valid inside struct[key] syntax return self[key_obj] else # Struct doesn't contain this key - proceed to defaults if block_given? # Warn if both block and default supplied warn 'warning: block supersedes default value argument' if !default_skipped # Return result of block as default return yield(key_obj) elsif !default_skipped return default else raise KeyError, "key not found: #{key_obj.to_s}" end end end |
#key?(key_obj) ⇒ Boolean
Extend Struct to give it a key? method
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
# File 'lib/key_dial.rb', line 72 def key?(key_obj) # These would be valid keys in struct[key] syntax if key_obj.is_a?(Symbol) key = key_obj elsif key_obj.is_a?(String) key = key_obj.to_sym elsif key_obj.is_a?(Numeric) && key_obj.respond_to?(:to_i) key = key_obj.to_i else return false #raise TypeError, "no implicit conversion of #{key_obj.class} into Symbol" end if key.is_a?(Symbol) # Does the struct have the identified key? return self.members.include?(key) elsif key.is_a?(Integer) # Does the struct have this numbered key? return key.magnitude + (key <= -1 ? 0 : 1) <= self.size end end |