Sha256: dd37edc0e060aa5b2101a096604f467dbedcd7f1f64f15cec41199c83a617d82

Contents?: true

Size: 1.27 KB

Versions: 1

Compression:

Stored size: 1.27 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

        private

        def uri_for(path)
          u      = uri.dup
          u.path = path

          u.to_s
        end
      end # Xml
    end # Http
  end # Client
end # Bamboo

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
bamboo-client-0.0.3 lib/bamboo-client/http/xml.rb