dry-types 1.2.2 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (58) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +306 -225
  3. data/LICENSE +1 -1
  4. data/README.md +14 -12
  5. data/dry-types.gemspec +27 -31
  6. data/lib/dry/types.rb +0 -9
  7. data/lib/dry/types/builder.rb +4 -0
  8. data/lib/dry/types/constructor/function.rb +17 -31
  9. data/lib/dry/types/core.rb +3 -1
  10. data/lib/dry/types/decorator.rb +0 -7
  11. data/lib/dry/types/extensions/maybe.rb +14 -14
  12. data/lib/dry/types/lax.rb +1 -4
  13. data/lib/dry/types/meta.rb +2 -2
  14. data/lib/dry/types/params.rb +1 -0
  15. data/lib/dry/types/result.rb +2 -2
  16. data/lib/dry/types/schema.rb +23 -2
  17. data/lib/dry/types/schema/key.rb +11 -2
  18. data/lib/dry/types/spec/types.rb +11 -0
  19. data/lib/dry/types/sum.rb +2 -2
  20. data/lib/dry/types/version.rb +1 -1
  21. metadata +21 -59
  22. data/.codeclimate.yml +0 -12
  23. data/.github/ISSUE_TEMPLATE/----please-don-t-ask-for-support-via-issues.md +0 -10
  24. data/.github/ISSUE_TEMPLATE/---bug-report.md +0 -30
  25. data/.github/ISSUE_TEMPLATE/---feature-request.md +0 -18
  26. data/.github/workflows/custom_ci.yml +0 -76
  27. data/.github/workflows/docsite.yml +0 -34
  28. data/.github/workflows/sync_configs.yml +0 -34
  29. data/.gitignore +0 -11
  30. data/.rspec +0 -4
  31. data/.rubocop.yml +0 -92
  32. data/.yardopts +0 -9
  33. data/CODE_OF_CONDUCT.md +0 -13
  34. data/CONTRIBUTING.md +0 -29
  35. data/Gemfile +0 -34
  36. data/Rakefile +0 -22
  37. data/benchmarks/hash_schemas.rb +0 -55
  38. data/benchmarks/lax_schema.rb +0 -15
  39. data/benchmarks/profile_invalid_input.rb +0 -15
  40. data/benchmarks/profile_lax_schema_valid.rb +0 -16
  41. data/benchmarks/profile_valid_input.rb +0 -15
  42. data/benchmarks/schema_valid_vs_invalid.rb +0 -21
  43. data/benchmarks/setup.rb +0 -17
  44. data/docsite/source/array-with-member.html.md +0 -13
  45. data/docsite/source/built-in-types.html.md +0 -116
  46. data/docsite/source/constraints.html.md +0 -31
  47. data/docsite/source/custom-types.html.md +0 -93
  48. data/docsite/source/default-values.html.md +0 -91
  49. data/docsite/source/enum.html.md +0 -69
  50. data/docsite/source/extensions.html.md +0 -15
  51. data/docsite/source/extensions/maybe.html.md +0 -57
  52. data/docsite/source/extensions/monads.html.md +0 -61
  53. data/docsite/source/getting-started.html.md +0 -57
  54. data/docsite/source/hash-schemas.html.md +0 -169
  55. data/docsite/source/index.html.md +0 -156
  56. data/docsite/source/map.html.md +0 -17
  57. data/docsite/source/optional-values.html.md +0 -35
  58. data/docsite/source/sum.html.md +0 -21
@@ -103,6 +103,15 @@ module Dry
103
103
  __new__(type.lax).required(false)
104
104
  end
105
105
 
106
+ # Make wrapped type optional
107
+ #
108
+ # @return [Key]
109
+ #
110
+ # @api public
111
+ def optional
112
+ __new__(type.optional)
113
+ end
114
+
106
115
  # Dump to internal AST representation
107
116
  #
108
117
  # @return [Array]
@@ -122,8 +131,8 @@ module Dry
122
131
  # @see Dry::Types::Meta#meta
123
132
  #
124
133
  # @api public
125
- def meta(data = nil)
126
- if data.nil? || !data.key?(:omittable)
134
+ def meta(data = Undefined)
135
+ if Undefined.equal?(data) || !data.key?(:omittable)
127
136
  super
128
137
  else
129
138
  self.class.warn(
@@ -139,3 +139,14 @@ RSpec.shared_examples_for 'a nominal type' do |inputs: Object.new|
139
139
  end
140
140
  end
141
141
  end
142
+
143
+ RSpec.shared_examples_for 'a composable constructor' do
144
+ describe '#constructor' do
145
+ it 'has aliases for composition' do
146
+ expect(type.method(:append)).to eql(type.method(:constructor))
147
+ expect(type.method(:prepend)).to eql(type.method(:constructor))
148
+ expect(type.method(:<<)).to eql(type.method(:constructor))
149
+ expect(type.method(:>>)).to eql(type.method(:constructor))
150
+ end
151
+ end
152
+ end
data/lib/dry/types/sum.rb CHANGED
@@ -142,8 +142,8 @@ module Dry
142
142
  # @see [Meta#meta]
143
143
  #
144
144
  # @api public
145
- def meta(data = nil)
146
- if data.nil?
145
+ def meta(data = Undefined)
146
+ if Undefined.equal?(data)
147
147
  optional? ? right.meta : super
148
148
  elsif optional?
149
149
  self.class.new(left, right.meta(data), **options)
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Dry
4
4
  module Types
5
- VERSION = '1.2.2'
5
+ VERSION = '1.3.0'
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dry-types
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.2
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Piotr Solnica
8
8
  autorequire:
9
- bindir: exe
9
+ bindir: bin
10
10
  cert_chain: []
11
- date: 2019-12-14 00:00:00.000000000 Z
11
+ date: 2020-02-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby
@@ -132,104 +132,67 @@ dependencies:
132
132
  requirements:
133
133
  - - "~>"
134
134
  - !ruby/object:Gem::Version
135
- version: '0.2'
135
+ version: '1.0'
136
136
  type: :development
137
137
  prerelease: false
138
138
  version_requirements: !ruby/object:Gem::Requirement
139
139
  requirements:
140
140
  - - "~>"
141
141
  - !ruby/object:Gem::Version
142
- version: '0.2'
142
+ version: '1.0'
143
143
  - !ruby/object:Gem::Dependency
144
144
  name: rake
145
145
  requirement: !ruby/object:Gem::Requirement
146
146
  requirements:
147
- - - "~>"
147
+ - - ">="
148
148
  - !ruby/object:Gem::Version
149
- version: '11.0'
149
+ version: '0'
150
150
  type: :development
151
151
  prerelease: false
152
152
  version_requirements: !ruby/object:Gem::Requirement
153
153
  requirements:
154
- - - "~>"
154
+ - - ">="
155
155
  - !ruby/object:Gem::Version
156
- version: '11.0'
156
+ version: '0'
157
157
  - !ruby/object:Gem::Dependency
158
158
  name: rspec
159
159
  requirement: !ruby/object:Gem::Requirement
160
160
  requirements:
161
- - - "~>"
161
+ - - ">="
162
162
  - !ruby/object:Gem::Version
163
- version: '3.3'
163
+ version: '0'
164
164
  type: :development
165
165
  prerelease: false
166
166
  version_requirements: !ruby/object:Gem::Requirement
167
167
  requirements:
168
- - - "~>"
168
+ - - ">="
169
169
  - !ruby/object:Gem::Version
170
- version: '3.3'
170
+ version: '0'
171
171
  - !ruby/object:Gem::Dependency
172
172
  name: yard
173
173
  requirement: !ruby/object:Gem::Requirement
174
174
  requirements:
175
- - - "~>"
175
+ - - ">="
176
176
  - !ruby/object:Gem::Version
177
- version: 0.9.5
177
+ version: '0'
178
178
  type: :development
179
179
  prerelease: false
180
180
  version_requirements: !ruby/object:Gem::Requirement
181
181
  requirements:
182
- - - "~>"
182
+ - - ">="
183
183
  - !ruby/object:Gem::Version
184
- version: 0.9.5
184
+ version: '0'
185
185
  description: Type system for Ruby supporting coercions, constraints and complex types
186
- like structs, value objects, enums etc.
186
+ like structs, value objects, enums etc
187
187
  email:
188
188
  - piotr.solnica@gmail.com
189
189
  executables: []
190
190
  extensions: []
191
191
  extra_rdoc_files: []
192
192
  files:
193
- - ".codeclimate.yml"
194
- - ".github/ISSUE_TEMPLATE/----please-don-t-ask-for-support-via-issues.md"
195
- - ".github/ISSUE_TEMPLATE/---bug-report.md"
196
- - ".github/ISSUE_TEMPLATE/---feature-request.md"
197
- - ".github/workflows/custom_ci.yml"
198
- - ".github/workflows/docsite.yml"
199
- - ".github/workflows/sync_configs.yml"
200
- - ".gitignore"
201
- - ".rspec"
202
- - ".rubocop.yml"
203
- - ".yardopts"
204
193
  - CHANGELOG.md
205
- - CODE_OF_CONDUCT.md
206
- - CONTRIBUTING.md
207
- - Gemfile
208
194
  - LICENSE
209
195
  - README.md
210
- - Rakefile
211
- - benchmarks/hash_schemas.rb
212
- - benchmarks/lax_schema.rb
213
- - benchmarks/profile_invalid_input.rb
214
- - benchmarks/profile_lax_schema_valid.rb
215
- - benchmarks/profile_valid_input.rb
216
- - benchmarks/schema_valid_vs_invalid.rb
217
- - benchmarks/setup.rb
218
- - docsite/source/array-with-member.html.md
219
- - docsite/source/built-in-types.html.md
220
- - docsite/source/constraints.html.md
221
- - docsite/source/custom-types.html.md
222
- - docsite/source/default-values.html.md
223
- - docsite/source/enum.html.md
224
- - docsite/source/extensions.html.md
225
- - docsite/source/extensions/maybe.html.md
226
- - docsite/source/extensions/monads.html.md
227
- - docsite/source/getting-started.html.md
228
- - docsite/source/hash-schemas.html.md
229
- - docsite/source/index.html.md
230
- - docsite/source/map.html.md
231
- - docsite/source/optional-values.html.md
232
- - docsite/source/sum.html.md
233
196
  - dry-types.gemspec
234
197
  - lib/dry-types.rb
235
198
  - lib/dry/types.rb
@@ -282,8 +245,7 @@ files:
282
245
  - lib/dry/types/sum.rb
283
246
  - lib/dry/types/type.rb
284
247
  - lib/dry/types/version.rb
285
- - log/.gitkeep
286
- homepage: https://github.com/dry-rb/dry-types
248
+ homepage: https://dry-rb.org/gems/dry-types
287
249
  licenses:
288
250
  - MIT
289
251
  metadata:
@@ -306,9 +268,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
306
268
  - !ruby/object:Gem::Version
307
269
  version: '0'
308
270
  requirements: []
309
- rubygems_version: 3.0.6
271
+ rubygems_version: 3.0.3
310
272
  signing_key:
311
273
  specification_version: 4
312
274
  summary: Type system for Ruby supporting coercions, constraints and complex types
313
- like structs, value objects, enums etc.
275
+ like structs, value objects, enums etc
314
276
  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,76 +0,0 @@
1
- name: ci
2
-
3
- on:
4
- push:
5
- paths:
6
- - .github/workflows/custom_ci.yml
7
- - lib/**
8
- - spec/**
9
-
10
- jobs:
11
- tests-mri:
12
- runs-on: ubuntu-latest
13
- strategy:
14
- fail-fast: false
15
- matrix:
16
- ruby: ["2.6.x", "2.5.x", "2.4.x"]
17
- dry_logic_from_master: ["true", "false"]
18
- include:
19
- - ruby: "2.6.x"
20
- dry_logic_from_master: "false"
21
- coverage: "true"
22
- steps:
23
- - uses: actions/checkout@v1
24
- - name: Set up Ruby
25
- uses: actions/setup-ruby@v1
26
- with:
27
- ruby-version: ${{matrix.ruby}}
28
- - name: Download test reporter
29
- if: "matrix.coverage == 'true'"
30
- run: |
31
- mkdir -p tmp/
32
- curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./tmp/cc-test-reporter
33
- chmod +x ./tmp/cc-test-reporter
34
- ./tmp/cc-test-reporter before-build
35
- - name: Run all tests
36
- env:
37
- COVERAGE: ${{matrix.coverage}}
38
- DRY_LOGIC_FROM_MASTER: ${{matrix.dry_logic_from_master}}
39
- run: |
40
- gem install bundler
41
- bundle install --jobs 4 --retry 3 --without tools docs
42
- bundle exec rake
43
- - name: Send coverage results
44
- if: "matrix.coverage == 'true'"
45
- env:
46
- CC_TEST_REPORTER_ID: ${{secrets.CC_TEST_REPORTER_ID}}
47
- GIT_COMMIT_SHA: ${{github.sha}}
48
- GIT_BRANCH: ${{github.ref}}
49
- GIT_COMMITTED_AT: ${{github.event.head_commit.timestamp}}
50
- run: |
51
- GIT_BRANCH=`ruby -e "puts ENV['GITHUB_REF'].split('/', 3).last"` \
52
- GIT_COMMITTED_AT=`ruby -r time -e "puts Time.iso8601(ENV['GIT_COMMITTED_AT']).to_i"` \
53
- ./tmp/cc-test-reporter after-build
54
-
55
- tests-others:
56
- runs-on: ubuntu-latest
57
- strategy:
58
- fail-fast: false
59
- matrix:
60
- image: ["jruby:9.2.9", "ruby:rc"]
61
- dry_logic_from_master: ["true", "false"]
62
- container:
63
- image: ${{matrix.image}}
64
- steps:
65
- - uses: actions/checkout@v1
66
- - name: Install git
67
- run: |
68
- apt-get update
69
- apt-get install -y --no-install-recommends git
70
- - name: Run all tests
71
- env:
72
- DRY_LOGIC_FROM_MASTER: ${{matrix.dry_logic_from_master}}
73
- run: |
74
- gem install bundler
75
- bundle install --jobs 4 --retry 3 --without tools docs
76
- bundle exec rspec
@@ -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
@@ -1,34 +0,0 @@
1
- # this file is managed by dry-rb/devtools project
2
-
3
- name: sync_configs
4
-
5
- on:
6
- repository_dispatch:
7
-
8
- jobs:
9
- sync-configs:
10
- runs-on: ubuntu-latest
11
- if: github.event.action == 'sync_configs'
12
- steps:
13
- - uses: actions/checkout@v1
14
- - name: Update configuration files from devtools
15
- env:
16
- GITHUB_LOGIN: dry-bot
17
- GITHUB_TOKEN: ${{ secrets.GH_PAT }}
18
- run: |
19
- git clone https://github.com/dry-rb/devtools.git tmp/devtools
20
-
21
- if [ -f ".github/workflows/custom_ci.yml" ]; then
22
- rsync -av --exclude '.github/workflows/ci.yml' tmp/devtools/shared/ . ;
23
- else
24
- rsync -av tmp/devtools/shared/ . ;
25
- fi
26
-
27
- git config --local user.email "dry-bot@dry-rb.org"
28
- git config --local user.name "dry-bot"
29
- git add -A
30
- git commit -m "[devtools] config sync" || echo "nothing changed"
31
- - name: Push changes
32
- uses: ad-m/github-push-action@master
33
- with:
34
- github_token: ${{ secrets.GH_PAT }}