Class: Chef::ChefFS::DataHandler::DataHandlerBase

Inherits:
Object
  • Object
show all
Defined in:
lib/chef/chef_fs/data_handler/data_handler_base.rb

Instance Method Summary collapse

Instance Method Details

#chef_classObject

Raises:

  • (NotImplementedError)


75
76
77
# File 'lib/chef/chef_fs/data_handler/data_handler_base.rb', line 75

def chef_class
  raise NotImplementedError
end

#chef_object(object) ⇒ Object



67
68
69
# File 'lib/chef/chef_fs/data_handler/data_handler_base.rb', line 67

def chef_object(object)
  chef_class.json_create(object)
end

#default(entry) ⇒ Object



26
27
28
# File 'lib/chef/chef_fs/data_handler/data_handler_base.rb', line 26

def default(entry)
  normalize({}, entry)
end

#from_ruby(ruby) ⇒ Object



63
64
65
# File 'lib/chef/chef_fs/data_handler/data_handler_base.rb', line 63

def from_ruby(ruby)
  chef_class.from_file(ruby).to_hash
end

#minimize(object, entry) ⇒ Object



5
6
7
8
9
10
11
12
13
# File 'lib/chef/chef_fs/data_handler/data_handler_base.rb', line 5

def minimize(object, entry)
  default_object = default(entry)
  object.each_pair do |key, value|
    if default_object[key] == value && !preserve_key(key)
      object.delete(key)
    end
  end
  object
end

#normalize_for_post(object, entry) ⇒ Object



42
43
44
# File 'lib/chef/chef_fs/data_handler/data_handler_base.rb', line 42

def normalize_for_post(object, entry)
  normalize(object, entry)
end

#normalize_for_put(object, entry) ⇒ Object



46
47
48
# File 'lib/chef/chef_fs/data_handler/data_handler_base.rb', line 46

def normalize_for_put(object, entry)
  normalize(object, entry)
end

#normalize_hash(object, defaults) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
# File 'lib/chef/chef_fs/data_handler/data_handler_base.rb', line 30

def normalize_hash(object, defaults)
  # Make a normalized result in the specified order for diffing
  result = {}
  defaults.each_pair do |key, default|
    result[key] = object.has_key?(key) ? object[key] : default
  end
  object.each_pair do |key, value|
    result[key] = value if !result.has_key?(key)
  end
  result
end

#normalize_run_list(run_list) ⇒ Object



50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/chef/chef_fs/data_handler/data_handler_base.rb', line 50

def normalize_run_list(run_list)
  run_list.map{|item|
    case item.to_s
    when /^recipe\[.*\]$/
      item # explicit recipe
    when /^role\[.*\]$/
      item # explicit role
    else
      "recipe[#{item}]"
    end
  }.uniq
end

#preserve_key(key) ⇒ Object



22
23
24
# File 'lib/chef/chef_fs/data_handler/data_handler_base.rb', line 22

def preserve_key(key)
  false
end

#remove_dot_json(name) ⇒ Object



15
16
17
18
19
20
# File 'lib/chef/chef_fs/data_handler/data_handler_base.rb', line 15

def remove_dot_json(name)
  if name.length < 5 || name[-5,5] != ".json"
    raise "Invalid name #{path}: must end in .json"
  end
  name[0,name.length-5]
end

#to_ruby(object) ⇒ Object

Raises:

  • (NotImplementedError)


71
72
73
# File 'lib/chef/chef_fs/data_handler/data_handler_base.rb', line 71

def to_ruby(object)
  raise NotImplementedError
end

#to_ruby_keys(object, keys) ⇒ Object



79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
# File 'lib/chef/chef_fs/data_handler/data_handler_base.rb', line 79

def to_ruby_keys(object, keys)
  result = ''
  keys.each do |key|
    if object[key]
      if object[key].is_a?(Hash)
        if object[key].size > 0
          result << key
          first = true
          object[key].each_pair do |k,v|
            if first
              first = false
            else
              result << ' '*key.length
            end
            result << " #{k.inspect} => #{v.inspect}\n"
          end
        end
      elsif object[key].is_a?(Array)
        if object[key].size > 0
          result << key
          first = true
          object[key].each do |value|
            if first
              first = false
            else
              result << ", "
            end
            result << value.inspect
          end
          result << "\n"
        end
      elsif !object[key].nil?
        result << "#{key} #{object[key].inspect}\n"
      end
    end
  end
  result
end

#verify_integrity(object, entry, &on_error) ⇒ Object



118
119
120
121
122
123
# File 'lib/chef/chef_fs/data_handler/data_handler_base.rb', line 118

def verify_integrity(object, entry, &on_error)
  base_name = remove_dot_json(entry.name)
  if object['name'] != base_name
    on_error.call("Name must be '#{base_name}' (is '#{object['name']}')")
  end
end