mayak 0.0.8 → 0.0.10
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/mayak/decoder.rb +23 -0
- data/lib/mayak/encoder.rb +51 -0
- data/lib/mayak/hash_serializable.rb +15 -0
- data/lib/mayak/http/codec.rb +7 -5
- data/lib/mayak/http/decoder.rb +39 -10
- data/lib/mayak/http/encoder.rb +36 -12
- data/lib/mayak/json.rb +5 -0
- data/lib/mayak/monads/maybe.rb +0 -4
- data/lib/mayak/monads/result.rb +0 -4
- data/lib/mayak/monads/try.rb +0 -4
- data/lib/mayak.rb +3 -0
- data/mayak.gemspec +2 -1
- metadata +19 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e44648baaa78861745c2730ebef1931d8b410fac5e4b3587ee25e190e25ade21
|
4
|
+
data.tar.gz: 6129222d4c612aadb0d2fe310fd5014491df2b83728b7dfc8884944473236dd1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 453b3ca86ce029c06012b3505dba39726ffb693d6755e7e173388b4f010b18a8836761005c1e1f441c6ff846205375776baa1a3f036bc44d9ae948bdd76adf17
|
7
|
+
data.tar.gz: 94d61ec3b3b74471b68a14f077293496da87f1438d2cc4527746fee78452104ee98d0be4d4f341fc555629a0456d735637842e9d9ab62e8dd52da4dd49125052
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# typed: strong
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module Mayak
|
5
|
+
module Decoder
|
6
|
+
extend T::Sig
|
7
|
+
extend T::Generic
|
8
|
+
extend T::Helpers
|
9
|
+
|
10
|
+
abstract!
|
11
|
+
|
12
|
+
RequestType = type_member
|
13
|
+
RequestEntity = type_member
|
14
|
+
|
15
|
+
sig {
|
16
|
+
abstract
|
17
|
+
.params(response: RequestType)
|
18
|
+
.returns(Mayak::Monads::Try[RequestEntity])
|
19
|
+
}
|
20
|
+
def decode(response)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
# typed: strong
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module Mayak
|
5
|
+
module Encoder
|
6
|
+
extend T::Sig
|
7
|
+
extend T::Generic
|
8
|
+
extend T::Helpers
|
9
|
+
|
10
|
+
abstract!
|
11
|
+
|
12
|
+
ResponseEntity = type_member
|
13
|
+
ResponseType = type_member
|
14
|
+
|
15
|
+
sig { abstract.params(entity: ResponseEntity).returns(ResponseType) }
|
16
|
+
def encode(entity)
|
17
|
+
end
|
18
|
+
|
19
|
+
sig {
|
20
|
+
type_parameters(:NewResponse)
|
21
|
+
.params(blk: T.proc.params(arg0: ResponseType).returns(T.type_parameter(:NewResponse)))
|
22
|
+
.returns(::Mayak::Encoder[ResponseEntity, T.type_parameter(:NewResponse)])
|
23
|
+
}
|
24
|
+
def map_request(&blk)
|
25
|
+
::Mayak::Encoder::FromFunction[ResponseEntity, T.type_parameter(:NewResponse)].new do |entity|
|
26
|
+
blk.call(encode(entity))
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
class FromFunction
|
31
|
+
extend T::Sig
|
32
|
+
extend T::Generic
|
33
|
+
extend T::Helpers
|
34
|
+
|
35
|
+
include ::Mayak::Encoder
|
36
|
+
|
37
|
+
ResponseEntity = type_member
|
38
|
+
ResponseType = type_member
|
39
|
+
|
40
|
+
sig { params(function: T.proc.params(response: ResponseEntity).returns(ResponseType)).void }
|
41
|
+
def initialize(&function)
|
42
|
+
@function = T.let(function, T.proc.params(response: ResponseEntity).returns(ResponseType))
|
43
|
+
end
|
44
|
+
|
45
|
+
sig { override.params(entity: ResponseEntity).returns(ResponseType) }
|
46
|
+
def encode(entity)
|
47
|
+
@function.call(entity)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
data/lib/mayak/http/codec.rb
CHANGED
@@ -4,20 +4,22 @@
|
|
4
4
|
require_relative 'encoder'
|
5
5
|
require_relative 'decoder'
|
6
6
|
|
7
|
-
module
|
7
|
+
module Core
|
8
8
|
module Http
|
9
9
|
module Codec
|
10
10
|
extend T::Sig
|
11
11
|
extend T::Generic
|
12
12
|
extend T::Helpers
|
13
13
|
|
14
|
-
|
14
|
+
abstract!
|
15
15
|
|
16
|
-
include Mayak::Http::Encoder
|
17
|
-
include Mayak::Http::Decoder
|
16
|
+
include ::Mayak::Http::Encoder
|
17
|
+
include ::Mayak::Http::Decoder
|
18
18
|
|
19
|
-
RequestEntity = type_member
|
20
19
|
ResponseEntity = type_member
|
20
|
+
ResponseType = type_member {{ fixed: ::Mayak::Http::Response }}
|
21
|
+
RequestType = type_member {{ fixed: ::Mayak::Http::Request }}
|
22
|
+
RequestEntity = type_member
|
21
23
|
end
|
22
24
|
end
|
23
25
|
end
|
data/lib/mayak/http/decoder.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
# typed: strong
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
|
+
require_relative "../monads/try"
|
5
|
+
|
4
6
|
module Mayak
|
5
7
|
module Http
|
6
8
|
module Decoder
|
@@ -8,16 +10,20 @@ module Mayak
|
|
8
10
|
extend T::Generic
|
9
11
|
extend T::Helpers
|
10
12
|
|
11
|
-
|
13
|
+
abstract!
|
14
|
+
|
15
|
+
include ::Mayak::Decoder
|
12
16
|
|
13
|
-
|
17
|
+
RequestType = type_member {{ fixed: ::Mayak::Http::Request }}
|
18
|
+
RequestEntity = type_member
|
14
19
|
|
15
20
|
sig {
|
16
|
-
|
17
|
-
.params(
|
18
|
-
.returns(Mayak::
|
21
|
+
type_parameters(:A)
|
22
|
+
.params(blk: T.proc.params(arg: String).returns(Mayak::Monads::Try[T.type_parameter(:A)]))
|
23
|
+
.returns(::Mayak::Http::Decoder[T.type_parameter(:A)])
|
19
24
|
}
|
20
|
-
def
|
25
|
+
def self.decode_body(&blk)
|
26
|
+
FunctionFromBodyDecoder.new(decoder: blk)
|
21
27
|
end
|
22
28
|
|
23
29
|
class IdentityDecoder
|
@@ -27,15 +33,38 @@ module Mayak
|
|
27
33
|
|
28
34
|
include ::Mayak::Http::Decoder
|
29
35
|
|
30
|
-
|
36
|
+
RequestType = type_member {{ fixed: ::Mayak::Http::Request }}
|
37
|
+
RequestEntity = type_member {{ fixed: ::Mayak::Http::Request }}
|
38
|
+
|
39
|
+
sig {
|
40
|
+
override
|
41
|
+
.params(response: RequestType)
|
42
|
+
.returns(Mayak::Monads::Try[RequestEntity])
|
43
|
+
}
|
44
|
+
def decode(response)
|
45
|
+
Mayak::Monads::Try::Success.new(response)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
class FunctionFromBodyDecoder < T::Struct
|
50
|
+
extend T::Sig
|
51
|
+
extend T::Generic
|
52
|
+
extend T::Helpers
|
53
|
+
|
54
|
+
include ::Mayak::Http::Decoder
|
55
|
+
|
56
|
+
RequestType = type_member {{ fixed: ::Mayak::Http::Request }}
|
57
|
+
RequestEntity = type_member
|
58
|
+
|
59
|
+
const :decoder, T.proc.params(arg: String).returns(Mayak::Monads::Try[RequestEntity])
|
31
60
|
|
32
61
|
sig {
|
33
62
|
override
|
34
|
-
.params(response:
|
35
|
-
.returns(Mayak::Monads::Try[
|
63
|
+
.params(response: RequestType)
|
64
|
+
.returns(Mayak::Monads::Try[RequestEntity])
|
36
65
|
}
|
37
66
|
def decode(response)
|
38
|
-
|
67
|
+
decoder.call(response.body || "")
|
39
68
|
end
|
40
69
|
end
|
41
70
|
end
|
data/lib/mayak/http/encoder.rb
CHANGED
@@ -8,13 +8,12 @@ module Mayak
|
|
8
8
|
extend T::Generic
|
9
9
|
extend T::Helpers
|
10
10
|
|
11
|
-
|
11
|
+
abstract!
|
12
12
|
|
13
|
-
|
13
|
+
include ::Mayak::Encoder
|
14
14
|
|
15
|
-
|
16
|
-
|
17
|
-
end
|
15
|
+
ResponseEntity = type_member
|
16
|
+
ResponseType = type_member {{ fixed: Mayak::Http::Response }}
|
18
17
|
|
19
18
|
class IdentityEncoder
|
20
19
|
extend T::Sig
|
@@ -23,9 +22,10 @@ module Mayak
|
|
23
22
|
|
24
23
|
include ::Mayak::Http::Encoder
|
25
24
|
|
26
|
-
|
25
|
+
ResponseEntity = type_member {{ fixed: ::Mayak::Http::Response }}
|
26
|
+
ResponseType = type_member {{ fixed: Mayak::Http::Response }}
|
27
27
|
|
28
|
-
sig { override.params(entity:
|
28
|
+
sig { override.params(entity: ResponseEntity).returns(ResponseType) }
|
29
29
|
def encode(entity)
|
30
30
|
entity
|
31
31
|
end
|
@@ -38,18 +38,42 @@ module Mayak
|
|
38
38
|
|
39
39
|
include ::Mayak::Http::Encoder
|
40
40
|
|
41
|
-
|
41
|
+
ResponseEntity = type_member
|
42
|
+
ResponseType = type_member {{ fixed: Mayak::Http::Response }}
|
42
43
|
|
43
|
-
sig { params(function:
|
44
|
-
def initialize(function)
|
45
|
-
@function = T.let(function,
|
44
|
+
sig { params(function: T.proc.params(response: ResponseEntity).returns(ResponseType)).void }
|
45
|
+
def initialize(&function)
|
46
|
+
@function = T.let(function, T.proc.params(response: ResponseEntity).returns(ResponseType))
|
46
47
|
end
|
47
48
|
|
48
|
-
sig { override.params(entity:
|
49
|
+
sig { override.params(entity: ResponseEntity).returns(ResponseType) }
|
49
50
|
def encode(entity)
|
50
51
|
@function.call(entity)
|
51
52
|
end
|
52
53
|
end
|
54
|
+
|
55
|
+
class FromHashSerializableJson < T::Struct
|
56
|
+
extend T::Sig
|
57
|
+
extend T::Generic
|
58
|
+
extend T::Helpers
|
59
|
+
|
60
|
+
include ::Mayak::Http::Encoder
|
61
|
+
|
62
|
+
const :default_status, Integer
|
63
|
+
const :default_headers, T::Hash[String, String]
|
64
|
+
|
65
|
+
ResponseEntity = type_member {{ fixed: ::Mayak::HashSerializable }}
|
66
|
+
ResponseType = type_member {{ fixed: Mayak::Http::Response }}
|
67
|
+
|
68
|
+
sig { override.params(entity: ResponseEntity).returns(ResponseType) }
|
69
|
+
def encode(entity)
|
70
|
+
Mayak::Http::Response.new(
|
71
|
+
status: default_status,
|
72
|
+
headers: default_headers,
|
73
|
+
body: Mayak::Json.dump(entity.serialize)
|
74
|
+
)
|
75
|
+
end
|
76
|
+
end
|
53
77
|
end
|
54
78
|
end
|
55
79
|
end
|
data/lib/mayak/json.rb
CHANGED
@@ -20,6 +20,11 @@ module Mayak
|
|
20
20
|
class ParsingError < StandardError
|
21
21
|
end
|
22
22
|
|
23
|
+
sig { params(obj: JsonType).returns(String) }
|
24
|
+
def self.dump(obj)
|
25
|
+
JSON.dump(obj)
|
26
|
+
end
|
27
|
+
|
23
28
|
sig { params(string: String).returns(Mayak::Monads::Try[JsonType]) }
|
24
29
|
def self.parse(string)
|
25
30
|
Mayak::Monads::Try::Success.new(JSON.parse(string))
|
data/lib/mayak/monads/maybe.rb
CHANGED
@@ -174,8 +174,6 @@ module Mayak
|
|
174
174
|
extend T::Generic
|
175
175
|
extend T::Helpers
|
176
176
|
|
177
|
-
final!
|
178
|
-
|
179
177
|
Value = type_member
|
180
178
|
|
181
179
|
include ::Mayak::Monads::Maybe
|
@@ -306,8 +304,6 @@ module Mayak
|
|
306
304
|
extend T::Generic
|
307
305
|
extend T::Helpers
|
308
306
|
|
309
|
-
final!
|
310
|
-
|
311
307
|
Value = type_member
|
312
308
|
|
313
309
|
include Mayak::Monads::Maybe
|
data/lib/mayak/monads/result.rb
CHANGED
@@ -228,8 +228,6 @@ module Mayak
|
|
228
228
|
extend T::Generic
|
229
229
|
extend T::Helpers
|
230
230
|
|
231
|
-
final!
|
232
|
-
|
233
231
|
FailureType = type_member
|
234
232
|
SuccessType = type_member
|
235
233
|
|
@@ -429,8 +427,6 @@ module Mayak
|
|
429
427
|
extend T::Generic
|
430
428
|
extend T::Helpers
|
431
429
|
|
432
|
-
final!
|
433
|
-
|
434
430
|
FailureType = type_member
|
435
431
|
SuccessType = type_member
|
436
432
|
|
data/lib/mayak/monads/try.rb
CHANGED
@@ -224,8 +224,6 @@ module Mayak
|
|
224
224
|
extend T::Sig
|
225
225
|
extend T::Generic
|
226
226
|
|
227
|
-
final!
|
228
|
-
|
229
227
|
Value = type_member
|
230
228
|
|
231
229
|
include Mayak::Monads::Try
|
@@ -394,8 +392,6 @@ module Mayak
|
|
394
392
|
extend T::Sig
|
395
393
|
extend T::Generic
|
396
394
|
|
397
|
-
final!
|
398
|
-
|
399
395
|
Value = type_member
|
400
396
|
|
401
397
|
include Mayak::Monads::Try
|
data/lib/mayak.rb
CHANGED
@@ -10,6 +10,9 @@ require_relative 'mayak/numeric'
|
|
10
10
|
require_relative 'mayak/random'
|
11
11
|
require_relative 'mayak/version'
|
12
12
|
require_relative 'mayak/weak_ref'
|
13
|
+
require_relative 'mayak/decoder'
|
14
|
+
require_relative 'mayak/encoder'
|
15
|
+
require_relative 'mayak/hash_serializable'
|
13
16
|
|
14
17
|
require_relative 'mayak/caching/unbounded_cache'
|
15
18
|
require_relative 'mayak/caching/lru_cache'
|
data/mayak.gemspec
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
|
5
5
|
Gem::Specification.new do |spec|
|
6
6
|
spec.name = "mayak"
|
7
|
-
spec.version = "0.0.
|
7
|
+
spec.version = "0.0.10"
|
8
8
|
spec.summary = "Set of fully typed utility classes and interfaces integrated with Sorbet."
|
9
9
|
spec.description = spec.summary
|
10
10
|
spec.authors = ["Daniil Bober"]
|
@@ -19,4 +19,5 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.add_development_dependency "bundler"
|
20
20
|
spec.add_development_dependency "rspec"
|
21
21
|
spec.add_development_dependency "parlour"
|
22
|
+
spec.add_development_dependency "tapioca"
|
22
23
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mayak
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniil Bober
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-04-
|
11
|
+
date: 2024-04-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sorbet-runtime
|
@@ -80,6 +80,20 @@ dependencies:
|
|
80
80
|
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: tapioca
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
83
97
|
description: Set of fully typed utility classes and interfaces integrated with Sorbet.
|
84
98
|
email:
|
85
99
|
executables: []
|
@@ -95,7 +109,10 @@ files:
|
|
95
109
|
- lib/mayak/collections/README.md
|
96
110
|
- lib/mayak/collections/priority_queue.rb
|
97
111
|
- lib/mayak/collections/queue.rb
|
112
|
+
- lib/mayak/decoder.rb
|
113
|
+
- lib/mayak/encoder.rb
|
98
114
|
- lib/mayak/function.rb
|
115
|
+
- lib/mayak/hash_serializable.rb
|
99
116
|
- lib/mayak/http/README.md
|
100
117
|
- lib/mayak/http/client.rb
|
101
118
|
- lib/mayak/http/codec.rb
|