Sha256: a7e1b48bc530b93d1a6553b5c229be4dc867330e9bbefbe7d7248a0adae130e4

Contents?: true

Size: 956 Bytes

Versions: 1

Compression:

Stored size: 956 Bytes

Contents

# frozen_string_literal: true

module ServiceIt
  # Inherit this class and implement perform method
  #
  # Documentation:
  #   https://github.com/iago-silva/service_it
  class Base
    class << self
      # Call your service
      #
      # Example:
      #   Foo.call(arg1: 1, arg2: 2)
      #
      # Arguments:
      #   args: (Hash)
      #
      # Return:
      #   perform's return
      def call(**args)
        new_instance(args).perform
      end

      private

      def new_instance(args)
        instance = new

        args.each do |key, value|
          instance.instance_variable_set("@#{key}", value)

          class_eval do
            private

            attr_accessor key.to_sym
          end
        end

        instance
      end
    end

    # Implement this method to run your service
    def perform
      raise NotImplementedError,
            "Please implement 'perform' method in your #{self.class.name}"
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
service_it-1.1.0 lib/service_it/base.rb