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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4ffa837bb809c1d46862490d923d3d4543cf2591
4
- data.tar.gz: 88a31b5250ee6a8cfc3d7f10dc61a09846bd4594
3
+ metadata.gz: dff86941663dc1c52bef9bd8222aee681c9a40c2
4
+ data.tar.gz: 52c87d029d27a4098b7292c0ee3af213aee63da5
5
5
  SHA512:
6
- metadata.gz: 79e3ac96bff1fb10d51ec69b4f4e59b1f44a2eefd4d85eadad9b4f75bcf9424d34f05e78a7af949512d1d7a4ee88e9d5986201dd3eb1dfa4542b4ab3174946b5
7
- data.tar.gz: 378cbf3c5335192b3ebad252e219cae5e931bf5baea4afeb73a68f7809f28158ccb04685177bfc56e5d40220fb5d0e1243845d640eaf2ff7f84d9ef78d7d483d
6
+ metadata.gz: 2168ed713fbf898ae4a58a1513f9f9dd82d15a0b7dd13c0cc22d97c5d68cf7a11536e53e2e141e956fd1b51170c49993a7c7ecef938c15386d66489c69396223
7
+ data.tar.gz: 2ab6385547d664e4760b176452a217cf84e85b8d9807c93900b494c6a720b6e32568187f1b36e048574e3d3250cc3bfe8c1cd640b49bbb3593168cfeba269062
data/.travis.yml ADDED
@@ -0,0 +1,8 @@
1
+ before_install:
2
+ - gem install bundler
3
+ rvm:
4
+ - 1.9.3
5
+ - 2.0.0
6
+ - 2.1.1
7
+ - 2.1.2
8
+ - 2.1.3
data/Gemfile CHANGED
@@ -2,3 +2,5 @@ source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in dpd_api.gemspec
4
4
  gemspec
5
+
6
+ gem "codeclimate-test-reporter", group: :test, require: nil
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
+ [![Gem Version](https://badge.fury.io/rb/dpd_api.svg)](http://badge.fury.io/rb/dpd_api)
7
+ [![Build Status](https://travis-ci.org/itsNikolay/dpd_api.svg)](https://travis-ci.org/itsNikolay/dpd_api)
8
+ [![Code Climate](https://codeclimate.com/github/itsNikolay/dpd_api/badges/gpa.svg)](https://codeclimate.com/github/itsNikolay/dpd_api)
9
+ [![Test Coverage](https://codeclimate.com/github/itsNikolay/dpd_api/badges/coverage.svg)](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
- Savon.client(wsdl: self.url)
14
+ Client::Response.new(self.url)
12
15
  end
13
16
 
14
- def response(method, params = {})
15
- begin
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
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  module DpdApi
2
4
  class Calculator < Base
3
5
  class << self
@@ -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
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  module DpdApi
2
4
  class << self
3
5
  attr_accessor :configuration
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  module DpdApi
2
4
  class Geography < Base
3
5
  class << self
@@ -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
- method = :create_label_file
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
- method = :create_label
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 get_nl_amount(params = {})
6
- method = :get_nl_amount
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 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]
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
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  module DpdApi
2
4
  class Order < Base
3
5
  class << self
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  module DpdApi
2
4
  class Tracing < Base
3
5
  class << self
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  module DpdApi
2
- VERSION = "0.0.1"
4
+ VERSION = "0.1.0"
3
5
  end
data/lib/dpd_api.rb CHANGED
@@ -1,6 +1,6 @@
1
- require "dpd_api/version"
1
+ # encoding: utf-8
2
2
 
3
- require "savon"
3
+ require "dpd_api/version"
4
4
 
5
5
  require 'dpd_api/configuration'
6
6
  require 'dpd_api/base'
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  require "spec_helper"
2
4
 
3
5
  describe DpdApi::Calculator do
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe DpdApi do
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  require "spec_helper"
2
4
 
3
5
  describe DpdApi::Geography do
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  require "spec_helper"
2
4
 
3
5
  describe DpdApi::Order do
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  require "spec_helper"
2
4
 
3
5
  describe DpdApi::Order do
data/spec/spec_helper.rb CHANGED
@@ -1,3 +1,8 @@
1
+ # encoding: utf-8
2
+
3
+ require "codeclimate-test-reporter"
4
+ CodeClimate::TestReporter.start
5
+
1
6
  require 'dpd_api'
2
7
  require "savon/mock/spec_helper"
3
8
 
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.1
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 00:00:00.000000000 Z
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