dpd_api 0.0.1 → 0.1.0
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.
- checksums.yaml +4 -4
- data/.travis.yml +8 -0
- data/Gemfile +2 -0
- data/README.md +86 -1
- data/Rakefile +19 -0
- data/lib/dpd_api/base.rb +6 -20
- data/lib/dpd_api/calculator.rb +2 -0
- data/lib/dpd_api/client/response.rb +52 -0
- data/lib/dpd_api/configuration.rb +2 -0
- data/lib/dpd_api/geography.rb +2 -0
- data/lib/dpd_api/label_print.rb +4 -15
- data/lib/dpd_api/nl.rb +6 -17
- data/lib/dpd_api/order.rb +2 -0
- data/lib/dpd_api/tracing.rb +2 -0
- data/lib/dpd_api/version.rb +3 -1
- data/lib/dpd_api.rb +2 -2
- data/spec/lib/dpd_api/calculator_spec.rb +2 -0
- data/spec/lib/dpd_api/configuration_spec.rb +2 -0
- data/spec/lib/dpd_api/geography_spec.rb +2 -0
- data/spec/lib/dpd_api/order_spec.rb +2 -0
- data/spec/lib/dpd_api/tracing_spec.rb +2 -0
- data/spec/spec_helper.rb +5 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dff86941663dc1c52bef9bd8222aee681c9a40c2
|
4
|
+
data.tar.gz: 52c87d029d27a4098b7292c0ee3af213aee63da5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2168ed713fbf898ae4a58a1513f9f9dd82d15a0b7dd13c0cc22d97c5d68cf7a11536e53e2e141e956fd1b51170c49993a7c7ecef938c15386d66489c69396223
|
7
|
+
data.tar.gz: 2ab6385547d664e4760b176452a217cf84e85b8d9807c93900b494c6a720b6e32568187f1b36e048574e3d3250cc3bfe8c1cd640b49bbb3593168cfeba269062
|
data/.travis.yml
ADDED
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -3,6 +3,11 @@ DpdApi
|
|
3
3
|
|
4
4
|
:small_red_triangle_down: Ruby implementation for [DPD](http://dpd.ru)'s SOAP API
|
5
5
|
|
6
|
+
[](http://badge.fury.io/rb/dpd_api)
|
7
|
+
[](https://travis-ci.org/itsNikolay/dpd_api)
|
8
|
+
[](https://codeclimate.com/github/itsNikolay/dpd_api)
|
9
|
+
[](https://codeclimate.com/github/itsNikolay/dpd_api)
|
10
|
+
|
6
11
|
Installation
|
7
12
|
------------
|
8
13
|
|
@@ -16,7 +21,6 @@ gem 'dpd_api'
|
|
16
21
|
```ruby
|
17
22
|
# config/initializers/dpd_api.rb
|
18
23
|
DpdApi.configure do |config|
|
19
|
-
# your dpd's given client key and client number
|
20
24
|
config.client_key = 'ASD7686ASD76786786786786AASD'
|
21
25
|
config.client_number = '123456789'
|
22
26
|
config.base_url = Rails.env.production? ? 'http://ws.dpd.ru' : 'http://wstest.dpd.ru'
|
@@ -51,6 +55,40 @@ DpdApi::Calculator.service_cost(params)
|
|
51
55
|
#=> [{:service_code=>"TEN", :service_name=>"DPD 10:00", :cost=>"2228.67", :days=>"4"}, {:service_code=>"DPT", :service_name=>"DPD 13:00", :cost=>"1966.47", :days=>"4"}, . . .]
|
52
56
|
```
|
53
57
|
|
58
|
+
Table of content
|
59
|
+
----------------
|
60
|
+
* [NOTES](#notes)
|
61
|
+
* [DpdApi::Geography](#dpdapigeography)
|
62
|
+
* [.cities_cash_pay](#cities_cash_pay)
|
63
|
+
* [.terminals_self_delivery](#terminals_self_delivery)
|
64
|
+
* [.parcel_shops](#parcel_shops)
|
65
|
+
* [DpdApi::Calculator](#dpdapicalculator)
|
66
|
+
* [.service_cost](#service_cost)
|
67
|
+
* [.service_cost_by_parcels](#service_cost_by_parcels)
|
68
|
+
* [DpdApi::Order](#dpdapiorder)
|
69
|
+
* [.create_order](#create_order)
|
70
|
+
* [.order_status](#order_status)
|
71
|
+
* [.create_address](#create_address)
|
72
|
+
* [.update_address](#update_address)
|
73
|
+
* [.cancel_order](#cancel_order)
|
74
|
+
* [.add_parcels](#add_parcels)
|
75
|
+
* [.remove_parcels](#remove_parcels)
|
76
|
+
* [.invoice_file](#invoice_file)
|
77
|
+
* [DpdApi::Tracing](#dpdapitracing)
|
78
|
+
* [.states_by_client_order](#states_by_client_order)
|
79
|
+
* [.states_by_client_parcel](#states_by_client_parcel)
|
80
|
+
* [.states_by_dpd_order](#states_by_dpd_order)
|
81
|
+
* [DpdApi::Nl](#dpdapinl)
|
82
|
+
* [.nl_amount](#nl_amount)
|
83
|
+
* [.nl_invoice](#nl_invoice)
|
84
|
+
* [DpdApi::LabelPrint](#dpdapilabelprint)
|
85
|
+
* [.create_label_file](#create_label_file)
|
86
|
+
|
87
|
+
Notes
|
88
|
+
-----
|
89
|
+
1. The gem is based on gem [savon](https://github.com/savonrb/savon) v.2
|
90
|
+
2. Naming: java's `#getOrderStatus` becomes ruby's `#order_status`
|
91
|
+
|
54
92
|
Getting started
|
55
93
|
---------------
|
56
94
|
|
@@ -466,3 +504,50 @@ params = {
|
|
466
504
|
DpdApi::Tracing.states_by_dpd_order(params)
|
467
505
|
|
468
506
|
```
|
507
|
+
|
508
|
+
|
509
|
+
### DpdApi::Nl
|
510
|
+
matches `/services/nl?wsdl` in DPD SOAP API
|
511
|
+
|
512
|
+
####.nl_amount
|
513
|
+
matches `getNLAmount`
|
514
|
+
```ruby
|
515
|
+
params = {
|
516
|
+
date_from: Time.now - 1.days,
|
517
|
+
date_to: Time.now + 1 days,
|
518
|
+
}
|
519
|
+
|
520
|
+
DpdApi::Tracing.nl_amount(params)
|
521
|
+
|
522
|
+
```
|
523
|
+
####.nl_invoice
|
524
|
+
matches `getNLInvoice`
|
525
|
+
```ruby
|
526
|
+
params = {
|
527
|
+
date_from: Time.now - 1.days,
|
528
|
+
date_to: Time.now + 1 days,
|
529
|
+
}
|
530
|
+
|
531
|
+
DpdApi::Tracing.nl_invoice(params)
|
532
|
+
|
533
|
+
```
|
534
|
+
|
535
|
+
|
536
|
+
### DpdApi::LabelPrint
|
537
|
+
matches `/services/label-print?wsdl` in DPD SOAP API
|
538
|
+
|
539
|
+
####.create_label_file
|
540
|
+
matches `createLabelFile`
|
541
|
+
```ruby
|
542
|
+
params = {
|
543
|
+
file_format: 'PDF',
|
544
|
+
page_size: 'A5',
|
545
|
+
order: [
|
546
|
+
order_num: '10160002MOW',
|
547
|
+
parcels_number: '2',
|
548
|
+
],
|
549
|
+
}
|
550
|
+
|
551
|
+
DpdApi::Tracing.create_label_file(params)
|
552
|
+
|
553
|
+
```
|
data/Rakefile
CHANGED
@@ -1,2 +1,21 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
1
3
|
require "bundler/gem_tasks"
|
4
|
+
require 'rubygems'
|
5
|
+
|
6
|
+
begin
|
7
|
+
require 'bundler/setup'
|
8
|
+
rescue LoadError
|
9
|
+
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
10
|
+
end
|
11
|
+
|
12
|
+
require 'bundler'
|
13
|
+
Bundler::GemHelper.install_tasks
|
14
|
+
|
15
|
+
require 'rake'
|
16
|
+
require 'rspec/core/rake_task'
|
17
|
+
|
18
|
+
desc "Run all examples"
|
19
|
+
RSpec::Core::RakeTask.new(:spec)
|
2
20
|
|
21
|
+
task :default => [:spec]
|
data/lib/dpd_api/base.rb
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require "dpd_api/client/response"
|
3
|
+
|
1
4
|
module DpdApi
|
2
5
|
class Base
|
3
6
|
class << self
|
@@ -8,28 +11,11 @@ module DpdApi
|
|
8
11
|
protected
|
9
12
|
|
10
13
|
def client
|
11
|
-
|
14
|
+
Client::Response.new(self.url)
|
12
15
|
end
|
13
16
|
|
14
|
-
def response(method, params = {})
|
15
|
-
|
16
|
-
params = DpdApi.configuration
|
17
|
-
.auth_params
|
18
|
-
.clone
|
19
|
-
.deep_merge!(params)
|
20
|
-
request = params.blank? ? params : { request: params }
|
21
|
-
response = client.call(method, message: request)
|
22
|
-
namespace = "#{method}_response".to_sym
|
23
|
-
resources = response.body[namespace][:return]
|
24
|
-
resources = if resources.is_a?(Array)
|
25
|
-
resources
|
26
|
-
else
|
27
|
-
[] << resources
|
28
|
-
end
|
29
|
-
resources
|
30
|
-
rescue Savon::SOAPFault => error
|
31
|
-
{ errors: error.to_s }
|
32
|
-
end
|
17
|
+
def response(method, params = {}, options = {})
|
18
|
+
client.response(method, params, options)
|
33
19
|
end
|
34
20
|
end
|
35
21
|
end
|
data/lib/dpd_api/calculator.rb
CHANGED
@@ -0,0 +1,52 @@
|
|
1
|
+
require "savon"
|
2
|
+
|
3
|
+
module DpdApi
|
4
|
+
module Client
|
5
|
+
class Response
|
6
|
+
def initialize(url)
|
7
|
+
@url = url
|
8
|
+
@client = Savon.client(wsdl: @url)
|
9
|
+
end
|
10
|
+
|
11
|
+
def response(method, params = {}, options = {})
|
12
|
+
builder = ResourceBuilder.new(@client, method, params, options)
|
13
|
+
builder.resources
|
14
|
+
rescue Savon::SOAPFault => error
|
15
|
+
{ errors: error.to_s }
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
class ResourceBuilder
|
21
|
+
def initialize(client, method, params, options = {})
|
22
|
+
@client = client
|
23
|
+
@method = method
|
24
|
+
@namespace = options.delete(:namespace)
|
25
|
+
@merged_params = merge_auth_params(params)
|
26
|
+
end
|
27
|
+
|
28
|
+
def resources
|
29
|
+
namespace = "#{@method}_response".to_sym
|
30
|
+
resources = response.body[namespace][:return]
|
31
|
+
resources.is_a?(Array) ? resources : [] << resources
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def merge_auth_params(params)
|
37
|
+
auth_params = DpdApi.configuration.auth_params.clone
|
38
|
+
auth_params.deep_merge!(params)
|
39
|
+
end
|
40
|
+
|
41
|
+
def response
|
42
|
+
@client.call(@method, message: request)
|
43
|
+
end
|
44
|
+
|
45
|
+
def request
|
46
|
+
namespace = @namespace || :request
|
47
|
+
@merged_params.blank? ? @merged_params : { namespace => @merged_params }
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
data/lib/dpd_api/geography.rb
CHANGED
data/lib/dpd_api/label_print.rb
CHANGED
@@ -1,25 +1,14 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
1
3
|
module DpdApi
|
2
4
|
class LabelPrint < Base
|
3
|
-
# TODO: Implement namespace
|
4
5
|
class << self
|
5
6
|
def create_label_file(params = {})
|
6
|
-
|
7
|
-
namespace = :get_label_file
|
8
|
-
response(method, params, namespace: namespace)
|
7
|
+
response(:create_label_file, params, namespace: :get_label_file)
|
9
8
|
end
|
10
9
|
|
11
10
|
def create_label(params = {})
|
12
|
-
|
13
|
-
namespace = :get_label
|
14
|
-
response(method, params, namespace: namespace)
|
15
|
-
end
|
16
|
-
|
17
|
-
def response(method, params = {}, namespace: nil)
|
18
|
-
params = @auth_params.clone.deep_merge!(params)
|
19
|
-
request = namespace ? { namespace => params } : params
|
20
|
-
response = @client.call(method, message: request)
|
21
|
-
namespace = "#{method}_response".to_sym
|
22
|
-
response.body[namespace][:return]
|
11
|
+
response(:create_label, params, namespace: :get_label)
|
23
12
|
end
|
24
13
|
|
25
14
|
protected
|
data/lib/dpd_api/nl.rb
CHANGED
@@ -1,25 +1,14 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
1
3
|
module DpdApi
|
2
4
|
class Nl < Base
|
3
|
-
# TODO: Implement namespace
|
4
5
|
class << self
|
5
|
-
def
|
6
|
-
|
7
|
-
namespace = :arg0
|
8
|
-
response(method, params, namespace: namespace)
|
9
|
-
end
|
10
|
-
|
11
|
-
def get_nl_invoice(params = {})
|
12
|
-
method = :get_nl_invoice
|
13
|
-
namespace = :arg0
|
14
|
-
response(method, params, namespace: namespace)
|
6
|
+
def nl_amount(params = {})
|
7
|
+
response(:get_nl_amount, params, namespace: :arg0)
|
15
8
|
end
|
16
9
|
|
17
|
-
def
|
18
|
-
params
|
19
|
-
request = namespace ? { namespace => params } : params
|
20
|
-
response = @client.call(method, message: request)
|
21
|
-
namespace = "#{method}_response".to_sym
|
22
|
-
response.body[namespace][:return]
|
10
|
+
def nl_invoice(params = {})
|
11
|
+
response(:get_nl_invoice, params, namespace: :arg0)
|
23
12
|
end
|
24
13
|
|
25
14
|
protected
|
data/lib/dpd_api/order.rb
CHANGED
data/lib/dpd_api/tracing.rb
CHANGED
data/lib/dpd_api/version.rb
CHANGED
data/lib/dpd_api.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dpd_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ponomarev Nikolay
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-10-
|
11
|
+
date: 2014-10-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: savon
|
@@ -75,6 +75,7 @@ extra_rdoc_files: []
|
|
75
75
|
files:
|
76
76
|
- ".gitignore"
|
77
77
|
- ".rspec"
|
78
|
+
- ".travis.yml"
|
78
79
|
- Gemfile
|
79
80
|
- LICENSE.txt
|
80
81
|
- README.md
|
@@ -83,6 +84,7 @@ files:
|
|
83
84
|
- lib/dpd_api.rb
|
84
85
|
- lib/dpd_api/base.rb
|
85
86
|
- lib/dpd_api/calculator.rb
|
87
|
+
- lib/dpd_api/client/response.rb
|
86
88
|
- lib/dpd_api/configuration.rb
|
87
89
|
- lib/dpd_api/geography.rb
|
88
90
|
- lib/dpd_api/label_print.rb
|