module Itamae::Resource

Constants

AttributeMissingError
Error
InvalidTypeError
ParseError

Public Class Methods

autoload_plugin_resource(method) click to toggle source
# File lib/itamae/resource.rb, line 43
def autoload_plugin_resource(method)
  begin
    require "itamae/plugin/resource/#{method}"
    ::Itamae::Plugin::Resource.const_get(to_camel_case(method.to_s))
  rescue LoadError, NameError
    raise Error, "#{method} resource is missing."
  end
end
define_resource(name, klass) click to toggle source
# File lib/itamae/resource.rb, line 52
def define_resource(name, klass)
  class_name = to_camel_case(name.to_s)
  if Resource.const_defined?(class_name)
    Itamae.logger.warn "Redefine class. (#{class_name})"
    return
  end

  Resource.const_set(class_name, klass)
end
get_resource_class(method) click to toggle source
# File lib/itamae/resource.rb, line 31
def get_resource_class(method)
  begin
    self.const_get(to_camel_case(method.to_s))
  rescue NameError
    begin
      ::Itamae::Plugin::Resource.const_get(to_camel_case(method.to_s))
    rescue NameError
      autoload_plugin_resource(method)
    end
  end
end
parse_description(desc) click to toggle source
# File lib/itamae/resource.rb, line 62
def parse_description(desc)
  if /\A([^\[]+)\[([^\]]+)\]\z/ =~ desc
    [$1, $2]
  else
    raise ParseError, "'#{desc}' doesn't represent a resource."
  end
end
to_camel_case(str) click to toggle source
# File lib/itamae/resource.rb, line 27
def to_camel_case(str)
  str.split('_').map {|part| part.capitalize}.join
end