Sha256: ea889119f02ff0189b4f7e6d58f825761a75008c57ce7672aacbf94a0c7ae7f9

Contents?: true

Size: 1.43 KB

Versions: 11

Compression:

Stored size: 1.43 KB

Contents

require 'nokogiri'

module Bamboo
  module Client
    module Http
      class Xml < Abstract
        class Doc
          def self.from(str)
            new(Nokogiri::XML(str))
          end

          def initialize(doc)
            @doc = doc
            puts doc.to_s if $DEBUG
            assert_no_error
          end

          def text_for(css)
            @doc.css(css).text
          end

          def objects_for(selector, klass, *extra_args)
            @doc.css(selector).map { |e| klass.new(e, *extra_args) }
          end

          def object_for(selector, klass, *extra_args)
            node = @doc.css(selector).first
            node or raise Error, "no node matches selector #{selector.inspect}"

            klass.new node, *extra_args
          end

          private

          def assert_no_error
            errors = @doc.css("errors error").map { |e| e.text }
            unless errors.empty?
              raise Error, "#{errors.join ' '}"
            end
          end
        end # Doc

        def post(path, data = {})
          resp = RestClient.post(uri_for(path), data) do |response, request, result, &block|
            if [301, 302, 307].include? response.code
              response.follow_redirection(request, result, &block)
            else
              response.return!(request, result, &block)
            end
          end

          Doc.from resp
        end

      end # Xml
    end # Http
  end # Client
end # Bamboo

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
bamboo-client-0.1.9 lib/bamboo-client/http/xml.rb
bamboo-client-0.1.8 lib/bamboo-client/http/xml.rb
bamboo-client-0.1.7 lib/bamboo-client/http/xml.rb
bamboo-client-0.1.6 lib/bamboo-client/http/xml.rb
bamboo-client-0.1.5 lib/bamboo-client/http/xml.rb
bamboo-client-0.1.4 lib/bamboo-client/http/xml.rb
bamboo-client-0.1.3 lib/bamboo-client/http/xml.rb
bamboo-client-0.1.2 lib/bamboo-client/http/xml.rb
bamboo-client-0.1.1 lib/bamboo-client/http/xml.rb
bamboo-client-0.1.0 lib/bamboo-client/http/xml.rb
bamboo-client-0.0.9 lib/bamboo-client/http/xml.rb