Completed
Push — master ( c24669...17b1aa )
by Marcelo
37s
created

Base.coerce_nil()   A

Complexity

Conditions 3

Size

Total Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 7
rs 9.4285
cc 3
1
module Koine
2
  module Attributes
3
    module Adapter
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
56
  end
57
end
58