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