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)