yandex-delivery 0.0.2 → 0.0.7

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
  SHA256:
3
- metadata.gz: ace5fa6ba5f600789f8e2b9a3b265c349b41bb08d4d1f4e9bd9cadc29efc95d7
4
- data.tar.gz: 5df92db3acc8ae0bd0d805ea6ecfe48ff5d314432d82209c2009105aa07c4b59
3
+ metadata.gz: 879dec72178429f7404eda56de3ffa39002530a8451a82753ce79e26cb64e38e
4
+ data.tar.gz: 99cb8023968d3a40c9b03a834a812b418ac410a79287fcfd72a5fe1f36f20493
5
5
  SHA512:
6
- metadata.gz: be081c9b8b8a6bfa927627f0590dd75a0a84a66827926b5911d7915d7ccaea1598bb097a5acd21b48881090a467a80f8a7f0441d4dc9a7d4bd6d42f4d7be426c
7
- data.tar.gz: b3f05e6c3762f59de904606a6127d94fb57989e0f1249ecc06155dea676d491daf8f54d47b309c8ff604c4b5dae61c58fd08ed4dfd88b2bea1bc271951aa02b7
6
+ metadata.gz: 0bc51ee3f55b3fbab1c6939fc926435d6e25b27cdc06e80d9691166e579c8207a8c565353081b4aa6999aa746bad7c9ce9689800d0c11f479235e4259d3fb108
7
+ data.tar.gz: b6ea88f077d315ed92a2be1512c25a4ca202db48ee2c2ef352290004afeee27642e1183cdb75d1cf4cea2a85ad1f6810b9f07c1905d27e17616c904e5fa612fb
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2020 Pavel Osetrov
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.markdown ADDED
@@ -0,0 +1,254 @@
1
+ # Yandex-delivery
2
+
3
+ API wrapper для Яндекс.доставки [API](https://yandex.ru/dev/delivery-3/doc/dg/).
4
+
5
+ ## Установка Ruby
6
+
7
+ $ gem install yandex-delivery
8
+
9
+ ## Установка Rails
10
+
11
+ добавьте в Gemfile:
12
+
13
+ gem 'yandex-delivery'
14
+
15
+ и запустите `bundle install`.
16
+
17
+ Затем:
18
+
19
+ rails g yandex_delivery:install
20
+
21
+ ## Требования
22
+
23
+ Необходимо получить [токен авторизации](https://yandex.ru/dev/delivery-3/doc/dg/concepts/access.html).
24
+
25
+ ## Использование Rails
26
+
27
+ В файл `config/yandex_delivery2.yml` вставьте ваши данные из настоек яндекс доставки и токен авторизации
28
+
29
+ ## Использование Ruby
30
+
31
+ Сначала создайте экземпляр объекта `YandexDelivery::Request`:
32
+
33
+ ```ruby
34
+ delivery = YandexDelivery::Request.new(api_key: "your_access_token")
35
+ ```
36
+
37
+ Вы можете изменять `api_key`, `timeout`, `open_timeout`, `faraday_adapter`, `proxy`, `symbolize_keys`, `logger`, и `debug`:
38
+
39
+ ```ruby
40
+ YandexDelivery::Request.api_key = "your_access_token"
41
+ YandexDelivery::Request.timeout = 15
42
+ YandexDelivery::Request.open_timeout = 15
43
+ YandexDelivery::Request.symbolize_keys = true
44
+ YandexDelivery::Request.debug = false
45
+ ```
46
+
47
+ Либо в файле `config/initializers/yandex_delivery2.rb` для Rails.
48
+
49
+ ## Debug Logging
50
+
51
+ Pass `debug: true` to enable debug logging to STDOUT.
52
+
53
+ ```ruby
54
+ delivery = YandexDelivery::Request.new(api_key: "your_access_token", debug: true)
55
+ ```
56
+
57
+ ### Custom logger
58
+
59
+ Ruby `Logger.new` is used by default, but it can be overrided using:
60
+
61
+ ```ruby
62
+ delivery = YandexDelivery::Request.new(api_key: "your_access_token", debug: true, logger: MyLogger.new)
63
+ ```
64
+
65
+ Logger can be also set by globally:
66
+
67
+ ```ruby
68
+ YandexDelivery::Request.logger = MyLogger.new
69
+ ```
70
+
71
+ ## Примеры
72
+
73
+ ### Варианты доставки
74
+
75
+ #### Поиск вариантов доставки
76
+
77
+ ```ruby
78
+ # для Rails senderId указывать не обязательно, в запрос подставится значение из config/yandex_delivery2.yml
79
+ body = {
80
+ :to=>{:location=>"Санкт-Петербург"},
81
+ :dimensions=>{:length=>1, :height=>1, :width=>1, :weight=>1}
82
+ }
83
+
84
+ YandexDelivery::Request.delivery_options.upsert(body: body)
85
+ ```
86
+
87
+ #### Поиск пунктов выдачи заказов
88
+
89
+ ```ruby
90
+ YandexDelivery::Request.pickup_points.upsert(body: {locationId: 2})
91
+ ```
92
+
93
+ ### Операции с заказами
94
+
95
+ #### Создать черновик заказа
96
+
97
+ ```ruby
98
+ response = YandexDelivery::Request.orders.create(body: {deliveryType: 'COURIER'})
99
+ order_id = response.body
100
+ ```
101
+
102
+ #### Обновить черновик заказа
103
+
104
+ ```ruby
105
+ YandexDelivery::Request.orders(order_id).upsert(body: {deliveryType: 'PICKUP'})
106
+ ```
107
+
108
+ #### Оформить заказ
109
+
110
+ ```ruby
111
+ YandexDelivery::Request.orders.submit.create(body: {orderIds: [order_id]})
112
+ ```
113
+
114
+ #### Получить данные о заказе
115
+
116
+ ```ruby
117
+ response = YandexDelivery::Request.orders(order_id).retrieve
118
+ order = response.body
119
+ ```
120
+
121
+ #### Удалить заказ
122
+
123
+ ```ruby
124
+ YandexDelivery::Request.orders(order_id).delete
125
+ ```
126
+
127
+ #### Получить ярлык заказа
128
+
129
+ ```ruby
130
+ YandexDelivery::Request.orders(order_id).label.retrieve
131
+ ```
132
+
133
+ #### Поиск заказов
134
+
135
+ ```ruby
136
+ sender_ids = YandexDelivery.senders.map{|sender| sender['id']}
137
+ YandexDelivery::Request.orders.search.upsert(body: {senderIds: sender_ids, orderIds: [order_id]})
138
+ ```
139
+
140
+ #### Получить историю статусов заказа
141
+
142
+ ```ruby
143
+ YandexDelivery::Request.orders(order_id).statuses.retrieve
144
+ ```
145
+
146
+ #### Получить статус заказов
147
+
148
+ ```ruby
149
+ YandexDelivery::Request.orders.status.upsert
150
+ ```
151
+
152
+ ### Операции с отгрузками
153
+
154
+ #### Создать заявку на отгрузку
155
+
156
+ ```ruby
157
+ body = {
158
+ cabinetId: YandexDelivery.client['id'],
159
+ shipment: {
160
+ type: "WITHDRAW",
161
+ date: "2020-10-05",
162
+ warehouseFrom: YandexDelivery.warehouses.first['id'],
163
+ warehouseTo: 123,
164
+ partnerTo: 678
165
+ },
166
+ intervalId: 765478,
167
+ dimensions: {
168
+ length: 10,
169
+ width: 15,
170
+ height: 40,
171
+ weight: 5.5
172
+ },
173
+ courier: {
174
+ type: "CAR",
175
+ firstName: "Василий",
176
+ middleName: "Иванович",
177
+ lastName: "Пупкин",
178
+ phone: "+79998887766",
179
+ carNumber: "о000оо",
180
+ carBrand: "Maybach"
181
+ },
182
+ comment: "comment"
183
+ }
184
+ response = YandexDelivery::Request.shipments.application.create(body: body)
185
+ shipment_id = response.body['id']
186
+ ```
187
+
188
+ #### Подтвердить отгрузку
189
+
190
+ ```ruby
191
+ body = {
192
+ cabinetId: YandexDelivery.client['id'],
193
+ shipmentApplicationIds: [shipment_id]
194
+ }
195
+ YandexDelivery::Request.shipments.application.submit.create(body: body)
196
+ ```
197
+
198
+ #### Получить список отгрузок
199
+
200
+ ```ruby
201
+ body = {
202
+ cabinetId: YandexDelivery.client['id'],
203
+ shipmentType: "IMPORT",
204
+ dateFrom: "2020-10-05",
205
+ "dateTo": "2020-11-05",
206
+ "partnerIds":
207
+ [
208
+ 239847,
209
+ 98234,
210
+ 54968
211
+ ]
212
+ }
213
+ YandexDelivery::Request.shipments.search.upsert(body: body)
214
+ ```
215
+
216
+ #### Получить интервалы самопривозов
217
+
218
+ ```ruby
219
+ warehouse_id = YandexDelivery.warehouses.first['id']
220
+ YandexDelivery::Request.shipments.intervals.import.retrieve(params: {warehouseId: warehouse_id, date: '2020-10-06'})
221
+ ```
222
+
223
+ #### Получить интервалы заборов
224
+
225
+ ```ruby
226
+ YandexDelivery::Request.shipments.intervals.withdraw.retrieve(params: {partnerId: 106, date: '2020-10-06'})
227
+ ```
228
+
229
+ #### Получить акт передачи заказов
230
+
231
+ ```ruby
232
+ YandexDelivery::Request.shipments.applications(shipment_id).act.retrieve(params: {cabinetId: YandexDelivery.client['id']})
233
+ ```
234
+
235
+ ### Справочные данные
236
+
237
+ #### Получить полный адрес
238
+
239
+ ```ruby
240
+ YandexDelivery::Request.location.retrieve(params: {term: 'Санкт-Петербург'})
241
+ ```
242
+
243
+ #### Получить индекс по адресу
244
+
245
+ ```ruby
246
+ response = YandexDelivery::Request.location.postal_code.retrieve(params: {address: 'Санкт-Петербург, ул. Профессора Попова, д. 37Щ, БЦ "Сенатор"'})
247
+ postal_code = response.body.first[:postalCode]
248
+ ```
249
+
250
+ #### Получить список служб доставки
251
+
252
+ ```ruby
253
+ YandexDelivery::Request.delivery_services.retrieve(params: {cabinetId: YandexDelivery.client['id']})
254
+ ```
@@ -1,10 +1,11 @@
1
1
  require 'yandex_delivery'
2
2
 
3
3
  YandexDelivery.setup do |config|
4
- if File.exist?('config/yandex_delivery.yml')
4
+ if File.exist?('config/yandex_delivery2.yml')
5
5
  template = ERB.new(File.new('config/yandex_delivery2.yml').read)
6
6
  processed = YAML.safe_load(template.result(binding))
7
7
 
8
+ config::Request.app_id = processed['YANDEX_DELIVERY_APP_ID']
8
9
  config::Request.api_key = processed['YANDEX_DELIVERY_ACCESS_TOKEN']
9
10
  config::Request.timeout = 15
10
11
  config::Request.open_timeout = 15
@@ -1,3 +1,4 @@
1
+ YANDEX_DELIVERY_APP_ID: ''
1
2
  YANDEX_DELIVERY_ACCESS_TOKEN: ''
2
3
 
3
4
  YANDEX_DELIVERY: {
@@ -81,6 +81,10 @@ module YandexDelivery
81
81
  @request_builder.api_key
82
82
  end
83
83
 
84
+ def app_id
85
+ @request_builder.app_id
86
+ end
87
+
84
88
  def api_endpoint
85
89
  @request_builder.api_endpoint
86
90
  end
@@ -140,12 +144,11 @@ module YandexDelivery
140
144
  if request
141
145
  request.params.merge!(params) if params
142
146
  request.headers['Content-Type'] = 'application/json'
143
- request.headers['Authorization'] = "OAuth #{self.api_key}"
147
+ request.headers['Authorization'] = "OAuth oauth_token=\"#{self.api_key}\", oauth_client_id=\"#{self.app_id}\""
144
148
  request.headers.merge!(headers) if headers
145
149
  request.body = body if body
146
150
  request.options.timeout = self.timeout
147
151
  request.options.open_timeout = self.open_timeout
148
- p request
149
152
  end
150
153
  end
151
154
 
@@ -179,10 +182,12 @@ module YandexDelivery
179
182
  end
180
183
 
181
184
  def validate_api_key
182
- api_key = self.api_key
183
- unless api_key && (api_key["-"] || self.api_endpoint)
185
+ unless self.api_key
184
186
  raise YandexDelivery::YandexDeliveryError, "You must set an api_key prior to making a call"
185
187
  end
188
+ unless self.app_id
189
+ raise YandexDelivery::YandexDeliveryError, "You must set an app_id prior to making a call"
190
+ end
186
191
  end
187
192
 
188
193
  def api_url
@@ -1,14 +1,16 @@
1
1
  module YandexDelivery
2
2
  class Request
3
- attr_accessor :api_key, :api_endpoint, :timeout, :open_timeout, :proxy, :faraday_adapter, :symbolize_keys, :debug, :logger
3
+ attr_accessor :api_key, :app_id, :api_endpoint, :timeout, :open_timeout, :proxy, :faraday_adapter, :symbolize_keys, :debug, :logger
4
4
 
5
5
  DEFAULT_TIMEOUT = 60
6
6
  DEFAULT_OPEN_TIMEOUT = 60
7
7
 
8
- def initialize(api_key: nil, api_endpoint: nil, timeout: nil, open_timeout: nil, proxy: nil, faraday_adapter: nil, symbolize_keys: false, debug: false, logger: nil)
8
+ def initialize(api_key: nil, app_id: nil, api_endpoint: nil, timeout: nil, open_timeout: nil, proxy: nil, faraday_adapter: nil, symbolize_keys: false, debug: false, logger: nil)
9
9
  @path_parts = []
10
10
  @api_key = api_key || self.class.api_key || ENV['YANDEX_DELIVERY_ACCESS_TOKEN']
11
11
  @api_key = @api_key.strip if @api_key
12
+ @app_id = app_id || self.class.app_id || ENV['YANDEX_DELIVERY_APP_ID']
13
+ @app_id = @app_id.strip if @app_id
12
14
  @api_endpoint = api_endpoint || self.class.api_endpoint
13
15
  @timeout = timeout || self.class.timeout || DEFAULT_TIMEOUT
14
16
  @open_timeout = open_timeout || self.class.open_timeout || DEFAULT_OPEN_TIMEOUT
@@ -80,10 +82,12 @@ module YandexDelivery
80
82
  end
81
83
 
82
84
  class << self
83
- attr_accessor :api_key, :timeout, :open_timeout, :api_endpoint, :proxy, :faraday_adapter, :symbolize_keys, :debug, :logger
85
+ attr_accessor :api_key, :app_id, :timeout, :open_timeout, :api_endpoint, :proxy, :faraday_adapter, :symbolize_keys, :debug, :logger
84
86
 
85
87
  def method_missing(sym, *args, &block)
86
- new(api_key: self.api_key, api_endpoint: self.api_endpoint, timeout: self.timeout, open_timeout: self.open_timeout, faraday_adapter: self.faraday_adapter, symbolize_keys: self.symbolize_keys, debug: self.debug, proxy: self.proxy, logger: self.logger).send(sym, *args, &block)
88
+ new(api_key: self.api_key, app_id: self.app_id, api_endpoint: self.api_endpoint, timeout: self.timeout,
89
+ open_timeout: self.open_timeout, faraday_adapter: self.faraday_adapter, symbolize_keys: self.symbolize_keys,
90
+ debug: self.debug, proxy: self.proxy, logger: self.logger).send(sym, *args, &block)
87
91
  end
88
92
 
89
93
  def respond_to_missing?(method_name, include_private = false)
@@ -1,3 +1,3 @@
1
1
  module YandexDelivery
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.5"
3
3
  end
metadata CHANGED
@@ -1,11 +1,11 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yandex-delivery
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pavel Osetrov
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
  date: 2020-08-11 00:00:00.000000000 Z
@@ -44,6 +44,8 @@ executables: []
44
44
  extensions: []
45
45
  extra_rdoc_files: []
46
46
  files:
47
+ - LICENSE
48
+ - README.markdown
47
49
  - lib/generators/yandex_delivery/install/USAGE
48
50
  - lib/generators/yandex_delivery/install/install_generator.rb
49
51
  - lib/generators/yandex_delivery/install/templates/yandex_delivery.rb
@@ -59,7 +61,7 @@ homepage: https://github.com/osetrov/yandex-delivery
59
61
  licenses:
60
62
  - MIT
61
63
  metadata: {}
62
- post_install_message:
64
+ post_install_message:
63
65
  rdoc_options: []
64
66
  require_paths:
65
67
  - lib
@@ -75,7 +77,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
75
77
  version: '0'
76
78
  requirements: []
77
79
  rubygems_version: 3.1.4
78
- signing_key:
80
+ signing_key:
79
81
  specification_version: 4
80
82
  summary: Yandex delivery
81
83
  test_files: []