Sha256: fb26b4a69360eb2aa4760f9e29d7dc57eb00389358abf9513f381b7cd8721976

Contents?: true

Size: 1.08 KB

Versions: 9

Compression:

Stored size: 1.08 KB

Contents

# frozen_string_literal: true

module DHC::Formats
  class JSON < DHC::Format
    include DHC::BasicMethodsConcern

    def self.request(options)
      options[:format] = new
      super(options)
    end

    def format_options(options)
      options[:headers] ||= {}
      no_content_type_header!(options)
      no_accept_header!(options)

      options[:headers]['Content-Type'] = 'application/json; charset=utf-8'
      options[:headers]['Accept'] = 'application/json,application/vnd.api+json'
      options[:headers]['Accept-Charset'] = 'utf-8'
      options
    end

    def as_json(input)
      parse(input, Hash)
    end

    def as_open_struct(input)
      parse(input, OpenStruct)
    end

    def to_body(input)
      if input.is_a?(String)
        input
      else
        input.to_json
      end
    end

    def to_s
      'json'
    end

    def to_sym
      to_s.to_sym
    end

    private

    def parse(input, object_class)
      ::JSON.parse(input, object_class: object_class)
    rescue ::JSON::ParserError => e
      raise DHC::ParserError.new(e.message, input)
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
dhc-2.4.0 lib/dhc/formats/json.rb
dhc-2.3.0 lib/dhc/formats/json.rb
dhc-2.2.1 lib/dhc/formats/json.rb
dhc-2.2.0 lib/dhc/formats/json.rb
dhc-2.1.1 lib/dhc/formats/json.rb
dhc-2.1.0 lib/dhc/formats/json.rb
dhc-2.0.1 lib/dhc/formats/json.rb
dhc-2.0.0 lib/dhc/formats/json.rb
dhc-1.0.0 lib/dhc/formats/json.rb