axiomus_api 0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +4 -0
  3. data/.rspec +3 -0
  4. data/.ruby-version +1 -0
  5. data/.travis.yml +10 -0
  6. data/Gemfile +10 -0
  7. data/Gemfile.lock +67 -0
  8. data/LICENSE +21 -0
  9. data/README.md +119 -0
  10. data/axiomus_api.gemspec +19 -0
  11. data/lib/axiomus_api/actions.rb +32 -0
  12. data/lib/axiomus_api/address/dpd_address.rb +8 -0
  13. data/lib/axiomus_api/address/ems_address.rb +8 -0
  14. data/lib/axiomus_api/address/post_address.rb +7 -0
  15. data/lib/axiomus_api/address/region_courier_address.rb +8 -0
  16. data/lib/axiomus_api/address/region_pickup_address.rb +7 -0
  17. data/lib/axiomus_api/base.rb +69 -0
  18. data/lib/axiomus_api/base_auth.rb +9 -0
  19. data/lib/axiomus_api/errors.rb +14 -0
  20. data/lib/axiomus_api/item/export_item.rb +5 -0
  21. data/lib/axiomus_api/item/item.rb +7 -0
  22. data/lib/axiomus_api/order/base_order.rb +53 -0
  23. data/lib/axiomus_api/order/carry_order.rb +7 -0
  24. data/lib/axiomus_api/order/dpd_order.rb +11 -0
  25. data/lib/axiomus_api/order/ems_order.rb +12 -0
  26. data/lib/axiomus_api/order/export_order.rb +14 -0
  27. data/lib/axiomus_api/order/order.rb +8 -0
  28. data/lib/axiomus_api/order/post_order.rb +12 -0
  29. data/lib/axiomus_api/order/region_courier_order.rb +8 -0
  30. data/lib/axiomus_api/order/region_order.rb +8 -0
  31. data/lib/axiomus_api/order/region_pickup_order.rb +8 -0
  32. data/lib/axiomus_api/order/self_export_order.rb +15 -0
  33. data/lib/axiomus_api/request/order_request.rb +17 -0
  34. data/lib/axiomus_api/request/request.rb +10 -0
  35. data/lib/axiomus_api/request/status_request.rb +5 -0
  36. data/lib/axiomus_api/response/order_response.rb +29 -0
  37. data/lib/axiomus_api/response/regions_response.rb +54 -0
  38. data/lib/axiomus_api/response/status_response.rb +84 -0
  39. data/lib/axiomus_api/response_codes.rb +24 -0
  40. data/lib/axiomus_api/serializable.rb +55 -0
  41. data/lib/axiomus_api/services/export_services.rb +7 -0
  42. data/lib/axiomus_api/services/post_services.rb +7 -0
  43. data/lib/axiomus_api/services/region_services.rb +7 -0
  44. data/lib/axiomus_api/services/services.rb +7 -0
  45. data/lib/axiomus_api/session.rb +109 -0
  46. data/lib/axiomus_api/validated.rb +32 -0
  47. data/lib/axiomus_api/version.rb +3 -0
  48. data/lib/axiomus_api.rb +34 -0
  49. data/spec/factories.rb +200 -0
  50. data/spec/integration/axiomus_api/session_spec.rb +130 -0
  51. data/spec/lib/axiomus_api/base_order_spec.rb +55 -0
  52. data/spec/lib/axiomus_api/session_spec.rb +47 -0
  53. data/spec/lib/axiomus_api_spec.rb +5 -0
  54. data/spec/spec_helper.rb +19 -0
  55. data/spec/support/dummy_data.rb +61 -0
  56. data/spec/support/http_mocking.rb +21 -0
  57. metadata +113 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 0b6d53d6c8cf127838ed4317dc3b09fd527018f9
4
+ data.tar.gz: 56ea79ee658e40db0392160837f9beaa4116b90c
5
+ SHA512:
6
+ metadata.gz: 89295abdd43eee1f1fc84c3b784ac798b2ff14f32919bd7b2c2776ccee0b176061d83b9a840b09975b40dfa91e097c97cf28548b07ad8095ea249653f50576d3
7
+ data.tar.gz: f071141c39d1a008c4fd907f8cc07a5902905e97bcc700293b6c731b82ded1c9e48125015e0e8fe7d54bfd953ada873c545c9f02978e83d891f8e4e3c0d724ed
data/.gitignore ADDED
@@ -0,0 +1,4 @@
1
+ .bundle
2
+ *.sublime*
3
+ /vendor/bundle
4
+ /coverage
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --default-path spec/lib
2
+ --color
3
+ -fd
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.1.1
data/.travis.yml ADDED
@@ -0,0 +1,10 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.1.0
4
+ - 1.9.3
5
+ install: "bundle install --path vendor/bundle"
6
+ cache:
7
+ directories:
8
+ - vendor/bundle
9
+ script: "CODECLIMATE_REPO_TOKEN=93631233647d94015cf8e05386117a48a1a23106c2b990e19c96f0f462992e14 bundle exec rspec"
10
+
data/Gemfile ADDED
@@ -0,0 +1,10 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
4
+
5
+ group :test do
6
+ gem 'rspec'
7
+ gem 'coveralls'
8
+ gem 'codeclimate-test-reporter', require: nil
9
+ gem 'factory_girl', '~> 4.0'
10
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,67 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ axiomus_api (0.1)
5
+ nokogiri (~> 1.6)
6
+
7
+ GEM
8
+ remote: https://rubygems.org/
9
+ specs:
10
+ activesupport (4.0.4)
11
+ i18n (~> 0.6, >= 0.6.9)
12
+ minitest (~> 4.2)
13
+ multi_json (~> 1.3)
14
+ thread_safe (~> 0.1)
15
+ tzinfo (~> 0.3.37)
16
+ atomic (1.1.16)
17
+ codeclimate-test-reporter (0.3.0)
18
+ simplecov (>= 0.7.1, < 1.0.0)
19
+ coveralls (0.7.0)
20
+ multi_json (~> 1.3)
21
+ rest-client
22
+ simplecov (>= 0.7)
23
+ term-ansicolor
24
+ thor
25
+ diff-lcs (1.2.5)
26
+ docile (1.1.3)
27
+ factory_girl (4.4.0)
28
+ activesupport (>= 3.0.0)
29
+ i18n (0.6.9)
30
+ mime-types (2.2)
31
+ mini_portile (0.5.3)
32
+ minitest (4.7.5)
33
+ multi_json (1.9.2)
34
+ nokogiri (1.6.1)
35
+ mini_portile (~> 0.5.0)
36
+ rest-client (1.6.7)
37
+ mime-types (>= 1.16)
38
+ rspec (2.14.1)
39
+ rspec-core (~> 2.14.0)
40
+ rspec-expectations (~> 2.14.0)
41
+ rspec-mocks (~> 2.14.0)
42
+ rspec-core (2.14.8)
43
+ rspec-expectations (2.14.5)
44
+ diff-lcs (>= 1.1.3, < 2.0)
45
+ rspec-mocks (2.14.6)
46
+ simplecov (0.8.2)
47
+ docile (~> 1.1.0)
48
+ multi_json
49
+ simplecov-html (~> 0.8.0)
50
+ simplecov-html (0.8.0)
51
+ term-ansicolor (1.3.0)
52
+ tins (~> 1.0)
53
+ thor (0.19.1)
54
+ thread_safe (0.3.1)
55
+ atomic (>= 1.1.7, < 2)
56
+ tins (1.0.1)
57
+ tzinfo (0.3.39)
58
+
59
+ PLATFORMS
60
+ ruby
61
+
62
+ DEPENDENCIES
63
+ axiomus_api!
64
+ codeclimate-test-reporter
65
+ coveralls
66
+ factory_girl (~> 4.0)
67
+ rspec
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2014 Kinderly LTD
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,119 @@
1
+ # Axiomus API
2
+
3
+ [![Build Status](https://travis-ci.org/kinderly/axiomus_api.svg)](https://travis-ci.org/kinderly/axiomus_api)
4
+ [![Coverage Status](https://coveralls.io/repos/kinderly/axiomus_api/badge.png)](https://coveralls.io/r/kinderly/axiomus_api)
5
+ [![Code Climate](https://codeclimate.com/github/kinderly/axiomus_api.png)](https://codeclimate.com/github/kinderly/axiomus_api)
6
+ [![Dependency Status](https://gemnasium.com/kinderly/axiomus_api.svg)](https://gemnasium.com/kinderly/axiomus_api)
7
+
8
+ ## Description
9
+
10
+ This is a Ruby wrapper over [Axiomus](http://www.axiomus.ru "axiomus.ru") delivery service public [API](http://www.axiomus.ru/customers/api/ "Axiomus API").
11
+
12
+ All methods exposed by the API by 2014-03-30 are implemented.
13
+
14
+ ## Installation
15
+
16
+ To install this gem type the following in your command line:
17
+ ```bash
18
+ gem install axiomus_api
19
+ ```
20
+ If you are using Bundler add the following line to your Gemfile:
21
+ ```ruby
22
+ gem 'axiomus_api'
23
+ ```
24
+
25
+ If you prefer to install the most up-to-date development version, add
26
+
27
+ ```ruby
28
+ gem 'axiomus_api', git: 'git@github.com:kinderly/axiomus_api.git', branch: 'master'
29
+ ```
30
+ ## Usage
31
+
32
+ To access Axiomus API you have to know two values: **oid** and **ukey**.
33
+
34
+ `AxiomusApi::Session` is a main class to communicate with API.
35
+
36
+ ```ruby
37
+ @uid = '92' # your uid goes here
38
+ @ukey = 'XXcd208495d565ef66e7dff9f98764XX' # your ukey goes here
39
+ @test = true # use test API?
40
+ @session = AxiomusApi::Session.new(@uid, @ukey, @test)
41
+ ```
42
+
43
+ You can construct a test session easily (using test credentials provided by Axiomus):
44
+ ```ruby
45
+ @session = AxiomusApi.test_session
46
+ ```
47
+
48
+ Names of methods of `AxiomusApi::Session` are the same as those described in the [API documentation](http://www.axiomus.ru/customers/api/ "Axiomus API").
49
+
50
+ ### Getting regions info
51
+ ```ruby
52
+ @region_info = @session.get_regions()
53
+ ```
54
+
55
+ ### Creating and updating an order
56
+
57
+ To create an order you'll have to construct an order object and fill all its fields according to the documentation. Please note, that different requests use different order types.
58
+
59
+ ```ruby
60
+ # Simple delivery order ('new' and 'update' methods)
61
+
62
+ @order = AxiomusApi::Order.new
63
+ # fill order fields
64
+ @response = @session.new(@order)
65
+ #update some order fields
66
+ @response = @session.update(@order)
67
+
68
+ # Pickup order ('new_carry' and 'update_carry' methods)
69
+ @order = AxiomusApi::CarryOrder.new
70
+ # fill order fields
71
+ @response = @session.new_carry(@order)
72
+ #update some order fields
73
+ @response = @session.update_carry(@order)
74
+ ```
75
+
76
+ Here's a list of session methods and their corresponding order types:
77
+ * `new`, `update` => `AxiomusApi::Order`
78
+ * `new_carry`, `update_carry` => `AxiomusApi::CarryOrder`
79
+ * `new_export`, `update_export` => `AxiomusApi::ExportOrder`
80
+ * `new_self_export`, `update_self_export` => `AxiomusApi::SelfExportOrder`
81
+ * `new_post`, `update_post` => `AxiomusApi::PostOrder`
82
+ * `new_dpd`, `update_dpd` => `AxiomusApi::DpdOrder`
83
+ * `new_ems`, `update_ems` => `AxiomusApi::EmsOrder`
84
+ * `new_region_courier`, `update_region_courier` => `AxiomusApi::RegionCourierOrder`
85
+ * `new_region_pickup`, `update_region_pickup` => `AxiomusApi::RegionPickupOrder`
86
+
87
+ You can also specify the Axiomus method as a symbol, using `AxiomusApi::Session#send_order_request` method
88
+
89
+ ```ruby
90
+ # EMS order ('new_ems' and 'update_ems' methods)
91
+ @order = AxiomusApi::EmsOrder.new
92
+ # fill order fields
93
+ @response = @session.send_order_request(:new_ems, @order)
94
+ #update some order fields
95
+ @response = @session.send_order_request(:update_ems, @order)
96
+ ```
97
+
98
+ Most orders use `AxiomusApi::Item` as their item type, but some don't. To safely create an item of a proper type, use `#create_item` method of your order object:
99
+
100
+ ```ruby
101
+ @order = AxiomusApi::EmsOrder.new
102
+ @my_item = @order.create_item
103
+ # set item properties
104
+ @order.items << @my_item
105
+ ```
106
+
107
+ ### Getting order status
108
+ ```ruby
109
+ @okey = '642d208495dtgu8906e7dff9f98764da' # your okey goes here
110
+ @status = @session.status(@okey)
111
+ ```
112
+
113
+ ### Error handling
114
+
115
+ Before sending a request, the library will validate your order object to check for missing fields or wrong type of parameters. If there are errors, it will raise an `AxiomusApi::Errors::ValidationError` exception. List of errors can be accessed via the order's `#validation_errors` method. Please note that passing validation doesn't neccesary means the order will be accepted by Axiomus.
116
+
117
+ If any kind of order request returns with an Axiomus status other than 0, the session will raise an `AxiomusApi::Errors::RequestError` exception.
118
+
119
+
@@ -0,0 +1,19 @@
1
+ require File.expand_path("../lib/axiomus_api/version", __FILE__)
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = "axiomus_api"
5
+ s.version = ::AxiomusApi::VERSION
6
+ s.authors = ["Kinderly LTD"]
7
+ s.email = ["nuinuhin@gmail.com"]
8
+ s.homepage = "https://github.com/kinderly/axiomus_api"
9
+
10
+ s.summary = %q{A wrapper for Axiomus API}
11
+ s.description = %q{This gem provides a Ruby wrapper over Axiomus API.}
12
+ s.license = "MIT"
13
+
14
+ s.files = `git ls-files`.split("\n")
15
+ s.test_files = `git ls-files -- {spec}/*`.split("\n")
16
+ s.require_paths = ["lib"]
17
+
18
+ s.add_dependency('nokogiri', '~>1.6')
19
+ end
@@ -0,0 +1,32 @@
1
+ require_relative('request/request')
2
+ require_relative('request/order_request')
3
+ require_relative('request/status_request')
4
+
5
+ module AxiomusApi::Actions
6
+ ACTIONS = {
7
+ new: AxiomusApi::OrderRequest,
8
+ update: AxiomusApi::OrderRequest,
9
+ new_carry: AxiomusApi::OrderRequest,
10
+ update_carry: AxiomusApi::OrderRequest,
11
+ new_export: AxiomusApi::OrderRequest,
12
+ update_export: AxiomusApi::OrderRequest,
13
+ new_self_export: AxiomusApi::OrderRequest,
14
+ update_self_export: AxiomusApi::OrderRequest,
15
+ new_post: AxiomusApi::OrderRequest,
16
+ update_post: AxiomusApi::OrderRequest,
17
+ new_dpd: AxiomusApi::OrderRequest,
18
+ update_dpd: AxiomusApi::OrderRequest,
19
+ new_ems: AxiomusApi::OrderRequest,
20
+ update_ems: AxiomusApi::OrderRequest,
21
+ get_regions: AxiomusApi::Request,
22
+ new_region_courier: AxiomusApi::OrderRequest,
23
+ update_region_courier: AxiomusApi::OrderRequest,
24
+ new_region_pickup: AxiomusApi::OrderRequest,
25
+ update_region_pickup: AxiomusApi::OrderRequest,
26
+ status: AxiomusApi::StatusRequest
27
+ }
28
+
29
+ def create_request(mode)
30
+ ACTIONS[mode].new.tap{|req| req.mode = mode}
31
+ end
32
+ end
@@ -0,0 +1,8 @@
1
+ require_relative 'ems_address'
2
+
3
+ class AxiomusApi::DpdAddress < AxiomusApi::EmsAddress
4
+
5
+ xml_attribute :region
6
+ xml_attribute :carrymode, optional: true
7
+
8
+ end
@@ -0,0 +1,8 @@
1
+ require_relative '../base'
2
+
3
+ class AxiomusApi::EmsAddress < AxiomusApi::Base
4
+
5
+ xml_attribute :index, :area, :street, :house
6
+ xml_attribute :building, :apartment, optional: true
7
+
8
+ end
@@ -0,0 +1,7 @@
1
+ require_relative '../base'
2
+
3
+ class AxiomusApi::PostAddress < AxiomusApi::Base
4
+
5
+ xml_attribute :index, :region, :area, :p_address
6
+
7
+ end
@@ -0,0 +1,8 @@
1
+ require_relative '../base'
2
+
3
+ class AxiomusApi::RegionCourierAddress < AxiomusApi::Base
4
+
5
+ xml_attribute :region_code, :city_code, :index, :street, :house
6
+ xml_attribute :building, :apartment, optional: true
7
+
8
+ end
@@ -0,0 +1,7 @@
1
+ require_relative '../base'
2
+
3
+ class AxiomusApi::RegionPickupAddress < AxiomusApi::Base
4
+
5
+ xml_attribute :office_code
6
+
7
+ end
@@ -0,0 +1,69 @@
1
+ require_relative('serializable')
2
+ require_relative('validated')
3
+
4
+ class AxiomusApi::Base
5
+ include AxiomusApi::Serializable
6
+ include AxiomusApi::Validated
7
+
8
+ def self.xml_element(element_name)
9
+ @xml_element = element_name
10
+ end
11
+
12
+ def self.xml_field(*args)
13
+ options = extract_options(args)
14
+
15
+ options.keys.each do |k|
16
+ raise "Wrong attribute #{k}" if ![:xml_type, :xml_name, :optional, :type].include?(k)
17
+ end
18
+
19
+ args.each do |attr_name|
20
+ @attr_info ||= {}
21
+ @attr_info[attr_name] = options
22
+ attr_accessor attr_name
23
+ end
24
+ end
25
+
26
+ def self.xml_attribute(*args)
27
+ options = extract_options(args)
28
+ args << options.merge({xml_type: :attribute})
29
+ xml_field(*args)
30
+ end
31
+
32
+ def self.attribute_meta
33
+ res = superclass.respond_to?(:attribute_meta) ? superclass.attribute_meta : {}
34
+ res.merge(@attr_info || {})
35
+ end
36
+
37
+ def self.tag_name
38
+ if @xml_element.nil?
39
+ if superclass.respond_to?(:tag_name)
40
+ superclass.tag_name
41
+ else
42
+ raise 'xml_element not specified'
43
+ end
44
+ else
45
+ @xml_element
46
+ end
47
+ end
48
+
49
+ def tag_name
50
+ self.class.tag_name
51
+ end
52
+
53
+ def self.extract_options(args)
54
+ if args.last.is_a?(Hash) && args.last.instance_of?(Hash)
55
+ args.pop
56
+ else
57
+ {}
58
+ end
59
+ end
60
+
61
+ def initialize
62
+ self.class.attribute_meta.each do |k, v|
63
+ if v[:type]
64
+ self.send("#{k}=".to_sym, v[:type].new)
65
+ end
66
+ end
67
+ end
68
+
69
+ end
@@ -0,0 +1,9 @@
1
+ require_relative 'base'
2
+
3
+ class AxiomusApi::BaseAuth < AxiomusApi::Base
4
+ xml_attribute :ukey
5
+ end
6
+
7
+ class AxiomusApi::Auth < AxiomusApi::BaseAuth
8
+ xml_attribute :checksum
9
+ end
@@ -0,0 +1,14 @@
1
+ module AxiomusApi::Errors
2
+ Error = Class.new(StandardError)
3
+
4
+ class RequestError < Error
5
+ attr_accessor :error_code
6
+
7
+ def initialize(code)
8
+ @error_code = code
9
+ end
10
+ end
11
+
12
+ ValidationError = Class.new(Error)
13
+
14
+ end
@@ -0,0 +1,5 @@
1
+ require_relative 'item'
2
+
3
+ class AxiomusApi::ExportItem < AxiomusApi::Item
4
+ xml_attribute :oid
5
+ end
@@ -0,0 +1,7 @@
1
+ require_relative '../base'
2
+
3
+ class AxiomusApi::Item < AxiomusApi::Base
4
+ xml_element :item
5
+
6
+ xml_attribute :name, :weight, :quantity, :price
7
+ end
@@ -0,0 +1,53 @@
1
+ require_relative '../base'
2
+ require_relative '../services/services'
3
+
4
+ class AxiomusApi::BaseOrder < AxiomusApi::Base
5
+ xml_element :order
6
+
7
+ xml_field :contacts, :items
8
+ xml_field :description
9
+ xml_attribute :inner_id, :okey, optional: true
10
+ xml_attribute :name, :places
11
+ xml_field :services, type: AxiomusApi::Services
12
+
13
+ def initialize
14
+ super
15
+ @items = []
16
+ end
17
+
18
+ def total_quantity
19
+ @items.inject(0){|sum, it| sum + it.quantity}
20
+ end
21
+
22
+ def checksum(uid)
23
+ Digest::MD5.hexdigest("#{uid}u#{@items.count}#{total_quantity}")
24
+ end
25
+
26
+ def create_item
27
+ AxiomusApi::Item.new
28
+ end
29
+
30
+ def self.create_by_mode(mode)
31
+ {
32
+ new: AxiomusApi::Order,
33
+ update: AxiomusApi::Order,
34
+ new_carry: AxiomusApi::CarryOrder,
35
+ update_carry: AxiomusApi::CarryOrder,
36
+ new_export: AxiomusApi::ExportOrder,
37
+ update_export: AxiomusApi::ExportOrder,
38
+ new_self_export: AxiomusApi::SelfExportOrder,
39
+ update_self_export: AxiomusApi::SelfExportOrder,
40
+ new_post: AxiomusApi::PostOrder,
41
+ update_post: AxiomusApi::PostOrder,
42
+ new_dpd: AxiomusApi::DpdOrder,
43
+ update_dpd: AxiomusApi::DpdOrder,
44
+ new_ems: AxiomusApi::EmsOrder,
45
+ update_ems: AxiomusApi::EmsOrder,
46
+ new_region_courier: AxiomusApi::RegionCourierOrder,
47
+ update_region_courier: AxiomusApi::RegionCourierOrder,
48
+ new_region_pickup: AxiomusApi::RegionPickupOrder,
49
+ update_region_pickup: AxiomusApi::RegionPickupOrder
50
+ }[mode].new
51
+ end
52
+
53
+ end
@@ -0,0 +1,7 @@
1
+ require_relative 'base_order'
2
+
3
+ class AxiomusApi::CarryOrder < AxiomusApi::BaseOrder
4
+
5
+ xml_attribute :office, :incl_delivery_sum, :sms_sender, :sms, optional: true
6
+ xml_attribute :b_date, :e_date
7
+ end
@@ -0,0 +1,11 @@
1
+ require_relative('base_order')
2
+ require_relative('../address/dpd_address')
3
+ require_relative('../services/post_services')
4
+
5
+ class AxiomusApi::DpdOrder < AxiomusApi::BaseOrder
6
+
7
+ xml_attribute :d_date, :b_time, :e_time, :post_type
8
+ xml_field :services, type: AxiomusApi::PostServices
9
+ xml_attribute :address, type: AxiomusApi::DpdAddress
10
+
11
+ end
@@ -0,0 +1,12 @@
1
+ require_relative 'base_order'
2
+ require_relative '../address/ems_address'
3
+ require_relative '../services/post_services'
4
+
5
+ class AxiomusApi::EmsOrder < AxiomusApi::BaseOrder
6
+
7
+ xml_attribute :d_date
8
+ xml_attribute :incl_delivery_sum, optional: true
9
+ xml_field :address, type: AxiomusApi::EmsAddress
10
+ xml_field :services, type: AxiomusApi::PostServices
11
+
12
+ end
@@ -0,0 +1,14 @@
1
+ require_relative 'base_order'
2
+ require_relative '../item/export_item'
3
+ require_relative '../services/export_services'
4
+
5
+ class AxiomusApi::ExportOrder < AxiomusApi::BaseOrder
6
+
7
+ xml_attribute :from_mkad, :garden_ring, optional: true
8
+ xml_attribute :export_quantity, :transit, :d_date, :b_time, :e_time, :address
9
+ xml_field :services, type: AxiomusApi::ExportServices
10
+
11
+ def create_item
12
+ AxiomusApi::ExportItem.new
13
+ end
14
+ end
@@ -0,0 +1,8 @@
1
+ require_relative 'base_order'
2
+
3
+ class AxiomusApi::Order < AxiomusApi::BaseOrder
4
+
5
+ xml_attribute :address, :d_date, :b_time, :e_time, :city
6
+ xml_attribute :incl_delivery_sum, :from_mkad, :garden_ring, :sms_sender, :sms, optional: true
7
+
8
+ end
@@ -0,0 +1,12 @@
1
+ require_relative 'base_order'
2
+ require_relative '../address/post_address'
3
+ require_relative '../services/post_services'
4
+
5
+ class AxiomusApi::PostOrder < AxiomusApi::BaseOrder
6
+ #уточнить
7
+ xml_attribute :d_date, :post_type
8
+ xml_attribute :incl_delivery_sum, optional: true
9
+ xml_field :address, type: AxiomusApi::PostAddress
10
+ xml_field :services, type: AxiomusApi::PostServices
11
+
12
+ end
@@ -0,0 +1,8 @@
1
+ require_relative 'region_order'
2
+ require_relative '../address/region_courier_address'
3
+
4
+ class AxiomusApi::RegionCourierOrder < AxiomusApi::RegionOrder
5
+
6
+ xml_field :address, type: AxiomusApi::RegionCourierAddress
7
+
8
+ end
@@ -0,0 +1,8 @@
1
+ require_relative 'base_order'
2
+ require_relative '../services/region_services'
3
+
4
+ class AxiomusApi::RegionOrder < AxiomusApi::BaseOrder
5
+ xml_attribute :d_date, :b_time, :e_time
6
+ xml_attribute :incl_deliv_sum, optional: true
7
+ xml_field :services, type: AxiomusApi::RegionServices
8
+ end
@@ -0,0 +1,8 @@
1
+ require_relative 'region_order'
2
+ require_relative '../address/region_pickup_address'
3
+
4
+ class AxiomusApi::RegionPickupOrder < AxiomusApi::RegionOrder
5
+
6
+ xml_field :address, type: AxiomusApi::RegionPickupAddress
7
+
8
+ end
@@ -0,0 +1,15 @@
1
+ require_relative 'base_order'
2
+
3
+ class AxiomusApi::SelfExportOrder < AxiomusApi::BaseOrder
4
+
5
+ xml_attribute :car, :d_date, :b_time, :e_time, :quantity
6
+ xml_field :services, optional: true
7
+
8
+ def initialize
9
+ super
10
+ services = nil
11
+ end
12
+
13
+ def services=(val); end
14
+ end
15
+
@@ -0,0 +1,17 @@
1
+ require_relative 'request'
2
+ require_relative '../base_auth'
3
+
4
+ class AxiomusApi::OrderRequest < AxiomusApi::Request
5
+ xml_field :order
6
+
7
+ def prepare_checksum(uid)
8
+ if !auth.nil? && !order.nil?
9
+ auth.checksum = order.checksum(uid)
10
+ end
11
+ end
12
+
13
+ def initialize
14
+ @auth = AxiomusApi::Auth.new
15
+ end
16
+
17
+ end
@@ -0,0 +1,10 @@
1
+ require_relative '../base'
2
+ require_relative '../base_auth'
3
+
4
+ class AxiomusApi::Request < AxiomusApi::Base
5
+
6
+ xml_element :singleorder
7
+ xml_field :mode
8
+ xml_field :auth, type: AxiomusApi::BaseAuth
9
+
10
+ end