module ChefAPI::Util

Public Instance Methods

camelize(string) click to toggle source

Convert an underscored string to it's camelcase equivalent constant.

@param [String] string

the string to convert

@return [String]

# File lib/chef-api/util.rb, line 32
def camelize(string)
  string
    .to_s
    .split('_')
    .map { |e| e.capitalize }
    .join
end
fast_collect(collection, &block) click to toggle source

Quickly iterate over a collection using native Ruby threads, preserving the original order of elements and being all thread-safe and stuff.

@example Parse a collection of JSON files

fast_collect(Dir['**/*.json']) do |item|
  JSON.parse(File.read(item))
end

@param [#each] collection

the collection to iterate

@param [Proc] block

the block to evaluate (typically an expensive operation)

@return [Array]

the result of the iteration
# File lib/chef-api/util.rb, line 108
def fast_collect(collection, &block)
  collection.map do |item|
    Thread.new do
      Thread.current[:result] = block.call(item)
    end
  end.collect do |thread|
    thread.join
    thread[:result]
  end
end
safe_read(path) click to toggle source

“Safely” read the contents of a file on disk, catching any permission errors or not found errors and raising a nicer exception.

@example Reading a file that does not exist

safe_read('/non-existent/file') #=> Error::FileNotFound

@example Reading a file with improper permissions

safe_read('/bad-permissions') #=> Error::InsufficientFilePermissions

@example Reading a regular file

safe_read('my-file.txt') #=> ["my-file", "..."]

@param [String] path

the path to the file on disk

@return [Array<String>]

A array where the first value is the basename of the file and the
second value is the literal contents from +File.read+.
# File lib/chef-api/util.rb, line 78
def safe_read(path)
  path     = File.expand_path(path)
  name     = File.basename(path, '.*')
  contents = File.read(path)

  [name, contents]
rescue Errno::EACCES
  raise Error::InsufficientFilePermissions.new(path: path)
rescue Errno::ENOENT
  raise Error::FileNotFound.new(path: path)
end
truncate(string, options = {}) click to toggle source

Truncate the given string to a certain number of characters.

@param [String] string

the string to truncate

@param [Hash] options

the list of options (such as +length+)
# File lib/chef-api/util.rb, line 48
def truncate(string, options = {})
  length = options[:length] || 30

  if string.length > length
    string[0..length-3] + '...'
  else
    string
  end
end
underscore(string) click to toggle source

Covert the given CaMelCaSeD string to under_score. Graciously borrowed from stackoverflow.com/questions/1509915.

@param [String] string

the string to use for transformation

@return [String]

# File lib/chef-api/util.rb, line 14
def underscore(string)
  string
    .to_s
    .gsub(/::/, '/')
    .gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2')
    .gsub(/([a-z\d])([A-Z])/,'\1_\2')
    .tr('-', '_')
    .downcase
end