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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c2d43465f84c778599cc747d43d0599571cf9b056308f2a751993102853e1818
4
- data.tar.gz: e4e478b00ac90a7f2f6cd659f139f504bc6ddf69649af7cc023823f2ff96999f
3
+ metadata.gz: e44648baaa78861745c2730ebef1931d8b410fac5e4b3587ee25e190e25ade21
4
+ data.tar.gz: 6129222d4c612aadb0d2fe310fd5014491df2b83728b7dfc8884944473236dd1
5
5
  SHA512:
6
- metadata.gz: ebfc537f9958d211f4b11d7313e46e73468240a60840fd63cb47c96cd0ac70532d594c8aa75df8975882228f070d1cd6594c7d9eee0a73b6900081a3c28e0301
7
- data.tar.gz: 1f039589fd38aff458b6659e087ab65068071671fa4a55de30cd52820b0053eb22af6dcced5ab709c273aebf8e7a577d4388dcaf02b67d1e2f46fc8d2c71eccb
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
@@ -0,0 +1,15 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ module Mayak
5
+ module HashSerializable
6
+ extend T::Sig
7
+ extend T::Helpers
8
+
9
+ interface!
10
+
11
+ sig { abstract.returns(T::Hash[String, T.untyped])}
12
+ def serialize
13
+ end
14
+ end
15
+ end
@@ -4,20 +4,22 @@
4
4
  require_relative 'encoder'
5
5
  require_relative 'decoder'
6
6
 
7
- module Mayak
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
- interface!
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
@@ -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
- interface!
13
+ abstract!
14
+
15
+ include ::Mayak::Decoder
12
16
 
13
- ResponseEntity = type_member
17
+ RequestType = type_member {{ fixed: ::Mayak::Http::Request }}
18
+ RequestEntity = type_member
14
19
 
15
20
  sig {
16
- abstract
17
- .params(response: Mayak::Http::Response)
18
- .returns(Mayak::Monads::Try[ResponseEntity])
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 decode(response)
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
- ResponseEntity = type_member { { fixed: ::Mayak::Http::Response } }
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: Mayak::Http::Response)
35
- .returns(Mayak::Monads::Try[ResponseEntity])
63
+ .params(response: RequestType)
64
+ .returns(Mayak::Monads::Try[RequestEntity])
36
65
  }
37
66
  def decode(response)
38
- Mayak::Monads::Try::Success[ResponseEntity].new(response)
67
+ decoder.call(response.body || "")
39
68
  end
40
69
  end
41
70
  end
@@ -8,13 +8,12 @@ module Mayak
8
8
  extend T::Generic
9
9
  extend T::Helpers
10
10
 
11
- interface!
11
+ abstract!
12
12
 
13
- RequestEntity = type_member
13
+ include ::Mayak::Encoder
14
14
 
15
- sig { abstract.params(entity: RequestEntity).returns(Mayak::Http::Request) }
16
- def encode(entity)
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
- RequestEntity = type_member { { fixed: ::Mayak::Http::Request } }
25
+ ResponseEntity = type_member {{ fixed: ::Mayak::Http::Response }}
26
+ ResponseType = type_member {{ fixed: Mayak::Http::Response }}
27
27
 
28
- sig { override.params(entity: RequestEntity).returns(Mayak::Http::Request) }
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
- RequestEntity = type_member
41
+ ResponseEntity = type_member
42
+ ResponseType = type_member {{ fixed: Mayak::Http::Response }}
42
43
 
43
- sig { params(function: Mayak::Function[RequestEntity, Mayak::Http::Request]).void }
44
- def initialize(function)
45
- @function = T.let(function, Mayak::Function[RequestEntity, Mayak::Http::Request])
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: RequestEntity).returns(Mayak::Http::Request) }
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))
@@ -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
@@ -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
 
@@ -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.8"
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.8
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-01 00:00:00.000000000 Z
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