Sha256: 663ab81f1e9f7e84114b78e0c4042724adcae4a6e94c5bb99d334435eb3fe298

Contents?: true

Size: 1.23 KB

Versions: 4

Compression:

Stored size: 1.23 KB

Contents

# frozen_string_literal: true

module Light
  module Services
    class Base
      # Includes
      include Light::Services::Parameters
      include Light::Services::Outputs
      include Light::Services::Callbacks

      # Getters
      attr_reader :errors, :warnings

      def initialize(args = {})
        @args = args

        initialize_params
        initialize_outputs

        @errors   = Light::Services::Messages.new
        @warnings = Light::Services::Messages.new
      end

      def call
        within_transaction { run_service }
      end

      def success?
        errors.blank?
      end

      def any_warnings?
        warnings.any?
      end

      class << self
        def call(args = {})
          new(args).tap(&:call)
        end

        alias run call
      end

      private

      # Getters
      attr_reader :args

      def run_service
        run_callbacks(:before)
        run if success?
        run_callbacks(:after) if success?
        run_callbacks(:finally, force_run: true)
        success?
      end

      def within_transaction
        if defined?(ActiveRecord::Base)
          ActiveRecord::Base.transaction do
            yield
          end
        else
          yield
        end
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
light-services-0.6.3 lib/light/services/base.rb
light-services-0.6.2 lib/light/services/base.rb
light-services-0.6.1 lib/light/services/base.rb
light-services-0.6.0 lib/light/services/base.rb