Sha256: 6d49491646092f8a1147cba2f9624ff039422fc5d4fee7f0de53e0032f0b6ba3

Contents?: true

Size: 842 Bytes

Versions: 1

Compression:

Stored size: 842 Bytes

Contents

# frozen_string_literal: true

require "json"

module ActiveFunction
  module Functions
    module Rendering
      ActiveFunction.register_plugin :rendering, self

      Error = Class.new(StandardError)

      class DoubleRenderError < Error
        MESSAGE_TEMPLATE = "#render was called multiple times in action: %s"

        attr_reader :message

        def initialize(context)
          @message = MESSAGE_TEMPLATE % context
        end
      end

      DEFAULT_HEADER = {"Content-Type" => "application/json"}.freeze

      def render(status: 200, json: {}, head: {})
        raise DoubleRenderError, @action_name if performed?

        @response.status     = status
        @response.headers    = head.merge(Hash[DEFAULT_HEADER])
        @response.body       = JSON.generate(json)

        @response.commit!
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
activefunction-0.4.0 lib/active_function/functions/rendering.rb