Sha256: b482f7cecc7bc91fbb1391a2ba9be69a843191798e3a1b4d01e797eaee48034d

Contents?: true

Size: 1.38 KB

Versions: 7

Compression:

Stored size: 1.38 KB

Contents

module Aws
  module Resources
    module OperationMethods

      # @param [Symbol] name
      # @return [Operation] Returns the named operation.
      # @raise [Errors::UnknownOperationError]
      def operation(name)
        @operations[name.to_sym] or
          raise Errors::UnknownOperationError.new(name)
      end

      # @param [Symbol] method_name
      # @param [Operation] operation
      # @return [void]
      def add_operation(method_name, operation = nil, &definition)
        operation = definition if block_given?
        safe_define_method(method_name) do |*args, &block|
          operation.call(resource:self, args:args, block:block)
        end
        @operations[method_name.to_sym] = operation
      end

      # @return [Hash]
      def operations(&block)
        @operations.dup
      end

      # @return [Array<Symbol>]
      def operation_names
        @operations.keys
      end

      # @api private
      def inherited(subclass)
        subclass.send(:instance_variable_set, "@operations", {})
      end

      private

      def safe_define_method(method_name, &block)
        if instance_methods.include?(method_name.to_sym)
          msg = "unable to define method #{name}##{method_name}, "
          msg << "method already exists"
          raise Errors::DefinitionError, msg
        else
          define_method(method_name, &block)
        end
      end

    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
aws-sdk-resources-2.0.6.pre lib/aws-sdk-resources/operation_methods.rb
aws-sdk-resources-2.0.5.pre lib/aws-sdk-resources/operation_methods.rb
aws-sdk-resources-2.0.4.pre lib/aws-sdk-resources/operation_methods.rb
aws-sdk-resources-2.0.3.pre lib/aws-sdk-resources/operation_methods.rb
aws-sdk-resources-2.0.2.pre lib/aws-sdk-resources/operation_methods.rb
aws-sdk-resources-2.0.1.pre lib/aws-sdk-resources/operation_methods.rb
aws-sdk-resources-2.0.0.pre lib/aws-sdk-resources/operation_methods.rb