strum-cache 0.1.2 → 0.1.4

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: efaba98c772965cd918f40d6e2cb276869a045076f6847445188623547bec63d
4
- data.tar.gz: 53ece08bc876602d5279f0b794cfb312322dcdedaf0b16e16d89b442c8cf93c1
3
+ metadata.gz: 9f63818423127b40e670bf920ec3e469685c3a92dd0950a279f0e131b4ca2bbd
4
+ data.tar.gz: 8eb5601d65fd8c6b48576dcc80fc9d031aabb74d0cade0b44cd426d2d6458797
5
5
  SHA512:
6
- metadata.gz: bedc338386c5d7c0af603a8af5b86ae8bba15fc7c3c613127ab9c6e2c218aa85a659a01c8da1e0264f6edb660fd742b81b74e42a8327156017999ba93bcd288d
7
- data.tar.gz: ccd5267452450fdcde534e386fc94e768f20a5e430f05c820823979c4b8772fbf574ff9dbbe3cd75d8a1600a85b37cab964c61b5f7289e01cd85b48cba2169ad
6
+ metadata.gz: 66b0721c5e97ea5976fc6b0ea75669f5a6ad87b77b1bee742b9bd6250e8f18aeb39c4e5d50537a72959e5018dde063607daf7c034e59be90fcdce0b832c6c230
7
+ data.tar.gz: ae5403783bc379850afc88c40ad99829f049d44b55716fd2ae22f727e1755b012b27ddb24442117779742043c09e9680dffbeab7beb30309039d07c146610ecd
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Strum
4
4
  module Cache
5
- VERSION = "0.1.2"
5
+ VERSION = "0.1.4"
6
6
  end
7
7
  end
data/lib/strum/cache.rb CHANGED
@@ -16,7 +16,7 @@ module Strum
16
16
  extend Dry::Configurable
17
17
 
18
18
  setting :cache_headers
19
- setting :redis_class, Redis
19
+ setting :redis_class, default: Redis
20
20
 
21
21
  class Error < StandardError; end
22
22
 
@@ -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
@@ -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
- def inflector
27
- @inflector ||= Dry::Inflector.new
28
- end
15
+ RESOURCE_SUFIX_URL = "RESOURCE_URL"
16
+ HOST = "BASE_RESOURCE_URL"
29
17
 
30
- def underscore_resource_code
31
- inflector.underscore(resource_code)
18
+ def audit
19
+ required(:resource_code, :resource_id)
20
+ sliced(:resource_code, :resource_id)
32
21
  end
33
22
 
34
- def base_url
35
- ENV.fetch("#{underscore_resource_code.upcase}_RESOURCE_URL") do
36
- host = ENV.fetch("BASE_RESOURCE_URL")
37
- File.join(host, inflector.pluralize(underscore_resource_code.gsub(/_/, "-")))
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
- def call
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
- def audit
23
- required(:resource_code, :params)
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
- private
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 inflector
30
- @inflector ||= Dry::Inflector.new
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
- def call
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
- def audit
23
- required(:resource_code, :resource_id)
24
- end
15
+ def audit
16
+ required(:resource_code, :resource_id)
17
+ end
25
18
 
26
- private
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 "json"
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
- def cache_headers
27
- Strum::Cache.config.cache_headers.is_a?(Hash) ? Strum::Cache.config.cache_headers : {}
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 conn
31
- Faraday.new(url: url)
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
- conn.get do |req|
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
@@ -31,12 +31,13 @@ Gem::Specification.new do |spec|
31
31
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
32
32
  spec.require_paths = ["lib"]
33
33
 
34
- spec.add_runtime_dependency "dry-configurable", "~> 0.12.1"
35
- spec.add_runtime_dependency "dry-inflector", "~> 0.2"
36
- spec.add_runtime_dependency "faraday", "~> 1.1"
34
+ spec.add_runtime_dependency "dry-configurable", "~> 1.0", ">= 1.0.1"
35
+ spec.add_runtime_dependency "dry-inflector", "~> 1.0"
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
- spec.add_runtime_dependency "strum-json", "~> 0.0.3"
40
+ spec.add_runtime_dependency "strum-json", "~> 0.0.7"
40
41
  spec.add_runtime_dependency "strum-pipe", "~> 0.0.3"
41
42
  spec.add_runtime_dependency "strum-service", "~> 0.1"
42
43
  end
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.2
4
+ version: 0.1.4
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-04 00:00:00.000000000 Z
11
+ date: 2024-05-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dry-configurable
@@ -16,42 +16,62 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.12.1
19
+ version: '1.0'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 1.0.1
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
27
  - - "~>"
25
28
  - !ruby/object:Gem::Version
26
- version: 0.12.1
29
+ version: '1.0'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 1.0.1
27
33
  - !ruby/object:Gem::Dependency
28
34
  name: dry-inflector
29
35
  requirement: !ruby/object:Gem::Requirement
30
36
  requirements:
31
37
  - - "~>"
32
38
  - !ruby/object:Gem::Version
33
- version: '0.2'
39
+ version: '1.0'
34
40
  type: :runtime
35
41
  prerelease: false
36
42
  version_requirements: !ruby/object:Gem::Requirement
37
43
  requirements:
38
44
  - - "~>"
39
45
  - !ruby/object:Gem::Version
40
- version: '0.2'
46
+ version: '1.0'
41
47
  - !ruby/object:Gem::Dependency
42
48
  name: faraday
43
49
  requirement: !ruby/object:Gem::Requirement
44
50
  requirements:
45
51
  - - "~>"
46
52
  - !ruby/object:Gem::Version
47
- version: '1.1'
53
+ version: '1.4'
48
54
  type: :runtime
49
55
  prerelease: false
50
56
  version_requirements: !ruby/object:Gem::Requirement
51
57
  requirements:
52
58
  - - "~>"
53
59
  - !ruby/object:Gem::Version
54
- version: '1.1'
60
+ version: '1.4'
61
+ - !ruby/object:Gem::Dependency
62
+ name: faraday_middleware
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '1.0'
68
+ type: :runtime
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: '1.0'
55
75
  - !ruby/object:Gem::Dependency
56
76
  name: json
57
77
  requirement: !ruby/object:Gem::Requirement
@@ -86,14 +106,14 @@ dependencies:
86
106
  requirements:
87
107
  - - "~>"
88
108
  - !ruby/object:Gem::Version
89
- version: 0.0.3
109
+ version: 0.0.7
90
110
  type: :runtime
91
111
  prerelease: false
92
112
  version_requirements: !ruby/object:Gem::Requirement
93
113
  requirements:
94
114
  - - "~>"
95
115
  - !ruby/object:Gem::Version
96
- version: 0.0.3
116
+ version: 0.0.7
97
117
  - !ruby/object:Gem::Dependency
98
118
  name: strum-pipe
99
119
  requirement: !ruby/object:Gem::Requirement
@@ -144,6 +164,7 @@ files:
144
164
  - lib/strum/cache_utils/redis_storage.rb
145
165
  - lib/strum/cache_utils/search.rb
146
166
  - lib/strum/cache_utils/send_request.rb
167
+ - lib/strum/cache_utils/shared/mixins/url.rb
147
168
  - strum-cache.gemspec
148
169
  homepage: https://gitlab.com/strum-rb/strum-cache
149
170
  licenses: []