dry-monads 1.3.5 → 1.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +140 -80
- data/LICENSE +1 -1
- data/README.md +5 -4
- data/dry-monads.gemspec +30 -30
- data/lib/dry-monads.rb +1 -1
- data/lib/dry/monads.rb +2 -2
- data/lib/dry/monads/all.rb +2 -2
- data/lib/dry/monads/constants.rb +1 -1
- data/lib/dry/monads/do.rb +52 -18
- data/lib/dry/monads/do/all.rb +36 -17
- data/lib/dry/monads/either.rb +7 -7
- data/lib/dry/monads/errors.rb +5 -2
- data/lib/dry/monads/lazy.rb +15 -4
- data/lib/dry/monads/list.rb +28 -28
- data/lib/dry/monads/maybe.rb +87 -19
- data/lib/dry/monads/registry.rb +10 -10
- data/lib/dry/monads/result.rb +38 -12
- data/lib/dry/monads/result/fixed.rb +33 -24
- data/lib/dry/monads/right_biased.rb +35 -16
- data/lib/dry/monads/task.rb +20 -20
- data/lib/dry/monads/transformer.rb +2 -1
- data/lib/dry/monads/traverse.rb +7 -1
- data/lib/dry/monads/try.rb +45 -12
- data/lib/dry/monads/unit.rb +6 -2
- data/lib/dry/monads/validated.rb +20 -16
- data/lib/dry/monads/version.rb +1 -1
- data/lib/json/add/dry/monads/maybe.rb +3 -3
- metadata +18 -69
- data/.codeclimate.yml +0 -12
- data/.github/ISSUE_TEMPLATE/----please-don-t-ask-for-support-via-issues.md +0 -10
- data/.github/ISSUE_TEMPLATE/---bug-report.md +0 -30
- data/.github/ISSUE_TEMPLATE/---feature-request.md +0 -18
- data/.github/workflows/ci.yml +0 -52
- data/.github/workflows/docsite.yml +0 -34
- data/.github/workflows/sync_configs.yml +0 -56
- data/.gitignore +0 -10
- data/.rspec +0 -4
- data/.rubocop.yml +0 -101
- data/.yardopts +0 -4
- data/CODE_OF_CONDUCT.md +0 -13
- data/CONTRIBUTING.md +0 -29
- data/Gemfile +0 -19
- data/Gemfile.devtools +0 -14
- data/Rakefile +0 -8
- data/bin/.gitkeep +0 -0
- data/bin/console +0 -17
- data/bin/setup +0 -7
- data/docsite/source/case-equality.html.md +0 -42
- data/docsite/source/do-notation.html.md +0 -207
- data/docsite/source/getting-started.html.md +0 -142
- data/docsite/source/index.html.md +0 -179
- data/docsite/source/list.html.md +0 -87
- data/docsite/source/maybe.html.md +0 -146
- data/docsite/source/pattern-matching.html.md +0 -68
- data/docsite/source/result.html.md +0 -190
- data/docsite/source/task.html.md +0 -126
- data/docsite/source/tracing-failures.html.md +0 -32
- data/docsite/source/try.html.md +0 -76
- data/docsite/source/unit.html.md +0 -36
- data/docsite/source/validated.html.md +0 -88
- data/log/.gitkeep +0 -0
- data/project.yml +0 -2
data/lib/dry/monads/validated.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
3
|
+
require "dry/monads/conversion_stubs"
|
4
|
+
require "dry/monads/constants"
|
5
|
+
require "dry/monads/right_biased"
|
6
6
|
|
7
7
|
module Dry
|
8
8
|
module Monads
|
@@ -51,7 +51,8 @@ module Dry
|
|
51
51
|
#
|
52
52
|
def bind(*)
|
53
53
|
# See https://typelevel.org/cats/datatypes/validated.html for details on why
|
54
|
-
raise NotImplementedError,
|
54
|
+
raise NotImplementedError,
|
55
|
+
"Validated is not a monad because it would violate the monad laws"
|
55
56
|
end
|
56
57
|
|
57
58
|
# Valid result
|
@@ -60,6 +61,8 @@ module Dry
|
|
60
61
|
include Dry::Equalizer(:value!)
|
61
62
|
|
62
63
|
def initialize(value)
|
64
|
+
super()
|
65
|
+
|
63
66
|
@value = value
|
64
67
|
end
|
65
68
|
|
@@ -86,9 +89,8 @@ module Dry
|
|
86
89
|
# @yieldreturn [Validated::Valid,Validated::Invalid]
|
87
90
|
# @return [Validated::Valid,Validated::Invalid]
|
88
91
|
#
|
89
|
-
|
90
|
-
|
91
|
-
Undefined.default(val) { yield }.fmap(Curry.(value!))
|
92
|
+
def apply(val = Undefined, &block)
|
93
|
+
Undefined.default(val, &block).fmap(Curry.(value!))
|
92
94
|
end
|
93
95
|
|
94
96
|
# Lifts a block/proc over Valid
|
@@ -123,7 +125,7 @@ module Dry
|
|
123
125
|
# @return [String]
|
124
126
|
def inspect
|
125
127
|
if Unit.equal?(@value)
|
126
|
-
|
128
|
+
"Valid()"
|
127
129
|
else
|
128
130
|
"Valid(#{@value.inspect})"
|
129
131
|
end
|
@@ -133,7 +135,7 @@ module Dry
|
|
133
135
|
# @param other [Object]
|
134
136
|
# @return [Boolean]
|
135
137
|
def ===(other)
|
136
|
-
self.class
|
138
|
+
other.instance_of?(self.class) && value! === other.value!
|
137
139
|
end
|
138
140
|
end
|
139
141
|
|
@@ -154,6 +156,8 @@ module Dry
|
|
154
156
|
include Dry::Equalizer(:error)
|
155
157
|
|
156
158
|
def initialize(error, trace = RightBiased::Left.trace_caller)
|
159
|
+
super()
|
160
|
+
|
157
161
|
@error = error
|
158
162
|
@trace = trace
|
159
163
|
end
|
@@ -168,9 +172,9 @@ module Dry
|
|
168
172
|
# @yieldreturn [Validated::Valid,Validated::Invalid]
|
169
173
|
# @return [Validated::Invalid]
|
170
174
|
#
|
171
|
-
def apply(val = Undefined)
|
175
|
+
def apply(val = Undefined, &block)
|
172
176
|
Undefined
|
173
|
-
.default(val)
|
177
|
+
.default(val, &block)
|
174
178
|
.alt_map { |v| @error + v }
|
175
179
|
.fmap { return self }
|
176
180
|
end
|
@@ -220,7 +224,7 @@ module Dry
|
|
220
224
|
# @param other [Object]
|
221
225
|
# @return [Boolean]
|
222
226
|
def ===(other)
|
223
|
-
self.class
|
227
|
+
other.instance_of?(self.class) && error === other.error
|
224
228
|
end
|
225
229
|
end
|
226
230
|
|
@@ -250,7 +254,7 @@ module Dry
|
|
250
254
|
#
|
251
255
|
def Valid(value = Undefined, &block)
|
252
256
|
v = Undefined.default(value, block)
|
253
|
-
raise ArgumentError,
|
257
|
+
raise ArgumentError, "No value given" if !value.nil? && v.nil?
|
254
258
|
|
255
259
|
Valid.new(v)
|
256
260
|
end
|
@@ -267,7 +271,7 @@ module Dry
|
|
267
271
|
#
|
268
272
|
def Invalid(value = Undefined, &block)
|
269
273
|
v = Undefined.default(value, block)
|
270
|
-
raise ArgumentError,
|
274
|
+
raise ArgumentError, "No value given" if !value.nil? && v.nil?
|
271
275
|
|
272
276
|
Invalid.new(v, RightBiased::Left.trace_caller)
|
273
277
|
end
|
@@ -297,14 +301,14 @@ module Dry
|
|
297
301
|
class Failure < Result
|
298
302
|
# Transforms to Validated
|
299
303
|
#
|
300
|
-
# @return [Validated::
|
304
|
+
# @return [Validated::Invalid]
|
301
305
|
def to_validated
|
302
306
|
Validated::Invalid.new(failure, trace)
|
303
307
|
end
|
304
308
|
end
|
305
309
|
end
|
306
310
|
|
307
|
-
require
|
311
|
+
require "dry/monads/registry"
|
308
312
|
register_mixin(:validated, Validated::Mixin)
|
309
313
|
end
|
310
314
|
end
|
data/lib/dry/monads/version.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
# frozen_string_literal: false
|
2
2
|
|
3
|
-
require
|
3
|
+
require "json" unless defined?(::JSON::JSON_LOADED) && ::JSON::JSON_LOADED
|
4
4
|
|
5
|
-
require
|
5
|
+
require "dry/monads"
|
6
6
|
|
7
7
|
# Inspired by standard library implementation
|
8
8
|
# for Time serialization/deserialization see (json/lib/json/add/time.rb)
|
@@ -12,7 +12,7 @@ module Dry
|
|
12
12
|
class Maybe
|
13
13
|
# Deserializes JSON string by using Dry::Monads::Maybe#lift method
|
14
14
|
def self.json_create(serialized)
|
15
|
-
coerce(serialized.fetch(
|
15
|
+
coerce(serialized.fetch("value"))
|
16
16
|
end
|
17
17
|
|
18
18
|
# Returns a hash, that will be turned into a JSON object and represent this
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dry-monads
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nikita Shilnikov
|
8
|
-
autorequire:
|
9
|
-
bindir:
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-07-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: concurrent-ruby
|
@@ -30,34 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '0.
|
34
|
-
- - ">="
|
35
|
-
- !ruby/object:Gem::Version
|
36
|
-
version: 0.4.4
|
33
|
+
version: '0.7'
|
37
34
|
type: :runtime
|
38
35
|
prerelease: false
|
39
36
|
version_requirements: !ruby/object:Gem::Requirement
|
40
37
|
requirements:
|
41
38
|
- - "~>"
|
42
39
|
- !ruby/object:Gem::Version
|
43
|
-
version: '0.
|
44
|
-
- - ">="
|
45
|
-
- !ruby/object:Gem::Version
|
46
|
-
version: 0.4.4
|
47
|
-
- !ruby/object:Gem::Dependency
|
48
|
-
name: dry-equalizer
|
49
|
-
requirement: !ruby/object:Gem::Requirement
|
50
|
-
requirements:
|
51
|
-
- - ">="
|
52
|
-
- !ruby/object:Gem::Version
|
53
|
-
version: '0'
|
54
|
-
type: :runtime
|
55
|
-
prerelease: false
|
56
|
-
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
requirements:
|
58
|
-
- - ">="
|
59
|
-
- !ruby/object:Gem::Version
|
60
|
-
version: '0'
|
40
|
+
version: '0.7'
|
61
41
|
- !ruby/object:Gem::Dependency
|
62
42
|
name: bundler
|
63
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -78,14 +58,14 @@ dependencies:
|
|
78
58
|
requirements:
|
79
59
|
- - ">="
|
80
60
|
- !ruby/object:Gem::Version
|
81
|
-
version:
|
61
|
+
version: 0.1.2
|
82
62
|
type: :development
|
83
63
|
prerelease: false
|
84
64
|
version_requirements: !ruby/object:Gem::Requirement
|
85
65
|
requirements:
|
86
66
|
- - ">="
|
87
67
|
- !ruby/object:Gem::Version
|
88
|
-
version:
|
68
|
+
version: 0.1.2
|
89
69
|
- !ruby/object:Gem::Dependency
|
90
70
|
name: rake
|
91
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -114,48 +94,16 @@ dependencies:
|
|
114
94
|
- - ">="
|
115
95
|
- !ruby/object:Gem::Version
|
116
96
|
version: '0'
|
117
|
-
description: Common monads for Ruby
|
97
|
+
description: Common monads for Ruby
|
118
98
|
email:
|
119
99
|
- fg@flashgordon.ru
|
120
100
|
executables: []
|
121
101
|
extensions: []
|
122
102
|
extra_rdoc_files: []
|
123
103
|
files:
|
124
|
-
- ".codeclimate.yml"
|
125
|
-
- ".github/ISSUE_TEMPLATE/----please-don-t-ask-for-support-via-issues.md"
|
126
|
-
- ".github/ISSUE_TEMPLATE/---bug-report.md"
|
127
|
-
- ".github/ISSUE_TEMPLATE/---feature-request.md"
|
128
|
-
- ".github/workflows/ci.yml"
|
129
|
-
- ".github/workflows/docsite.yml"
|
130
|
-
- ".github/workflows/sync_configs.yml"
|
131
|
-
- ".gitignore"
|
132
|
-
- ".rspec"
|
133
|
-
- ".rubocop.yml"
|
134
|
-
- ".yardopts"
|
135
104
|
- CHANGELOG.md
|
136
|
-
- CODE_OF_CONDUCT.md
|
137
|
-
- CONTRIBUTING.md
|
138
|
-
- Gemfile
|
139
|
-
- Gemfile.devtools
|
140
105
|
- LICENSE
|
141
106
|
- README.md
|
142
|
-
- Rakefile
|
143
|
-
- bin/.gitkeep
|
144
|
-
- bin/console
|
145
|
-
- bin/setup
|
146
|
-
- docsite/source/case-equality.html.md
|
147
|
-
- docsite/source/do-notation.html.md
|
148
|
-
- docsite/source/getting-started.html.md
|
149
|
-
- docsite/source/index.html.md
|
150
|
-
- docsite/source/list.html.md
|
151
|
-
- docsite/source/maybe.html.md
|
152
|
-
- docsite/source/pattern-matching.html.md
|
153
|
-
- docsite/source/result.html.md
|
154
|
-
- docsite/source/task.html.md
|
155
|
-
- docsite/source/tracing-failures.html.md
|
156
|
-
- docsite/source/try.html.md
|
157
|
-
- docsite/source/unit.html.md
|
158
|
-
- docsite/source/validated.html.md
|
159
107
|
- dry-monads.gemspec
|
160
108
|
- lib/dry-monads.rb
|
161
109
|
- lib/dry/monads.rb
|
@@ -183,14 +131,15 @@ files:
|
|
183
131
|
- lib/dry/monads/validated.rb
|
184
132
|
- lib/dry/monads/version.rb
|
185
133
|
- lib/json/add/dry/monads/maybe.rb
|
186
|
-
-
|
187
|
-
- project.yml
|
188
|
-
homepage: https://github.com/dry-rb/dry-monads
|
134
|
+
homepage: https://dry-rb.org/gems/dry-monads
|
189
135
|
licenses:
|
190
136
|
- MIT
|
191
137
|
metadata:
|
192
138
|
allowed_push_host: https://rubygems.org
|
193
|
-
|
139
|
+
changelog_uri: https://github.com/dry-rb/dry-monads/blob/master/CHANGELOG.md
|
140
|
+
source_code_uri: https://github.com/dry-rb/dry-monads
|
141
|
+
bug_tracker_uri: https://github.com/dry-rb/dry-monads/issues
|
142
|
+
post_install_message:
|
194
143
|
rdoc_options: []
|
195
144
|
require_paths:
|
196
145
|
- lib
|
@@ -198,15 +147,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
198
147
|
requirements:
|
199
148
|
- - ">="
|
200
149
|
- !ruby/object:Gem::Version
|
201
|
-
version: 2.
|
150
|
+
version: 2.6.0
|
202
151
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
203
152
|
requirements:
|
204
153
|
- - ">="
|
205
154
|
- !ruby/object:Gem::Version
|
206
155
|
version: '0'
|
207
156
|
requirements: []
|
208
|
-
rubygems_version: 3.
|
209
|
-
signing_key:
|
157
|
+
rubygems_version: 3.2.22
|
158
|
+
signing_key:
|
210
159
|
specification_version: 4
|
211
|
-
summary: Common monads for Ruby
|
160
|
+
summary: Common monads for Ruby
|
212
161
|
test_files: []
|
data/.codeclimate.yml
DELETED
@@ -1,30 +0,0 @@
|
|
1
|
-
---
|
2
|
-
name: "\U0001F41B Bug report"
|
3
|
-
about: See CONTRIBUTING.md for more information
|
4
|
-
title: ''
|
5
|
-
labels: bug
|
6
|
-
assignees: ''
|
7
|
-
|
8
|
-
---
|
9
|
-
|
10
|
-
**Before you submit this: WE ONLY ACCEPT BUG REPORTS AND FEATURE REQUESTS**
|
11
|
-
|
12
|
-
For more information see `CONTRIBUTING.md`.
|
13
|
-
|
14
|
-
**Describe the bug**
|
15
|
-
|
16
|
-
A clear and concise description of what the bug is.
|
17
|
-
|
18
|
-
**To Reproduce**
|
19
|
-
|
20
|
-
Provide detailed steps to reproduce, an executable script would be best.
|
21
|
-
|
22
|
-
**Expected behavior**
|
23
|
-
|
24
|
-
A clear and concise description of what you expected to happen.
|
25
|
-
|
26
|
-
**Your environment**
|
27
|
-
|
28
|
-
- Affects my production application: **YES/NO**
|
29
|
-
- Ruby version: ...
|
30
|
-
- OS: ...
|
@@ -1,18 +0,0 @@
|
|
1
|
-
---
|
2
|
-
name: "\U0001F6E0 Feature request"
|
3
|
-
about: See CONTRIBUTING.md for more information
|
4
|
-
title: ''
|
5
|
-
labels: feature
|
6
|
-
assignees: ''
|
7
|
-
|
8
|
-
---
|
9
|
-
|
10
|
-
Summary of what the feature is supposed to do.
|
11
|
-
|
12
|
-
## Examples
|
13
|
-
|
14
|
-
Code examples showing how the feature could be used.
|
15
|
-
|
16
|
-
## Resources
|
17
|
-
|
18
|
-
Additional information, like a link to the discussion forum thread where the feature was discussed etc.
|
data/.github/workflows/ci.yml
DELETED
@@ -1,52 +0,0 @@
|
|
1
|
-
# this file is managed by dry-rb/devtools project
|
2
|
-
|
3
|
-
name: ci
|
4
|
-
|
5
|
-
on:
|
6
|
-
push:
|
7
|
-
paths:
|
8
|
-
- .github/workflows/ci.yml
|
9
|
-
- lib/**
|
10
|
-
- spec/**
|
11
|
-
- Rakefile
|
12
|
-
- Gemfile
|
13
|
-
- Gemfile.devtools
|
14
|
-
- "*.gemspec"
|
15
|
-
- ".rubocop.yml"
|
16
|
-
pull_request:
|
17
|
-
branches:
|
18
|
-
- master
|
19
|
-
|
20
|
-
jobs:
|
21
|
-
tests:
|
22
|
-
runs-on: ubuntu-latest
|
23
|
-
strategy:
|
24
|
-
fail-fast: false
|
25
|
-
matrix:
|
26
|
-
ruby:
|
27
|
-
- "2.7"
|
28
|
-
- "2.6"
|
29
|
-
- "2.5"
|
30
|
-
- "2.4"
|
31
|
-
- "jruby"
|
32
|
-
include:
|
33
|
-
- ruby: "2.6"
|
34
|
-
coverage: "true"
|
35
|
-
steps:
|
36
|
-
- uses: actions/checkout@v1
|
37
|
-
- name: Set up Ruby
|
38
|
-
uses: eregon/use-ruby-action@master
|
39
|
-
with:
|
40
|
-
ruby-version: ${{matrix.ruby}}
|
41
|
-
- name: Install latest bundler
|
42
|
-
run: |
|
43
|
-
gem install bundler
|
44
|
-
bundle config set without 'tools benchmarks docs'
|
45
|
-
- name: Bundle install
|
46
|
-
run: bundle install --jobs 4 --retry 3
|
47
|
-
- name: Run all tests
|
48
|
-
env:
|
49
|
-
COVERAGE: ${{matrix.coverage}}
|
50
|
-
CODACY_RUN_LOCAL: true
|
51
|
-
CODACY_PROJECT_TOKEN: ${{secrets.CODACY_PROJECT_TOKEN}}
|
52
|
-
run: bundle exec rake
|
@@ -1,34 +0,0 @@
|
|
1
|
-
# this file is managed by dry-rb/devtools project
|
2
|
-
|
3
|
-
name: docsite
|
4
|
-
|
5
|
-
on:
|
6
|
-
push:
|
7
|
-
paths:
|
8
|
-
- docsite/**
|
9
|
-
- .github/workflows/docsite.yml
|
10
|
-
branches:
|
11
|
-
- master
|
12
|
-
- release-**
|
13
|
-
tags:
|
14
|
-
|
15
|
-
jobs:
|
16
|
-
update-docs:
|
17
|
-
runs-on: ubuntu-latest
|
18
|
-
steps:
|
19
|
-
- uses: actions/checkout@v1
|
20
|
-
- name: Set up Ruby
|
21
|
-
uses: actions/setup-ruby@v1
|
22
|
-
with:
|
23
|
-
ruby-version: "2.6.x"
|
24
|
-
- name: Install dependencies
|
25
|
-
run: |
|
26
|
-
gem install bundler
|
27
|
-
bundle install --jobs 4 --retry 3 --without benchmarks sql
|
28
|
-
- name: Symlink ossy
|
29
|
-
run: mkdir -p bin && ln -sf "$(bundle show ossy)/bin/ossy" bin/ossy
|
30
|
-
- name: Trigger dry-rb.org deploy
|
31
|
-
env:
|
32
|
-
GITHUB_LOGIN: dry-bot
|
33
|
-
GITHUB_TOKEN: ${{ secrets.GH_PAT }}
|
34
|
-
run: bin/ossy github workflow dry-rb/dry-rb.org ci
|