dry-monads 1.3.5 → 1.4.0

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.
Files changed (63) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +140 -80
  3. data/LICENSE +1 -1
  4. data/README.md +5 -4
  5. data/dry-monads.gemspec +30 -30
  6. data/lib/dry-monads.rb +1 -1
  7. data/lib/dry/monads.rb +2 -2
  8. data/lib/dry/monads/all.rb +2 -2
  9. data/lib/dry/monads/constants.rb +1 -1
  10. data/lib/dry/monads/do.rb +52 -18
  11. data/lib/dry/monads/do/all.rb +36 -17
  12. data/lib/dry/monads/either.rb +7 -7
  13. data/lib/dry/monads/errors.rb +5 -2
  14. data/lib/dry/monads/lazy.rb +15 -4
  15. data/lib/dry/monads/list.rb +28 -28
  16. data/lib/dry/monads/maybe.rb +87 -19
  17. data/lib/dry/monads/registry.rb +10 -10
  18. data/lib/dry/monads/result.rb +38 -12
  19. data/lib/dry/monads/result/fixed.rb +33 -24
  20. data/lib/dry/monads/right_biased.rb +35 -16
  21. data/lib/dry/monads/task.rb +20 -20
  22. data/lib/dry/monads/transformer.rb +2 -1
  23. data/lib/dry/monads/traverse.rb +7 -1
  24. data/lib/dry/monads/try.rb +45 -12
  25. data/lib/dry/monads/unit.rb +6 -2
  26. data/lib/dry/monads/validated.rb +20 -16
  27. data/lib/dry/monads/version.rb +1 -1
  28. data/lib/json/add/dry/monads/maybe.rb +3 -3
  29. metadata +18 -69
  30. data/.codeclimate.yml +0 -12
  31. data/.github/ISSUE_TEMPLATE/----please-don-t-ask-for-support-via-issues.md +0 -10
  32. data/.github/ISSUE_TEMPLATE/---bug-report.md +0 -30
  33. data/.github/ISSUE_TEMPLATE/---feature-request.md +0 -18
  34. data/.github/workflows/ci.yml +0 -52
  35. data/.github/workflows/docsite.yml +0 -34
  36. data/.github/workflows/sync_configs.yml +0 -56
  37. data/.gitignore +0 -10
  38. data/.rspec +0 -4
  39. data/.rubocop.yml +0 -101
  40. data/.yardopts +0 -4
  41. data/CODE_OF_CONDUCT.md +0 -13
  42. data/CONTRIBUTING.md +0 -29
  43. data/Gemfile +0 -19
  44. data/Gemfile.devtools +0 -14
  45. data/Rakefile +0 -8
  46. data/bin/.gitkeep +0 -0
  47. data/bin/console +0 -17
  48. data/bin/setup +0 -7
  49. data/docsite/source/case-equality.html.md +0 -42
  50. data/docsite/source/do-notation.html.md +0 -207
  51. data/docsite/source/getting-started.html.md +0 -142
  52. data/docsite/source/index.html.md +0 -179
  53. data/docsite/source/list.html.md +0 -87
  54. data/docsite/source/maybe.html.md +0 -146
  55. data/docsite/source/pattern-matching.html.md +0 -68
  56. data/docsite/source/result.html.md +0 -190
  57. data/docsite/source/task.html.md +0 -126
  58. data/docsite/source/tracing-failures.html.md +0 -32
  59. data/docsite/source/try.html.md +0 -76
  60. data/docsite/source/unit.html.md +0 -36
  61. data/docsite/source/validated.html.md +0 -88
  62. data/log/.gitkeep +0 -0
  63. data/project.yml +0 -2
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'dry/monads/conversion_stubs'
4
- require 'dry/monads/constants'
5
- require 'dry/monads/right_biased'
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, 'Validated is not a monad because it would violate the monad laws'
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
- # @return [Validated::Valid]
90
- def apply(val = Undefined)
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
- 'Valid()'
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 == other.class && value! === other.value!
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) { yield }
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 == other.class && error === other.error
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, 'No value given' if !value.nil? && v.nil?
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, 'No value given' if !value.nil? && v.nil?
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::Valid]
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 'dry/monads/registry'
311
+ require "dry/monads/registry"
308
312
  register_mixin(:validated, Validated::Mixin)
309
313
  end
310
314
  end
@@ -3,6 +3,6 @@
3
3
  module Dry
4
4
  module Monads
5
5
  # Gem version
6
- VERSION = '1.3.5'
6
+ VERSION = "1.4.0"
7
7
  end
8
8
  end
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: false
2
2
 
3
- require 'json' unless defined?(::JSON::JSON_LOADED) && ::JSON::JSON_LOADED
3
+ require "json" unless defined?(::JSON::JSON_LOADED) && ::JSON::JSON_LOADED
4
4
 
5
- require 'dry/monads'
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('value'))
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.3.5
4
+ version: 1.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nikita Shilnikov
8
- autorequire:
9
- bindir: exe
8
+ autorequire:
9
+ bindir: bin
10
10
  cert_chain: []
11
- date: 2020-01-06 00:00:00.000000000 Z
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.4'
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.4'
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: '0.12'
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: '0.12'
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
- - log/.gitkeep
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
- post_install_message:
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.4.0
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.1.2
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,12 +0,0 @@
1
- # this file is managed by dry-rb/devtools project
2
-
3
- version: "2"
4
-
5
- exclude_patterns:
6
- - "benchmarks/"
7
- - "examples/"
8
- - "spec/"
9
-
10
- plugins:
11
- rubocop:
12
- enabled: true
@@ -1,10 +0,0 @@
1
- ---
2
- name: "⚠️ Please don't ask for support via issues"
3
- about: See CONTRIBUTING.md for more information
4
- title: ''
5
- labels: ''
6
- assignees: ''
7
-
8
- ---
9
-
10
-
@@ -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.
@@ -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