class ChefZero::DataStore::MemoryStoreV2

Attributes

data[R]

Public Class Methods

new() click to toggle source
# File lib/chef_zero/data_store/memory_store_v2.rb, line 26
def initialize
  clear
end

Public Instance Methods

clear() click to toggle source
# File lib/chef_zero/data_store/memory_store_v2.rb, line 32
def clear
  @data = {}
end
create(path, name, data, *options) click to toggle source
# File lib/chef_zero/data_store/memory_store_v2.rb, line 48
def create(path, name, data, *options)
  if !data.is_a?(String)
    raise "set only works with strings (given data: #{data.inspect})"
  end

  parent = _get(path, options.include?(:create_dir))

  if parent.has_key?(name)
    raise DataAlreadyExistsError.new(path + [name])
  end
  parent[name] = data
end
create_dir(path, name, *options) click to toggle source
# File lib/chef_zero/data_store/memory_store_v2.rb, line 36
def create_dir(path, name, *options)
  parent = _get(path, options.include?(:recursive))

  if parent.has_key?(name)
    if !options.include?(:recursive)
      raise DataAlreadyExistsError.new(path + [name])
    end
  else
    parent[name] = {}
  end
end
delete(path) click to toggle source
# File lib/chef_zero/data_store/memory_store_v2.rb, line 83
def delete(path)
  parent = _get(path[0, path.length - 1])
  if !parent.has_key?(path[-1])
    raise DataNotFoundError.new(path)
  end
  if !parent[path[-1]].is_a?(String)
    raise "delete only works with strings: #{path}"
  end
  parent.delete(path[-1])
end
delete_dir(path, *options) click to toggle source
# File lib/chef_zero/data_store/memory_store_v2.rb, line 94
def delete_dir(path, *options)
  parent = _get(path[0, path.length - 1])
  if !parent.has_key?(path[-1])
    raise DataNotFoundError.new(path)
  end
  if !parent[path[-1]].is_a?(Hash)
    raise "delete_dir only works with directories: #{path}"
  end
  parent.delete(path[-1])
end
exists?(path, options = {}) click to toggle source
# File lib/chef_zero/data_store/memory_store_v2.rb, line 113
def exists?(path, options = {})
  value = _get(path)
  if value.is_a?(Hash) && !options[:allow_dirs]
    raise "exists? does not work with directories (#{path} = #{value.class})"
  end
  true
rescue DataNotFoundError
  false
end
exists_dir?(path) click to toggle source
# File lib/chef_zero/data_store/memory_store_v2.rb, line 123
def exists_dir?(path)
  dir = _get(path)
  if !dir.is_a? Hash
    raise "exists_dir? only works with directories (#{path} = #{dir.class})"
  end
  true
rescue DataNotFoundError
  false
end
get(path, request = nil) click to toggle source
# File lib/chef_zero/data_store/memory_store_v2.rb, line 61
def get(path, request = nil)
  value = _get(path)
  if value.is_a?(Hash)
    raise "get() called on directory #{path.join('/')}"
  end
  value
end
list(path) click to toggle source
# File lib/chef_zero/data_store/memory_store_v2.rb, line 105
def list(path)
  dir = _get(path)
  if !dir.is_a? Hash
    raise "list only works with directories (#{path} = #{dir.class})"
  end
  dir.keys.sort
end
set(path, data, *options) click to toggle source
# File lib/chef_zero/data_store/memory_store_v2.rb, line 69
def set(path, data, *options)
  if !data.is_a?(String)
    raise "set only works with strings: #{path} = #{data.inspect}"
  end

  # Get the parent
  parent = _get(path[0..-2], options.include?(:create_dir))

  if !options.include?(:create) && !parent[path[-1]]
    raise DataNotFoundError.new(path)
  end
  parent[path[-1]] = data
end

Private Instance Methods

_get(path, create_dir = false) click to toggle source
# File lib/chef_zero/data_store/memory_store_v2.rb, line 135
def _get(path, create_dir = false)
  value = @data
  path.each_with_index do |path_part, index|
    if !value.has_key?(path_part)
      if create_dir
        value[path_part] = {}
      else
        raise DataNotFoundError.new(path[0, index + 1])
      end
    end
    value = value[path_part]
  end
  value
end