kinderly/axiomus_api

View on GitHub
lib/axiomus_api/response/status_response.rb

Summary

Maintainability
A
35 mins
Test Coverage
require 'nokogiri'

class AxiomusApi::StatusResponse
  class Order
    attr_accessor :id
    attr_accessor :inner_id
    attr_accessor :price

    def initialize(node)
      @id = node.xpath('@id').text
      @inner_id = node.xpath('@inner_id').text
      @price = node.xpath('@price').text.to_f
    end
  end

  class Status
    attr_accessor :code
    attr_accessor :description

    def initialize(node)
      @code = node.xpath('@code').text.to_i
      @description = node.text
    end
  end

  class PostStatus
    attr_accessor :tracking
    attr_accessor :postprice

    def initialize(node)
      @tracking = node.xpath('@tracking').text
      @postprice = node.xpath('@postprice').text.to_f
    end
  end

  class Pack
    attr_accessor :number
    attr_accessor :places
    attr_accessor :status

    def initialize(node)
      @number = node.xpath('@number').text
      @places = node.xpath('@places').text.to_i
      @status = node.xpath('@status').text.to_i
    end
  end

  class Item
    attr_accessor :name
    attr_accessor :quantity
    attr_accessor :price

    def initialize(node)
      @name = node.xpath('@name').text
      @quantity = node.xpath('@quantity').text.to_i
      @price = node.xpath('@price').text.to_f
    end
  end

  attr_accessor :d_date
  attr_accessor :refused_items
  attr_accessor :poststatus
  attr_accessor :packs
  attr_accessor :order
  attr_accessor :status
  attr_accessor :code

  def initialize(xml)
    doc = Nokogiri::XML(xml)

    xml_date = doc.xpath('response/d_date')
    @d_date = Date.parse(xml_date.text) unless xml_date.empty?
    @order = Order.new(doc.xpath('response/order'))
    @refused_items = doc.xpath('response/refused_items/item').map do |node|
      Item.new(node)
    end
    @poststatus = PostStatus.new(doc.xpath('response/poststatus'))
    @packs = doc.xpath('response/packs/pack').map do |node|
      Pack.new(node)
    end
    @status = Status.new(doc.xpath('response/status'))
  end
end