Sha256: fa83d9237c53ac022aaffc745a38ce158bce629be2a25aa19b1a1e3915effed8

Contents?: true

Size: 1.39 KB

Versions: 7

Compression:

Stored size: 1.39 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 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

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
pakyow-core-1.0.6 lib/pakyow/behavior/input_parsing.rb
pakyow-core-1.0.5 lib/pakyow/behavior/input_parsing.rb
pakyow-core-1.0.4 lib/pakyow/behavior/input_parsing.rb
pakyow-core-1.0.3 lib/pakyow/behavior/input_parsing.rb
pakyow-core-1.0.2 lib/pakyow/behavior/input_parsing.rb
pakyow-core-1.0.1 lib/pakyow/behavior/input_parsing.rb
pakyow-core-1.0.0 lib/pakyow/behavior/input_parsing.rb