linguadata 0.1.2 → 0.1.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: 73c63c761385db0071d25a86b64374932728d8004849412857382f14412a6fe6
4
- data.tar.gz: 13db35cd3eb4ca92130227777459243bee1178e20e30ebaa926d7efb64fab3d8
3
+ metadata.gz: 19c3b2ee58bec38f656da894f3451359003d5ffa3c1eb5d88f04d785045ffe03
4
+ data.tar.gz: 90d39bda8a6e4d4b3d5471ab95da02d93a7456370f65f05dc7b414db12444ca2
5
5
  SHA512:
6
- metadata.gz: 4bcbee3fb2455fed89cb8081dd2816e5cdaa23282dee13c3cd357a4474d4d907a15239519d5c28935f8a80fadc10c5a5a780299832e0e317162fab27aa1d1981
7
- data.tar.gz: bf6e4aec32b7d892fd10513ad7f627b623b41ed1a61eda25b4559302d58f65f1fe70de06650061eb5a428971caf03f9e12b15386fa9711f7d296d542a0bd7ac4
6
+ metadata.gz: 2a61866d502824d73ff82286d4187f79a2db950ececa50482c5b722db08bd8c04c3e730d4f28a95d5dc610c80271ded81c70ce9594c22210c0e8a17dfdaf51a3
7
+ data.tar.gz: 7c0c2a3931d87cf6e4baf36daa792055411dbb6642b557629f33b4ead1f296deb3b4f65158814600d52924558322046b0a15ad0a831e5af74c19c865919b5714
data/.idea/linguadata.iml CHANGED
@@ -8,74 +8,81 @@
8
8
  <sourceFolder url="file://$MODULE_DIR$/features" isTestSource="true" />
9
9
  <sourceFolder url="file://$MODULE_DIR$/spec" isTestSource="true" />
10
10
  <sourceFolder url="file://$MODULE_DIR$/test" isTestSource="true" />
11
+ <excludeFolder url="file://$MODULE_DIR$/coverage" />
12
+ <excludeFolder url="file://$MODULE_DIR$/pkg" />
11
13
  </content>
12
14
  <orderEntry type="jdk" jdkName="rbenv: 3.2.2" jdkType="RUBY_SDK" />
13
15
  <orderEntry type="sourceFolder" forTests="false" />
14
- <orderEntry type="library" scope="PROVIDED" name="activesupport (v7.1.1, rbenv: 3.2.2) [gem]" level="application" />
15
- <orderEntry type="library" scope="PROVIDED" name="ast (v2.4.2, rbenv: 3.2.2) [gem]" level="application" />
16
- <orderEntry type="library" scope="PROVIDED" name="bigdecimal (v3.1.4, rbenv: 3.2.2) [gem]" level="application" />
16
+ <orderEntry type="library" scope="PROVIDED" name="activesupport (v7.1.1, rbenv: 3.2.2, linguadata) [gem]" level="application" />
17
+ <orderEntry type="library" scope="PROVIDED" name="ast (v2.4.2, rbenv: 3.2.2, linguadata) [gem]" level="application" />
18
+ <orderEntry type="library" scope="PROVIDED" name="bigdecimal (v3.1.4, rbenv: 3.2.2, linguadata) [gem]" level="application" />
17
19
  <orderEntry type="library" scope="PROVIDED" name="bundler (v2.4.10, rbenv: 3.2.2) [gem]" level="application" />
18
- <orderEntry type="library" scope="PROVIDED" name="concurrent-ruby (v1.2.2, rbenv: 3.2.2) [gem]" level="application" />
19
- <orderEntry type="library" scope="PROVIDED" name="connection_pool (v2.4.1, rbenv: 3.2.2) [gem]" level="application" />
20
- <orderEntry type="library" scope="PROVIDED" name="csv (v3.2.7, rbenv: 3.2.2) [gem]" level="application" />
21
- <orderEntry type="library" scope="PROVIDED" name="diff-lcs (v1.5.0, rbenv: 3.2.2) [gem]" level="application" />
20
+ <orderEntry type="library" scope="PROVIDED" name="concurrent-ruby (v1.2.2, rbenv: 3.2.2, linguadata) [gem]" level="application" />
21
+ <orderEntry type="library" scope="PROVIDED" name="connection_pool (v2.4.1, rbenv: 3.2.2, linguadata) [gem]" level="application" />
22
+ <orderEntry type="library" scope="PROVIDED" name="csv (v3.2.7, rbenv: 3.2.2, linguadata) [gem]" level="application" />
23
+ <orderEntry type="library" scope="PROVIDED" name="diff-lcs (v1.5.0, rbenv: 3.2.2, linguadata) [gem]" level="application" />
22
24
  <orderEntry type="library" scope="PROVIDED" name="drb (v2.1.1, rbenv: 3.2.2) [gem]" level="application" />
23
- <orderEntry type="library" scope="PROVIDED" name="ffi (v1.16.3, rbenv: 3.2.2) [gem]" level="application" />
24
- <orderEntry type="library" scope="PROVIDED" name="fileutils (v1.7.1, rbenv: 3.2.2) [gem]" level="application" />
25
- <orderEntry type="library" scope="PROVIDED" name="i18n (v1.14.1, rbenv: 3.2.2) [gem]" level="application" />
25
+ <orderEntry type="library" scope="PROVIDED" name="ffi (v1.16.3, rbenv: 3.2.2, linguadata) [gem]" level="application" />
26
+ <orderEntry type="library" scope="PROVIDED" name="fileutils (v1.7.1, rbenv: 3.2.2, linguadata) [gem]" level="application" />
27
+ <orderEntry type="library" scope="PROVIDED" name="i18n (v1.14.1, rbenv: 3.2.2, linguadata) [gem]" level="application" />
26
28
  <orderEntry type="library" scope="PROVIDED" name="json (v2.6.3, rbenv: 3.2.2) [gem]" level="application" />
27
- <orderEntry type="library" scope="PROVIDED" name="language_server-protocol (v3.17.0.3, rbenv: 3.2.2) [gem]" level="application" />
28
- <orderEntry type="library" scope="PROVIDED" name="lint_roller (v1.1.0, rbenv: 3.2.2) [gem]" level="application" />
29
- <orderEntry type="library" scope="PROVIDED" name="listen (v3.8.0, rbenv: 3.2.2) [gem]" level="application" />
29
+ <orderEntry type="library" scope="PROVIDED" name="language_server-protocol (v3.17.0.3, rbenv: 3.2.2, linguadata) [gem]" level="application" />
30
+ <orderEntry type="library" scope="PROVIDED" name="lint_roller (v1.1.0, rbenv: 3.2.2, linguadata) [gem]" level="application" />
31
+ <orderEntry type="library" scope="PROVIDED" name="listen (v3.8.0, rbenv: 3.2.2, linguadata) [gem]" level="application" />
30
32
  <orderEntry type="library" scope="PROVIDED" name="logger (v1.5.3, rbenv: 3.2.2) [gem]" level="application" />
31
- <orderEntry type="library" scope="PROVIDED" name="minitest (v5.20.0, rbenv: 3.2.2) [gem]" level="application" />
32
- <orderEntry type="library" scope="PROVIDED" name="parallel (v1.23.0, rbenv: 3.2.2) [gem]" level="application" />
33
- <orderEntry type="library" scope="PROVIDED" name="parser (v3.2.2.4, rbenv: 3.2.2) [gem]" level="application" />
34
- <orderEntry type="library" scope="PROVIDED" name="racc (v1.7.1, rbenv: 3.2.2) [gem]" level="application" />
35
- <orderEntry type="library" scope="PROVIDED" name="rainbow (v3.1.1, rbenv: 3.2.2) [gem]" level="application" />
33
+ <orderEntry type="library" scope="PROVIDED" name="minitest (v5.20.0, rbenv: 3.2.2, linguadata) [gem]" level="application" />
34
+ <orderEntry type="library" scope="PROVIDED" name="mutant (v0.11.24, rbenv: 3.2.2, linguadata) [gem]" level="application" />
35
+ <orderEntry type="library" scope="PROVIDED" name="mutant-license (v0.1.1.2.0526686720282068589522783053343094335875.0, rbenv: 3.2.2, linguadata) [gem]" level="application" />
36
+ <orderEntry type="library" scope="PROVIDED" name="mutant-rspec (v0.11.24, rbenv: 3.2.2, linguadata) [gem]" level="application" />
37
+ <orderEntry type="library" scope="PROVIDED" name="parallel (v1.23.0, rbenv: 3.2.2, linguadata) [gem]" level="application" />
38
+ <orderEntry type="library" scope="PROVIDED" name="parser (v3.2.2.4, rbenv: 3.2.2, linguadata) [gem]" level="application" />
39
+ <orderEntry type="library" scope="PROVIDED" name="racc (v1.7.1, rbenv: 3.2.2, linguadata) [gem]" level="application" />
40
+ <orderEntry type="library" scope="PROVIDED" name="rainbow (v3.1.1, rbenv: 3.2.2, linguadata) [gem]" level="application" />
36
41
  <orderEntry type="library" scope="PROVIDED" name="rake (v13.0.6, rbenv: 3.2.2) [gem]" level="application" />
37
- <orderEntry type="library" scope="PROVIDED" name="rb-fsevent (v0.11.2, rbenv: 3.2.2) [gem]" level="application" />
38
- <orderEntry type="library" scope="PROVIDED" name="rb-inotify (v0.10.1, rbenv: 3.2.2) [gem]" level="application" />
39
- <orderEntry type="library" scope="PROVIDED" name="rbs (v3.2.2, rbenv: 3.2.2) [gem]" level="application" />
40
- <orderEntry type="library" scope="PROVIDED" name="regexp_parser (v2.8.2, rbenv: 3.2.2) [gem]" level="application" />
41
- <orderEntry type="library" scope="PROVIDED" name="rexml (v3.2.6, rbenv: 3.2.2) [gem]" level="application" />
42
- <orderEntry type="library" scope="PROVIDED" name="rspec (v3.12.0, rbenv: 3.2.2) [gem]" level="application" />
43
- <orderEntry type="library" scope="PROVIDED" name="rspec-core (v3.12.2, rbenv: 3.2.2) [gem]" level="application" />
44
- <orderEntry type="library" scope="PROVIDED" name="rspec-expectations (v3.12.3, rbenv: 3.2.2) [gem]" level="application" />
45
- <orderEntry type="library" scope="PROVIDED" name="rspec-mocks (v3.12.6, rbenv: 3.2.2) [gem]" level="application" />
46
- <orderEntry type="library" scope="PROVIDED" name="rspec-support (v3.12.1, rbenv: 3.2.2) [gem]" level="application" />
47
- <orderEntry type="library" scope="PROVIDED" name="rubocop (v1.56.4, rbenv: 3.2.2) [gem]" level="application" />
48
- <orderEntry type="library" scope="PROVIDED" name="rubocop-ast (v1.29.0, rbenv: 3.2.2) [gem]" level="application" />
49
- <orderEntry type="library" scope="PROVIDED" name="rubocop-performance (v1.19.1, rbenv: 3.2.2) [gem]" level="application" />
50
- <orderEntry type="library" scope="PROVIDED" name="ruby-progressbar (v1.13.0, rbenv: 3.2.2) [gem]" level="application" />
51
- <orderEntry type="library" scope="PROVIDED" name="standard (v1.31.2, rbenv: 3.2.2) [gem]" level="application" />
52
- <orderEntry type="library" scope="PROVIDED" name="standard-custom (v1.0.2, rbenv: 3.2.2) [gem]" level="application" />
53
- <orderEntry type="library" scope="PROVIDED" name="standard-performance (v1.2.1, rbenv: 3.2.2) [gem]" level="application" />
54
- <orderEntry type="library" scope="PROVIDED" name="steep (v1.5.3, rbenv: 3.2.2) [gem]" level="application" />
55
- <orderEntry type="library" scope="PROVIDED" name="strscan (v3.0.7, rbenv: 3.2.2) [gem]" level="application" />
56
- <orderEntry type="library" scope="PROVIDED" name="terminal-table (v3.0.2, rbenv: 3.2.2) [gem]" level="application" />
57
- <orderEntry type="library" scope="PROVIDED" name="tzinfo (v2.0.6, rbenv: 3.2.2) [gem]" level="application" />
58
- <orderEntry type="library" scope="PROVIDED" name="unicode-display_width (v2.5.0, rbenv: 3.2.2) [gem]" level="application" />
42
+ <orderEntry type="library" scope="PROVIDED" name="rb-fsevent (v0.11.2, rbenv: 3.2.2, linguadata) [gem]" level="application" />
43
+ <orderEntry type="library" scope="PROVIDED" name="rb-inotify (v0.10.1, rbenv: 3.2.2, linguadata) [gem]" level="application" />
44
+ <orderEntry type="library" scope="PROVIDED" name="rbs (v3.2.2, rbenv: 3.2.2, linguadata) [gem]" level="application" />
45
+ <orderEntry type="library" scope="PROVIDED" name="regexp_parser (v2.8.2, rbenv: 3.2.2, linguadata) [gem]" level="application" />
46
+ <orderEntry type="library" scope="PROVIDED" name="rexml (v3.2.6, rbenv: 3.2.2, linguadata) [gem]" level="application" />
47
+ <orderEntry type="library" scope="PROVIDED" name="rspec (v3.12.0, rbenv: 3.2.2, linguadata) [gem]" level="application" />
48
+ <orderEntry type="library" scope="PROVIDED" name="rspec-core (v3.12.2, rbenv: 3.2.2, linguadata) [gem]" level="application" />
49
+ <orderEntry type="library" scope="PROVIDED" name="rspec-expectations (v3.12.3, rbenv: 3.2.2, linguadata) [gem]" level="application" />
50
+ <orderEntry type="library" scope="PROVIDED" name="rspec-mocks (v3.12.6, rbenv: 3.2.2, linguadata) [gem]" level="application" />
51
+ <orderEntry type="library" scope="PROVIDED" name="rspec-support (v3.12.1, rbenv: 3.2.2, linguadata) [gem]" level="application" />
52
+ <orderEntry type="library" scope="PROVIDED" name="rubocop (v1.56.4, rbenv: 3.2.2, linguadata) [gem]" level="application" />
53
+ <orderEntry type="library" scope="PROVIDED" name="rubocop-ast (v1.29.0, rbenv: 3.2.2, linguadata) [gem]" level="application" />
54
+ <orderEntry type="library" scope="PROVIDED" name="rubocop-performance (v1.19.1, rbenv: 3.2.2, linguadata) [gem]" level="application" />
55
+ <orderEntry type="library" scope="PROVIDED" name="ruby-progressbar (v1.13.0, rbenv: 3.2.2, linguadata) [gem]" level="application" />
56
+ <orderEntry type="library" scope="PROVIDED" name="sorbet-runtime (v0.5.11120, rbenv: 3.2.2, linguadata) [gem]" level="application" />
57
+ <orderEntry type="library" scope="PROVIDED" name="standard (v1.31.2, rbenv: 3.2.2, linguadata) [gem]" level="application" />
58
+ <orderEntry type="library" scope="PROVIDED" name="standard-custom (v1.0.2, rbenv: 3.2.2, linguadata) [gem]" level="application" />
59
+ <orderEntry type="library" scope="PROVIDED" name="standard-performance (v1.2.1, rbenv: 3.2.2, linguadata) [gem]" level="application" />
60
+ <orderEntry type="library" scope="PROVIDED" name="steep (v1.5.3, rbenv: 3.2.2, linguadata) [gem]" level="application" />
61
+ <orderEntry type="library" scope="PROVIDED" name="strscan (v3.0.7, rbenv: 3.2.2, linguadata) [gem]" level="application" />
62
+ <orderEntry type="library" scope="PROVIDED" name="terminal-table (v3.0.2, rbenv: 3.2.2, linguadata) [gem]" level="application" />
63
+ <orderEntry type="library" scope="PROVIDED" name="tzinfo (v2.0.6, rbenv: 3.2.2, linguadata) [gem]" level="application" />
64
+ <orderEntry type="library" scope="PROVIDED" name="unicode-display_width (v2.5.0, rbenv: 3.2.2, linguadata) [gem]" level="application" />
65
+ <orderEntry type="library" scope="PROVIDED" name="unparser (v0.6.10, rbenv: 3.2.2, linguadata) [gem]" level="application" />
59
66
  </component>
60
67
  <component name="RakeTasksCache">
61
68
  <option name="myRootTask">
62
69
  <RakeTaskImpl id="rake">
63
70
  <subtasks>
64
- <RakeTaskImpl description="Build linguadata-0.1.0.gem into the pkg directory" fullCommand="build" id="build" />
71
+ <RakeTaskImpl description="Build linguadata-0.1.2.gem into the pkg directory" fullCommand="build" id="build" />
65
72
  <RakeTaskImpl id="build">
66
73
  <subtasks>
67
- <RakeTaskImpl description="Generate SHA512 checksum if linguadata-0.1.0.gem into the checksums directory" fullCommand="build:checksum" id="checksum" />
74
+ <RakeTaskImpl description="Generate SHA512 checksum if linguadata-0.1.2.gem into the checksums directory" fullCommand="build:checksum" id="checksum" />
68
75
  </subtasks>
69
76
  </RakeTaskImpl>
70
77
  <RakeTaskImpl description="Remove any temporary products" fullCommand="clean" id="clean" />
71
78
  <RakeTaskImpl description="Remove any generated files" fullCommand="clobber" id="clobber" />
72
- <RakeTaskImpl description="Build and install linguadata-0.1.0.gem into system gems" fullCommand="install" id="install" />
79
+ <RakeTaskImpl description="Build and install linguadata-0.1.2.gem into system gems" fullCommand="install" id="install" />
73
80
  <RakeTaskImpl id="install">
74
81
  <subtasks>
75
- <RakeTaskImpl description="Build and install linguadata-0.1.0.gem into system gems without network access" fullCommand="install:local" id="local" />
82
+ <RakeTaskImpl description="Build and install linguadata-0.1.2.gem into system gems without network access" fullCommand="install:local" id="local" />
76
83
  </subtasks>
77
84
  </RakeTaskImpl>
78
- <RakeTaskImpl description="Create tag v0.1.0 and build and push linguadata-0.1.0.gem to TODO: Set to your gem server 'https://example.com'" fullCommand="release[remote]" id="release[remote]" />
85
+ <RakeTaskImpl description="Create tag v0.1.2 and build and push linguadata-0.1.2.gem to https://rubygems.org" fullCommand="release[remote]" id="release[remote]" />
79
86
  <RakeTaskImpl description="Run RSpec code examples" fullCommand="spec" id="spec" />
80
87
  <RakeTaskImpl description="Lint with the Standard Ruby style guide" fullCommand="standard" id="standard" />
81
88
  <RakeTaskImpl id="standard">
@@ -93,6 +100,7 @@
93
100
  <RakeTaskImpl description="" fullCommand="release:source_control_push" id="source_control_push" />
94
101
  </subtasks>
95
102
  </RakeTaskImpl>
103
+ <RakeTaskImpl description="" fullCommand="typecheck" id="typecheck" />
96
104
  </subtasks>
97
105
  </RakeTaskImpl>
98
106
  </option>
data/.idea/misc.xml ADDED
@@ -0,0 +1,6 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="RbsRubysigsRootManager">
4
+ <isRbsGemPresent>true</isRbsGemPresent>
5
+ </component>
6
+ </project>
data/Gemfile CHANGED
@@ -14,4 +14,9 @@ group :development do
14
14
  gem "rspec"
15
15
 
16
16
  gem "standard"
17
+
18
+ gem "mutant-rspec"
19
+ source 'https://oss:7Cp4pNQG3WbtluEGXnLC2QmucJ17q7Zw@gem.mutant.dev' do
20
+ gem 'mutant-license'
21
+ end
17
22
  end
data/Gemfile.lock CHANGED
@@ -1,7 +1,12 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- linguadata (0.1.2)
4
+ linguadata (0.1.3)
5
+
6
+ GEM
7
+ remote: https://oss:7Cp4pNQG3WbtluEGXnLC2QmucJ17q7Zw@gem.mutant.dev/
8
+ specs:
9
+ mutant-license (0.1.1.2.0526686720282068589522783053343094335875.0)
5
10
 
6
11
  GEM
7
12
  remote: https://rubygems.org/
@@ -37,6 +42,15 @@ GEM
37
42
  rb-inotify (~> 0.9, >= 0.9.10)
38
43
  logger (1.5.3)
39
44
  minitest (5.20.0)
45
+ mutant (0.11.24)
46
+ diff-lcs (~> 1.3)
47
+ parser (~> 3.2.2, >= 3.2.2.4)
48
+ regexp_parser (~> 2.8.2)
49
+ sorbet-runtime (~> 0.5.0)
50
+ unparser (~> 0.6.9)
51
+ mutant-rspec (0.11.24)
52
+ mutant (= 0.11.24)
53
+ rspec-core (>= 3.8.0, < 4.0.0)
40
54
  mutex_m (0.1.2)
41
55
  parallel (1.23.0)
42
56
  parser (3.2.2.4)
@@ -84,6 +98,7 @@ GEM
84
98
  ruby-progressbar (1.13.0)
85
99
  ruby2_keywords (0.0.5)
86
100
  securerandom (0.2.2)
101
+ sorbet-runtime (0.5.11120)
87
102
  standard (1.31.2)
88
103
  language_server-protocol (~> 3.17.0.2)
89
104
  lint_roller (~> 1.0)
@@ -117,6 +132,9 @@ GEM
117
132
  tzinfo (2.0.6)
118
133
  concurrent-ruby (~> 1.0)
119
134
  unicode-display_width (2.5.0)
135
+ unparser (0.6.10)
136
+ diff-lcs (~> 1.3)
137
+ parser (>= 3.2.2.4)
120
138
 
121
139
  PLATFORMS
122
140
  arm64-darwin-23
@@ -124,6 +142,8 @@ PLATFORMS
124
142
 
125
143
  DEPENDENCIES
126
144
  linguadata!
145
+ mutant-license!
146
+ mutant-rspec
127
147
  rake
128
148
  rbs
129
149
  rspec
data/README.md CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  Rust's `Result` and `Option` types for Ruby. Properly type annotated.
4
4
 
5
+ [![Gem Version](https://badge.fury.io/rb/linguadata.svg)](https://badge.fury.io/rb/linguadata)
6
+
5
7
  ## Installation
6
8
 
7
9
  Install the gem and add to the application's Gemfile by executing:
data/Rakefile CHANGED
@@ -11,4 +11,8 @@ task :typecheck do
11
11
  sh "steep check"
12
12
  end
13
13
 
14
- task default: %i[typecheck spec]
14
+ task :mutant do
15
+ sh "mutant run --require linguadata --integration rspec -- 'Linguadata*'"
16
+ end
17
+
18
+ task default: %i[typecheck spec mutant]
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Linguadata
4
- VERSION = "0.1.2"
4
+ VERSION = "0.1.3"
5
5
  end
data/lib/linguadata.rb CHANGED
@@ -5,21 +5,31 @@ require_relative "linguadata/version"
5
5
  module Linguadata
6
6
  module Option
7
7
  class Some < Data.define(:value)
8
- def unwrap = value
9
-
10
- def map(&block) = Some[block.call(value)]
8
+ alias_method :unwrap, :value
11
9
 
12
10
  def some? = true
13
11
 
14
12
  def none? = false
15
13
 
16
- def unwrap_or_else(&_block) = value
17
-
18
14
  def unwrap_or(_other) = value
19
15
 
20
- def and_then(&block) = block.call(value)
16
+ def unwrap_or_else(&block)
17
+ raise RequiredBlockError if block.nil?
18
+ value
19
+ end
20
+
21
+ def map(&block)
22
+ raise RequiredBlockError if block.nil?
23
+ Some[block.call(value)]
24
+ end
25
+
26
+ def and_then(&block)
27
+ raise RequiredBlockError if block.nil?
28
+ block.call(value)
29
+ end
21
30
 
22
31
  def filter(&block)
32
+ raise RequiredBlockError if block.nil?
23
33
  if block.call(value)
24
34
  self
25
35
  else
@@ -29,26 +39,38 @@ module Linguadata
29
39
  end
30
40
 
31
41
  class None < Data.define
32
- def value = raise "Cannot get value from None"
33
-
34
- def unwrap = value
42
+ def value = raise NoValueError
35
43
 
36
- def map(&_block) = self
44
+ alias_method :unwrap, :value
37
45
 
38
46
  def some? = false
39
47
 
40
48
  def none? = true
41
49
 
42
- def unwrap_or_else(&block) = block.call
43
-
44
50
  def unwrap_or(other) = other
45
51
 
46
- def and_then(&_block) = self
52
+ def unwrap_or_else(&block)
53
+ raise RequiredBlockError if block.nil?
54
+ block.call
55
+ end
47
56
 
48
- def filter(&_block) = self
57
+ def map(&block)
58
+ raise RequiredBlockError if block.nil?
59
+ self
60
+ end
61
+
62
+ def and_then(&block)
63
+ raise RequiredBlockError if block.nil?
64
+ self
65
+ end
66
+
67
+ def filter(&block)
68
+ raise RequiredBlockError if block.nil?
69
+ self
70
+ end
49
71
  end
50
72
 
51
- def from_nillable(value)
73
+ def self.from_nillable(value)
52
74
  case value
53
75
  in nil
54
76
  None[]
@@ -56,15 +78,20 @@ module Linguadata
56
78
  Some[value]
57
79
  end
58
80
  end
81
+
82
+ class NoValueError < StandardError
83
+ def initialize(_msg = "Attempted to access a value from 'None', which does not hold any value.")
84
+ super
85
+ end
86
+ end
59
87
  end
60
88
 
61
89
  module Result
62
90
  class Success < Data.define(:value)
63
- def error = raise "Cannot get error from Success"
91
+ def error = raise NoErrorInSuccessError
64
92
 
65
- def unwrap = value
66
-
67
- def unwrap_failure = error
93
+ alias_method :unwrap, :value
94
+ alias_method :unwrap_failure, :error
68
95
 
69
96
  def success? = true
70
97
 
@@ -74,21 +101,32 @@ module Linguadata
74
101
 
75
102
  def failure = Option::None[]
76
103
 
77
- def map(&block) = Success[block.call(value)]
104
+ def map(&block)
105
+ raise RequiredBlockError if block.nil?
106
+ Success[block.call(value)]
107
+ end
78
108
 
79
- def map_failure(&_block) = self
109
+ def map_failure(&block)
110
+ raise RequiredBlockError if block.nil?
111
+ self
112
+ end
80
113
 
81
- def or_else(&_block) = self
114
+ def and_then(&block)
115
+ raise RequiredBlockError if block.nil?
116
+ block.call(value)
117
+ end
82
118
 
83
- def and_then(&block) = block.call(value)
119
+ def or_else(&block)
120
+ raise RequiredBlockError if block.nil?
121
+ self
122
+ end
84
123
  end
85
124
 
86
125
  class Failure < Data.define(:error)
87
- def value = raise "Cannot get value from Failure"
126
+ def value = raise NoValueInFailureError
88
127
 
89
- def unwrap = value
90
-
91
- def unwrap_failure = error
128
+ alias_method :unwrap, :value
129
+ alias_method :unwrap_failure, :error
92
130
 
93
131
  def success? = false
94
132
 
@@ -98,13 +136,43 @@ module Linguadata
98
136
 
99
137
  def failure = Option::Some[error]
100
138
 
101
- def map(&_block) = self
139
+ def map(&block)
140
+ raise RequiredBlockError if block.nil?
141
+ self
142
+ end
102
143
 
103
- def map_failure(&block) = Failure[block.call(error)]
144
+ def map_failure(&block)
145
+ raise RequiredBlockError if block.nil?
146
+ Failure[block.call(error)]
147
+ end
148
+
149
+ def and_then(&block)
150
+ raise RequiredBlockError if block.nil?
151
+ self
152
+ end
104
153
 
105
- def or_else(&block) = block.call(error)
154
+ def or_else(&block)
155
+ raise RequiredBlockError if block.nil?
156
+ block.call(error)
157
+ end
158
+ end
159
+
160
+ class NoErrorInSuccessError < StandardError
161
+ def initialize(_msg = "Attempted to access an error from 'Success', which represents a successful outcome without errors.")
162
+ super
163
+ end
164
+ end
165
+
166
+ class NoValueInFailureError < StandardError
167
+ def initialize(_msg = "Attempted to access a value from 'Failure', which only contains an error.")
168
+ super
169
+ end
170
+ end
171
+ end
106
172
 
107
- def and_then(&_block) = self
173
+ class RequiredBlockError < ArgumentError
174
+ def initialize(_msg = "A block was required but not passed")
175
+ super
108
176
  end
109
177
  end
110
178
  end
data/sig/linguadata.rbs CHANGED
@@ -37,24 +37,27 @@ module Linguadata
37
37
  interface _Option[out T]
38
38
  def value: () -> T
39
39
 
40
- def unwrap: () -> T
40
+ alias unwrap value
41
41
 
42
42
  def some?: () -> bool
43
43
 
44
44
  def none?: () -> bool
45
45
 
46
- def map: [U] { (T) -> U } -> option[U]
47
-
48
46
  def unwrap_or: [U] (U) -> (T | U)
49
47
 
50
48
  def unwrap_or_else: [U] { () -> U } -> (T | U)
51
49
 
50
+ def map: [U] { (T) -> U } -> option[U]
51
+
52
52
  def and_then: [U] { (T) -> option[U] } -> option[U]
53
53
 
54
54
  def filter: { (T) -> bool } -> option[T]
55
55
  end
56
56
 
57
- def from_nillable: [T] (T? value) -> option[T]
57
+ def self.from_nillable: [T] (T? value) -> option[T]
58
+
59
+ class NoValueError < StandardError
60
+ end
58
61
  end
59
62
 
60
63
  module Result
@@ -81,9 +84,8 @@ module Linguadata
81
84
 
82
85
  def error: () -> E
83
86
 
84
- def unwrap: () -> T
85
-
86
- def unwrap_failure: () -> E
87
+ alias unwrap value
88
+ alias unwrap_failure error
87
89
 
88
90
  def success?: () -> bool
89
91
 
@@ -97,9 +99,18 @@ module Linguadata
97
99
 
98
100
  def map_failure: [F] { (E) -> F } -> result[T, F]
99
101
 
102
+ def and_then: [U, F] { (T) -> result[U, F] } -> result[U, E | F]
103
+
100
104
  def or_else: [U, F] { (E) -> result[U, F] } -> result[T | U, F]
105
+ end
101
106
 
102
- def and_then: [U, F] { (T) -> result[U, F] } -> result[U, E | F]
107
+ class NoErrorInSuccessError < StandardError
103
108
  end
109
+
110
+ class NoValueInFailureError < StandardError
111
+ end
112
+ end
113
+
114
+ class RequiredBlockError < StandardError
104
115
  end
105
116
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: linguadata
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Pechersky
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-10-24 00:00:00.000000000 Z
11
+ date: 2023-11-14 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Bringing Rust's Result and Option types to Ruby, using the Data class
14
14
  introduced in Ruby 3.2
@@ -22,6 +22,7 @@ files:
22
22
  - ".idea/copyright/profiles_settings.xml"
23
23
  - ".idea/inspectionProfiles/Project_Default.xml"
24
24
  - ".idea/linguadata.iml"
25
+ - ".idea/misc.xml"
25
26
  - ".idea/modules.xml"
26
27
  - ".idea/vcs.xml"
27
28
  - ".rspec"