dpd_api 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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