json_requester 2.0.4 → 2.0.5
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 +4 -4
- data/README.md +144 -56
- data/lib/json_requester.rb +16 -14
- metadata +2 -49
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: c49a31454dd85d0118a5f4ea97af0d5f89c5031316f49f0d54c6e92841c9e108
|
|
4
|
+
data.tar.gz: 98655925a0e0d991e47f9e7b73cd3e06068bfcd15b0dc585ffff5dc83a03ce23
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 8adce9df8bee2b36c3410e1c08fe9a8777d59d0e8904ba2185426cfa7602c1ebcce36df00879925332c30fd571c8d7f7246b29ce2cd49f85dd4a546cd0ca0f49
|
|
7
|
+
data.tar.gz: 1445c55fe7f867f080597820ec7825b9ef94bb36dc9fb956bfdc5709e0fa7771f9712a07d13af5c1c09d9ad91f5499c3eba74c7cea07b44cec76c6505e729d67
|
data/README.md
CHANGED
|
@@ -1,68 +1,156 @@
|
|
|
1
1
|
# JsonRequester
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
[](https://badge.fury.io/rb/json_requester)
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
`JsonRequester` is a lightweight wrapper around Faraday for sending
|
|
6
|
+
JSON, form-encoded, and multipart HTTP requests.
|
|
7
|
+
|
|
8
|
+
## Requirements
|
|
9
|
+
|
|
10
|
+
- Ruby `>= 3.0.0`
|
|
11
|
+
- Faraday `2.x`
|
|
12
|
+
|
|
13
|
+
## Installation
|
|
14
|
+
|
|
15
|
+
### For Faraday 2.x
|
|
16
|
+
|
|
17
|
+
Install `json_requester` 2.x:
|
|
6
18
|
|
|
7
|
-
If you want to use faraday 1.x version, install json_requester 1.x version:
|
|
8
19
|
```bash
|
|
9
|
-
|
|
20
|
+
gem install json_requester -v '~> 2.0'
|
|
10
21
|
```
|
|
11
22
|
|
|
12
|
-
|
|
23
|
+
### For Faraday 1.x
|
|
24
|
+
|
|
25
|
+
If you still need Faraday 1.x, install `json_requester` 1.x:
|
|
26
|
+
|
|
13
27
|
```bash
|
|
14
|
-
|
|
28
|
+
gem install json_requester -v '~> 1.0'
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Usage
|
|
32
|
+
|
|
33
|
+
### Initialize a requester
|
|
34
|
+
|
|
35
|
+
```ruby
|
|
36
|
+
host = 'http://httpbingo.org'
|
|
37
|
+
|
|
38
|
+
requester = JsonRequester.new(
|
|
39
|
+
host,
|
|
40
|
+
timeout: 120,
|
|
41
|
+
user_agent: 'My Agent 1.2'
|
|
42
|
+
)
|
|
15
43
|
```
|
|
16
44
|
|
|
17
|
-
|
|
45
|
+
Available initialization options:
|
|
46
|
+
|
|
47
|
+
- `timeout`: request timeout in seconds, default is `60`
|
|
48
|
+
- `user_agent`: custom user agent string
|
|
49
|
+
- `multipart`: enable multipart request middleware, default is `false`
|
|
50
|
+
- `ssl_verify`: enable SSL certificate verification, default is `true`
|
|
51
|
+
|
|
52
|
+
### Send JSON requests
|
|
53
|
+
|
|
54
|
+
Use `http_send` for regular JSON-based requests.
|
|
55
|
+
|
|
56
|
+
- `:get` sends params as query parameters
|
|
57
|
+
- other HTTP methods send params as a JSON body
|
|
18
58
|
|
|
19
59
|
```ruby
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
path
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
```
|
|
60
|
+
path = '/post-path'
|
|
61
|
+
headers = { 'Authorization' => 'Bearer token' }
|
|
62
|
+
params = {
|
|
63
|
+
key_1: 'value_1',
|
|
64
|
+
key_2: 'value_2'
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
response = requester.http_send(
|
|
68
|
+
:post,
|
|
69
|
+
path,
|
|
70
|
+
params,
|
|
71
|
+
headers,
|
|
72
|
+
sort_params: true,
|
|
73
|
+
content_type_charset: 'utf-8',
|
|
74
|
+
need_response_header: true
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
puts response['status']
|
|
78
|
+
puts response['body']
|
|
79
|
+
puts response['headers'] if response.key?('headers')
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### Send form-encoded requests
|
|
83
|
+
|
|
84
|
+
Use `form_send` for `application/x-www-form-urlencoded` requests.
|
|
85
|
+
|
|
86
|
+
```ruby
|
|
87
|
+
path = '/post-path'
|
|
88
|
+
headers = { 'Authorization' => 'Bearer token' }
|
|
89
|
+
params = {
|
|
90
|
+
key_1: 'value_1',
|
|
91
|
+
key_2: 'value_2'
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
form_response = requester.form_send(
|
|
95
|
+
:post,
|
|
96
|
+
path,
|
|
97
|
+
params,
|
|
98
|
+
headers,
|
|
99
|
+
sort_params: true,
|
|
100
|
+
need_response_header: true
|
|
101
|
+
)
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
### Send multipart requests
|
|
105
|
+
|
|
106
|
+
Use `multipart_form_send` for file uploads or multipart form data.
|
|
107
|
+
|
|
108
|
+
```ruby
|
|
109
|
+
multipart_requester = JsonRequester.new(host, multipart: true)
|
|
110
|
+
|
|
111
|
+
upload_params = {
|
|
112
|
+
file: Faraday::Multipart::FilePart.new('path/to/file.txt', 'text/plain'),
|
|
113
|
+
description: 'File upload example'
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
upload_response = multipart_requester.multipart_form_send(
|
|
117
|
+
:post,
|
|
118
|
+
'/upload_path',
|
|
119
|
+
upload_params,
|
|
120
|
+
{ 'Authorization' => 'Bearer token' }
|
|
121
|
+
)
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
## Request Methods
|
|
125
|
+
|
|
126
|
+
- `http_send`: JSON body or query-parameter requests
|
|
127
|
+
- `form_send`: form-encoded requests
|
|
128
|
+
- `multipart_form_send`: multipart form requests
|
|
129
|
+
|
|
130
|
+
### Method overview
|
|
131
|
+
|
|
132
|
+
- `http_send`: uses query params for `:get`, and sends a JSON body for
|
|
133
|
+
other HTTP methods
|
|
134
|
+
- `form_send`: sends requests as `application/x-www-form-urlencoded`
|
|
135
|
+
- `multipart_form_send`: sends multipart form data, typically for file
|
|
136
|
+
uploads
|
|
137
|
+
|
|
138
|
+
`http_send`, `form_send`, and `multipart_form_send` accept HTTP verbs
|
|
139
|
+
such as:
|
|
140
|
+
|
|
141
|
+
- `:get`
|
|
142
|
+
- `:post`
|
|
143
|
+
- `:put`
|
|
144
|
+
- `:delete`
|
|
145
|
+
|
|
146
|
+
### Common options
|
|
147
|
+
|
|
148
|
+
- `sort_params`: controls whether query parameters are sorted before sending, default is `true`
|
|
149
|
+
- `content_type_charset`: used by `http_send` for JSON requests,
|
|
150
|
+
default is `'utf-8'`
|
|
151
|
+
- `need_response_header`: when set to `true`, includes response
|
|
152
|
+
headers in the returned result
|
|
153
|
+
|
|
154
|
+
## Security
|
|
155
|
+
|
|
156
|
+
Please see [SECURITY.md](SECURITY.md) for vulnerability reporting instructions.
|
data/lib/json_requester.rb
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'faraday'
|
|
2
4
|
require 'faraday/multipart'
|
|
3
5
|
require 'json'
|
|
@@ -13,7 +15,7 @@ class JsonRequester
|
|
|
13
15
|
@user_agent = user_agent.strip.to_s
|
|
14
16
|
end
|
|
15
17
|
|
|
16
|
-
def http_send(http_method, path, params={}, headers={}, sort_params: true, need_response_header: false, content_type_charset: 'utf-8')
|
|
18
|
+
def http_send(http_method, path, params = {}, headers = {}, sort_params: true, need_response_header: false, content_type_charset: 'utf-8')
|
|
17
19
|
puts "send #{http_method} request to #{@host} with\npath: #{path}\nparams: #{params}\nheaders: #{headers}"
|
|
18
20
|
if http_method == :get
|
|
19
21
|
normal_send(http_method, path, params, headers, sort_params: sort_params, need_response_header: need_response_header)
|
|
@@ -22,7 +24,7 @@ class JsonRequester
|
|
|
22
24
|
end
|
|
23
25
|
end
|
|
24
26
|
|
|
25
|
-
def normal_send(http_method, path, params={}, headers={}, sort_params: true, need_response_header: false)
|
|
27
|
+
def normal_send(http_method, path, params = {}, headers = {}, sort_params: true, need_response_header: false)
|
|
26
28
|
conn = init_conn(sort_params: sort_params)
|
|
27
29
|
res = conn.send(http_method) do |req|
|
|
28
30
|
req.url path
|
|
@@ -30,11 +32,11 @@ class JsonRequester
|
|
|
30
32
|
req.params = params if object_present?(params)
|
|
31
33
|
end
|
|
32
34
|
process_response(res, need_response_header: need_response_header)
|
|
33
|
-
rescue => e
|
|
35
|
+
rescue StandardError => e
|
|
34
36
|
error_response(e)
|
|
35
37
|
end
|
|
36
38
|
|
|
37
|
-
def json_send(http_method, path, params={}, headers={}, sort_params: true, need_response_header: false, content_type_charset: 'utf-8')
|
|
39
|
+
def json_send(http_method, path, params = {}, headers = {}, sort_params: true, need_response_header: false, content_type_charset: 'utf-8')
|
|
38
40
|
conn = init_conn(sort_params: sort_params)
|
|
39
41
|
res = conn.send(http_method) do |req|
|
|
40
42
|
req.url path
|
|
@@ -43,11 +45,11 @@ class JsonRequester
|
|
|
43
45
|
req.body = params.to_json if object_present?(params)
|
|
44
46
|
end
|
|
45
47
|
process_response(res, need_response_header: need_response_header)
|
|
46
|
-
rescue => e
|
|
48
|
+
rescue StandardError => e
|
|
47
49
|
error_response(e)
|
|
48
50
|
end
|
|
49
51
|
|
|
50
|
-
def form_send(http_method, path, params={}, headers={}, sort_params: true, need_response_header: false)
|
|
52
|
+
def form_send(http_method, path, params = {}, headers = {}, sort_params: true, need_response_header: false)
|
|
51
53
|
conn = init_conn(sort_params: sort_params)
|
|
52
54
|
res = conn.send(http_method) do |req|
|
|
53
55
|
req.url path
|
|
@@ -56,11 +58,11 @@ class JsonRequester
|
|
|
56
58
|
req.body = URI.encode_www_form(params) if object_present?(params)
|
|
57
59
|
end
|
|
58
60
|
process_response(res, need_response_header: need_response_header)
|
|
59
|
-
rescue => e
|
|
61
|
+
rescue StandardError => e
|
|
60
62
|
error_response(e)
|
|
61
63
|
end
|
|
62
64
|
|
|
63
|
-
def multipart_form_send(http_method, path, params={}, headers={}, sort_params: true, need_response_header: false)
|
|
65
|
+
def multipart_form_send(http_method, path, params = {}, headers = {}, sort_params: true, need_response_header: false)
|
|
64
66
|
conn = init_conn(sort_params: sort_params)
|
|
65
67
|
res = conn.send(http_method) do |req|
|
|
66
68
|
req.url path
|
|
@@ -76,7 +78,7 @@ class JsonRequester
|
|
|
76
78
|
# https://lostisland.github.io/faraday/#/customization/index?id=order-of-parameters
|
|
77
79
|
Faraday::NestedParamsEncoder.sort_params = sort_params # faraday default is true
|
|
78
80
|
Faraday.default_connection_options = { headers: { user_agent: @user_agent } } unless @user_agent.empty?
|
|
79
|
-
options = {
|
|
81
|
+
options = {
|
|
80
82
|
url: host,
|
|
81
83
|
ssl: { verify: @ssl_verify }
|
|
82
84
|
}
|
|
@@ -91,13 +93,13 @@ class JsonRequester
|
|
|
91
93
|
end
|
|
92
94
|
|
|
93
95
|
def process_response(response, need_response_header: false)
|
|
94
|
-
result = {'status' => response.status}
|
|
96
|
+
result = { 'status' => response.status }
|
|
95
97
|
begin
|
|
96
98
|
body = JSON.parse(response.body)
|
|
97
|
-
body =
|
|
99
|
+
body = { 'body' => body } unless body.is_a?(Hash)
|
|
98
100
|
body['body_status'] = body.delete('status') unless body['status'].nil?
|
|
99
|
-
rescue
|
|
100
|
-
body = {'body' => response.body}
|
|
101
|
+
rescue StandardError
|
|
102
|
+
body = { 'body' => response.body }
|
|
101
103
|
end
|
|
102
104
|
result.merge!(body)
|
|
103
105
|
result['headers'] = response.headers.to_h if need_response_header
|
|
@@ -118,7 +120,7 @@ class JsonRequester
|
|
|
118
120
|
# Ref: https://github.com/rails/rails/blob/v7.1.4.2/activesupport/lib/active_support/core_ext/object/blank.rb#L18
|
|
119
121
|
# active_support blank? method
|
|
120
122
|
return true if object.nil?
|
|
123
|
+
|
|
121
124
|
object.respond_to?(:empty?) ? !!object.empty? : false
|
|
122
125
|
end
|
|
123
|
-
|
|
124
126
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: json_requester
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.0.
|
|
4
|
+
version: 2.0.5
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- JiaRou Lee
|
|
@@ -43,54 +43,6 @@ dependencies:
|
|
|
43
43
|
- - "~>"
|
|
44
44
|
- !ruby/object:Gem::Version
|
|
45
45
|
version: 1.2.0
|
|
46
|
-
- !ruby/object:Gem::Dependency
|
|
47
|
-
name: pry
|
|
48
|
-
requirement: !ruby/object:Gem::Requirement
|
|
49
|
-
requirements:
|
|
50
|
-
- - "~>"
|
|
51
|
-
- !ruby/object:Gem::Version
|
|
52
|
-
version: 0.16.0
|
|
53
|
-
type: :development
|
|
54
|
-
prerelease: false
|
|
55
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
56
|
-
requirements:
|
|
57
|
-
- - "~>"
|
|
58
|
-
- !ruby/object:Gem::Version
|
|
59
|
-
version: 0.16.0
|
|
60
|
-
- !ruby/object:Gem::Dependency
|
|
61
|
-
name: rspec
|
|
62
|
-
requirement: !ruby/object:Gem::Requirement
|
|
63
|
-
requirements:
|
|
64
|
-
- - "~>"
|
|
65
|
-
- !ruby/object:Gem::Version
|
|
66
|
-
version: 3.13.0
|
|
67
|
-
type: :development
|
|
68
|
-
prerelease: false
|
|
69
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
70
|
-
requirements:
|
|
71
|
-
- - "~>"
|
|
72
|
-
- !ruby/object:Gem::Version
|
|
73
|
-
version: 3.13.0
|
|
74
|
-
- !ruby/object:Gem::Dependency
|
|
75
|
-
name: webmock
|
|
76
|
-
requirement: !ruby/object:Gem::Requirement
|
|
77
|
-
requirements:
|
|
78
|
-
- - "~>"
|
|
79
|
-
- !ruby/object:Gem::Version
|
|
80
|
-
version: '3.26'
|
|
81
|
-
- - ">="
|
|
82
|
-
- !ruby/object:Gem::Version
|
|
83
|
-
version: 3.26.0
|
|
84
|
-
type: :development
|
|
85
|
-
prerelease: false
|
|
86
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
87
|
-
requirements:
|
|
88
|
-
- - "~>"
|
|
89
|
-
- !ruby/object:Gem::Version
|
|
90
|
-
version: '3.26'
|
|
91
|
-
- - ">="
|
|
92
|
-
- !ruby/object:Gem::Version
|
|
93
|
-
version: 3.26.0
|
|
94
46
|
description: wrapper of faraday
|
|
95
47
|
email: laura34963@kdanmobile.com
|
|
96
48
|
executables: []
|
|
@@ -106,6 +58,7 @@ licenses:
|
|
|
106
58
|
metadata:
|
|
107
59
|
source_code_uri: https://github.com/kdan-mobile-software-ltd/json_requester
|
|
108
60
|
changelog_uri: https://github.com/kdan-mobile-software-ltd/json_requester/blob/master/CHANGELOG.md
|
|
61
|
+
rubygems_mfa_required: 'true'
|
|
109
62
|
rdoc_options:
|
|
110
63
|
- "--charset=UTF-8"
|
|
111
64
|
require_paths:
|