module ItamaeMitsurin::Resource

Constants

AttributeMissingError
Error
InvalidTypeError
ParseError

Public Class Methods

define_resource(name, klass) click to toggle source

def autoload_plugin_resource(method)

begin
  require "itamae/plugin/resource/#{method}"
  ::ItamaeMitsurin::Plugin::Resource.const_get(to_camel_case(method.to_s))
rescue LoadError, NameError
  raise Error, "#{method} resource is missing."
end

end

# File lib/itamae-mitsurin/resource.rb, line 58
def define_resource(name, klass)
  class_name = to_camel_case(name.to_s)
  if Resource.const_defined?(class_name)
    ItamaeMitsurin.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-mitsurin/resource.rb, line 37
def get_resource_class(method)
  begin
    self.const_get(to_camel_case(method.to_s))
  rescue NameError
    begin
      ::ItamaeMitsurin::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-mitsurin/resource.rb, line 68
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-mitsurin/resource.rb, line 33
def to_camel_case(str)
  str.split('_').map {|part| part.capitalize}.join
end