Sha256: d034d1b4a0b3fae7bb4f04ac2ca06bdba460155947ecbaa4cc335ed11ec80c40

Contents?: true

Size: 1023 Bytes

Versions: 1

Compression:

Stored size: 1023 Bytes

Contents

# frozen_string_literal: true

module ActiveFunction
  class SuperBase
    attr_reader :action_name, :request, :response

    def initialize(action_name, request, response)
      @action_name = action_name
      @request     = request
      @response    = response
    end

    def dispatch
      process(action_name)

      @response.commit! unless performed?

      @response.to_h
    end

    def process(action) ;  public_send(action); end

    private def performed? ;  @response.committed?; end
  end

  class Base < SuperBase
    Error = Class.new(StandardError)

    # @param [String, Symbol] action_name - name of method to call
    # @param [Hash] request - request params, accessible through `#params` method
    # @param [Response] response - response object
    def self.process(action_name, request = {}, response = Response.new)
      raise ArgumentError, "Action method #{action_name} is not defined" unless method_defined?(action_name)

      new(action_name, request, response).dispatch
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
activefunction-0.4.0 lib/.rbnext/3.0/active_function/base.rb