mayak 0.0.2 → 0.0.3

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: c11b0f5c9288055fd9f0ca907a38e257b06b78fdd0f4e1185fafa8beae4fdcc2
4
- data.tar.gz: f49566c5b0d830610843288c56ae001513a72b34b5beb75a9cb764998c0e6abd
3
+ metadata.gz: e3b0f6dd0284a5fcb3319c3c809fac92a1f071115495ea492deee12687023413
4
+ data.tar.gz: d2ec0d4a48f29136f159553233b846f56d998f79852bfad962aee7ba6b09cfbb
5
5
  SHA512:
6
- metadata.gz: b24805002d39350e5d6fa0f4b8bc501b6c576b34368bc90eca7af794f820f191e7c4e35c1487cb3083ddabd18e2dbb1929822801cd934eebeac298c4bb5d34d4
7
- data.tar.gz: 87275eb153d98c62d264c20a51db6e99109ec519eb957fbf4728f3b0612686aa41f76f728090d332d72323d16e7a954751fb17ad23b1bf9bff3cf99eba20fef8
6
+ metadata.gz: ac0b20d7a23fab465f1fb460a0a5866a411c4c3874e557ceb82bca724af63f55cb7c0c582fa61c392362b72be01447851895f8b17cceb674a0874dfa91ab92aa
7
+ data.tar.gz: a1598a89492189ee4fc70b4cabc54898164ca6ddd9b23d00dc66c578c105180b02d3cc0245cfe71069fad75938e04eea60277cb6f7e722d8b005f14bd1cfaa71
data/README.md CHANGED
@@ -30,4 +30,129 @@ Mayak consists from separate classes and interfaces as well as separate modules
30
30
 
31
31
  #### HTTP
32
32
 
33
- [Documentation](./lib/mayak/http/README.md)
33
+ [Documentation](./lib/mayak/http/README.md)
34
+
35
+ #### Miscellaneous
36
+
37
+ ##### Function
38
+ In some situations Sorbet can not infer a type of proc passed:
39
+
40
+ ```ruby
41
+ sig {
42
+ type_parameters(:A)
43
+ .params(blk: T.proc.params(arg0: T.type_parameter(:A)).returns(T.type_parameter(:A)))
44
+ .returns(T.proc.params(arg0: T.type_parameter(:A)).returns(T.type_parameter(:A)))
45
+ }
46
+ def proc_identity(&blk)
47
+ blk
48
+ end
49
+
50
+ T.reveal_type(proc_identity { |a| 10 })
51
+ # This code is unreachable https://srb.help/7006
52
+ # proc_identity { |a| 10 }
53
+ ```
54
+
55
+ `Mayak::Fuction` allows explicitly define input and output types to help sorbet infer types:
56
+
57
+ ```ruby
58
+ sig {
59
+ type_parameters(:A)
60
+ .params(
61
+ fn: Mayak::Function[T.type_parameter(:A), T.type_parameter(:A)])
62
+ .returns(Mayak::Function[T.type_parameter(:A), T.type_parameter(:A)])
63
+ }
64
+ def fn_identity(fn)
65
+ fn
66
+ end
67
+
68
+ T.reveal_type(
69
+ fn_identity(Mayak::Function[Integer, Integer].new { |a| a })
70
+ )
71
+ # Revealed type: Mayak::Function[Integer, Integer]
72
+ ```
73
+
74
+ ##### JSON
75
+
76
+ `JSON` module provides a type alias to encode JSON type:
77
+
78
+ ```ruby
79
+ JsonType = T.type_alias {
80
+ T.any(
81
+ T::Array[T.untyped],
82
+ T::Hash[T.untyped, T.untyped],
83
+ String,
84
+ Integer,
85
+ Float
86
+ )
87
+ }
88
+ ```
89
+
90
+ and methods to safely parse JSON:
91
+
92
+ ```ruby
93
+ Mayak::Json.parse(%{ { "foo": 1} })
94
+ #<Mayak::Monads::Try::Success:0x00000001086c8398 @value={"foo"=>1}>
95
+
96
+ Mayak::Json.parse(%{ { "foo: 1} })
97
+ #<Mayak::Monads::Try::Failure:0x00000001085ea250 @failure=#<Mayak::Json::ParsingError: unexpected token at '{ "foo: 1} '>>
98
+ ```
99
+
100
+ ##### Numeric
101
+
102
+ `Numeric` method provides method for safe parsing numerical values:
103
+
104
+ ```ruby
105
+ Mayak::Numeric.parse_float("0.1")
106
+ #<Mayak::Monads::Maybe::Some:0x000000010bbb4070 @value=0.1>
107
+
108
+ Mayak::Numeric.parse_float("0.1sdfs")
109
+ #<Mayak::Monads::Maybe::None:0x000000010bab3e50>
110
+
111
+ Mayak::Numeric.parse_integer("10")
112
+ #<Mayak::Monads::Maybe::Some:0x0000000108fcdb78 @value=10>
113
+
114
+ Mayak::Numeric.parse_integer("10qq")
115
+ #<Mayak::Monads::Maybe::None:0x000000010bbf64c0>
116
+
117
+ Mayak::Numeric.parse_decimal("100")
118
+ #<Mayak::Monads::Maybe::Some:0x000000010ba78968 @value=0.1e3>
119
+
120
+ Mayak::Numeric.parse_decimal("100dd")
121
+ #<Mayak::Monads::Maybe::None:0x000000010bb718b0>
122
+ ```
123
+
124
+ ##### Random
125
+
126
+ Utils for random number generating
127
+
128
+ ###### `#jittered`
129
+
130
+ Adds random noise for a number within specified range
131
+
132
+ ```ruby
133
+ # Yield a random number from 100 to 105
134
+ Mayak::Random.jittered(100, jitter: 0.05)
135
+ # 101.53359412200601
136
+
137
+ Mayak::Random.jittered(100, jitter: 0.05)
138
+ # 103.59043964431787
139
+ ```
140
+
141
+ ##### WeakRef
142
+
143
+ Parameterized weak Reference class that allows a referenced object to be garbage-collected.
144
+
145
+ ```ruby
146
+ class Obj
147
+ end
148
+
149
+ value = Obj.new
150
+ value = Mayak::WeakRef[Obj].new(value)
151
+ value.deref
152
+ #<Mayak::Monads::Maybe::Some:0x0000000103e8fa90 @value=#<Obj:0x000000010721de48>>
153
+
154
+ GC.start
155
+ value.deref
156
+ #<Mayak::Monads::Maybe::None:0x000000010715f6f0>
157
+ # Not necessarily will be collected after only one GC cycle
158
+ ```
data/lib/mayak/json.rb CHANGED
@@ -1,6 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
  # typed: strict
3
3
 
4
+ require "json"
5
+
4
6
  module Mayak
5
7
  module Json
6
8
  extend T::Sig
data/lib/mayak/numeric.rb CHANGED
@@ -1,6 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
  # typed: strict
3
3
 
4
+ require 'bigdecimal'
5
+
4
6
  module Mayak
5
7
  module Numeric
6
8
  extend T::Sig
data/lib/mayak/random.rb CHANGED
@@ -9,7 +9,8 @@ module Mayak
9
9
 
10
10
  sig { params(number: T.any(Integer, Float), jitter: Float).returns(Float) }
11
11
  def self.jittered(number, jitter: DEFAULT_JITTER)
12
- (number + Kernel.rand(number * jitter)).to_f
12
+ delta = Kernel.rand(0..(number * jitter))
13
+ (number + delta.to_f).to_f
13
14
  end
14
15
  end
15
16
  end
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.2"
7
+ spec.version = "0.0.3"
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.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniil Bober
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-12-26 00:00:00.000000000 Z
11
+ date: 2024-02-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sorbet-runtime