Parent

Files

Class/Module Index [+]

Quicksearch

Chef::Knife::Core::ObjectLoader

Attributes

klass[R]
ui[R]

Public Class Methods

new(klass, ui) click to toggle source
# File lib/chef/knife/core/object_loader.rb, line 32
def initialize(klass, ui)
  @klass = klass
  @ui = ui
end

Public Instance Methods

file_exists_and_is_readable?(file) click to toggle source
# File lib/chef/knife/core/object_loader.rb, line 104
def file_exists_and_is_readable?(file)
  File.exists?(file) && File.readable?(file)
end
find_all_object_dirs(path) click to toggle source
# File lib/chef/knife/core/object_loader.rb, line 76
def find_all_object_dirs(path)
  path = File.join(path, '*')
  objects = Dir.glob(File.expand_path(path))
  objects.delete_if { |o| !File.directory?(o) }
  objects.map { |o| File.basename(o) }
end
find_all_objects(path) click to toggle source

Find all objects in the given location If the object type is File it will look for all *.{json,rb} files, otherwise it will lookup for folders only (useful for data_bags)

@param [String] path - base look up location

@return [Array<String>] basenames of the found objects

@api public

# File lib/chef/knife/core/object_loader.rb, line 69
def find_all_objects(path)
  path = File.join(path, '*')
  path << '.{json,rb}'
  objects = Dir.glob(File.expand_path(path))
  objects.map { |o| File.basename(o) }
end
find_file(repo_location, *components) click to toggle source

When someone makes this awesome, please update the above error message.

# File lib/chef/knife/core/object_loader.rb, line 46
def find_file(repo_location, *components)
  if file_exists_and_is_readable?(File.expand_path( components.last ))
    File.expand_path( components.last )
  else
    relative_path = File.join(Dir.pwd, repo_location, *components)
    if file_exists_and_is_readable?(relative_path)
      relative_path
    else
      nil
    end
  end
end
load_from(repo_location, *components) click to toggle source
# File lib/chef/knife/core/object_loader.rb, line 37
def load_from(repo_location, *components)
  unless object_file = find_file(repo_location, *components)
    ui.error "Could not find or open file '#{components.last}' in current directory or in '#{repo_location}/#{components.join('/')}'"
    exit 1
  end
  object_from_file(object_file)
end
object_from_file(filename) click to toggle source
# File lib/chef/knife/core/object_loader.rb, line 83
def object_from_file(filename)
  case filename
  when /\.(js|json)$/
    r = Yajl::Parser.parse(IO.read(filename))

    # Chef::DataBagItem doesn't work well with the json_create method
    if @klass == Chef::DataBagItem
      r
    else
      @klass.json_create(r)
    end
  when /\.rb$/
    r = klass.new
    r.from_file(filename)
    r
  else
    ui.fatal("File must end in .js, .json, or .rb")
    exit 30
  end
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.