rail-locator-api 1.0.22 → 1.0.24

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
  SHA256:
3
- metadata.gz: a89affa906350df328eda936e774ca59ec04face936911a7882ea171f1d7e08c
4
- data.tar.gz: cddc9e9f8e4401be3881d2729393f7281bacd83adacf509007801d31983cd165
3
+ metadata.gz: 8bd00871ef27b6d49f125af92cd42cc3a9962f36f0df2a40cba25edebfea0ba9
4
+ data.tar.gz: 0e4cdf61f4bbd87eed4ea3e5f75404b86dc3625a7319658ad23a1145f26b3737
5
5
  SHA512:
6
- metadata.gz: 71218635555f286fceaad6790fb0ebf0e547d92f4161154043e411f471235f5bda18aeee32faaf85cf550f4db1d725044bb6ad8df83613914274a113f5d78de5
7
- data.tar.gz: 59f18698cfa2a5f00594fcec92e31f56c0c52ed25fd241b1fb7a5dde08754cecc276abb4e6ba5bb22a27978ef3e6cfe1154012cba4eac565e86fceb0b943c70b
6
+ metadata.gz: 91dbeb069e8f2a59d21df3efcef7d3ba0de201d6cb24928ea869aa5705d6e932a9aad8039ecdcadf52f817bbe0f64883c5921b44a6e60fade91376e9316edcd0
7
+ data.tar.gz: 1c10769ea83bdd40651bfcc8728a521f00a14dfe8f3b83fc179dd9efbef93999b82bed9a5574824427d03a50f5611a2fc8e34757734494d3602a983a5983fd32
@@ -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,41 @@ 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
+ else
368
+ [key.to_param, to_param.to_s]
369
+ end
370
+ end
371
+ end
372
+
373
+ class Array
374
+ def to_params(key)
375
+ prefix = "#{key}[]"
376
+
377
+ if empty?
378
+ nil.to_params(prefix)
379
+ else
380
+ collect { |value| value.to_params(prefix) }
381
+ end
382
+ end
383
+ end
@@ -1,3 +1,3 @@
1
1
  module RailLocatorApi
2
- VERSION = "1.0.22"
2
+ VERSION = "1.0.24"
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.24
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: []