Sha256: 8c6184b8c2e442b62a249f9df5aa99ac6158735cd21376e99db0d25b8ba76adb

Contents?: true

Size: 1.97 KB

Versions: 19

Compression:

Stored size: 1.97 KB

Contents

module Rao
  module Service
    module Chain
      # Usage:
      #
      #     # app/service_chains/checkout_service_chain.rb
      #     class CheckoutServiceChain < Rao::Service::Chain::Base
      #       def steps
      #         [
      #           wrap(CartService, completed_if: ->(service) { service.new.valid? }),
      #           wrap(PaymentOptionsService, completed_if: ->(service) { service.new.valid? }),
      #           wrap(DeliveryAddressService, completed_if: ->(service) { service.new.valid? }),
      #           wrap(ConfirmationService, completed_if: ->(service) { service.new.valid? }),
      #           wrap(ResultService, completed_if: ->(service) { service.new.valid? }),
      #         ]
      #       end
      #     end
      #
      #     # app/controllers/checkout_services_controller/base.rb
      #     module CheckoutServicesController
      #       class Base < Rao::ServiceController::Base
      #         include Rao::Service::Chain::ControllerConcern
      #
      #         def self.service_chain_class
      #           CheckoutServiceChain
      #         end
      #
      #         private
      #
      #         def after_sucess_location
      #           next_step_url
      #         end
      #       end
      #     end
      #
      module ControllerConcern
        extend ActiveSupport::Concern

        included do
          before_action :load_service_chain
          helper_method :service_chain
        end

        class_methods do
          def service_chain_class
            raise "Child class responsibilty"
          end
        end
        
        private

        def service_chain
          @service_chain
        end

        def service_chain_class
          self.class.service_chain_class
        end

        def load_service_chain
          @service_chain = service_chain_class.new(actual_step: self.service_class)
        end

        def next_step_url
          @service_chain.next_step_url(context: self)
        end
      end
    end
  end
end

Version data entries

19 entries across 19 versions & 1 rubygems

Version Path
rao-service_chain-0.0.52.pre app/concerns/rao/service/chain/controller_concern.rb
rao-service_chain-0.0.51.pre app/concerns/rao/service/chain/controller_concern.rb
rao-service_chain-0.0.50.pre app/concerns/rao/service/chain/controller_concern.rb
rao-service_chain-0.0.49.pre app/concerns/rao/service/chain/controller_concern.rb
rao-service_chain-0.0.48.pre app/concerns/rao/service/chain/controller_concern.rb
rao-service_chain-0.0.47.pre app/concerns/rao/service/chain/controller_concern.rb
rao-service_chain-0.0.46.pre app/concerns/rao/service/chain/controller_concern.rb
rao-service_chain-0.0.45.pre app/concerns/rao/service/chain/controller_concern.rb
rao-service_chain-0.0.44.pre app/concerns/rao/service/chain/controller_concern.rb
rao-service_chain-0.0.43.pre app/concerns/rao/service/chain/controller_concern.rb
rao-service_chain-0.0.42.pre app/concerns/rao/service/chain/controller_concern.rb
rao-service_chain-0.0.41.pre app/concerns/rao/service/chain/controller_concern.rb
rao-service_chain-0.0.40.pre app/concerns/rao/service/chain/controller_concern.rb
rao-service_chain-0.0.39.pre app/concerns/rao/service/chain/controller_concern.rb
rao-service_chain-0.0.38.pre app/concerns/rao/service/chain/controller_concern.rb
rao-service_chain-0.0.36.pre app/concerns/rao/service/chain/controller_concern.rb
rao-service_chain-0.0.35.pre app/concerns/rao/service/chain/controller_concern.rb
rao-service_chain-0.0.34.pre app/concerns/rao/service/chain/controller_concern.rb
rao-service_chain-0.0.33.pre app/concerns/rao/service/chain/controller_concern.rb