Sha256: 267f1e6706372aeb84b9eda0ed1650832647344dc9606e9dfab37adc22dbf7f1

Contents?: true

Size: 1008 Bytes

Versions: 1

Compression:

Stored size: 1008 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
    private_class_method :new

    # Call your service
    #
    # Example:
    #   Foo.call(arg1: 1, arg2: 2)
    #
    # Arguments:
    #   args: (Hash)
    #
    # Return:
    #   perform's return
    def self.call(**args)
      new(args).perform
    end

    def initialize(args)
      args.each do |key, value|
        define_ivar(key, value)
        define_private_reader(key)
      end
    end

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

    private

    def define_ivar(key, value)
      instance_variable_set("@#{key}", value)
    end

    def define_private_reader(key)
      self.class.class_eval do
        private

        attr_reader key.to_sym
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

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