mayak 0.0.2

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.
@@ -0,0 +1,74 @@
1
+ # frozen_string_literal: true
2
+ # typed: strict
3
+
4
+ module Mayak
5
+ module Predicates
6
+ class Rule
7
+ extend T::Sig
8
+ extend T::Helpers
9
+ extend T::Generic
10
+
11
+ A = type_member
12
+
13
+ sig { returns(T.proc.params(arg0: A).returns(T::Boolean)) }
14
+ attr_reader :fn
15
+
16
+ sig { params(blk: T.proc.params(arg0: A).returns(T::Boolean)).void }
17
+ def initialize(&blk)
18
+ @fn = T.let(blk, T.proc.params(arg0: A).returns(T::Boolean))
19
+ end
20
+
21
+ sig { params(object: A).returns(T::Boolean) }
22
+ def call(object)
23
+ fn.call(object)
24
+ end
25
+
26
+ sig { params(another: Mayak::Predicates::Rule[A]).returns(Mayak::Predicates::Rule[A]) }
27
+ def both(another)
28
+ Mayak::Predicates::Rule[A].new do |object|
29
+ fn.call(object) && another.call(object)
30
+ end
31
+ end
32
+ alias & both
33
+
34
+ sig { params(another: Mayak::Predicates::Rule[A]).returns(Mayak::Predicates::Rule[A]) }
35
+ def any(another)
36
+ Mayak::Predicates::Rule[A].new do |object|
37
+ fn.call(object) || another.call(object)
38
+ end
39
+ end
40
+ alias | any
41
+
42
+ sig { returns(Mayak::Predicates::Rule[A]) }
43
+ def negate
44
+ Mayak::Predicates::Rule[A].new do |object|
45
+ !fn.call(object)
46
+ end
47
+ end
48
+ alias ! negate
49
+
50
+ sig {
51
+ type_parameters(:B)
52
+ .params(function: Mayak::Function[T.type_parameter(:B), A])
53
+ .returns(Mayak::Predicates::Rule[T.type_parameter(:B)])
54
+ }
55
+ def from(function)
56
+ Mayak::Predicates::Rule.new do |object|
57
+ fn.call(function.call(object))
58
+ end
59
+ end
60
+
61
+ sig { returns(Mayak::Predicates::Rule[T.nilable(A)]) }
62
+ def presence
63
+ Mayak::Predicates::Rule[T.nilable(A)].new do |object|
64
+ case object
65
+ when nil
66
+ false
67
+ else
68
+ fn.call(object)
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+ # typed: strict
3
+
4
+ module Mayak
5
+ module Random
6
+ extend T::Sig
7
+
8
+ DEFAULT_JITTER = T.let(0.15, Float)
9
+
10
+ sig { params(number: T.any(Integer, Float), jitter: Float).returns(Float) }
11
+ def self.jittered(number, jitter: DEFAULT_JITTER)
12
+ (number + Kernel.rand(number * jitter)).to_f
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+ # typed: strict
3
+
4
+ module Mayak
5
+ VERSION = T.let("0.0.1", String)
6
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+ # typed: strict
3
+
4
+ module Mayak
5
+ class WeakRef
6
+ extend T::Sig
7
+ extend T::Generic
8
+
9
+ Value = type_member
10
+
11
+ class EmptyReferenceError < StandardError
12
+ end
13
+
14
+ @@__map = T.let(::ObjectSpace::WeakMap.new, ::ObjectSpace::WeakMap)
15
+
16
+ sig { params(value: Value).void }
17
+ def initialize(value)
18
+ @@__map[self] = value
19
+ end
20
+
21
+ sig { returns(Value) }
22
+ def deref!
23
+ if @@__map.key?(self)
24
+ @@__map[self]
25
+ else
26
+ raise EmptyReferenceError.new("Reference is empty")
27
+ end
28
+ end
29
+
30
+ sig { returns(Mayak::Monads::Maybe[Value]) }
31
+ def deref
32
+ Mayak::Monads::Maybe::Some[Value].new(deref!)
33
+ rescue
34
+ Mayak::Monads::Maybe::None[Value].new
35
+ end
36
+ end
37
+ end
data/lib/mayak.rb ADDED
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+ # typed: strict
3
+
4
+ require 'sorbet-runtime'
5
+
6
+ require_relative 'mayak/cache'
7
+ require_relative 'mayak/function'
8
+ require_relative 'mayak/json'
9
+ require_relative 'mayak/numeric'
10
+ require_relative 'mayak/random'
11
+ require_relative 'mayak/version'
12
+ require_relative 'mayak/weak_ref'
13
+
14
+ require_relative 'mayak/caching/unbounded_cache'
15
+ require_relative 'mayak/caching/lru_cache'
16
+
17
+ require_relative 'mayak/collections/priority_queue'
18
+ require_relative 'mayak/collections/queue'
19
+
20
+ require_relative 'mayak/http/decoder'
21
+ require_relative 'mayak/http/encoder'
22
+ require_relative 'mayak/http/request'
23
+ require_relative 'mayak/http/response'
24
+ require_relative 'mayak/http/verb'
25
+ require_relative 'mayak/http/client'
26
+ require_relative 'mayak/http/codec'
27
+
28
+ require_relative 'mayak/monads/maybe'
29
+ require_relative 'mayak/monads/result'
30
+ require_relative 'mayak/monads/try'
31
+
32
+ require_relative 'mayak/predicates/rule'
33
+
34
+ module Mayak
35
+ end
data/mayak.gemspec ADDED
@@ -0,0 +1,21 @@
1
+ # lib = File.expand_path("lib", __dir__)
2
+ # $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
+ # require "mayak/version"
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = "mayak"
7
+ spec.version = "0.0.2"
8
+ spec.summary = "Set of fully typed utility classes and interfaces integrated with Sorbet."
9
+ spec.description = spec.summary
10
+ spec.authors = ["Daniil Bober"]
11
+ spec.files = Dir["CHANGELOG.md", "LICENSE", "README.md", "mayak.gemspec", "lib/**/*"]
12
+ spec.license = "MIT"
13
+ spec.executables = []
14
+ spec.require_paths = ["lib"]
15
+
16
+ spec.add_dependency 'sorbet-runtime'
17
+ spec.add_dependency 'sorbet'
18
+
19
+ spec.add_development_dependency "bundler"
20
+ spec.add_development_dependency "rspec"
21
+ end
metadata ADDED
@@ -0,0 +1,127 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mayak
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Daniil Bober
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2023-12-26 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: sorbet-runtime
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: sorbet
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ description: Set of fully typed utility classes and interfaces integrated with Sorbet.
70
+ email:
71
+ executables: []
72
+ extensions: []
73
+ extra_rdoc_files: []
74
+ files:
75
+ - README.md
76
+ - lib/mayak.rb
77
+ - lib/mayak/cache.rb
78
+ - lib/mayak/caching/README.md
79
+ - lib/mayak/caching/lru_cache.rb
80
+ - lib/mayak/caching/unbounded_cache.rb
81
+ - lib/mayak/collections/README.md
82
+ - lib/mayak/collections/priority_queue.rb
83
+ - lib/mayak/collections/queue.rb
84
+ - lib/mayak/function.rb
85
+ - lib/mayak/http/README.md
86
+ - lib/mayak/http/client.rb
87
+ - lib/mayak/http/codec.rb
88
+ - lib/mayak/http/decoder.rb
89
+ - lib/mayak/http/encoder.rb
90
+ - lib/mayak/http/request.rb
91
+ - lib/mayak/http/response.rb
92
+ - lib/mayak/http/verb.rb
93
+ - lib/mayak/json.rb
94
+ - lib/mayak/monads/README.md
95
+ - lib/mayak/monads/maybe.rb
96
+ - lib/mayak/monads/result.rb
97
+ - lib/mayak/monads/try.rb
98
+ - lib/mayak/numeric.rb
99
+ - lib/mayak/predicates/rule.rb
100
+ - lib/mayak/random.rb
101
+ - lib/mayak/version.rb
102
+ - lib/mayak/weak_ref.rb
103
+ - mayak.gemspec
104
+ homepage:
105
+ licenses:
106
+ - MIT
107
+ metadata: {}
108
+ post_install_message:
109
+ rdoc_options: []
110
+ require_paths:
111
+ - lib
112
+ required_ruby_version: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - ">="
115
+ - !ruby/object:Gem::Version
116
+ version: '0'
117
+ required_rubygems_version: !ruby/object:Gem::Requirement
118
+ requirements:
119
+ - - ">="
120
+ - !ruby/object:Gem::Version
121
+ version: '0'
122
+ requirements: []
123
+ rubygems_version: 3.4.10
124
+ signing_key:
125
+ specification_version: 4
126
+ summary: Set of fully typed utility classes and interfaces integrated with Sorbet.
127
+ test_files: []