strum-cache 0.1.2 → 0.1.3
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/lib/strum/cache.rb +14 -2
- data/lib/strum/cache/version.rb +1 -1
- data/lib/strum/cache_utils/build_resource_url.rb +13 -22
- data/lib/strum/cache_utils/build_resources_url.rb +15 -17
- data/lib/strum/cache_utils/find.rb +5 -4
- data/lib/strum/cache_utils/redis.rb +12 -12
- data/lib/strum/cache_utils/search.rb +5 -5
- data/lib/strum/cache_utils/send_request.rb +80 -20
- data/lib/strum/cache_utils/shared/mixins/url.rb +27 -0
- data/strum-cache.gemspec +2 -1
- metadata +19 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '02513390f401ce8a38fe1ce2b718def9e485bec07e70b6991bc59e54374a7daa'
|
4
|
+
data.tar.gz: da63fa1d376507d2e556f5be5819d1449c127cb014fb237a5a44db2950aa76c6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 45e3dd0e9921dfb795ced1722b8c9e6426f1ebdb5bed5f1f7e29e2b41b826af4f8c5ccb378ca884d7aba144c5e3f685455b2ac4b4aca2e2a41402e810effa966
|
7
|
+
data.tar.gz: 0ee7672065f0c14ce9cb6dbe42a2c2c9cd3d61f40ba1222c2f8f36888c0e1ce68dfdec9da3a53b841ba6afb37cb3fe13b5deaa22944134e6e0f0354706c5cb8a
|
data/lib/strum/cache.rb
CHANGED
@@ -81,7 +81,13 @@ module Strum
|
|
81
81
|
end
|
82
82
|
|
83
83
|
define_method :find_by_id do |resource_id|
|
84
|
-
Strum::CacheUtils::Find.call(resource_code: resource_code, resource_id: resource_id)
|
84
|
+
Strum::CacheUtils::Find.call(resource_code: resource_code, resource_id: resource_id) do |m|
|
85
|
+
m.success { |result| result }
|
86
|
+
m.failure do |errors|
|
87
|
+
add_errors(errors)
|
88
|
+
nil
|
89
|
+
end
|
90
|
+
end
|
85
91
|
end
|
86
92
|
|
87
93
|
define_method :not_found do
|
@@ -115,7 +121,13 @@ module Strum
|
|
115
121
|
end
|
116
122
|
|
117
123
|
define_method :search_by_params do
|
118
|
-
Strum::CacheUtils::Search.call(resource_code: resource_code, params: input)
|
124
|
+
Strum::CacheUtils::Search.call(resource_code: resource_code, params: input) do |m|
|
125
|
+
m.success { |result| result }
|
126
|
+
m.failure do |errors|
|
127
|
+
add_errors(errors)
|
128
|
+
nil
|
129
|
+
end
|
130
|
+
end
|
119
131
|
end
|
120
132
|
|
121
133
|
define_method :not_found do
|
data/lib/strum/cache/version.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require "strum/cache_utils/shared/mixins/url"
|
3
4
|
require "strum/cache_utils/build_resources_url"
|
4
5
|
|
5
6
|
module Strum
|
@@ -7,34 +8,24 @@ module Strum
|
|
7
8
|
# Resource url builder
|
8
9
|
class BuildResourceUrl
|
9
10
|
include Strum::Service
|
10
|
-
|
11
|
-
def call
|
12
|
-
output(url: File.join(base_url, resource_id.to_s))
|
13
|
-
rescue KeyError
|
14
|
-
Strum::CacheUtils::BuildResourcesUrl.call(resource_code: resource_code, params: { id: resource_id }) do |m|
|
15
|
-
m.success { |result| output(result) }
|
16
|
-
m.failure { |errors| add_errors(errors) }
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
def audit
|
21
|
-
required(:resource_code, :resource_id)
|
22
|
-
end
|
11
|
+
include Shared::Mixins::Url
|
23
12
|
|
24
13
|
private
|
25
14
|
|
26
|
-
|
27
|
-
|
28
|
-
end
|
15
|
+
RESOURCE_SUFIX_URL = "RESOURCE_URL"
|
16
|
+
HOST = "BASE_RESOURCE_URL"
|
29
17
|
|
30
|
-
def
|
31
|
-
|
18
|
+
def audit
|
19
|
+
required(:resource_code, :resource_id)
|
20
|
+
sliced(:resource_code, :resource_id)
|
32
21
|
end
|
33
22
|
|
34
|
-
def
|
35
|
-
|
36
|
-
|
37
|
-
|
23
|
+
def call
|
24
|
+
output(url: File.join(base_url, resource_id.to_s))
|
25
|
+
rescue KeyError
|
26
|
+
Strum::CacheUtils::BuildResourcesUrl.call(resource_code: resource_code, params: { id: resource_id }) do |m|
|
27
|
+
m.success { |result| output(result) }
|
28
|
+
m.failure { |errors| add_errors(errors) }
|
38
29
|
end
|
39
30
|
end
|
40
31
|
end
|
@@ -1,33 +1,31 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require "uri"
|
4
|
+
require "strum/cache_utils/shared/mixins/url"
|
4
5
|
|
5
6
|
module Strum
|
6
7
|
module CacheUtils
|
7
8
|
# Build url to resource
|
8
9
|
class BuildResourcesUrl
|
9
10
|
include Strum::Service
|
11
|
+
include Shared::Mixins::Url
|
10
12
|
|
11
|
-
|
12
|
-
underscore_resource_code = inflector.underscore(resource_code)
|
13
|
-
base_url = ENV.fetch("#{underscore_resource_code.upcase}_RESOURCE_SEARCH_URL") do
|
14
|
-
host = ENV.fetch("BASE_RESOURCE_SEARCH_URL")
|
15
|
-
File.join(host, inflector.pluralize(underscore_resource_code.gsub(/_/, "-")))
|
16
|
-
end
|
17
|
-
output(url: base_url, params: params)
|
18
|
-
rescue KeyError
|
19
|
-
add_error("#{resource_code} SEARCH ENV", :not_found)
|
20
|
-
end
|
13
|
+
private
|
21
14
|
|
22
|
-
|
23
|
-
|
24
|
-
add_error(:params, :hash_required) unless params.is_a?(Hash)
|
25
|
-
end
|
15
|
+
RESOURCE_SUFIX_URL = "RESOURCE_SEARCH_URL"
|
16
|
+
HOST = "BASE_RESOURCE_SEARCH_URL"
|
26
17
|
|
27
|
-
|
18
|
+
def audit
|
19
|
+
required(:resource_code, :params)
|
20
|
+
sliced(:resource_code, :params)
|
21
|
+
|
22
|
+
add_error(:params, :hash_required) unless params.is_a?(Hash)
|
23
|
+
end
|
28
24
|
|
29
|
-
def
|
30
|
-
|
25
|
+
def call
|
26
|
+
output(url: base_url, params: params)
|
27
|
+
rescue KeyError
|
28
|
+
add_error("#{resource_code} SEARCH ENV", :not_found)
|
31
29
|
end
|
32
30
|
end
|
33
31
|
end
|
@@ -8,6 +8,11 @@ module Strum
|
|
8
8
|
class Find
|
9
9
|
include Strum::Service
|
10
10
|
|
11
|
+
def audit
|
12
|
+
required(:resource_code, :resource_id)
|
13
|
+
sliced(:resource_code, :resource_id)
|
14
|
+
end
|
15
|
+
|
11
16
|
def call
|
12
17
|
Strum::Pipe.call(Strum::CacheUtils::BuildResourceUrl,
|
13
18
|
Strum::CacheUtils::SendRequest,
|
@@ -17,10 +22,6 @@ module Strum
|
|
17
22
|
m.failure { |errors| add_errors(errors) }
|
18
23
|
end
|
19
24
|
end
|
20
|
-
|
21
|
-
def audit
|
22
|
-
required(:resource_code, :resource_id)
|
23
|
-
end
|
24
25
|
end
|
25
26
|
end
|
26
27
|
end
|
@@ -10,20 +10,20 @@ module Strum
|
|
10
10
|
class Redis
|
11
11
|
include Strum::Service
|
12
12
|
|
13
|
-
|
14
|
-
if (entity = redis_connection.hgetall(resource_id)).key?("id")
|
15
|
-
redis_connection.expire(resource_id, redis_resource_expire)
|
16
|
-
output(entity)
|
17
|
-
else
|
18
|
-
add_error(:entity, :not_found)
|
19
|
-
end
|
20
|
-
end
|
13
|
+
private
|
21
14
|
|
22
|
-
|
23
|
-
|
24
|
-
|
15
|
+
def audit
|
16
|
+
required(:resource_code, :resource_id)
|
17
|
+
end
|
25
18
|
|
26
|
-
|
19
|
+
def call
|
20
|
+
if (entity = redis_connection.hgetall(resource_id)).key?("id")
|
21
|
+
redis_connection.expire(resource_id, redis_resource_expire)
|
22
|
+
output(entity)
|
23
|
+
else
|
24
|
+
add_error(:entity, :not_found)
|
25
|
+
end
|
26
|
+
end
|
27
27
|
|
28
28
|
def redis_connection
|
29
29
|
Strum::CacheUtils::RedisStorage.const_get(resource_code.to_s.capitalize, false).instance.redis
|
@@ -1,6 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "strum/pipe"
|
4
3
|
require "strum/cache_utils/build_resources_url"
|
5
4
|
require "strum/cache_utils/send_request"
|
6
5
|
|
@@ -10,6 +9,11 @@ module Strum
|
|
10
9
|
class Search
|
11
10
|
include Strum::Service
|
12
11
|
|
12
|
+
def audit
|
13
|
+
required(:resource_code, :params)
|
14
|
+
sliced(:resource_code, :params)
|
15
|
+
end
|
16
|
+
|
13
17
|
def call
|
14
18
|
Strum::Pipe.call(Strum::CacheUtils::BuildResourcesUrl,
|
15
19
|
Strum::CacheUtils::SendRequest,
|
@@ -19,10 +23,6 @@ module Strum
|
|
19
23
|
m.failure { |errors| add_errors(errors) }
|
20
24
|
end
|
21
25
|
end
|
22
|
-
|
23
|
-
def audit
|
24
|
-
required(:resource_code, :params)
|
25
|
-
end
|
26
26
|
end
|
27
27
|
end
|
28
28
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require "faraday"
|
4
|
-
require "
|
4
|
+
require "faraday_middleware"
|
5
5
|
|
6
6
|
module Strum
|
7
7
|
module CacheUtils
|
@@ -9,36 +9,96 @@ module Strum
|
|
9
9
|
class SendRequest
|
10
10
|
include Strum::Service
|
11
11
|
|
12
|
-
def call
|
13
|
-
(resp = send_request).success? && output(JSON.parse(resp.body))
|
14
|
-
rescue Faraday::Error => e
|
15
|
-
add_error(:connection, e)
|
16
|
-
rescue JSON::JSONError => e
|
17
|
-
add_error(:payload, e)
|
18
|
-
end
|
19
|
-
|
20
|
-
def audit
|
21
|
-
required :url
|
22
|
-
end
|
23
|
-
|
24
12
|
private
|
25
13
|
|
26
|
-
|
27
|
-
|
14
|
+
TIMEOUT = ENV.fetch("STRUM_CACHE_TIMEOUT", 50).to_i.freeze
|
15
|
+
OPEN_TIMEOUT = ENV.fetch("STRUM_CACHE_OPEN_TIMEOUT", 5).to_i.freeze
|
16
|
+
|
17
|
+
def audit
|
18
|
+
required(:url)
|
19
|
+
sliced(:url, :params)
|
28
20
|
end
|
29
21
|
|
30
|
-
def
|
31
|
-
|
22
|
+
def call
|
23
|
+
output(send_request.body)
|
24
|
+
rescue Faraday::ConnectionFailed => e
|
25
|
+
connection_error_handler(e)
|
26
|
+
rescue Faraday::TimeoutError => e
|
27
|
+
timeout_error_handler(e)
|
28
|
+
rescue Faraday::ParsingError => e
|
29
|
+
parsing_error_handler(e)
|
30
|
+
rescue Faraday::Error => e
|
31
|
+
error_handler(e)
|
32
32
|
end
|
33
33
|
|
34
34
|
def send_request
|
35
|
-
|
36
|
-
req.params = params if input[:params]
|
37
|
-
req.headers["Content-Type"] = "application/json"
|
35
|
+
create_faraday_inst.get do |req|
|
38
36
|
req.headers["Accept"] = "application/json"
|
37
|
+
req.headers["Content-Type"] = "application/json"
|
38
|
+
req.params = params if input[:params]
|
39
39
|
cache_headers.each { |k, v| req.headers[k] = v }
|
40
40
|
end
|
41
41
|
end
|
42
|
+
|
43
|
+
def create_faraday_inst
|
44
|
+
Faraday.new(url: url) do |f|
|
45
|
+
f.response :json
|
46
|
+
f.options.timeout = TIMEOUT
|
47
|
+
f.options.open_timeout = OPEN_TIMEOUT
|
48
|
+
f.use Faraday::Response::RaiseError
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def cache_headers
|
53
|
+
Strum::Cache.config.cache_headers.is_a?(Hash) ? Strum::Cache.config.cache_headers : {}
|
54
|
+
end
|
55
|
+
|
56
|
+
def connection_error_handler(error)
|
57
|
+
add_error(:send_request, :connection_error)
|
58
|
+
add_error(:connection_error, [{ info: { error_message: error.message, url: url, method: :get } }])
|
59
|
+
end
|
60
|
+
|
61
|
+
def timeout_error_handler(error)
|
62
|
+
add_error(:send_request, :timeout_error)
|
63
|
+
add_error(:timeout_error, [{ info: { error_message: error.message, url: url, method: :get } }])
|
64
|
+
end
|
65
|
+
|
66
|
+
def parsing_error_handler(error) # rubocop: disable Metrics/AbcSize, Style/CommentedKeyword
|
67
|
+
info = {
|
68
|
+
error_message: error.message,
|
69
|
+
request_headers: error.response.env.request_headers,
|
70
|
+
response_status: error.response.env.status,
|
71
|
+
response_headers: error.response.env.response_headers,
|
72
|
+
response_body: error.response.env.response_body
|
73
|
+
}
|
74
|
+
add_error(:payload, error)
|
75
|
+
add_error(:send_request, :json_parse_error)
|
76
|
+
add_error(:json_parse_error, [build_format_info(info)])
|
77
|
+
end
|
78
|
+
|
79
|
+
def error_handler(error)
|
80
|
+
info = {
|
81
|
+
error_message: error.message,
|
82
|
+
request_headers: error.response[:request][:headers],
|
83
|
+
response_status: error.response[:status],
|
84
|
+
response_headers: error.response[:headers],
|
85
|
+
response_body: error.response[:body]
|
86
|
+
}
|
87
|
+
|
88
|
+
add_error(:connection, error)
|
89
|
+
add_error(:send_request, :http_error)
|
90
|
+
add_error(:http_error, [build_format_info(info)])
|
91
|
+
end
|
92
|
+
|
93
|
+
def build_format_info(info)
|
94
|
+
{
|
95
|
+
info: {
|
96
|
+
error_message: info[:error_message], method: :get, url: url,
|
97
|
+
request: { headers: info[:request_headers] },
|
98
|
+
response: { status: info[:response_status], headers: info[:response_headers], body: info[:response_body] }
|
99
|
+
}
|
100
|
+
}
|
101
|
+
end
|
42
102
|
end
|
43
103
|
end
|
44
104
|
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Strum
|
4
|
+
module CacheUtils
|
5
|
+
module Shared
|
6
|
+
module Mixins
|
7
|
+
# General methods for url builders
|
8
|
+
module Url
|
9
|
+
def base_url
|
10
|
+
ENV.fetch("#{underscore_resource_code.upcase}_#{self.class::RESOURCE_SUFIX_URL}") do
|
11
|
+
host = ENV.fetch(self.class::HOST)
|
12
|
+
File.join(host, inflector.pluralize(underscore_resource_code.gsub(/_/, "-")))
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def underscore_resource_code
|
17
|
+
@underscore_resource_code ||= inflector.underscore(resource_code)
|
18
|
+
end
|
19
|
+
|
20
|
+
def inflector
|
21
|
+
@inflector ||= Dry::Inflector.new
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
data/strum-cache.gemspec
CHANGED
@@ -33,7 +33,8 @@ Gem::Specification.new do |spec|
|
|
33
33
|
|
34
34
|
spec.add_runtime_dependency "dry-configurable", "~> 0.12.1"
|
35
35
|
spec.add_runtime_dependency "dry-inflector", "~> 0.2"
|
36
|
-
spec.add_runtime_dependency "faraday", "~> 1.
|
36
|
+
spec.add_runtime_dependency "faraday", "~> 1.4"
|
37
|
+
spec.add_runtime_dependency "faraday_middleware", "~> 1.0"
|
37
38
|
spec.add_runtime_dependency "json", "~> 2.3"
|
38
39
|
spec.add_runtime_dependency "redis", "~> 4.2"
|
39
40
|
spec.add_runtime_dependency "strum-json", "~> 0.0.3"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: strum-cache
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Serhiy Nazarov
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-08-
|
11
|
+
date: 2021-08-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: dry-configurable
|
@@ -44,14 +44,28 @@ dependencies:
|
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '1.
|
47
|
+
version: '1.4'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '1.
|
54
|
+
version: '1.4'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: faraday_middleware
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '1.0'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '1.0'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: json
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -144,6 +158,7 @@ files:
|
|
144
158
|
- lib/strum/cache_utils/redis_storage.rb
|
145
159
|
- lib/strum/cache_utils/search.rb
|
146
160
|
- lib/strum/cache_utils/send_request.rb
|
161
|
+
- lib/strum/cache_utils/shared/mixins/url.rb
|
147
162
|
- strum-cache.gemspec
|
148
163
|
homepage: https://gitlab.com/strum-rb/strum-cache
|
149
164
|
licenses: []
|