Sha256: 368a842504f8466e6e45318fac7dc0cd16d17e7232baf4398d4d568c41256d44

Contents?: true

Size: 1.49 KB

Versions: 3

Compression:

Stored size: 1.49 KB

Contents

# frozen_string_literal: true

require "json"

require "pakyow/support/extension"
require "pakyow/support/indifferentize"

require "pakyow/connection/query_parser"
require "pakyow/connection/multipart_parser"

module Pakyow
  module Environment
    module Behavior
      module InputParsing
        extend Support::Extension
        using Support::Indifferentize

        apply_extension do
          class_state :input_parsers, default: {}

          on "configure" do
            Pakyow.parse_input "application/x-www-form-urlencoded" do |input, connection|
              connection.params.parse(input.read)
            end

            Pakyow.parse_input "multipart/form-data" do |input, connection|
              Connection::MultipartParser.new(
                connection.params, boundary: connection.type_params[:boundary]
              ).parse(input)
            end

            Pakyow.parse_input "application/json", rewindable: true do |input, connection|
              values = JSON.parse(input.read)

              if values.is_a?(Hash)
                values.deep_indifferentize.each do |key, value|
                  connection.params.add(key, value)
                end
              end

              values
            end
          end
        end

        class_methods do
          def parse_input(type, rewindable: true, &block)
            @input_parsers[type] = {
              block: block,
              rewindable: rewindable
            }
          end
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
pakyow-core-1.0.0.rc5 lib/pakyow/environment/behavior/input_parsing.rb
pakyow-core-1.0.0.rc4 lib/pakyow/environment/behavior/input_parsing.rb
pakyow-core-1.0.0.rc3 lib/pakyow/environment/behavior/input_parsing.rb