flexirest 1.12.4 → 1.12.5

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: 4b2b1b6afc271ee5ca051d711746396685574b2a7f18ca06919f48dbdd4bbafc
4
- data.tar.gz: 10a84526cef840be253ff7fc36fc1571f7fbb463e11a900a11142b895cd8ebaa
3
+ metadata.gz: 44aa9166918c27766f3d696c23cc78b08e1f956edb6ae8a7413c9e88f01c48e7
4
+ data.tar.gz: 1068bcb89fb8da7af5505177f989997794615703df092d8d27fa55479987565c
5
5
  SHA512:
6
- metadata.gz: bb7b781df1bd6f64482c6b672ac397bef31b5a0717f677db8c03988aee79253b95962136e835131fc55794f48828df6f35b3d9b36f9156e7fce5d41d3af9098d
7
- data.tar.gz: 586b813a1a098c15a7c0f56267c044ac46649c97cd0a933960bbcc19e3b27397083cd05802c30ca042d280417ff68d9dcae3eb8b152f9373afd712e794e863d4
6
+ metadata.gz: 9cddabff55c7531fdb3856c863fc9888fa3731c82135f9a02c4e3d5026514c479815ecaa499fc38b6f50c6579bff7703bcbaef688d76ea067a43f7a26dc8efc5
7
+ data.tar.gz: 204f29f4a0baa07661ea497d88799f137ed55114fdea808f5a1ea905a21f9ff51f2d0ce1c9a82d985c140c6e6f4fc29ae26e394a34a63cc51b87907dbef81139
data/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.12.5
4
+
5
+ Feature:
6
+
7
+ - Some broken APIs require a GET body, even though this is against HTTP spec. Added a `send_get_body` parameter like we already have for DELETE requests (thanks to Jan Schroeder for the request)
8
+
3
9
  ## 1.12.4
4
10
 
5
11
  Bugfix:
data/docs/basic-usage.md CHANGED
@@ -52,6 +52,12 @@ For `delete` requests whether an API can handle a body or not is undefined. The
52
52
  delete :remove, "/people/:id", send_delete_body: true
53
53
  ```
54
54
 
55
+ In a similar way, although it's against the HTTP specification, you can force a GET request to send a request body if your API requires that:
56
+
57
+ ```
58
+ get :people_search, "/people/search", send_get_body: true
59
+ ```
60
+
55
61
  If an API returns an array of results and you have [will_paginate](https://rubygems.org/gems/will_paginate) installed then you can call the paginate method to return a particular page of the results (note: this doesn't reduce the load on the server, but it can help with pagination if you have a cached response).
56
62
 
57
63
  ```ruby
@@ -361,10 +361,10 @@ module Flexirest
361
361
  if @explicit_parameters
362
362
  params = @explicit_parameters
363
363
  end
364
- if http_method == :get || (http_method == :delete && !@method[:options][:send_delete_body] && proxy != :json_api)
364
+ if (http_method == :get && !@method[:options][:send_get_body]) || (http_method == :delete && !@method[:options][:send_delete_body] && proxy != :json_api)
365
365
  @get_params = default_params.merge(params || {})
366
366
  @post_params = nil
367
- elsif http_method == :delete && @method[:options][:send_delete_body]
367
+ elsif (http_method == :get && @method[:options][:send_get_body]) || (http_method == :delete && @method[:options][:send_delete_body])
368
368
  @post_params = default_params.merge(params || {})
369
369
  @get_params = {}
370
370
  elsif params.is_a? String
@@ -476,7 +476,7 @@ module Flexirest
476
476
 
477
477
  headers["Accept"] ||= "application/vnd.api+json"
478
478
  JsonAPIProxy::Headers.save(headers)
479
- elsif http_method == :get || (http_method == :delete && !@method[:options][:send_delete_body])
479
+ elsif (http_method == :get && !@method[:options][:send_get_body]) || (http_method == :delete && !@method[:options][:send_delete_body])
480
480
  if request_body_type == :form_encoded
481
481
  headers["Content-Type"] ||= "application/x-www-form-urlencoded; charset=utf-8"
482
482
  elsif request_body_type == :form_multipart
@@ -607,16 +607,17 @@ module Flexirest
607
607
  request_options[:timeout] = @method[:options][:timeout]
608
608
  end
609
609
 
610
- case http_method
611
- when :get
610
+ if http_method == :get && !@method[:options][:send_get_body]
612
611
  response = connection.get(@url, request_options)
613
- when :put
612
+ elsif http_method == :get
613
+ response = connection.get(@url, @body, request_options)
614
+ elsif http_method == :put
614
615
  response = connection.put(@url, @body, request_options)
615
- when :post
616
+ elsif http_method == :post
616
617
  response = connection.post(@url, @body, request_options)
617
- when :patch
618
+ elsif http_method == :patch
618
619
  response = connection.patch(@url, @body, request_options)
619
- when :delete
620
+ elsif http_method == :delete
620
621
  response = connection.delete(@url, @body, request_options)
621
622
  else
622
623
  raise InvalidRequestException.new("Invalid method #{http_method}")
@@ -1,3 +1,3 @@
1
1
  module Flexirest
2
- VERSION = "1.12.4"
2
+ VERSION = "1.12.5"
3
3
  end
@@ -54,6 +54,7 @@ describe Flexirest::Request do
54
54
  put :conversion_child, "/put/:id", parse_fields: [:converted_child]
55
55
  delete :remove, "/remove/:id"
56
56
  delete :remove_body, "/remove/:id", send_delete_body: true
57
+ get :get_body, "/get-body", send_get_body: true
57
58
  get :hal, "/hal", fake:"{\"_links\":{\"child\": {\"href\": \"/child/1\"}, \"other\": {\"href\": \"/other/1\"}, \"cars\":[{\"href\": \"/car/1\", \"name\":\"car1\"}, {\"href\": \"/car/2\", \"name\":\"car2\"}, {\"href\": \"/car/not-embed\", \"name\":\"car_not_embed\"} ], \"lazy\": {\"href\": \"/lazy/load\"}, \"invalid\": [{\"href\": \"/invalid/1\"}]}, \"_embedded\":{\"other\":{\"name\":\"Jane\"},\"child\":{\"name\":\"Billy\"}, \"cars\":[{\"_links\": {\"self\": {\"href\": \"/car/1\"} }, \"make\": \"Bugatti\", \"model\": \"Veyron\"}, {\"_links\": {\"self\": {\"href\": \"/car/2\"} }, \"make\": \"Ferrari\", \"model\": \"F458 Italia\"} ], \"invalid\": [{\"present\":true, \"_links\": {} } ] } }", has_many:{other:ExampleOtherClient}
58
59
  get :fake_object, "/fake", fake:"{\"result\":true, \"list\":[1,2,3,{\"test\":true}], \"child\":{\"grandchild\":{\"test\":true}}}"
59
60
  get :fake_proc_object, "/fake", fake:->(request) { "{\"result\":#{request.get_params[:id]}}" }
@@ -451,6 +452,11 @@ describe Flexirest::Request do
451
452
  ExampleClient.all
452
453
  end
453
454
 
455
+ it "should get an HTTP connection when called and call get with a body if send_get_body is specified" do
456
+ expect_any_instance_of(Flexirest::Connection).to receive(:get).with("/get-body", "something=else", an_instance_of(Hash)).and_return(::FaradayResponseMock.new(OpenStruct.new(body:'{"result":true}', response_headers:{})))
457
+ ExampleClient.get_body(something: "else")
458
+ end
459
+
454
460
  it "should get an HTTP connection when called and call delete on it" do
455
461
  expect_any_instance_of(Flexirest::Connection).to receive(:delete).with("/remove/1", "", an_instance_of(Hash)).and_return(::FaradayResponseMock.new(OpenStruct.new(body:'{"result":true}', response_headers:{})))
456
462
  ExampleClient.remove(id:1)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flexirest
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.12.4
4
+ version: 1.12.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andy Jeffries
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-05-31 00:00:00.000000000 Z
11
+ date: 2025-02-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -407,7 +407,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
407
407
  - !ruby/object:Gem::Version
408
408
  version: '0'
409
409
  requirements: []
410
- rubygems_version: 3.5.6
410
+ rubygems_version: 3.5.21
411
411
  signing_key:
412
412
  specification_version: 4
413
413
  summary: This gem is for accessing REST services in a flexible way. ActiveResource