ndlib/sipity

View on GitHub
app/response_handlers/sipity/response_handlers/submission_window_handler.rb

Summary

Maintainability
A
25 mins
Test Coverage
A
100%
require 'power_converter'

module Sipity
  module ResponseHandlers
    # This is an Experimental module and concept
    #
    # @todo should this module be moved into the Runner's namespace? It would give a closer proximity to the code that was being leveraged.
    module SubmissionWindowHandler
      # Success! Huzzah
      module SuccessResponder
        def self.for_controller(handler:)
          handler.render(template: handler.template)
        end

        def self.for_command_line(*)
          true
        end
      end

      # We have a successful form submission.
      module SubmitSuccessResponder
        def self.for_controller(handler:)
          handler.redirect_to(PowerConverter.convert(handler.response_object, to: :access_path))
        end

        def self.for_command_line(*)
          true
        end
      end

      # Forms that raise to submit may have different errors.
      module SubmitFailureResponder
        def self.for_controller(handler:)
          handler.render(template: handler.template, status: :unprocessable_entity)
        end

        def self.for_command_line(handler:)
          raise(
            Sipity::Exceptions::ResponseHandlerError,
            object: handler.response_object,
            errors: handler.response_errors,
            status: handler.response_status
          )
        end
      end
    end
  end
end