Skip to content

Commit

Permalink
Added support for status_list and get_version requests
Browse files Browse the repository at this point in the history
  • Loading branch information
Nu-hin committed Apr 17, 2014
1 parent 1656fa0 commit f3c2a01
Show file tree
Hide file tree
Showing 14 changed files with 168 additions and 8 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,4 @@
/vendor/bundle
/coverage
.coveralls.yml
/*.gem
2 changes: 1 addition & 1 deletion Gemfile.lock
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
PATH
remote: .
specs:
axiomus_api (0.2)
axiomus_api (0.3)
barby (~> 0.5.0)
chunky_png (~> 1.3.0)
nokogiri (~> 1.6)
Expand Down
4 changes: 2 additions & 2 deletions axiomus_api.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,6 @@ Gem::Specification.new do |s|
s.require_paths = ["lib"]

s.add_dependency('nokogiri', '~>1.6')
s.add_dependency('barby', '~>0.5.0')
s.add_dependency('chunky_png', '~>1.3.0')
s.add_dependency('barby', '~>0.5')
s.add_dependency('chunky_png', '~>1.3')
end
1 change: 1 addition & 0 deletions lib/axiomus_api.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
require 'logger'

module AxiomusApi
AXIOMUS_API_VERSION = '2.12'
AXIOMUS_PROD_PATH = '/hydra/api_xml.php'
AXIOMUS_TEST_PATH = '/test/api_xml_test.php'
AXIOMUS_HOST = 'axiomus.ru'
Expand Down
5 changes: 4 additions & 1 deletion lib/axiomus_api/actions.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
require_relative('request/request')
require_relative('request/order_request')
require_relative('request/status_request')
require_relative('request/status_list_request')

module AxiomusApi::Actions
ACTIONS = {
Expand All @@ -23,7 +24,9 @@ module AxiomusApi::Actions
update_region_courier: AxiomusApi::OrderRequest,
new_region_pickup: AxiomusApi::OrderRequest,
update_region_pickup: AxiomusApi::OrderRequest,
status: AxiomusApi::StatusRequest
status: AxiomusApi::StatusRequest,
status_list: AxiomusApi::StatusListRequest,
get_version: AxiomusApi::Request
}

def create_request(mode)
Expand Down
30 changes: 30 additions & 0 deletions lib/axiomus_api/request/status_list_request.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
require_relative 'request'

class AxiomusApi::StatusListRequest < AxiomusApi::Request
class Okey < ::AxiomusApi::Base
xml_field :value, xml_type: :text
end

class Okeylist < ::AxiomusApi::Base
xml_field_array :okey, type: Okey

def add_okey(okey)
n_okey = Okey.new
n_okey.value = okey
(@okey ||= []) << n_okey
end
end

xml_field :okeylist

def initialize
@okeylist = Okeylist.new
end

def okeys=(value)
okeys = value.is_a?(Array) ? value : [value]
okeys.each do |o|
@okeylist.add_okey(o.to_s)
end
end
end
33 changes: 33 additions & 0 deletions lib/axiomus_api/response/status_list_response.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
require 'nokogiri'

class AxiomusApi::StatusListResponse
class Okey
attr_accessor :id
attr_accessor :status_code
attr_accessor :status_name
attr_accessor :inner_id
attr_accessor :price
attr_accessor :customer_price
attr_accessor :value

def initialize(xml_node)
@id = xml_node.xpath('@id').text
@status_code = xml_node.xpath('@status_code').text
@status_name = xml_node.xpath('@status_name').text
@inner_id = xml_node.xpath('@inner_id').text
@price = xml_node.xpath('@price').text.to_f
@customer_price = xml_node.xpath('@customer_price').text.to_f
@value = xml_node.text
end
end

attr_accessor :okeys

def initialize(xml)
doc = Nokogiri::XML(xml)
@okeys = doc.xpath('/response/okeylist/okey').map do |node|
Okey.new(node)
end
end
end

11 changes: 11 additions & 0 deletions lib/axiomus_api/response/version_response.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
require 'nokogiri'

class AxiomusApi::VersionResponse
attr_accessor :version

def initialize(xml)
doc = Nokogiri::XML(xml)
@version = doc.xpath('/response/version').text
end
end

21 changes: 20 additions & 1 deletion lib/axiomus_api/session.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
require_relative 'actions'
require_relative 'response/regions_response'
require_relative 'response/status_response'
require_relative 'response/status_list_response'
require_relative 'response/version_response'
require_relative 'response/order_response'

class AxiomusApi::Session
Expand Down Expand Up @@ -45,6 +47,23 @@ def status(okey)
status_response
end

def status_list(okeys)
xml_request = create_request(:status_list)
xml_request.auth = nil
xml_request.okeys = okeys
response = send_request(xml_request)
status_response = AxiomusApi::StatusListResponse.new(response.body)
status_response
end

def get_version
xml_request = create_request(:get_version)
xml_request.auth = nil
response = send_request(xml_request)
version_response = AxiomusApi::VersionResponse.new(response.body)
version_response.version
end

def send_order_request(mode, order)
if(!order.valid?)
error_msg = order.validation_errors.join('\n')
Expand Down Expand Up @@ -82,7 +101,7 @@ def send_request(xml_request)
connection = Net::HTTP.new(AxiomusApi::AXIOMUS_HOST, AxiomusApi::AXIOMUS_PORT)
http_request = get_http_request(xml_request)
logger.info("Request to #{xml_request.mode}")
logger.debug("Request body: #{xml_request.to_xml}")
logger.debug("Request body: #{xml_request.to_xml(true)}")
response = connection.request(http_request)
logger.info("Response: #{response.code}")
logger.debug("Response raw: #{response.body}")
Expand Down
2 changes: 1 addition & 1 deletion lib/axiomus_api/version.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
module AxiomusApi
VERSION = '0.2'
VERSION = '0.3'
end
5 changes: 3 additions & 2 deletions spec/factories.rb
Original file line number Diff line number Diff line change
Expand Up @@ -81,10 +81,11 @@
end

factory :base_order, class: AxiomusApi::BaseOrder do
contacts 'John Galt'
name {Faker::Name.name}
contacts {name}
description 'Awesome description'
inner_id {rand(1..2)==2 ? generate(:inner_id) : nil}
name 'John Galt'


trait :has_okey do
okey '2e3023c3e78f4f0c8cbb81257743c2d7'
Expand Down
18 changes: 18 additions & 0 deletions spec/integration/lib/axiomus_api/session_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,24 @@
end
end

# describe '#status_list' do
# it 'should handle multiple okeys' do
# order = build(:order)
# z1 = @session.new(order)
# order = build(:order)
# z2 = @session.new(order)
# r = @session.status_list([z1.okey, z2.okey])
# puts r
# end
# end

# describe '#get_version' do
# it 'should return version' do
# version = @session.get_version
# puts version
# end
# end

describe '#new, #update' do
it 'should create new order and update it' do
order = build(:order)
Expand Down
15 changes: 15 additions & 0 deletions spec/lib/axiomus_api/session_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,21 @@
end
end

describe '#status_list' do
it 'should handle successfull request' do
HttpMocking.enqueue_response(DummyData::STATUS_LIST_SUCCESS_RESPONSE)
z = @session.status_list(['7bbf66349060b723bba20ef687ee4ebf', 'f2c2635a00310d39cf26b7cc1db6fab2'])
end
end

describe '#get_version' do
it 'should handle successfull request' do
HttpMocking.enqueue_response(DummyData::GET_VERSION_SUCCESS_RESPONSE)
z = @session.get_version
expect(z).to eq('2.12')
end
end

it 'should accept a block' do
HttpMocking.enqueue_response(DummyData::REGIONS_SUCCESS_RESPONSE)
res = nil
Expand Down
28 changes: 28 additions & 0 deletions spec/support/dummy_data.rb
Original file line number Diff line number Diff line change
Expand Up @@ -58,4 +58,32 @@ def self.order_error_response(mode = 'new', code = 1, description = 'Ошибк
</response>
XML

STATUS_LIST_SUCCESS_RESPONSE = <<-XML
<?xml version="1.0" encoding="utf-8" ?>
<response>
<request>status_list</request>
<okeylist>
<okey id="1180901"
status_code="100"
status_name="выполнен"
inner_id="Заказ #878"
price="406.02"
customer_price="430.00">7bbf66349060b723bba20ef687ee4ebf</okey>
<okey id="1991064"
status_code="100"
status_name="выполнен"
inner_id="" price="0.00"
customer_price="">f2c2635a00310d39cf26b7cc1db6fab2</okey>
</okeylist>
</response>
XML

GET_VERSION_SUCCESS_RESPONSE = <<-XML
<?xml version="1.0" encoding="utf-8" ?>
<response>
<request>get_version</request>
<version>2.12</version>
</response>
XML

end

0 comments on commit f3c2a01

Please sign in to comment.