api_tools 0.0.2 → 0.1.1

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
- SHA1:
3
- metadata.gz: 1d1f1a6697b965e58c477d6a010ec1cfd6447575
4
- data.tar.gz: 461feec02dba1372e9bd13d0ee5ba0130f60893d
2
+ SHA256:
3
+ metadata.gz: d6e2677fb5e7c1d3b55653927953900e3de618f7bfa764b4bfd187a2c8c5723f
4
+ data.tar.gz: e66bd28d4572c7f87aa4c0ac70d8b85b1c0240ffa252b2c531af7aa9963734fe
5
5
  SHA512:
6
- metadata.gz: f12330f40ec97f66f6d9016b309066b1a0da4f064e51a58572aaced55d5a08b09438bdfabca3cd2a7bbe55b6477c78ff1b440e7932cf503b8a9b9875cf6381e7
7
- data.tar.gz: 424a5ae18fb1e0c5ad34358b32027c3f70688f58e78bcefd8c27947bd59b3fbc9684ee77337d151ebd29be0962ea1079aff6f89df57e09cd5fab13fc0b000ccb
6
+ metadata.gz: 2f381ebbd1f8a1b8463c6a1fd57289288c730fcd9178cf953333ecb223dc2084a4de868baef4c1c36538d3e331c0673cfcd9cd1321b82fde0307dad9e1b7b1c9
7
+ data.tar.gz: 6888cb1bf2ff0b570c3df8d87707db5b4178e6b2805cce475215c8ded577992e9f84c53611d167915455f408732217eef9ecd5ddf48d787894f69d571e7696d2
data/.gitignore CHANGED
@@ -14,3 +14,4 @@ pkg
14
14
 
15
15
  # rspec failure tracking
16
16
  .rspec_status
17
+ TAGS
data/Gemfile CHANGED
@@ -1,7 +1,7 @@
1
1
  if ENV["USING_OFFICIAL_GEM"]
2
2
  source "https://rubygems.org"
3
3
  else
4
- source "https://gems.ruby-china.org"
4
+ source "https://gems.ruby-china.com"
5
5
  end
6
6
 
7
7
  # Specify your gem's dependencies in api_tools.gemspec
data/README.md CHANGED
@@ -7,4 +7,42 @@
7
7
 
8
8
 
9
9
  ## 使用
10
- gem 'api_tools', :git => 'git@github.com:jicheng1014/api_tools.git'
10
+
11
+ ### add to Gemfile
12
+ gem 'api_tools', :git => 'https://github.com/jicheng1014/api_tools.git'
13
+
14
+ ## 任意对象
15
+
16
+ 直接使用  DefaultRest.post(url, xxx)
17
+
18
+
19
+
20
+ ```ruby
21
+ class XXXService < DefaultRest
22
+ # override(option)
23
+ def default_options
24
+ # 默认的参数
25
+ {
26
+ timeout: 5,
27
+ retry_times: 5,
28
+ response_json: true,
29
+ params_to_json: true,
30
+ ensure_no_exception: false,
31
+ header: { content_type: :json, accept: :json },
32
+ other_base_execute_option: {},
33
+ exception_with_response: true
34
+ }
35
+ end
36
+
37
+ # override (must)
38
+ def basic_url
39
+ # 填写基础版本的url
40
+ end
41
+
42
+ #override (option)
43
+ def base_params
44
+ # 默认每次提交时候附带的默认参数
45
+ {}
46
+ end
47
+ end
48
+ ```
@@ -9,8 +9,8 @@ Gem::Specification.new do |spec|
9
9
  spec.authors = ["atpking"]
10
10
  spec.email = ["atpking@gmail.com"]
11
11
 
12
- spec.summary = '常用工具集合'
13
- spec.description = '常用工具都放这里了'
12
+ spec.summary = 'rest 的常用请求'
13
+ spec.description = '简单点'
14
14
  spec.homepage = "http://jicheng1014.cnblogs.com"
15
15
  spec.license = "MIT"
16
16
 
@@ -24,13 +24,12 @@ Gem::Specification.new do |spec|
24
24
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
25
25
  spec.require_paths = ["lib"]
26
26
 
27
- spec.add_development_dependency "bundler", "~> 1.15"
28
- spec.add_development_dependency "rake", "~> 10.0"
27
+ spec.add_development_dependency "bundler", "~> 2.2"
28
+ spec.add_development_dependency "rake", "~> 12.3.3"
29
29
  spec.add_development_dependency "rspec", "~> 3.0"
30
- spec.add_development_dependency "simplecov"
31
- spec.add_development_dependency "byebug"
32
- spec.add_development_dependency "webmock"
30
+ #spec.add_development_dependency "byebug"
31
+ # spec.add_development_dependency "webmock"
33
32
 
34
- spec.add_dependency "oj", '> 2.0'
35
- spec.add_dependency "rest-client", '> 2.0'
33
+ spec.add_dependency 'multi_json'
34
+ spec.add_dependency "rest-client", '~> 2.0'
36
35
  end
@@ -1,114 +1,10 @@
1
1
  require_relative '../vendors/hash'
2
+ require_relative './default_rest_module.rb'
2
3
  require 'json'
3
4
  require 'uri'
4
5
  require 'rest-client'
5
- require 'oj'
6
+ require 'multi_json'
6
7
 
7
8
  class DefaultRest
8
- class << self
9
- %w[get delete head].each do |word|
10
- define_method(word) do |path, params = {}, options = {}|
11
- user_params = base_params.merge(params)
12
- user_options = default_options.deep_merge(options) # 这里注意一下,是深merge,hash 底下的子hash是merge
13
- request_dict = build_similar_get_request(word, path, user_params, user_options)
14
- basic_request(request_dict, user_options)
15
- end
16
- end
17
-
18
- %w[post patch put].each do |word|
19
- define_method(word) do |path, params = {}, options = {}|
20
- user_params = base_params.merge(params)
21
- user_options = default_options.deep_merge(options) # 这里注意一下,是深merge,hash 底下的子hash是merge
22
- request_dict = build_similar_post_request(word, path, user_params, user_options)
23
- basic_request(request_dict, user_options)
24
- end
25
- end
26
-
27
- def build_similar_get_request(word, path, user_params, user_options)
28
- # 生成类get 请求的URL
29
- path_params = URI.escape(user_params.collect { |k, v| "#{k}=#{v}" }.join('&'))
30
- tmp = path.include?('?') ? '&' : '?'
31
- path = path + tmp + path_params
32
- url = build_whole_url(path)
33
- {
34
- method: word,
35
- url: url,
36
- headers: user_options[:header],
37
- timeout: user_options[:timeout]
38
- }.merge(user_options[:other_base_execute_option])
39
- end
40
-
41
- def build_similar_post_request(word, path, user_params, user_options)
42
- url = build_whole_url(path)
43
- payload = user_options[:params_to_json] ? user_params.to_json : user_params
44
- {
45
- method: word,
46
- url: url,
47
- payload: payload,
48
- headers: user_options[:header],
49
- timeout: user_options[:timeout]
50
- }.merge(user_options[:other_base_execute_option])
51
- end
52
-
53
- def build_whole_url(path)
54
- web = basic_url
55
- return web if path.length.zero?
56
- return path if path.start_with?("http") # path 是一个绝对路径
57
- if web[-1] == "/"
58
- path = path[1..-1] if path[0] == "/"
59
- else
60
- path = "/#{path}" if path[0] != "/"
61
- end
62
- web + path
63
- end
64
-
65
- def basic_request(request_dict, user_options)
66
- exception = nil
67
-
68
- user_options[:retry_times].times do
69
- begin
70
- response = ::RestClient::Request.execute(request_dict)
71
- return ::Oj.load(response.body, symbol_keys: true) if user_options[:response_json]
72
- return response.body
73
- rescue ::RestClient::ExceptionWithResponse => ex
74
- raise ex if user_options[:exception_with_response]
75
- return {
76
- status: false,
77
- response_code: ex.response.code,
78
- response_body: ex.response.body,
79
- message: ex.message
80
- }
81
- rescue RestClient::Exception => e
82
- exception = e
83
- next
84
- end
85
- end
86
- raise exception unless user_options[:ensure_no_exception]
87
- {
88
- status: false,
89
- message: ex.message
90
- }
91
- end
92
-
93
- def default_options
94
- @default_options ||= {
95
- timeout: 5,
96
- retry_times: 5,
97
- response_json: true,
98
- params_to_json: true,
99
- ensure_no_exception: false,
100
- header: { content_type: :json, accept: :json },
101
- other_base_execute_option: {},
102
- exception_with_response: true
103
- }
104
- end
105
-
106
- def basic_url
107
- 'http://www.example.com' # 子类中复写
108
- end
109
-
110
- def base_params
111
- {} # 子类中复写
112
- end
113
- end
9
+ extend ApiTools::DefaultRestModule
114
10
  end
@@ -0,0 +1,107 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ApiTools
4
+ module DefaultRestModule
5
+ %w[get delete head].each do |word|
6
+ define_method(word) do |path, params = {}, options = {}|
7
+ user_params = base_params.merge(params)
8
+ user_options = default_options.deep_merge(options) # 这里注意一下,是深merge,hash 底下的子hash是merge
9
+ request_dict = build_similar_get_request(word, path, user_params, user_options)
10
+ basic_request(request_dict, user_options)
11
+ end
12
+ end
13
+
14
+ %w[post patch put].each do |word|
15
+ define_method(word) do |path, params = {}, options = {}|
16
+ user_params = base_params.merge(params)
17
+ user_options = default_options.deep_merge(options) # 这里注意一下,是深merge,hash 底下的子hash是merge
18
+ request_dict = build_similar_post_request(word, path, user_params, user_options)
19
+ basic_request(request_dict, user_options)
20
+ end
21
+ end
22
+
23
+ def build_similar_get_request(word, path, user_params, user_options)
24
+ # 生成类get 请求的URL
25
+ path_params = URI.encode_www_form(user_params)
26
+ tmp = path.include?('?') ? '&' : '?'
27
+ path = path + tmp + path_params
28
+ url = build_whole_url(path)
29
+ {
30
+ method: word,
31
+ url: url,
32
+ headers: user_options[:header],
33
+ timeout: user_options[:timeout]
34
+ }.merge(user_options[:other_base_execute_option])
35
+ end
36
+
37
+ def build_similar_post_request(word, path, user_params, user_options)
38
+ url = build_whole_url(path)
39
+ payload = user_options[:params_to_json] ? user_params.to_json : user_params
40
+ {
41
+ method: word,
42
+ url: url,
43
+ payload: payload,
44
+ headers: user_options[:header],
45
+ timeout: user_options[:timeout]
46
+ }.merge(user_options[:other_base_execute_option])
47
+ end
48
+
49
+ def build_whole_url(path)
50
+ web = basic_url
51
+ return web if path.length.zero?
52
+ return path if path.start_with?('http') # path 是一个绝对路径
53
+
54
+ if web[-1] == '/'
55
+ path = path[1..-1] if path[0] == '/'
56
+ else
57
+ path = "/#{path}" if path[0] != '/'
58
+ end
59
+ web + path
60
+ end
61
+
62
+ def basic_request(request_dict, user_options)
63
+ exception = nil
64
+ user_options[:retry_times].times do
65
+ begin
66
+ response = ::RestClient::Request.execute(request_dict)
67
+ return MultiJson.load(response.body, symbolize_keys: true) if user_options[:response_json]
68
+
69
+ return response.body
70
+ rescue RestClient::Exception => e
71
+ exception = e
72
+ next
73
+ end
74
+ end
75
+ puts "Restclient error, body = #{exception.response.body}" if exception.respond_to? :response
76
+ raise exception unless user_options[:ensure_no_exception]
77
+
78
+ {
79
+ status: false,
80
+ message: exception.message,
81
+ response_code: exception&.response&.code,
82
+ response_body: exception&.response&.body
83
+ }
84
+ end
85
+
86
+ def default_options
87
+ @default_options ||= {
88
+ timeout: 5,
89
+ retry_times: 5,
90
+ response_json: true,
91
+ params_to_json: true,
92
+ ensure_no_exception: false,
93
+ header: { content_type: :json, accept: :json },
94
+ other_base_execute_option: {},
95
+ exception_with_response: true
96
+ }
97
+ end
98
+
99
+ def basic_url
100
+ 'http://www.example.com' # 子类中复写
101
+ end
102
+
103
+ def base_params
104
+ {} # 子类中复写
105
+ end
106
+ end
107
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ApiTools
2
- VERSION = "0.0.2"
4
+ VERSION = '0.1.1'
3
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: api_tools
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - atpking
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-06-23 00:00:00.000000000 Z
11
+ date: 2021-01-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -16,28 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.15'
19
+ version: '2.2'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.15'
26
+ version: '2.2'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '10.0'
33
+ version: 12.3.3
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '10.0'
40
+ version: 12.3.3
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -53,76 +53,34 @@ dependencies:
53
53
  - !ruby/object:Gem::Version
54
54
  version: '3.0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: simplecov
56
+ name: multi_json
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - ">="
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: '0'
69
- - !ruby/object:Gem::Dependency
70
- name: byebug
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - ">="
74
- - !ruby/object:Gem::Version
75
- version: '0'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - ">="
81
- - !ruby/object:Gem::Version
82
- version: '0'
83
- - !ruby/object:Gem::Dependency
84
- name: webmock
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - ">="
88
- - !ruby/object:Gem::Version
89
- version: '0'
90
- type: :development
62
+ type: :runtime
91
63
  prerelease: false
92
64
  version_requirements: !ruby/object:Gem::Requirement
93
65
  requirements:
94
66
  - - ">="
95
67
  - !ruby/object:Gem::Version
96
68
  version: '0'
97
- - !ruby/object:Gem::Dependency
98
- name: oj
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - ">"
102
- - !ruby/object:Gem::Version
103
- version: '2.0'
104
- type: :runtime
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - ">"
109
- - !ruby/object:Gem::Version
110
- version: '2.0'
111
69
  - !ruby/object:Gem::Dependency
112
70
  name: rest-client
113
71
  requirement: !ruby/object:Gem::Requirement
114
72
  requirements:
115
- - - ">"
73
+ - - "~>"
116
74
  - !ruby/object:Gem::Version
117
75
  version: '2.0'
118
76
  type: :runtime
119
77
  prerelease: false
120
78
  version_requirements: !ruby/object:Gem::Requirement
121
79
  requirements:
122
- - - ">"
80
+ - - "~>"
123
81
  - !ruby/object:Gem::Version
124
82
  version: '2.0'
125
- description: 常用工具都放这里了
83
+ description: 简单点
126
84
  email:
127
85
  - atpking@gmail.com
128
86
  executables: []
@@ -142,13 +100,14 @@ files:
142
100
  - bin/setup
143
101
  - lib/api_tools.rb
144
102
  - lib/api_tools/default_rest.rb
103
+ - lib/api_tools/default_rest_module.rb
145
104
  - lib/api_tools/version.rb
146
105
  - lib/vendors/hash.rb
147
106
  homepage: http://jicheng1014.cnblogs.com
148
107
  licenses:
149
108
  - MIT
150
109
  metadata: {}
151
- post_install_message:
110
+ post_install_message:
152
111
  rdoc_options: []
153
112
  require_paths:
154
113
  - lib
@@ -163,9 +122,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
163
122
  - !ruby/object:Gem::Version
164
123
  version: '0'
165
124
  requirements: []
166
- rubyforge_project:
167
- rubygems_version: 2.6.12
168
- signing_key:
125
+ rubyforge_project:
126
+ rubygems_version: 2.7.7
127
+ signing_key:
169
128
  specification_version: 4
170
- summary: 常用工具集合
129
+ summary: rest 的常用请求
171
130
  test_files: []