| Total Complexity | 14 |
| Total Lines | 51 |
| Duplicated Lines | 0 % |
| Changes | 1 | ||
| Bugs | 0 | Features | 0 |
| 1 | module Koine |
||
| 4 | class Base |
||
| 5 | def coerce(value) |
||
| 6 | return coerce_nil if value.nil? |
||
| 7 | |||
| 8 | coerce_not_nil(value) |
||
| 9 | end |
||
| 10 | |||
| 11 | def default_value |
||
| 12 | @default_value.respond_to?(:call) && |
||
| 13 | @default_value.call || |
||
| 14 | @default_value |
||
| 15 | end |
||
| 16 | |||
| 17 | def with_nil_value(value = nil, &block) |
||
| 18 | @nil_value_set = true |
||
| 19 | @nil_value = value |
||
| 20 | @nil_value = block if block |
||
| 21 | self |
||
| 22 | end |
||
| 23 | |||
| 24 | def with_default_value(value = nil, &block) |
||
| 25 | @default_value = value |
||
| 26 | @default_value = block if block |
||
| 27 | self |
||
| 28 | end |
||
| 29 | |||
| 30 | private |
||
| 31 | |||
| 32 | def coerce_nil |
||
| 33 | if @nil_value_set |
||
| 34 | return @nil_value.respond_to?(:call) ? @nil_value.call : @nil_value |
||
| 35 | end |
||
| 36 | |||
| 37 | raise ArgumentError, 'Cannot be nil' |
||
| 38 | end |
||
| 39 | |||
| 40 | def coerce_not_nil(_value) |
||
| 41 | raise NotImplementedError |
||
| 42 | end |
||
| 43 | |||
| 44 | # duplicates if possible and freezes object |
||
| 45 | def secure |
||
| 46 | value = yield |
||
| 47 | |||
| 48 | unless value.is_a?(::Symbol) |
||
| 49 | value = value.dup if value.respond_to?(:dup) |
||
| 50 | end |
||
| 51 | |||
| 52 | value.freeze |
||
| 53 | end |
||
| 54 | end |
||
| 55 | end |
||
| 58 |