mayak 0.0.9 → 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: 3f92b671159bfbc4ccd7eb03639eb8201aa8c67518de9eb2140f9ce053c1e74d
4
- data.tar.gz: aabfe7c4b9baaf6fdd2e6906c968b3a42f903c64f5348d5c1a2f5dbb7b5cbdec
3
+ metadata.gz: e44648baaa78861745c2730ebef1931d8b410fac5e4b3587ee25e190e25ade21
4
+ data.tar.gz: 6129222d4c612aadb0d2fe310fd5014491df2b83728b7dfc8884944473236dd1
5
5
  SHA512:
6
- metadata.gz: 75000aa57d6ea5e90a74f0350110bb71cf1138249e28309da836976ff836b2ea0fc11e60f3df86d54f1ede6d3120dd50aba57dc3bb356bdd4950737dce5dd0c1
7
- data.tar.gz: 7d6f1d5d85a766f97c77c6ea7da8e9004b08d3f1e1935934fa5f9dcbc945e40d0033fafae9a2ad0ce1dd00bd2287be8dd2261efaea29eb160edee7f9faf6ccd3
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))
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.9"
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"]
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.9
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
@@ -109,7 +109,10 @@ files:
109
109
  - lib/mayak/collections/README.md
110
110
  - lib/mayak/collections/priority_queue.rb
111
111
  - lib/mayak/collections/queue.rb
112
+ - lib/mayak/decoder.rb
113
+ - lib/mayak/encoder.rb
112
114
  - lib/mayak/function.rb
115
+ - lib/mayak/hash_serializable.rb
113
116
  - lib/mayak/http/README.md
114
117
  - lib/mayak/http/client.rb
115
118
  - lib/mayak/http/codec.rb