rail-locator-api 1.0.22 → 1.0.25

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: a89affa906350df328eda936e774ca59ec04face936911a7882ea171f1d7e08c
4
- data.tar.gz: cddc9e9f8e4401be3881d2729393f7281bacd83adacf509007801d31983cd165
3
+ metadata.gz: ec94ff63c6bc94eb76d7e9897b63af9d2b61d246a115f5574e3aa76cf87cbff8
4
+ data.tar.gz: 28a848cb001d8def4ec0f35178d907a4ab6f87483f187e8fdbdcadda28697035
5
5
  SHA512:
6
- metadata.gz: 71218635555f286fceaad6790fb0ebf0e547d92f4161154043e411f471235f5bda18aeee32faaf85cf550f4db1d725044bb6ad8df83613914274a113f5d78de5
7
- data.tar.gz: 59f18698cfa2a5f00594fcec92e31f56c0c52ed25fd241b1fb7a5dde08754cecc276abb4e6ba5bb22a27978ef3e6cfe1154012cba4eac565e86fceb0b943c70b
6
+ metadata.gz: 31f7ce95a453edd9c14ce565f6f074b6f42a9e98bbb4e2fd6141cf98055b2e9312bd9d3f7e4b3081822ff76834b47ff5be1ec10d44457ba329ba675407e4f50a
7
+ data.tar.gz: 166ce1b64503b7f9a5378fe6e0287d6ee2027154a2d20948397622ecf9a62f123ff7218e846a28275edac725859a9318040af9528d6c5c024270eeee1761ba4b
@@ -8,13 +8,21 @@ module RailLocatorApi
8
8
  def post(params: nil, headers: nil, format: nil, body: {})
9
9
  validate_api_key
10
10
  begin
11
- response = self.rest_client(format).post do |request|
12
- configure_request(request: request, params: params, headers: headers, body: body)
13
- end
14
- if [nil, 'json'].include?(format)
15
- parse_response(response)
11
+ if is_multipart?(body)
12
+ url = URI("#{self.api_url}#{format.present? ? ".#{format}": ""}")
13
+ http = Net::HTTP.new(url.host, url.port);
14
+ request = Net::HTTP::Post.new(url)
15
+ request.set_form body.to_params, 'multipart/form-data'
16
+ http.request(request)
16
17
  else
17
- response
18
+ response = self.rest_client(format).post do |request|
19
+ configure_request(request: request, params: params, headers: headers, body: body)
20
+ end
21
+ if [nil, 'json'].include?(format)
22
+ parse_response(response)
23
+ else
24
+ response
25
+ end
18
26
  end
19
27
  rescue => e
20
28
  handle_error(e)
@@ -221,12 +229,31 @@ module RailLocatorApi
221
229
  request.headers['X-Is-Allow-Access-To-Coordinates'] = "true"
222
230
  end
223
231
  request.headers.merge!(headers) if headers
224
- request.body = MultiJson.dump(body) if body
232
+
233
+ request.body = MultiJson.dump(body) if body && request.headers['Content-Type'] == 'application/json'
234
+
225
235
  request.options.timeout = self.timeout
226
236
  request.options.open_timeout = self.open_timeout
227
237
  end
228
238
  end
229
239
 
240
+ def is_multipart?(body, result=false)
241
+ if body.is_a?(Hash)
242
+ body.inject({}) do |acc, kv|
243
+ result = is_multipart?(kv.last, result)
244
+ end
245
+ elsif body.is_a?(Array)
246
+ body.map do |item|
247
+ result = is_multipart?(item, result)
248
+ end
249
+ result
250
+ elsif body.is_a?(ActionDispatch::Http::UploadedFile)
251
+ return true
252
+ else
253
+ result || false
254
+ end
255
+ end
256
+
230
257
  def rest_client(format=nil)
231
258
  client = Faraday.new("#{self.api_url}#{format.present? ? ".#{format}": ""}", proxy: self.proxy,
232
259
  ssl: self.ssl_options) do |faraday|
@@ -316,3 +343,43 @@ module RailLocatorApi
316
343
  end
317
344
  end
318
345
  end
346
+
347
+ class Hash
348
+ def to_params(namespace = nil)
349
+ query = []
350
+ each do |key, value|
351
+ if value.present?
352
+ if value.is_a?(Hash) || value.is_a?(Array)
353
+ query += value.to_params(namespace ? "#{namespace}[#{key}]" : key)
354
+ else
355
+ query << value.to_params(namespace ? "#{namespace}[#{key}]" : key)
356
+ end
357
+ end
358
+ end
359
+ query
360
+ end
361
+ end
362
+
363
+ class Object
364
+ def to_params(key)
365
+ if self.is_a? ActionDispatch::Http::UploadedFile
366
+ [key.to_param, File.open(self.path)]
367
+ elsif %w[File Tempfile StringIO].include?(self.class.name)
368
+ self
369
+ else
370
+ [key.to_param, to_param.to_s]
371
+ end
372
+ end
373
+ end
374
+
375
+ class Array
376
+ def to_params(key)
377
+ prefix = "#{key}[]"
378
+
379
+ if empty?
380
+ nil.to_params(prefix)
381
+ else
382
+ collect { |value| value.to_params(prefix) }
383
+ end
384
+ end
385
+ end
@@ -1,3 +1,3 @@
1
1
  module RailLocatorApi
2
- VERSION = "1.0.22"
2
+ VERSION = "1.0.25"
3
3
  end
@@ -1,5 +1,6 @@
1
1
  require 'faraday'
2
2
  require 'faraday/gzip'
3
+ require 'net/http/post/multipart'
3
4
  require 'multi_json'
4
5
  require 'rail-locator-api/version'
5
6
  require 'rail-locator-api/rail_locator_api_error'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rail-locator-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.22
4
+ version: 1.0.25
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pavel Osetrov
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: multipart-post
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
83
97
  description: ''
84
98
  email: pavel.osetrov@me.com
85
99
  executables: []