http_store 0.3.24 → 0.5.1

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: b0d97e88122e731902aea4ed1a0e5aa494dfb82c2940e2715588ed0a9f8a75e4
4
- data.tar.gz: 8224acd49cba235aef780847b5ae7aaeef872f832151fe78c625aec2a1c0ad41
3
+ metadata.gz: e21b78e87d29ba5cc7dda5c373c0c795c5ad497a7e50657079055b6d711cbf7c
4
+ data.tar.gz: 51a2b9c79ed2ec24db30a08aa27692cce94209176e86f35fef42964467f99766
5
5
  SHA512:
6
- metadata.gz: 30db3cc13eca584b133ba2a87391e7c0613f1673cd40433336a4bcf7c098bc4c7017a3c2091a396e72395c08f77bfd68fce86454dff70e3a9fc93d20174e10c6
7
- data.tar.gz: d09d404b82dc70fd35af5b29b210e8f02ac93825821b5dd5757e2989c9942dad1adbe0417976741c910d19685f7350600455f87368ea788868efeba087ffb87c
6
+ metadata.gz: 1e2511f353ba3cec16b15452daef6d817f0698c44662ed56463f4f7466d8649c0235e907c70c92310ac4f385e174bf570bdc19ee4ad1683ccaa3bf0878809dc7
7
+ data.tar.gz: 845a31ef1c6579a82d129f9d615a79565aee3d5460429d178c516c7d3ba5ee18d1a5a0285b07d92ac4cf8bedddcd4b720fa224bfad52f6ee87c8b8395971995b
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- http_store (0.3.24)
4
+ http_store (0.5.1)
5
5
  activerecord (>= 5.0, < 6.1)
6
6
  hashie (~> 3.0)
7
7
  rails (>= 5, < 7)
@@ -10,110 +10,125 @@ PATH
10
10
  GEM
11
11
  remote: https://rubygems.org/
12
12
  specs:
13
- actioncable (5.2.3)
14
- actionpack (= 5.2.3)
13
+ actioncable (6.0.3.1)
14
+ actionpack (= 6.0.3.1)
15
15
  nio4r (~> 2.0)
16
16
  websocket-driver (>= 0.6.1)
17
- actionmailer (5.2.3)
18
- actionpack (= 5.2.3)
19
- actionview (= 5.2.3)
20
- activejob (= 5.2.3)
17
+ actionmailbox (6.0.3.1)
18
+ actionpack (= 6.0.3.1)
19
+ activejob (= 6.0.3.1)
20
+ activerecord (= 6.0.3.1)
21
+ activestorage (= 6.0.3.1)
22
+ activesupport (= 6.0.3.1)
23
+ mail (>= 2.7.1)
24
+ actionmailer (6.0.3.1)
25
+ actionpack (= 6.0.3.1)
26
+ actionview (= 6.0.3.1)
27
+ activejob (= 6.0.3.1)
21
28
  mail (~> 2.5, >= 2.5.4)
22
29
  rails-dom-testing (~> 2.0)
23
- actionpack (5.2.3)
24
- actionview (= 5.2.3)
25
- activesupport (= 5.2.3)
26
- rack (~> 2.0)
30
+ actionpack (6.0.3.1)
31
+ actionview (= 6.0.3.1)
32
+ activesupport (= 6.0.3.1)
33
+ rack (~> 2.0, >= 2.0.8)
27
34
  rack-test (>= 0.6.3)
28
35
  rails-dom-testing (~> 2.0)
29
- rails-html-sanitizer (~> 1.0, >= 1.0.2)
30
- actionview (5.2.3)
31
- activesupport (= 5.2.3)
36
+ rails-html-sanitizer (~> 1.0, >= 1.2.0)
37
+ actiontext (6.0.3.1)
38
+ actionpack (= 6.0.3.1)
39
+ activerecord (= 6.0.3.1)
40
+ activestorage (= 6.0.3.1)
41
+ activesupport (= 6.0.3.1)
42
+ nokogiri (>= 1.8.5)
43
+ actionview (6.0.3.1)
44
+ activesupport (= 6.0.3.1)
32
45
  builder (~> 3.1)
33
46
  erubi (~> 1.4)
34
47
  rails-dom-testing (~> 2.0)
35
- rails-html-sanitizer (~> 1.0, >= 1.0.3)
36
- activejob (5.2.3)
37
- activesupport (= 5.2.3)
48
+ rails-html-sanitizer (~> 1.1, >= 1.2.0)
49
+ activejob (6.0.3.1)
50
+ activesupport (= 6.0.3.1)
38
51
  globalid (>= 0.3.6)
39
- activemodel (5.2.3)
40
- activesupport (= 5.2.3)
41
- activerecord (5.2.3)
42
- activemodel (= 5.2.3)
43
- activesupport (= 5.2.3)
44
- arel (>= 9.0)
45
- activestorage (5.2.3)
46
- actionpack (= 5.2.3)
47
- activerecord (= 5.2.3)
52
+ activemodel (6.0.3.1)
53
+ activesupport (= 6.0.3.1)
54
+ activerecord (6.0.3.1)
55
+ activemodel (= 6.0.3.1)
56
+ activesupport (= 6.0.3.1)
57
+ activestorage (6.0.3.1)
58
+ actionpack (= 6.0.3.1)
59
+ activejob (= 6.0.3.1)
60
+ activerecord (= 6.0.3.1)
48
61
  marcel (~> 0.3.1)
49
- activesupport (5.2.3)
62
+ activesupport (6.0.3.1)
50
63
  concurrent-ruby (~> 1.0, >= 1.0.2)
51
64
  i18n (>= 0.7, < 2)
52
65
  minitest (~> 5.1)
53
66
  tzinfo (~> 1.1)
54
- arel (9.0.0)
55
- builder (3.2.3)
67
+ zeitwerk (~> 2.2, >= 2.2.2)
68
+ builder (3.2.4)
56
69
  byebug (11.0.1)
57
- concurrent-ruby (1.1.5)
58
- crass (1.0.4)
70
+ concurrent-ruby (1.1.6)
71
+ crass (1.0.6)
59
72
  diff-lcs (1.3)
60
73
  domain_name (0.5.20190701)
61
74
  unf (>= 0.0.5, < 1.0.0)
62
- erubi (1.8.0)
75
+ erubi (1.9.0)
63
76
  globalid (0.4.2)
64
77
  activesupport (>= 4.2.0)
65
78
  hashie (3.6.0)
66
79
  http-accept (1.7.0)
67
80
  http-cookie (1.0.3)
68
81
  domain_name (~> 0.5)
69
- i18n (1.6.0)
82
+ i18n (1.8.2)
70
83
  concurrent-ruby (~> 1.0)
71
- loofah (2.2.3)
84
+ loofah (2.5.0)
72
85
  crass (~> 1.0.2)
73
86
  nokogiri (>= 1.5.9)
74
87
  mail (2.7.1)
75
88
  mini_mime (>= 0.1.1)
76
89
  marcel (0.3.3)
77
90
  mimemagic (~> 0.3.2)
78
- method_source (0.9.2)
79
- mime-types (3.3)
91
+ method_source (1.0.0)
92
+ mime-types (3.3.1)
80
93
  mime-types-data (~> 3.2015)
81
- mime-types-data (3.2019.1009)
82
- mimemagic (0.3.3)
94
+ mime-types-data (3.2020.0425)
95
+ mimemagic (0.3.5)
83
96
  mini_mime (1.0.2)
84
97
  mini_portile2 (2.4.0)
85
- minitest (5.11.3)
98
+ minitest (5.14.1)
86
99
  netrc (0.11.0)
87
- nio4r (2.5.1)
88
- nokogiri (1.10.4)
100
+ nio4r (2.5.2)
101
+ nokogiri (1.10.9)
89
102
  mini_portile2 (~> 2.4.0)
90
- rack (2.0.7)
103
+ rack (2.2.2)
91
104
  rack-test (1.1.0)
92
105
  rack (>= 1.0, < 3)
93
- rails (5.2.3)
94
- actioncable (= 5.2.3)
95
- actionmailer (= 5.2.3)
96
- actionpack (= 5.2.3)
97
- actionview (= 5.2.3)
98
- activejob (= 5.2.3)
99
- activemodel (= 5.2.3)
100
- activerecord (= 5.2.3)
101
- activestorage (= 5.2.3)
102
- activesupport (= 5.2.3)
106
+ rails (6.0.3.1)
107
+ actioncable (= 6.0.3.1)
108
+ actionmailbox (= 6.0.3.1)
109
+ actionmailer (= 6.0.3.1)
110
+ actionpack (= 6.0.3.1)
111
+ actiontext (= 6.0.3.1)
112
+ actionview (= 6.0.3.1)
113
+ activejob (= 6.0.3.1)
114
+ activemodel (= 6.0.3.1)
115
+ activerecord (= 6.0.3.1)
116
+ activestorage (= 6.0.3.1)
117
+ activesupport (= 6.0.3.1)
103
118
  bundler (>= 1.3.0)
104
- railties (= 5.2.3)
119
+ railties (= 6.0.3.1)
105
120
  sprockets-rails (>= 2.0.0)
106
121
  rails-dom-testing (2.0.3)
107
122
  activesupport (>= 4.2.0)
108
123
  nokogiri (>= 1.6)
109
- rails-html-sanitizer (1.2.0)
110
- loofah (~> 2.2, >= 2.2.2)
111
- railties (5.2.3)
112
- actionpack (= 5.2.3)
113
- activesupport (= 5.2.3)
124
+ rails-html-sanitizer (1.3.0)
125
+ loofah (~> 2.3)
126
+ railties (6.0.3.1)
127
+ actionpack (= 6.0.3.1)
128
+ activesupport (= 6.0.3.1)
114
129
  method_source
115
130
  rake (>= 0.8.7)
116
- thor (>= 0.19.0, < 2.0)
131
+ thor (>= 0.20.3, < 2.0)
117
132
  rake (10.5.0)
118
133
  rest-client (2.1.0)
119
134
  http-accept (>= 1.7.0, < 2.0)
@@ -133,23 +148,24 @@ GEM
133
148
  diff-lcs (>= 1.2.0, < 2.0)
134
149
  rspec-support (~> 3.8.0)
135
150
  rspec-support (3.8.2)
136
- sprockets (3.7.2)
151
+ sprockets (4.0.0)
137
152
  concurrent-ruby (~> 1.0)
138
153
  rack (> 1, < 3)
139
154
  sprockets-rails (3.2.1)
140
155
  actionpack (>= 4.0)
141
156
  activesupport (>= 4.0)
142
157
  sprockets (>= 3.0.0)
143
- thor (0.20.3)
158
+ thor (1.0.1)
144
159
  thread_safe (0.3.6)
145
- tzinfo (1.2.5)
160
+ tzinfo (1.2.7)
146
161
  thread_safe (~> 0.1)
147
162
  unf (0.1.4)
148
163
  unf_ext
149
- unf_ext (0.0.7.6)
164
+ unf_ext (0.0.7.7)
150
165
  websocket-driver (0.7.1)
151
166
  websocket-extensions (>= 0.1.0)
152
167
  websocket-extensions (0.1.4)
168
+ zeitwerk (2.3.0)
153
169
 
154
170
  PLATFORMS
155
171
  ruby
@@ -162,4 +178,4 @@ DEPENDENCIES
162
178
  rspec (~> 3.0)
163
179
 
164
180
  BUNDLED WITH
165
- 2.0.2
181
+ 2.1.4
@@ -0,0 +1,5 @@
1
+ class AddRetryTimesFieldToHttpLog < ActiveRecord::Migration[5.2]
2
+ def change
3
+ add_column :http_logs, :retry_times, :integer
4
+ end
5
+ end
@@ -8,7 +8,7 @@ require 'http_store/engine'
8
8
  module HttpStore
9
9
  extend ActiveSupport::Autoload
10
10
 
11
- REQUEST_KEYS = %w[http_method url data_type headers query_params data other_params force request_valid]
11
+ REQUEST_KEYS = %w[http_method url data_type headers query_params data other_params force request_valid retry_times]
12
12
  RESPONSE_KEYS = %w[status_code response response_headers response_data response_valid response_code cache_response]
13
13
  META_KEYS = %w[request_digest client_type parent_id requestable_id requestable_type]
14
14
  TMP_KEYS = %w[requestable response_obj]
@@ -15,17 +15,19 @@ module HttpStore
15
15
  build_request
16
16
 
17
17
  return unless request_valid?
18
-
19
- # exist request or not force, return
20
18
  load_storeable_record and return if use_cache?
21
19
 
22
20
  execute # send request
23
- raise HttpStore::RequestError, 'response_obj is nil' if response_obj.nil?
21
+ retry! while need_retry? && retry_times.to_i > 0
24
22
 
25
- build_response
26
23
  after_response
27
- ensure
28
- store_request
24
+ end
25
+
26
+ def retry!
27
+ @meta.retry_times = retry_times.to_i - 1
28
+ @meta.force = true
29
+
30
+ execute
29
31
  end
30
32
 
31
33
  HttpStore::ALL_KEYS.each do |meta_key|
@@ -47,6 +49,11 @@ module HttpStore
47
49
 
48
50
  def execute
49
51
  @meta.response_obj = get? ? http_get_execute : http_post_execute
52
+ raise HttpStore::RequestError, 'response_obj is nil' if response_obj.nil?
53
+
54
+ build_response
55
+ ensure
56
+ store_request
50
57
  end
51
58
 
52
59
  def http_get_execute
@@ -6,6 +6,10 @@ module HttpStore
6
6
  status_code >= 200 && status_code < 400
7
7
  end
8
8
 
9
+ def need_retry?
10
+ !response_valid?
11
+ end
12
+
9
13
  def json_response?
10
14
  response_headers_hash['content_type'].to_s =~ /json/
11
15
  end
@@ -1,7 +1,8 @@
1
1
  module HttpStore
2
2
  module Helpers
3
3
  module Storable
4
- STRING_LIMIT_SIZE = 30_000
4
+ STRING_LIMIT_SIZE = 1000
5
+ TEXT_LIMIT_SIZE = 10000
5
6
 
6
7
  def storeable_record
7
8
  return unless HttpStore.config.store_enable
@@ -28,11 +29,6 @@ module HttpStore
28
29
  @meta.parent_id = storeable_record.id if use_cache?
29
30
  @storeable_record = HttpStore.config.store_class.new(gen_storable_meta)
30
31
  @storeable_record.save!
31
- rescue ActiveRecord::StatementInvalid
32
- debugger
33
-
34
- @storeable_record.response = Digest::SHA1.hexdigest(@storeable_record.response)
35
- @storeable_record.save!
36
32
  end
37
33
 
38
34
  def use_cache?
@@ -44,11 +40,11 @@ module HttpStore
44
40
  storable_v = storable(v)
45
41
 
46
42
  begin
47
- storable_v = storable_v.to_json[0..STRING_LIMIT_SIZE] if v.is_a?(Hash) || v.is_a?(Array)
43
+ storable_v = storable_v.to_json[0..TEXT_LIMIT_SIZE] if v.is_a?(Hash) || v.is_a?(Array)
48
44
 
49
45
  [k, storable_v]
50
46
  rescue JSON::GeneratorError
51
- [k, storable_v.to_s[0..STRING_LIMIT_SIZE]]
47
+ [k, storable_v.to_s[0..TEXT_LIMIT_SIZE]]
52
48
  end
53
49
  end.to_h
54
50
  end
@@ -70,11 +66,11 @@ module HttpStore
70
66
  end
71
67
 
72
68
  def storable_string(str)
73
- str = str.clone.force_encoding("UTF-8")
69
+ str = str.dup.force_encoding("UTF-8")
74
70
  raise EncodingError unless str.encoding.name == 'UTF-8'
75
71
  raise EncodingError unless str.valid_encoding?
76
72
 
77
- str.length > STRING_LIMIT_SIZE ? { digest: Digest::SHA1.hexdigest(str), origin: str[0..1000] } : str
73
+ str.length > STRING_LIMIT_SIZE ? { digest: Digest::SHA1.hexdigest(str), origin: str[0..STRING_LIMIT_SIZE] } : str
78
74
  rescue EncodingError
79
75
  { digest: Digest::SHA1.hexdigest(str) }
80
76
  end
@@ -1,3 +1,3 @@
1
1
  module HttpStore
2
- VERSION = "0.3.24"
2
+ VERSION = "0.5.1"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: http_store
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.24
4
+ version: 0.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - black
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-11-05 00:00:00.000000000 Z
11
+ date: 2020-08-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rest-client
@@ -153,6 +153,7 @@ files:
153
153
  - bin/setup
154
154
  - db/migrate/1_create_http_logs.rb
155
155
  - db/migrate/2_add_cache_response_field_to_http_log.rb
156
+ - db/migrate/3_add_retry_times_field_to_http_log.rb
156
157
  - http_store.gemspec
157
158
  - lib/generators/http_store/initializer_generator.rb
158
159
  - lib/http_store.rb
@@ -186,7 +187,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
186
187
  - !ruby/object:Gem::Version
187
188
  version: '0'
188
189
  requirements: []
189
- rubygems_version: 3.0.4
190
+ rubygems_version: 3.0.8
190
191
  signing_key:
191
192
  specification_version: 4
192
193
  summary: store the http request, it based on rest-client