mayak 0.0.9 → 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: 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