Completed
Push — master ( be4f30...1d07ec )
by Marcelo
02:02
created

Base.initialize()   A

Complexity

Conditions 1

Size

Total Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 3
rs 10
cc 1
1
module Koine
2
  module Attributes
3
    module Adapter
4
      class Base
5
        attr_accessor :attribute_name
6
7
        def initialize
8
          @attribute_name = 'AnonymousAttribute'
9
        end
10
11
        def coerce(value)
12
          return coerce_nil if value.nil?
13
14
          coerce_not_nil(value)
15
        end
16
17
        def default_value
18
          @default_value.respond_to?(:call) &&
19
            @default_value.call ||
20
            @default_value
21
        end
22
23
        def with_nil_value(value = nil, &block)
24
          @nil_value_set = true
25
          @nil_value = value
26
          @nil_value = block if block
27
          self
28
        end
29
30
        def with_default_value(value = nil, &block)
31
          @default_value = value
32
          @default_value = block if block
33
          self
34
        end
35
36
        private
37
38
        def coerce_nil
39
          if @nil_value_set
40
            return @nil_value.respond_to?(:call) ? @nil_value.call : @nil_value
41
          end
42
43
          raise ArgumentError, 'Cannot be nil', attribute_name
44
        end
45
46
        def coerce_not_nil(_value)
47
          raise NotImplementedError
48
        end
49
50
        # duplicates if possible and freezes object
51
        def secure
52
          value = yield
53
54
          unless value.is_a?(::Symbol)
55
            value = value.dup if value.respond_to?(:dup)
56
          end
57
58
          value.freeze
59
        end
60
61
        def wrap_errors
62
          yield
63
        rescue StandardError => error
64
          raise Koine::Attributes::ArgumentError.new(error, attribute_name)
65
        end
66
      end
67
    end
68
  end
69
end
70