Module: ItamaeMitsurin::Resource

Defined in:
lib/itamae-mitsurin/resource.rb,
lib/itamae-mitsurin/resource/git.rb,
lib/itamae-mitsurin/resource/base.rb,
lib/itamae-mitsurin/resource/file.rb,
lib/itamae-mitsurin/resource/link.rb,
lib/itamae-mitsurin/resource/user.rb,
lib/itamae-mitsurin/resource/group.rb,
lib/itamae-mitsurin/resource/execute.rb,
lib/itamae-mitsurin/resource/package.rb,
lib/itamae-mitsurin/resource/s3_file.rb,
lib/itamae-mitsurin/resource/service.rb,
lib/itamae-mitsurin/resource/template.rb,
lib/itamae-mitsurin/resource/directory.rb,
lib/itamae-mitsurin/resource/gem_package.rb,
lib/itamae-mitsurin/resource/remote_file.rb,
lib/itamae-mitsurin/resource/http_request.rb,
lib/itamae-mitsurin/resource/aws_ebs_volume.rb,
lib/itamae-mitsurin/resource/aws_ec2_instance.rb,
lib/itamae-mitsurin/resource/local_ruby_block.rb,
lib/itamae-mitsurin/resource/remote_directory.rb,
lib/itamae-mitsurin/resource/aws_route53_rrset.rb,
lib/itamae-mitsurin/resource/aws_route53_rrset_alias.rb

Defined Under Namespace

Classes: AwsEbsVolume, AwsEc2Instance, AwsRoute53Rrset, AwsRoute53RrsetAlias, Base, Directory, Execute, File, GemPackage, Git, Group, HttpRequest, Link, LocalRubyBlock, Package, RemoteDirectory, RemoteFile, S3File, Service, Template, User

Constant Summary collapse

Error =
Class.new(StandardError)
AttributeMissingError =
Class.new(StandardError)
InvalidTypeError =
Class.new(StandardError)
ParseError =
Class.new(StandardError)

Class Method Summary collapse

Class Method Details

.define_resource(name, klass) ⇒ Object

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



58
59
60
61
62
63
64
65
66
# 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) ⇒ Object



37
38
39
40
41
42
43
44
45
46
47
# 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) ⇒ Object



68
69
70
71
72
73
74
# 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) ⇒ Object



33
34
35
# File 'lib/itamae-mitsurin/resource.rb', line 33

def to_camel_case(str)
  str.split('_').map {|part| part.capitalize}.join
end