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.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +144 -56
  3. data/lib/json_requester.rb +16 -14
  4. metadata +2 -49
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7105cd4d7a93f5a548f53909f0d9a0d44ee67efe981c7fdaf9e2274a483c6952
4
- data.tar.gz: 6e1cd414c18298f6efd2da5fdebcebb47e322956f5e9567e47277d1990edf3e3
3
+ metadata.gz: c49a31454dd85d0118a5f4ea97af0d5f89c5031316f49f0d54c6e92841c9e108
4
+ data.tar.gz: 98655925a0e0d991e47f9e7b73cd3e06068bfcd15b0dc585ffff5dc83a03ce23
5
5
  SHA512:
6
- metadata.gz: c0bc102c8f4f04825d38c528d4e7e44b63dad0f5b8833e2a2ada514c7f6aad1ba53cf9f1ff6b7d6d7d91b8267945e8ee2f53cb38ffe966cd4feaad2337e1bc16
7
- data.tar.gz: 390a5d516a0156be37887309382661a31bf0d24047e605f89d4030338d8c8d11fcde8f249ec3cd2edd3e6681a9f5a4bff146be594e81d21d3321bc06c554aa55
6
+ metadata.gz: 8adce9df8bee2b36c3410e1c08fe9a8777d59d0e8904ba2185426cfa7602c1ebcce36df00879925332c30fd571c8d7f7246b29ce2cd49f85dd4a546cd0ca0f49
7
+ data.tar.gz: 1445c55fe7f867f080597820ec7825b9ef94bb36dc9fb956bfdc5709e0fa7771f9712a07d13af5c1c09d9ad91f5499c3eba74c7cea07b44cec76c6505e729d67
data/README.md CHANGED
@@ -1,68 +1,156 @@
1
1
  # JsonRequester
2
2
 
3
- ### A Wrapper of Faraday Gem
3
+ [![Gem Version](https://badge.fury.io/rb/json_requester.svg?icon=si%3Arubygems)](https://badge.fury.io/rb/json_requester)
4
4
 
5
- ### Install
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
- $ gem install json_requester -v '~> 1.0'
20
+ gem install json_requester -v '~> 2.0'
10
21
  ```
11
22
 
12
- If you want to use faraday 2.x version, install json_requester 2.x version:
23
+ ### For Faraday 1.x
24
+
25
+ If you still need Faraday 1.x, install `json_requester` 1.x:
26
+
13
27
  ```bash
14
- $ gem install json_requester -v '~> 2.0'
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
- ### How to Use
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
- # initialize the JsonRequester class
21
- host = 'http://httpbingo.org'
22
- # `timeout` at Faraday gem default is 60 secs.
23
- # `user_agent` at Faraday gem default is like "Faraday v1.10.0", it would be deep_merge at Faraday default setting.
24
- # `multipart` option enables multipart form requests (for file uploads), default is false
25
- # `ssl_verify` controls SSL certificate verification, default is true
26
- requester = JsonRequester.new(host, timeout: 120, user_agent: 'My Agent 1.2')
27
-
28
- http_method = :get # :get / :post / :put / :delete
29
- path = ''
30
- headers = { 'Authorization' => 'Bearer token' }
31
-
32
- # The `:get` method will use query params;
33
- # Other HTTP methods will use JSON body to request.
34
- params = {
35
- key_1: 'value_1',
36
- key_2: 'value_2'
37
- }
38
-
39
- # Request by using JSON body or query params, use the `http_send` method.
40
- # other methods: `form_send`, `multipart_form_send`
41
- # `sort_params` at Faraday gem default is true.
42
- # `content_type_charset` default is 'utf-8', this will add ; charset=utf-8 after `Content-Type` header (ex. `Content-Type=application/json; charset=utf-8`).
43
- # `need_response_header` when set to true will include response headers in the result
44
- res = requester.http_send(http_method, path, params, headers, sort_params: true, content_type_charset: 'utf-8')
45
-
46
- # http response code
47
- puts res['status'] # 200, 404, .. etc
48
- # the response JSON body
49
- puts res['body'] # { foo: 'bar' }
50
- # If need_response_header is true, you can access response headers
51
- puts res['headers'] if res.key?('headers')
52
-
53
- # For form-encoded requests (application/x-www-form-urlencoded)
54
- form_res = requester.form_send(:post, '/post', params, headers)
55
-
56
- # For file uploads or multipart form requests
57
- # First initialize with multipart: true
58
- multipart_requester = JsonRequester.new(host, multipart: true)
59
-
60
- # Then prepare your payload with file objects
61
- upload_params = {
62
- file: Faraday::Multipart::FilePart.new('path/to/file.txt', 'text/plain'),
63
- description: 'File upload example'
64
- }
65
-
66
- # Send multipart request
67
- upload_res = multipart_requester.multipart_form_send(:post, '/upload_path', upload_params, headers)
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.
@@ -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 = body.is_a?(Hash) ? body : {'body' => 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
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: