Sha256: aeb6129d85bb890450b3ddc950a19d8e28e661114becf97f186209b47ea29cf6

Contents?: true

Size: 1.98 KB

Versions: 21

Compression:

Stored size: 1.98 KB

Contents

require 'itamae/resource/base'
require 'itamae/resource/file'
require 'itamae/resource/package'
require 'itamae/resource/remote_directory'
require 'itamae/resource/remote_file'
require 'itamae/resource/directory'
require 'itamae/resource/template'
require 'itamae/resource/http_request'
require 'itamae/resource/execute'
require 'itamae/resource/service'
require 'itamae/resource/link'
require 'itamae/resource/local_ruby_block'
require 'itamae/resource/git'
require 'itamae/resource/user'
require 'itamae/resource/group'
require 'itamae/resource/gem_package'

module Itamae
  module Resource
    Error = Class.new(StandardError)
    AttributeMissingError = Class.new(StandardError)
    InvalidTypeError = Class.new(StandardError)
    ParseError = Class.new(StandardError)

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

      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

      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

      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

      def parse_description(desc)
        if /\A([^\[]+)\[([^\]]+)\]\z/ =~ desc
          [$1, $2]
        else
          raise ParseError, "'#{desc}' doesn't represent a resource."
        end
      end
    end
  end
end

Version data entries

21 entries across 21 versions & 1 rubygems

Version Path
itamae-1.14.1 lib/itamae/resource.rb
itamae-1.14.0 lib/itamae/resource.rb
itamae-1.13.1 lib/itamae/resource.rb
itamae-1.13.0 lib/itamae/resource.rb
itamae-1.12.6 lib/itamae/resource.rb
itamae-1.12.5 lib/itamae/resource.rb
itamae-1.12.4 lib/itamae/resource.rb
itamae-1.12.3 lib/itamae/resource.rb
itamae-1.12.2 lib/itamae/resource.rb
itamae-1.12.1 lib/itamae/resource.rb
itamae-1.12.0 lib/itamae/resource.rb
itamae-1.11.2 lib/itamae/resource.rb
itamae-1.11.1 lib/itamae/resource.rb
itamae-1.11.0 lib/itamae/resource.rb
itamae-1.10.10 lib/itamae/resource.rb
itamae-1.10.9 lib/itamae/resource.rb
itamae-1.10.8 lib/itamae/resource.rb
itamae-1.10.7 lib/itamae/resource.rb
itamae-1.10.6 lib/itamae/resource.rb
itamae-1.10.5 lib/itamae/resource.rb