mayak 0.0.8 → 0.0.10

Sign up to get free protection for your applications and to get access to all the features.
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