mayak 0.0.2 → 0.0.3

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: 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