dry-types 0.9.0 → 0.15.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 (61) hide show
  1. checksums.yaml +5 -5
  2. data/.codeclimate.yml +15 -0
  3. data/.gitignore +1 -0
  4. data/.rubocop.yml +43 -0
  5. data/.travis.yml +15 -14
  6. data/.yardopts +5 -0
  7. data/CHANGELOG.md +494 -88
  8. data/CONTRIBUTING.md +29 -0
  9. data/Gemfile +7 -6
  10. data/README.md +1 -3
  11. data/Rakefile +8 -3
  12. data/benchmarks/hash_schemas.rb +7 -7
  13. data/dry-types.gemspec +11 -9
  14. data/lib/dry/types/any.rb +36 -0
  15. data/lib/dry/types/array/member.rb +29 -4
  16. data/lib/dry/types/array.rb +6 -4
  17. data/lib/dry/types/builder.rb +48 -6
  18. data/lib/dry/types/builder_methods.rb +111 -0
  19. data/lib/dry/types/coercions/json.rb +3 -0
  20. data/lib/dry/types/coercions/{form.rb → params.rb} +23 -3
  21. data/lib/dry/types/coercions.rb +16 -3
  22. data/lib/dry/types/compat.rb +0 -0
  23. data/lib/dry/types/compiler.rb +66 -39
  24. data/lib/dry/types/constrained/coercible.rb +7 -1
  25. data/lib/dry/types/constrained.rb +42 -3
  26. data/lib/dry/types/constraints.rb +3 -0
  27. data/lib/dry/types/constructor.rb +98 -16
  28. data/lib/dry/types/container.rb +2 -0
  29. data/lib/dry/types/core.rb +30 -14
  30. data/lib/dry/types/decorator.rb +31 -5
  31. data/lib/dry/types/default.rb +34 -8
  32. data/lib/dry/types/enum.rb +71 -14
  33. data/lib/dry/types/errors.rb +23 -6
  34. data/lib/dry/types/extensions/maybe.rb +35 -16
  35. data/lib/dry/types/fn_container.rb +34 -0
  36. data/lib/dry/types/hash/constructor.rb +20 -0
  37. data/lib/dry/types/hash.rb +103 -23
  38. data/lib/dry/types/inflector.rb +7 -0
  39. data/lib/dry/types/json.rb +7 -7
  40. data/lib/dry/types/map.rb +98 -0
  41. data/lib/dry/types/module.rb +115 -0
  42. data/lib/dry/types/nominal.rb +119 -0
  43. data/lib/dry/types/options.rb +29 -7
  44. data/lib/dry/types/params.rb +53 -0
  45. data/lib/dry/types/printable.rb +12 -0
  46. data/lib/dry/types/printer.rb +309 -0
  47. data/lib/dry/types/result.rb +12 -2
  48. data/lib/dry/types/safe.rb +27 -1
  49. data/lib/dry/types/schema/key.rb +130 -0
  50. data/lib/dry/types/schema.rb +298 -0
  51. data/lib/dry/types/spec/types.rb +102 -0
  52. data/lib/dry/types/sum.rb +75 -13
  53. data/lib/dry/types/type.rb +6 -0
  54. data/lib/dry/types/version.rb +1 -1
  55. data/lib/dry/types.rb +104 -38
  56. data/log/.gitkeep +0 -0
  57. metadata +81 -50
  58. data/lib/dry/types/definition.rb +0 -79
  59. data/lib/dry/types/form.rb +0 -53
  60. data/lib/dry/types/hash/schema.rb +0 -156
  61. data/lib/spec/dry/types.rb +0 -56
data/lib/dry/types/sum.rb CHANGED
@@ -3,74 +3,136 @@ require 'dry/types/options'
3
3
  module Dry
4
4
  module Types
5
5
  class Sum
6
- include Dry::Equalizer(:left, :right, :options)
6
+ include Type
7
7
  include Builder
8
8
  include Options
9
+ include Printable
10
+ include Dry::Equalizer(:left, :right, :options, :meta, inspect: false)
9
11
 
12
+ # @return [Type]
10
13
  attr_reader :left
11
14
 
15
+ # @return [Type]
12
16
  attr_reader :right
13
17
 
14
18
  class Constrained < Sum
19
+ # @return [Dry::Logic::Operations::Or]
15
20
  def rule
16
21
  left.rule | right.rule
17
22
  end
18
23
 
24
+ # @return [true]
19
25
  def constrained?
20
26
  true
21
27
  end
28
+
29
+ # @param [Object] input
30
+ # @return [Object]
31
+ # @raise [ConstraintError] if given +input+ not passing {#try}
32
+ def call(input)
33
+ try(input) { |result|
34
+ raise ConstraintError.new(result, input)
35
+ }.input
36
+ end
37
+ alias_method :[], :call
22
38
  end
23
39
 
40
+ # @param [Type] left
41
+ # @param [Type] right
42
+ # @param [Hash] options
24
43
  def initialize(left, right, options = {})
25
44
  super
26
45
  @left, @right = left, right
27
46
  freeze
28
47
  end
29
48
 
49
+ # @return [String]
30
50
  def name
31
51
  [left, right].map(&:name).join(' | ')
32
52
  end
33
53
 
54
+ # @return [false]
34
55
  def default?
35
56
  false
36
57
  end
37
58
 
38
- def maybe?
59
+ # @return [false]
60
+ def constrained?
39
61
  false
40
62
  end
41
63
 
42
- def constrained?
43
- false
64
+ # @return [Boolean]
65
+ def optional?
66
+ primitive?(nil)
44
67
  end
45
68
 
69
+ # @param [Object] input
70
+ # @return [Object]
46
71
  def call(input)
47
- try(input) do |result|
48
- raise ConstraintError.new(result, input)
49
- end.input
72
+ try(input).input
50
73
  end
51
74
  alias_method :[], :call
52
75
 
53
76
  def try(input, &block)
54
- result = left.try(input) do
55
- right.try(input)
77
+ left.try(input) do
78
+ right.try(input) do |failure|
79
+ if block_given?
80
+ yield(failure)
81
+ else
82
+ failure
83
+ end
84
+ end
56
85
  end
86
+ end
57
87
 
58
- return result if result.success?
88
+ def success(input)
89
+ if left.valid?(input)
90
+ left.success(input)
91
+ elsif right.valid?(input)
92
+ right.success(input)
93
+ else
94
+ raise ArgumentError, "Invalid success value '#{input}' for #{inspect}"
95
+ end
96
+ end
59
97
 
60
- if block
61
- yield(result)
98
+ def failure(input, _error = nil)
99
+ if !left.valid?(input)
100
+ left.failure(input, left.try(input).error)
62
101
  else
63
- result
102
+ right.failure(input, right.try(input).error)
64
103
  end
65
104
  end
66
105
 
106
+ # @param [Object] value
107
+ # @return [Boolean]
67
108
  def primitive?(value)
68
109
  left.primitive?(value) || right.primitive?(value)
69
110
  end
70
111
 
112
+ # @param [Object] value
113
+ # @return [Boolean]
71
114
  def valid?(value)
72
115
  left.valid?(value) || right.valid?(value)
73
116
  end
117
+ alias_method :===, :valid?
118
+
119
+ # @api public
120
+ #
121
+ # @see Nominal#to_ast
122
+ def to_ast(meta: true)
123
+ [:sum, [left.to_ast(meta: meta), right.to_ast(meta: meta), meta ? self.meta : EMPTY_HASH]]
124
+ end
125
+
126
+ # @param [Hash] options
127
+ # @return [Constrained,Sum]
128
+ # @see Builder#constrained
129
+ def constrained(options)
130
+ if optional?
131
+ right.constrained(options).optional
132
+ else
133
+ super
134
+ end
135
+ end
74
136
  end
75
137
  end
76
138
  end
@@ -0,0 +1,6 @@
1
+ module Dry
2
+ module Types
3
+ module Type
4
+ end
5
+ end
6
+ end
@@ -1,5 +1,5 @@
1
1
  module Dry
2
2
  module Types
3
- VERSION = '0.9.0'.freeze
3
+ VERSION = '0.15.0'.freeze
4
4
  end
5
5
  end
data/lib/dry/types.rb CHANGED
@@ -2,56 +2,68 @@ require 'bigdecimal'
2
2
  require 'date'
3
3
  require 'set'
4
4
 
5
- require 'inflecto'
6
5
  require 'concurrent'
7
6
 
8
7
  require 'dry-container'
9
8
  require 'dry-equalizer'
10
9
  require 'dry/core/extensions'
10
+ require 'dry/core/constants'
11
+ require 'dry/core/class_attributes'
11
12
 
12
13
  require 'dry/types/version'
13
14
  require 'dry/types/container'
14
- require 'dry/types/definition'
15
+ require 'dry/types/inflector'
16
+ require 'dry/types/type'
17
+ require 'dry/types/printable'
18
+ require 'dry/types/nominal'
15
19
  require 'dry/types/constructor'
20
+ require 'dry/types/module'
16
21
 
17
22
  require 'dry/types/errors'
18
23
 
19
24
  module Dry
20
25
  module Types
21
- extend Dry::Configurable
22
26
  extend Dry::Core::Extensions
23
-
24
- setting :namespace, self
27
+ extend Dry::Core::ClassAttributes
28
+ extend Dry::Core::Deprecations[:'dry-types']
29
+ include Dry::Core::Constants
25
30
 
26
31
  TYPE_SPEC_REGEX = %r[(.+)<(.+)>].freeze
27
32
 
28
- def self.module
29
- namespace = Module.new
30
- define_constants(namespace, type_keys)
31
- namespace
33
+ # @see Dry.Types
34
+ def self.module(*namespaces, default: :nominal, **aliases)
35
+ Module.new(container, *namespaces, default: default, **aliases)
32
36
  end
37
+ deprecate_class_method :module, message: <<~DEPRECATION
38
+ Use Dry.Types() instead. Beware, it exports strict types by default, for old behavior use Dry.Types(default: :nominal). See more options in the changelog
39
+ DEPRECATION
33
40
 
34
- def self.finalize
35
- warn 'Dry::Types.finalize and configuring namespace is deprecated. Just'\
36
- ' do `include Dry::Types.module` in places where you want to have access'\
37
- ' to built-in types'
38
-
39
- define_constants(config.namespace, type_keys)
41
+ # @api private
42
+ def self.included(*)
43
+ raise RuntimeError, "Import Dry.Types, not Dry::Types"
40
44
  end
41
45
 
46
+ # @return [Container{String => Nominal}]
42
47
  def self.container
43
48
  @container ||= Container.new
44
49
  end
45
50
 
46
- def self.register(name, type = nil, &block)
47
- container.register(name, type || block.call)
51
+ # @api private
52
+ def self.registered?(class_or_identifier)
53
+ container.key?(identifier(class_or_identifier))
48
54
  end
49
55
 
50
- def self.register_class(klass, meth = :new)
51
- type = Definition.new(klass).constructor(klass.method(meth))
52
- container.register(identifier(klass), type)
56
+ # @param [String] name
57
+ # @param [Type] type
58
+ # @param [#call,nil] block
59
+ # @return [Container{String => Nominal}]
60
+ # @api private
61
+ def self.register(name, type = nil, &block)
62
+ container.register(name, type || block.call)
53
63
  end
54
64
 
65
+ # @param [String,Class] name
66
+ # @return [Type,Class]
55
67
  def self.[](name)
56
68
  type_map.fetch_or_store(name) do
57
69
  case name
@@ -60,7 +72,7 @@ module Dry
60
72
 
61
73
  if result
62
74
  type_id, member_id = result[1..2]
63
- container[type_id].member(self[member_id])
75
+ container[type_id].of(self[member_id])
64
76
  else
65
77
  container[name]
66
78
  end
@@ -76,34 +88,88 @@ module Dry
76
88
  end
77
89
  end
78
90
 
79
- def self.define_constants(namespace, identifiers)
80
- names = identifiers.map do |id|
81
- parts = id.split('.')
82
- [Inflecto.camelize(parts.pop), parts.map(&Inflecto.method(:camelize))]
83
- end
84
-
85
- names.map do |(klass, parts)|
86
- mod = parts.reduce(namespace) do |a, e|
87
- a.constants.include?(e.to_sym) ? a.const_get(e) : a.const_set(e, Module.new)
88
- end
89
-
90
- mod.const_set(klass, self[identifier((parts + [klass]).join('::'))])
91
- end
92
- end
93
-
91
+ # @param [#to_s] klass
92
+ # @return [String]
94
93
  def self.identifier(klass)
95
- Inflecto.underscore(klass).tr('/', '.')
94
+ Inflector.underscore(klass).tr('/', '.')
96
95
  end
97
96
 
97
+ # @return [Concurrent::Map]
98
98
  def self.type_map
99
99
  @type_map ||= Concurrent::Map.new
100
100
  end
101
101
 
102
+ # List of type keys defined in {Dry::Types.container}
103
+ # @return [<String>]
102
104
  def self.type_keys
103
- container._container.keys
105
+ container.keys
104
106
  end
107
+
108
+ # @api private
109
+ def self.const_missing(const)
110
+ underscored = Inflector.underscore(const)
111
+
112
+ if container.keys.any? { |key| key.split('.')[0] == underscored }
113
+ raise NameError,
114
+ 'dry-types does not define constants for default types. '\
115
+ 'You can access the predefined types with [], e.g. Dry::Types["strict.integer"] '\
116
+ 'or generate a module with types using Dry::Types.module'
117
+ else
118
+ super
119
+ end
120
+ end
121
+ end
122
+
123
+ # Export registered types as a module with constants
124
+ #
125
+ # @example no options
126
+ #
127
+ # module Types
128
+ # # imports all types as constants, uses modules for namespaces
129
+ # include Dry::Types.module
130
+ # end
131
+ # # nominal types are exported by default
132
+ # Types::Integer
133
+ # # => #<Dry::Types[Nominal<Integer>]>
134
+ # Types::Strict::Integer
135
+ # # => #<Dry::Types[Constrained<Nominal<Integer> rule=[type?(Integer)]>]>
136
+ #
137
+ # @example changing default types
138
+ #
139
+ # module Types
140
+ # include Dry::Types(default: :strict)
141
+ # end
142
+ # Types::Integer
143
+ # # => #<Dry::Types[Constrained<Nominal<Integer> rule=[type?(Integer)]>]>
144
+ #
145
+ # @example cherry-picking namespaces
146
+ #
147
+ # module Types
148
+ # include Dry::Types.module(:strict, :coercible)
149
+ # end
150
+ # # cherry-picking discards default types,
151
+ # # provide the :default option along with the list of
152
+ # # namespaces if you want the to be exported
153
+ # Types.constants # => [:Coercible, :Strict]
154
+ #
155
+ # @example custom names
156
+ # module Types
157
+ # include Dry::Types.module(coercible: :Kernel)
158
+ # end
159
+ # Types::Kernel::Integer
160
+ # # => #<Dry::Types[Constructor<Nominal<Integer> fn=Kernel.Integer>]>
161
+ #
162
+ # @param [Array<Symbol>] namespaces List of type namespaces to export
163
+ # @param [Symbol] default Default namespace to export
164
+ # @param [Hash{Symbol => Symbol}] aliases Optional renamings, like strict: :Draconian
165
+ # @return [Dry::Types::Module]
166
+ #
167
+ # @see Dry::types::Module
168
+ def self.Types(*namespaces, default: Types::Undefined, **aliases)
169
+ Types::Module.new(Types.container, *namespaces, default: default, **aliases)
105
170
  end
106
171
  end
107
172
 
108
173
  require 'dry/types/core' # load built-in types
109
174
  require 'dry/types/extensions'
175
+ require 'dry/types/printer'
data/log/.gitkeep ADDED
File without changes
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: 0.9.0
4
+ version: 0.15.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Piotr Solnica
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-09-21 00:00:00.000000000 Z
11
+ date: 2019-03-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby
@@ -30,110 +30,108 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0.1'
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: '0.1'
41
- - !ruby/object:Gem::Dependency
42
- name: dry-container
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - "~>"
33
+ version: '0.4'
34
+ - - ">="
46
35
  - !ruby/object:Gem::Version
47
- version: '0.3'
36
+ version: 0.4.4
48
37
  type: :runtime
49
38
  prerelease: false
50
39
  version_requirements: !ruby/object:Gem::Requirement
51
40
  requirements:
52
41
  - - "~>"
53
42
  - !ruby/object:Gem::Version
54
- version: '0.3'
43
+ version: '0.4'
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: 0.4.4
55
47
  - !ruby/object:Gem::Dependency
56
- name: dry-equalizer
48
+ name: dry-inflector
57
49
  requirement: !ruby/object:Gem::Requirement
58
50
  requirements:
59
51
  - - "~>"
60
52
  - !ruby/object:Gem::Version
61
- version: '0.2'
53
+ version: '0.1'
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: 0.1.2
62
57
  type: :runtime
63
58
  prerelease: false
64
59
  version_requirements: !ruby/object:Gem::Requirement
65
60
  requirements:
66
61
  - - "~>"
67
62
  - !ruby/object:Gem::Version
68
- version: '0.2'
63
+ version: '0.1'
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ version: 0.1.2
69
67
  - !ruby/object:Gem::Dependency
70
- name: dry-configurable
68
+ name: dry-container
71
69
  requirement: !ruby/object:Gem::Requirement
72
70
  requirements:
73
71
  - - "~>"
74
72
  - !ruby/object:Gem::Version
75
- version: '0.1'
73
+ version: '0.3'
76
74
  type: :runtime
77
75
  prerelease: false
78
76
  version_requirements: !ruby/object:Gem::Requirement
79
77
  requirements:
80
78
  - - "~>"
81
79
  - !ruby/object:Gem::Version
82
- version: '0.1'
80
+ version: '0.3'
83
81
  - !ruby/object:Gem::Dependency
84
- name: dry-logic
82
+ name: dry-equalizer
85
83
  requirement: !ruby/object:Gem::Requirement
86
84
  requirements:
87
85
  - - "~>"
88
86
  - !ruby/object:Gem::Version
89
- version: '0.4'
87
+ version: '0.2'
90
88
  - - ">="
91
89
  - !ruby/object:Gem::Version
92
- version: 0.4.0
90
+ version: 0.2.2
93
91
  type: :runtime
94
92
  prerelease: false
95
93
  version_requirements: !ruby/object:Gem::Requirement
96
94
  requirements:
97
95
  - - "~>"
98
96
  - !ruby/object:Gem::Version
99
- version: '0.4'
97
+ version: '0.2'
100
98
  - - ">="
101
99
  - !ruby/object:Gem::Version
102
- version: 0.4.0
100
+ version: 0.2.2
103
101
  - !ruby/object:Gem::Dependency
104
- name: inflecto
102
+ name: dry-logic
105
103
  requirement: !ruby/object:Gem::Requirement
106
104
  requirements:
107
- - - "~>"
108
- - !ruby/object:Gem::Version
109
- version: 0.0.0
110
105
  - - ">="
111
106
  - !ruby/object:Gem::Version
112
- version: 0.0.2
107
+ version: '0.5'
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '0.5'
113
111
  type: :runtime
114
112
  prerelease: false
115
113
  version_requirements: !ruby/object:Gem::Requirement
116
114
  requirements:
117
- - - "~>"
118
- - !ruby/object:Gem::Version
119
- version: 0.0.0
120
115
  - - ">="
121
116
  - !ruby/object:Gem::Version
122
- version: 0.0.2
117
+ version: '0.5'
118
+ - - "~>"
119
+ - !ruby/object:Gem::Version
120
+ version: '0.5'
123
121
  - !ruby/object:Gem::Dependency
124
122
  name: bundler
125
123
  requirement: !ruby/object:Gem::Requirement
126
124
  requirements:
127
- - - "~>"
125
+ - - ">="
128
126
  - !ruby/object:Gem::Version
129
- version: '1.6'
127
+ version: '0'
130
128
  type: :development
131
129
  prerelease: false
132
130
  version_requirements: !ruby/object:Gem::Requirement
133
131
  requirements:
134
- - - "~>"
132
+ - - ">="
135
133
  - !ruby/object:Gem::Version
136
- version: '1.6'
134
+ version: '0'
137
135
  - !ruby/object:Gem::Dependency
138
136
  name: rake
139
137
  requirement: !ruby/object:Gem::Requirement
@@ -176,6 +174,20 @@ dependencies:
176
174
  - - "~>"
177
175
  - !ruby/object:Gem::Version
178
176
  version: '0.2'
177
+ - !ruby/object:Gem::Dependency
178
+ name: yard
179
+ requirement: !ruby/object:Gem::Requirement
180
+ requirements:
181
+ - - "~>"
182
+ - !ruby/object:Gem::Version
183
+ version: 0.9.5
184
+ type: :development
185
+ prerelease: false
186
+ version_requirements: !ruby/object:Gem::Requirement
187
+ requirements:
188
+ - - "~>"
189
+ - !ruby/object:Gem::Version
190
+ version: 0.9.5
179
191
  description: Type system for Ruby supporting coercions, constraints and complex types
180
192
  like structs, value objects, enums etc.
181
193
  email:
@@ -184,10 +196,14 @@ executables: []
184
196
  extensions: []
185
197
  extra_rdoc_files: []
186
198
  files:
199
+ - ".codeclimate.yml"
187
200
  - ".gitignore"
188
201
  - ".rspec"
202
+ - ".rubocop.yml"
189
203
  - ".travis.yml"
204
+ - ".yardopts"
190
205
  - CHANGELOG.md
206
+ - CONTRIBUTING.md
191
207
  - Gemfile
192
208
  - LICENSE
193
209
  - README.md
@@ -196,12 +212,15 @@ files:
196
212
  - dry-types.gemspec
197
213
  - lib/dry-types.rb
198
214
  - lib/dry/types.rb
215
+ - lib/dry/types/any.rb
199
216
  - lib/dry/types/array.rb
200
217
  - lib/dry/types/array/member.rb
201
218
  - lib/dry/types/builder.rb
219
+ - lib/dry/types/builder_methods.rb
202
220
  - lib/dry/types/coercions.rb
203
- - lib/dry/types/coercions/form.rb
204
221
  - lib/dry/types/coercions/json.rb
222
+ - lib/dry/types/coercions/params.rb
223
+ - lib/dry/types/compat.rb
205
224
  - lib/dry/types/compiler.rb
206
225
  - lib/dry/types/constrained.rb
207
226
  - lib/dry/types/constrained/coercible.rb
@@ -211,26 +230,39 @@ files:
211
230
  - lib/dry/types/core.rb
212
231
  - lib/dry/types/decorator.rb
213
232
  - lib/dry/types/default.rb
214
- - lib/dry/types/definition.rb
215
233
  - lib/dry/types/enum.rb
216
234
  - lib/dry/types/errors.rb
217
235
  - lib/dry/types/extensions.rb
218
236
  - lib/dry/types/extensions/maybe.rb
219
- - lib/dry/types/form.rb
237
+ - lib/dry/types/fn_container.rb
220
238
  - lib/dry/types/hash.rb
221
- - lib/dry/types/hash/schema.rb
239
+ - lib/dry/types/hash/constructor.rb
240
+ - lib/dry/types/inflector.rb
222
241
  - lib/dry/types/json.rb
242
+ - lib/dry/types/map.rb
243
+ - lib/dry/types/module.rb
244
+ - lib/dry/types/nominal.rb
223
245
  - lib/dry/types/options.rb
246
+ - lib/dry/types/params.rb
247
+ - lib/dry/types/printable.rb
248
+ - lib/dry/types/printer.rb
224
249
  - lib/dry/types/result.rb
225
250
  - lib/dry/types/safe.rb
251
+ - lib/dry/types/schema.rb
252
+ - lib/dry/types/schema/key.rb
253
+ - lib/dry/types/spec/types.rb
226
254
  - lib/dry/types/sum.rb
255
+ - lib/dry/types/type.rb
227
256
  - lib/dry/types/version.rb
228
- - lib/spec/dry/types.rb
229
- homepage: https://github.com/dryrb/dry-types
257
+ - log/.gitkeep
258
+ homepage: https://github.com/dry-rb/dry-types
230
259
  licenses:
231
260
  - MIT
232
261
  metadata:
233
262
  allowed_push_host: https://rubygems.org
263
+ changelog_uri: https://github.com/dry-rb/dry-types/blob/master/CHANGELOG.md
264
+ source_code_uri: https://github.com/dry-rb/dry-types
265
+ bug_tracker_uri: https://github.com/dry-rb/dry-types/issues
234
266
  post_install_message:
235
267
  rdoc_options: []
236
268
  require_paths:
@@ -239,15 +271,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
239
271
  requirements:
240
272
  - - ">="
241
273
  - !ruby/object:Gem::Version
242
- version: 2.1.0
274
+ version: 2.3.0
243
275
  required_rubygems_version: !ruby/object:Gem::Requirement
244
276
  requirements:
245
277
  - - ">="
246
278
  - !ruby/object:Gem::Version
247
279
  version: '0'
248
280
  requirements: []
249
- rubyforge_project:
250
- rubygems_version: 2.5.1
281
+ rubygems_version: 3.0.3
251
282
  signing_key:
252
283
  specification_version: 4
253
284
  summary: Type system for Ruby supporting coercions, constraints and complex types