lib/faraday/xml/response.rb in faraday-xml-0.2.0 vs lib/faraday/xml/response.rb in faraday-xml-0.2.1

- old
+ new

@@ -1,7 +1,9 @@ # frozen_string_literal: true +require_relative 'parser' + module Faraday module XML # Parse response bodies as XML class Response < Faraday::Middleware def initialize(app = nil, options = {}) @@ -15,16 +17,11 @@ def on_complete(env) process_response(env) if parse_response?(env) end def parser - @parser ||= nil - if @parser.nil? - @parser = set_parser - @parser && test_parser - end - @parser or raise 'Missing dependencies ActiveSupport::XmlMini or MultiXml' + @parser ||= Parser.build! end private def process_response(env) @@ -35,37 +32,10 @@ end def parse(body) return nil if body.strip.empty? - parser.call(body, @parser_options || {}) - end - - def test_parser - parse('<success>true</success>') - end - - def set_parser # rubocop:disable Metrics/MethodLength - @parser ||= - begin - require 'multi_xml' - lambda do |xml, options| - ::MultiXml.parse(xml, options) - end - rescue LoadError # rubocop:disable Lint/SuppressedException - end - @parser ||= # rubocop:disable Naming/MemoizedInstanceVariableName - begin - require 'active_support' - require 'active_support/xml_mini' - require 'active_support/core_ext/hash/conversions' - require 'active_support/core_ext/array/conversions' - lambda do |xml, options| - disallowed_types = options[:disallowed_types] - Hash.from_xml(xml, disallowed_types) - end - rescue LoadError # rubocop:disable Lint/SuppressedException - end + parser.parse(body, @parser_options || {}) end def parse_response?(env) process_response_type?(env) && env[:body].respond_to?(:to_str)