Sha256: 441ef44189ada893418fd3d1cebe752f4607e6372db3d0cd8d01ea100913801f

Contents?: true

Size: 1.68 KB

Versions: 1

Compression:

Stored size: 1.68 KB

Contents

# frozen_string_literal: true

class Sinclair
  # @api private
  # @author darthjee
  #
  # Class responsible for building methods
  class MethodBuilder
    autoload :Base,                'sinclair/method_builder/base'
    autoload :StringMethodBuilder, 'sinclair/method_builder/string_method_builder'
    autoload :BlockMethodBuilder,  'sinclair/method_builder/block_method_builder'
    autoload :CallMethodBuilder,   'sinclair/method_builder/call_method_builder'

    CLASS_METHOD = :class
    INSTANCE_METHOD = :instance

    # @param klass [Class] class to receive the method
    def initialize(klass)
      @klass = klass
    end

    # Builds methods
    #
    # @param definitions [MethodDefinitions] all methods
    #   definitions to be built
    # @param type [Symbol] type of method to be built
    #
    # @return [MethodDefinitions]
    def build_methods(definitions, type)
      definitions.each do |definition|
        build_from_definition(definition, type)
      end
    end

    private

    attr_reader :klass
    # @method klass
    # @private
    # @api private
    #
    # class to receive the method
    #
    # @return [Class]

    # @private
    #
    # Build one method from definition
    #
    # @param definition [MethodDefinition] the method definition
    # @param type [Symbol] type of method to be built
    #
    # @return (see Base#build)
    def build_from_definition(definition, type)
      if definition.string?
        StringMethodBuilder.new(klass, definition, type: type).build
      elsif definition.block?
        BlockMethodBuilder.new(klass, definition, type: type).build
      else
        CallMethodBuilder.new(klass, definition, type: type).build
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
sinclair-1.10.0 lib/sinclair/method_builder.rb