Completed
Push — master ( 927f49...e957a3 )
by Marcelo
02:52
created

Base.with_attribute_name()   A

Complexity

Conditions 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 4
rs 10
cc 1
1
module Koine
2
  module Attributes
3
    module Adapter
4
      class Base
5
        attr_reader :attribute_name
6
7
        def initialize
8
          with_attribute_name('annonymous_attribute_name')
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
        def with_attribute_name(name)
37
          @attribute_name = name
38
          self
39
        end
40
41
        private
42
43
        def coerce_nil
44
          if @nil_value_set
45
            return @nil_value.respond_to?(:call) ? @nil_value.call : @nil_value
46
          end
47
48
          raise_error('Cannot be nil')
49
        end
50
51
        def coerce_not_nil(_value)
52
          raise NotImplementedError
53
        end
54
55
        # duplicates if possible and freezes object
56
        def secure
57
          value = yield
58
59
          unless value.is_a?(::Symbol)
60
            value = value.dup if value.respond_to?(:dup)
61
          end
62
63
          value.freeze
64
        end
65
66
        def wrap_errors
67
          yield
68
        rescue StandardError => error
69
          raise_error(error)
70
        end
71
72
        def raise_error(message)
73
          raise Koine::Attributes::InvalidAttributeError.new(message, attribute_name)
74
        end
75
      end
76
    end
77
  end
78
end
79