Sha256: 7f68796d3c4457183f80088e7e9da65b1e216a51a335a046c41e4ba64cc2455b

Contents?: true

Size: 1.22 KB

Versions: 14

Compression:

Stored size: 1.22 KB

Contents

# frozen_string_literal: true

require 'active_support/string_inquirer'

module PUNK
  class Service < Runnable
    include Loggable
    include Publishable

    delegate :ready?, to: :_state
    delegate :invalid?, to: :_state
    delegate :success?, to: :_state
    delegate :failure?, to: :_state

    def self.run(**kwargs)
      service = new
      service.send(:_init, **kwargs)
      service.send(:_run)
      hijack = service.send(:_callbacks)
      service.is_a?(View) && hijack.is_a?(View) ? hijack : service
    end

    def result
      @_result
    end

    def process
      raise NotImplemented, "view must provide process method"
    end

    protected

    def _state
      ActiveSupport::StringInquirer.new(@_state.to_s)
    end

    def on_success; end

    def on_failure; end

    private

    def _init(**kwargs)
      @_state = :ready
      @_result = nil
      _init_runnable(kwargs)
    end

    def _run
      unless ready?
        errors.add(:raised, e.message)
        @_state = :failure
        return
      end
      unless valid?
        @_state = :invalid
        return
      end
      @_result = process
      @_state = :success
    end

    def _callbacks
      success? ? on_success : on_failure
    end
  end
end

Version data entries

14 entries across 14 versions & 1 rubygems

Version Path
punk-0.3.6 lib/punk/framework/service.rb
punk-0.3.5 lib/punk/framework/service.rb
punk-0.3.4 lib/punk/framework/service.rb
punk-0.3.3 lib/punk/framework/service.rb
punk-0.3.2 lib/punk/framework/service.rb
punk-0.3.1 lib/punk/framework/service.rb
punk-0.2.0 lib/punk/framework/service.rb
punk-0.1.4 lib/punk/framework/service.rb
punk-0.1.3 lib/punk/framework/service.rb
punk-0.1.2 lib/punk/framework/service.rb
punk-0.1.0 lib/punk/framework/service.rb
punk-0.0.3 lib/punk/framework/service.rb
punk-0.0.2 lib/punk/framework/service.rb
punk-0.0.1 lib/punk/framework/service.rb