Sha256: cb8a0dc6ed4247c3068f3d44272c287f516890ba5dba855a72107474af358af9

Contents?: true

Size: 1.46 KB

Versions: 2

Compression:

Stored size: 1.46 KB

Contents

module Rao
  module ServiceChain
    module Step
      class Base
        attr_accessor :service, :service_name, :label, :chain

        def initialize(options = {})
          @service = options.delete(:service)
          @chain = options.delete(:chain)
          @completed_if = options.delete(:completed_if)
          @service_name = @service.try(:name)
          @label = service.try(:model_name).try(:human)
          @url = options.delete(:url)
        end

        def url(context = nil)
          return nil if context.nil?
          return context.instance_exec(@service, &@url) if @url.respond_to?(:call)
          @url ||= context.url_for([:new, @service, only_path: true])
        end

        def completed?
          return nil unless @completed_if.respond_to?(:call)
          @chain.instance_exec(@service, &@completed_if)
        end

        def pending?
          !completed?
        end

        def completion_status
          completed? ? :completed : :pending
        end

        def actual?
          return false if @chain.actual_step.nil?
          @chain.actual_step.service == @service
        end

        def to_hash(context = nil)
          {
            service: service,
            service_name: service.name,
            label: label,
            completed: completed?,
            pending: pending?,
            completion_status: completion_status,
            actual: actual?,
            url: url(context)
          }
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
rao-service_chain-0.0.34.pre app/service_steps/rao/service_chain/step/base.rb
rao-service_chain-0.0.33.pre app/service_steps/rao/service_chain/step/base.rb