Class: ChefFS::DataHandler::DataHandlerBase

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

Instance Method Summary collapse

Instance Method Details

#chef_classObject

Raises:

  • (NotImplementedError)


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

def chef_class
  raise NotImplementedError
end

#chef_object(object) ⇒ Object



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

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

#default(entry) ⇒ Object



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

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

#from_ruby(ruby) ⇒ Object



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

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

#minimize(object, entry) ⇒ Object



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

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



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

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

#normalize_for_put(object, entry) ⇒ Object



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

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

#normalize_hash(object, defaults) ⇒ Object



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

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



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

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



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

def preserve_key(key)
  false
end

#remove_dot_json(name) ⇒ Object



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

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)


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

def to_ruby(object)
  raise NotImplementedError
end

#to_ruby_keys(object, keys) ⇒ Object



78
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
# File 'lib/chef_fs/data_handler/data_handler_base.rb', line 78

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



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

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