Class: Substation::Response Abstract

Inherits:
Object
  • Object
show all
Includes:
AbstractType, Adamantium::Flat
Defined in:
lib/substation/response.rb

Overview

This class is abstract.

Base class for action responses

The following code illustrates context and serves as setup for all instance method doc examples

module App
  class Environment
    def initialize(storage, logger)
      @storage, @logger = storage, logger
    end
  end

  class SuccessfulAction
    def self.call(request)
      data = perform_work
      request.success(data)
    end
  end

  class FailingAction
    def self.call(request)
      error = perform_work
      request.error(error)
    end
  end
end

storage    = SomeStorageAbstraction.new
env        = App::Environment.new(storage, Logger.new($stdout))
dispatcher = Substation::Dispatcher.coerce({
  :successful_action => { :action => App::SuccessfulAction },
  :failing_action    => { :action => App::FailingAction }
}, env)

Direct Known Subclasses

Failure, Success

Defined Under Namespace

Classes: Failure, Success

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(request, output) ⇒ undefined

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Initialize a new instance

Parameters:

  • request (Request)

    the request passed to the action that returned this response

  • output (Object)

    the data returned from the action that returned this response



105
106
107
108
109
110
# File 'lib/substation/response.rb', line 105

def initialize(request, output)
  @request = request
  @env     = @request.env
  @input   = @request.input
  @output  = output
end

Instance Attribute Details

#envObject (readonly)

The application environment used within an action

Examples:


response = dispatcher.call(:successful_action, :some_input)
response.env # => env passed to Substation::Dispatcher.coerce(config, env)

Returns:

  • (Object)


66
67
68
# File 'lib/substation/response.rb', line 66

def env
  @env
end

#inputObject (readonly)

The request model instance passed into an action

Examples:


response = dispatcher.call(:successful_action, :some_input)
response.input # => :some_input

Returns:

  • (Object)

See Also:



80
81
82
# File 'lib/substation/response.rb', line 80

def input
  @input
end

#outputObject (readonly)

The data wrapped inside an action Substation::Response

Examples:


response = dispatcher.call(:successful_action, :some_input)
response.output # => data passed to request.success(data)

Returns:

  • (Object)


92
93
94
# File 'lib/substation/response.rb', line 92

def output
  @output
end

#requestRequest (readonly)

The request that lead to this response

Examples:


response = dispatcher.call(:successful_action, :some_input)
response.request # => request passed to action named :successful_action

Returns:



54
55
56
# File 'lib/substation/response.rb', line 54

def request
  @request
end

Instance Method Details

#success?Boolean

This method is abstract.

Indicates wether this is a successful response or not

Examples:


response = dispatcher.call(:successful_action, :some_input)
response.success? # => true

Returns:

  • (Boolean)

    true if successful, false otherwise

See Also:



128
# File 'lib/substation/response.rb', line 128

abstract_method :success?