lib/faraday/xml/response.rb in faraday-xml-0.0.1 vs lib/faraday/xml/response.rb in faraday-xml-0.1.0

- old
+ new

@@ -2,22 +2,32 @@ module Faraday module XML # Parse response bodies as XML class Response < Faraday::Middleware - def initialize(app = nil, parser_options: nil, content_type: /\bxml$/, preserve_raw: false) + def initialize(app = nil, options = {}) super(app) - @parser_options = parser_options - @content_types = Array(content_type) - @preserve_raw = preserve_raw + @parser_options = options[:parser_options] + @content_types = Array(options.fetch(:content_type, /\bxml$/)) + @preserve_raw = options.fetch(:preserve_raw, false) end + ruby2_keywords :initialize if respond_to?(:ruby2_keywords, true) # @param env [Faraday::Env] the environment of the response being processed. 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' + end + private def process_response(env) env[:raw_body] = env[:body] if @preserve_raw env[:body] = parse(env[:body]) @@ -30,34 +40,24 @@ parser.call(body, @parser_options || {}) end def test_parser - parse("<success>true</success>") + parse('<success>true</success>') end - def parser # rubocop:disable Metrics/MethodLength - @parser ||= nil - if @parser.nil? - @parser = set_parser - @parser && test_parser - end - @parser or raise 'Missing dependencies ActiveSupport::XmlMini or MultiXml' - end - - def set_parser + 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 ||= + @parser ||= # rubocop:disable Naming/MemoizedInstanceVariableName begin require 'active_support' - # require 'active_support/isolated_execution_state' 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]