Sha256: f0975936b8cb8c3b8af660f7ce384d87260cab078e75c913cd6d9b0026e6d179

Contents?: true

Size: 1.15 KB

Versions: 4

Compression:

Stored size: 1.15 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 = {})
          Doc.from RestClient.post(uri_for(path), data)
        end

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

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
bamboo-client-0.0.8 lib/bamboo-client/http/xml.rb
bamboo-client-0.0.6 lib/bamboo-client/http/xml.rb
bamboo-client-0.0.5 lib/bamboo-client/http/xml.rb
bamboo-client-0.0.4 lib/bamboo-client/http/xml.rb