summaryrefslogtreecommitdiff
path: root/lib/chef/node/attribute_trait/convert_value.rb
blob: 4e9d1f8a795824901cc5500b4430ed4ff9a48fc2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
class Chef
  class Node
    class AttributeTrait
      module ConvertValue
        def initialize(wrapped_object: nil, convert_value: true, **args)
          super(wrapped_object: convert_value ? convert_value(wrapped_object) : wrapped_object, **args)
        end

        def regular_writer(*path, value)
          path = path.map { |key| convert_key(key) }
          super(*path, value)
        end

        def regular_reader(*path)
          path = path.map { |key| convert_key(key) }
          super(*path)
        end

        def []=(key, value)
          super(convert_key(key), convert_value(value))
        end

        def [](key)
          super(convert_key(key))
        end

        def key?(key)
          wrapped_object.key?(convert_key(key))
        end

        alias_method :has_key?, :key?
        alias_method :member?, :key?
        #alias_method :include?, :key?

        def delete(key)
          super(convert_key(key))
        end

        def update(other_hash)
          other_hash.each { |k, v| self[convert_key(k)] = convert_value(v) }
          self
        end

        alias_method :merge!, :update

        def fetch(key, *args, &block)
          super(convert_key(key), *args, &block)
        end

        def values_at(*indicies)
          indicies.collect { |key| self[convert_key(key)] }
        end

        def merge(hash)
          self.dup.update(hash)
        end

        def except(*keys)
          super(*keys.map {|k| convert_key(k)})
        end

        def self.from_hash(hash)
          new(wrapped_object: hash)
        end

        private

        def new_decorator(**args)
          args[:convert_value] = false
          super(**args)
        end

        def convert_key(key)
          key
        end

        def convert_value(value)
          value
        end
      end
    end
  end
end