data_model 0.3.0 → 0.5.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 (60) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +11 -2
  3. data/.shadowenv.d/.gitignore +2 -0
  4. data/.shadowenv.d/550-ruby.lisp +37 -0
  5. data/.solargraph.yml +22 -0
  6. data/Gemfile.lock +38 -3
  7. data/Rakefile +0 -6
  8. data/Steepfile +27 -0
  9. data/data_model.gemspec +2 -2
  10. data/lib/data_model/boolean.rb +0 -2
  11. data/lib/data_model/builtin/array.rb +32 -25
  12. data/lib/data_model/builtin/big_decimal.rb +15 -14
  13. data/lib/data_model/builtin/boolean.rb +10 -7
  14. data/lib/data_model/builtin/date.rb +15 -12
  15. data/lib/data_model/builtin/float.rb +14 -13
  16. data/lib/data_model/builtin/hash.rb +100 -35
  17. data/lib/data_model/builtin/integer.rb +14 -13
  18. data/lib/data_model/builtin/numeric.rb +35 -0
  19. data/lib/data_model/builtin/object.rb +28 -0
  20. data/lib/data_model/builtin/or.rb +73 -0
  21. data/lib/data_model/builtin/string.rb +15 -16
  22. data/lib/data_model/builtin/symbol.rb +14 -13
  23. data/lib/data_model/builtin/time.rb +17 -14
  24. data/lib/data_model/builtin.rb +9 -9
  25. data/lib/data_model/error.rb +33 -33
  26. data/lib/data_model/errors.rb +107 -143
  27. data/lib/data_model/fixtures/array.rb +22 -9
  28. data/lib/data_model/fixtures/big_decimal.rb +9 -7
  29. data/lib/data_model/fixtures/boolean.rb +5 -5
  30. data/lib/data_model/fixtures/date.rb +13 -11
  31. data/lib/data_model/fixtures/example.rb +7 -7
  32. data/lib/data_model/fixtures/float.rb +9 -7
  33. data/lib/data_model/fixtures/hash.rb +22 -10
  34. data/lib/data_model/fixtures/integer.rb +9 -7
  35. data/lib/data_model/fixtures/numeric.rb +31 -0
  36. data/lib/data_model/fixtures/object.rb +27 -0
  37. data/lib/data_model/fixtures/or.rb +29 -0
  38. data/lib/data_model/fixtures/string.rb +15 -32
  39. data/lib/data_model/fixtures/symbol.rb +9 -7
  40. data/lib/data_model/fixtures/time.rb +13 -11
  41. data/lib/data_model/logging.rb +5 -8
  42. data/lib/data_model/model.rb +11 -8
  43. data/lib/data_model/registry.rb +129 -0
  44. data/lib/data_model/scanner.rb +24 -29
  45. data/lib/data_model/struct.rb +112 -0
  46. data/lib/data_model/testing/minitest.rb +33 -9
  47. data/lib/data_model/testing.rb +0 -2
  48. data/lib/data_model/type.rb +39 -23
  49. data/lib/data_model/version.rb +1 -3
  50. data/lib/data_model.rb +10 -19
  51. metadata +24 -21
  52. data/lib/data_model/type_registry.rb +0 -68
  53. data/sorbet/config +0 -4
  54. data/sorbet/rbi/annotations/rainbow.rbi +0 -269
  55. data/sorbet/rbi/gems/minitest@5.18.0.rbi +0 -1491
  56. data/sorbet/rbi/gems/zeitwerk.rbi +0 -196
  57. data/sorbet/rbi/gems/zeitwerk@2.6.7.rbi +0 -966
  58. data/sorbet/rbi/todo.rbi +0 -5
  59. data/sorbet/tapioca/config.yml +0 -13
  60. data/sorbet/tapioca/require.rb +0 -4
metadata CHANGED
@@ -1,17 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: data_model
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matt Briggs
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-05-11 00:00:00.000000000 Z
11
+ date: 2023-05-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: sorbet
14
+ name: zeitwerk
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - ">="
@@ -25,13 +25,13 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: zeitwerk
28
+ name: guard
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
- type: :runtime
34
+ type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
@@ -39,7 +39,7 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: guard
42
+ name: guard-rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - ">="
@@ -53,7 +53,7 @@ dependencies:
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: guard-rake
56
+ name: minitest
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - ">="
@@ -67,7 +67,7 @@ dependencies:
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
- name: minitest
70
+ name: rake
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - ">="
@@ -81,7 +81,7 @@ dependencies:
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
83
  - !ruby/object:Gem::Dependency
84
- name: rake
84
+ name: rubocop
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - ">="
@@ -95,7 +95,7 @@ dependencies:
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
97
  - !ruby/object:Gem::Dependency
98
- name: rubocop
98
+ name: rufo
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - ">="
@@ -109,7 +109,7 @@ dependencies:
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
111
  - !ruby/object:Gem::Dependency
112
- name: sorbet-runtime
112
+ name: steep
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
115
  - - ">="
@@ -146,10 +146,14 @@ files:
146
146
  - ".editorconfig"
147
147
  - ".rubocop.yml"
148
148
  - ".ruby-version"
149
+ - ".shadowenv.d/.gitignore"
150
+ - ".shadowenv.d/550-ruby.lisp"
151
+ - ".solargraph.yml"
149
152
  - Gemfile
150
153
  - Gemfile.lock
151
154
  - Guardfile
152
155
  - Rakefile
156
+ - Steepfile
153
157
  - data_model.gemspec
154
158
  - lib/data_model.rb
155
159
  - lib/data_model/boolean.rb
@@ -161,6 +165,9 @@ files:
161
165
  - lib/data_model/builtin/float.rb
162
166
  - lib/data_model/builtin/hash.rb
163
167
  - lib/data_model/builtin/integer.rb
168
+ - lib/data_model/builtin/numeric.rb
169
+ - lib/data_model/builtin/object.rb
170
+ - lib/data_model/builtin/or.rb
164
171
  - lib/data_model/builtin/string.rb
165
172
  - lib/data_model/builtin/symbol.rb
166
173
  - lib/data_model/builtin/time.rb
@@ -174,25 +181,21 @@ files:
174
181
  - lib/data_model/fixtures/float.rb
175
182
  - lib/data_model/fixtures/hash.rb
176
183
  - lib/data_model/fixtures/integer.rb
184
+ - lib/data_model/fixtures/numeric.rb
185
+ - lib/data_model/fixtures/object.rb
186
+ - lib/data_model/fixtures/or.rb
177
187
  - lib/data_model/fixtures/string.rb
178
188
  - lib/data_model/fixtures/symbol.rb
179
189
  - lib/data_model/fixtures/time.rb
180
190
  - lib/data_model/logging.rb
181
191
  - lib/data_model/model.rb
192
+ - lib/data_model/registry.rb
182
193
  - lib/data_model/scanner.rb
194
+ - lib/data_model/struct.rb
183
195
  - lib/data_model/testing.rb
184
196
  - lib/data_model/testing/minitest.rb
185
197
  - lib/data_model/type.rb
186
- - lib/data_model/type_registry.rb
187
198
  - lib/data_model/version.rb
188
- - sorbet/config
189
- - sorbet/rbi/annotations/rainbow.rbi
190
- - sorbet/rbi/gems/minitest@5.18.0.rbi
191
- - sorbet/rbi/gems/zeitwerk.rbi
192
- - sorbet/rbi/gems/zeitwerk@2.6.7.rbi
193
- - sorbet/rbi/todo.rbi
194
- - sorbet/tapioca/config.yml
195
- - sorbet/tapioca/require.rb
196
199
  homepage: https://github.com/mbriggs/data_model
197
200
  licenses:
198
201
  - MIT
@@ -217,7 +220,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
217
220
  - !ruby/object:Gem::Version
218
221
  version: '0'
219
222
  requirements: []
220
- rubygems_version: 3.4.12
223
+ rubygems_version: 3.4.10
221
224
  signing_key:
222
225
  specification_version: 4
223
226
  summary: Define a model for your data
@@ -1,68 +0,0 @@
1
- # typed: strict
2
-
3
- module DataModel
4
- # TypeRegistry allows for different type implementations to be used by the scanner.
5
- # It also acts as an error message registry, mostly for pragmatic reasons.
6
- class TypeRegistry
7
- include Errors
8
- extend T::Sig
9
-
10
- # Default types that will be used if alternative type map is not given
11
- sig { returns(TTypeMap) }
12
- def self.default_types
13
- Builtin.types
14
- end
15
-
16
- # Singleton instance that will be used globally unless instances given
17
- sig { params(types: TTypeMap, errors: T.nilable(TErrorMessages)).returns(TypeRegistry) }
18
- def self.instance(types: default_types, errors: nil)
19
- @instance ||= T.let(new(types:, errors:), T.nilable(TypeRegistry))
20
- end
21
-
22
- # Register a type on the global instance
23
- sig { params(name: Symbol, type: T.class_of(Type)).void }
24
- def self.register(name, type)
25
- instance.register(name, type)
26
- end
27
-
28
- # Instanciate a new type registry. Default errors will always be used, but additional
29
- # errors can be registered.
30
- sig { params(types: TTypeMap, errors: T.nilable(TErrorMessages)).void }
31
- def initialize(types: self.class.default_types, errors: nil)
32
- if errors
33
- errors.each { |type, builder| register_error_message(type, &builder) }
34
- end
35
-
36
- @types = T.let({}, TTypeMap)
37
- types.each { |(name, type)| register(name, type) }
38
- end
39
-
40
- # Register a type on this instance
41
- sig { params(name: Symbol, type: T.class_of(Type)).void }
42
- def register(name, type)
43
- @types[name] = type
44
- end
45
-
46
- # Check if a type is registered
47
- sig { params(name: Symbol).returns(T::Boolean) }
48
- def type?(name)
49
- @types.key?(name)
50
- end
51
-
52
- # Access and configure registered type
53
- sig { params(name: Symbol, args: Type::TArguments, params: T.nilable(T::Array[Object])).returns(Type) }
54
- def type(name, args: {}, params: nil)
55
- if !type?(name)
56
- raise "#{name} is not registered as a type"
57
- end
58
-
59
- t = @types.fetch(name).new(args, registry: self)
60
-
61
- if params
62
- t.configure(params)
63
- end
64
-
65
- return t
66
- end
67
- end
68
- end
data/sorbet/config DELETED
@@ -1,4 +0,0 @@
1
- --dir
2
- .
3
- --ignore=/tmp/
4
- --ignore=/vendor/bundle
@@ -1,269 +0,0 @@
1
- # typed: strict
2
-
3
- # DO NOT EDIT MANUALLY
4
- # This file was pulled from a central RBI files repository.
5
- # Please run `bin/tapioca annotations` to update it.
6
-
7
- module Rainbow
8
- # @shim: https://github.com/sickill/rainbow/blob/master/lib/rainbow.rb#L10-L12
9
- sig { returns(T::Boolean) }
10
- attr_accessor :enabled
11
-
12
- class Color
13
- sig { returns(Symbol) }
14
- attr_reader :ground
15
-
16
- sig { params(ground: Symbol, values: T.any([Integer], [Integer, Integer, Integer])).returns(Color) }
17
- def self.build(ground, values); end
18
-
19
- sig { params(hex: String).returns([Integer, Integer, Integer]) }
20
- def self.parse_hex_color(hex); end
21
-
22
- class Indexed < Rainbow::Color
23
- sig { returns(Integer) }
24
- attr_reader :num
25
-
26
- sig { params(ground: Symbol, num: Integer).void }
27
- def initialize(ground, num); end
28
-
29
- sig { returns(T::Array[Integer]) }
30
- def codes; end
31
- end
32
-
33
- class Named < Rainbow::Color::Indexed
34
- NAMES = T.let(nil, T::Hash[Symbol, Integer])
35
-
36
- sig { params(ground: Symbol, name: Symbol).void }
37
- def initialize(ground, name); end
38
-
39
- sig { returns(T::Array[Symbol]) }
40
- def self.color_names; end
41
-
42
- sig { returns(String) }
43
- def self.valid_names; end
44
- end
45
-
46
- class RGB < Rainbow::Color::Indexed
47
- sig { returns(Integer) }
48
- attr_reader :r, :g, :b
49
-
50
- sig { params(ground: Symbol, values: Integer).void }
51
- def initialize(ground, *values); end
52
-
53
- sig { returns(T::Array[Integer]) }
54
- def codes; end
55
-
56
- sig { params(value: Numeric).returns(Integer) }
57
- def self.to_ansi_domain(value); end
58
- end
59
-
60
- class X11Named < Rainbow::Color::RGB
61
- include Rainbow::X11ColorNames
62
-
63
- sig { returns(T::Array[Symbol]) }
64
- def self.color_names; end
65
-
66
- sig { returns(String) }
67
- def self.valid_names; end
68
-
69
- sig { params(ground: Symbol, name: Symbol).void }
70
- def initialize(ground, name); end
71
- end
72
- end
73
-
74
- sig { returns(Wrapper) }
75
- def self.global; end
76
-
77
- sig { returns(T::Boolean) }
78
- def self.enabled; end
79
-
80
- sig { params(value: T::Boolean).returns(T::Boolean) }
81
- def self.enabled=(value); end
82
-
83
- sig { params(string: String).returns(String) }
84
- def self.uncolor(string); end
85
-
86
- class NullPresenter < String
87
- sig { params(values: T.any([Integer], [Integer, Integer, Integer])).returns(NullPresenter) }
88
- def color(*values); end
89
-
90
- sig { params(values: T.any([Integer], [Integer, Integer, Integer])).returns(NullPresenter) }
91
- def foreground(*values); end
92
-
93
- sig { params(values: T.any([Integer], [Integer, Integer, Integer])).returns(NullPresenter) }
94
- def fg(*values); end
95
-
96
- sig { params(values: T.any([Integer], [Integer, Integer, Integer])).returns(NullPresenter) }
97
- def background(*values); end
98
-
99
- sig { params(values: T.any([Integer], [Integer, Integer, Integer])).returns(NullPresenter) }
100
- def bg(*values); end
101
-
102
- sig { returns(NullPresenter) }
103
- def reset; end
104
-
105
- sig { returns(NullPresenter) }
106
- def bright; end
107
-
108
- sig { returns(NullPresenter) }
109
- def faint; end
110
-
111
- sig { returns(NullPresenter) }
112
- def italic; end
113
-
114
- sig { returns(NullPresenter) }
115
- def underline; end
116
-
117
- sig { returns(NullPresenter) }
118
- def blink; end
119
-
120
- sig { returns(NullPresenter) }
121
- def inverse; end
122
-
123
- sig { returns(NullPresenter) }
124
- def hide; end
125
-
126
- sig { returns(NullPresenter) }
127
- def cross_out; end
128
-
129
- sig { returns(NullPresenter) }
130
- def black; end
131
-
132
- sig { returns(NullPresenter) }
133
- def red; end
134
-
135
- sig { returns(NullPresenter) }
136
- def green; end
137
-
138
- sig { returns(NullPresenter) }
139
- def yellow; end
140
-
141
- sig { returns(NullPresenter) }
142
- def blue; end
143
-
144
- sig { returns(NullPresenter) }
145
- def magenta; end
146
-
147
- sig { returns(NullPresenter) }
148
- def cyan; end
149
-
150
- sig { returns(NullPresenter) }
151
- def white; end
152
-
153
- sig { returns(NullPresenter) }
154
- def bold; end
155
-
156
- sig { returns(NullPresenter) }
157
- def dark; end
158
-
159
- sig { returns(NullPresenter) }
160
- def strike; end
161
- end
162
-
163
- class Presenter < String
164
- TERM_EFFECTS = T.let(nil, T::Hash[Symbol, Integer])
165
-
166
- sig { params(values: T.any([Integer], [Integer, Integer, Integer])).returns(Presenter) }
167
- def color(*values); end
168
-
169
- sig { params(values: T.any([Integer], [Integer, Integer, Integer])).returns(Presenter) }
170
- def foreground(*values); end
171
-
172
- sig { params(values: T.any([Integer], [Integer, Integer, Integer])).returns(Presenter) }
173
- def fg(*values); end
174
-
175
- sig { params(values: T.any([Integer], [Integer, Integer, Integer])).returns(Presenter) }
176
- def background(*values); end
177
-
178
- sig { params(values: T.any([Integer], [Integer, Integer, Integer])).returns(Presenter) }
179
- def bg(*values); end
180
-
181
- sig { returns(Presenter) }
182
- def reset; end
183
-
184
- sig { returns(Presenter) }
185
- def bright; end
186
-
187
- sig { returns(Presenter) }
188
- def faint; end
189
-
190
- sig { returns(Presenter) }
191
- def italic; end
192
-
193
- sig { returns(Presenter) }
194
- def underline; end
195
-
196
- sig { returns(Presenter) }
197
- def blink; end
198
-
199
- sig { returns(Presenter) }
200
- def inverse; end
201
-
202
- sig { returns(Presenter) }
203
- def hide; end
204
-
205
- sig { returns(Presenter) }
206
- def cross_out; end
207
-
208
- sig { returns(Presenter) }
209
- def black; end
210
-
211
- sig { returns(Presenter) }
212
- def red; end
213
-
214
- sig { returns(Presenter) }
215
- def green; end
216
-
217
- sig { returns(Presenter) }
218
- def yellow; end
219
-
220
- sig { returns(Presenter) }
221
- def blue; end
222
-
223
- sig { returns(Presenter) }
224
- def magenta; end
225
-
226
- sig { returns(Presenter) }
227
- def cyan; end
228
-
229
- sig { returns(Presenter) }
230
- def white; end
231
-
232
- sig { returns(Presenter) }
233
- def bold; end
234
-
235
- sig { returns(Presenter) }
236
- def dark; end
237
-
238
- sig { returns(Presenter) }
239
- def strike; end
240
- end
241
-
242
- class StringUtils
243
- sig { params(string: String, codes: T::Array[Integer]).returns(String) }
244
- def self.wrap_with_sgr(string, codes); end
245
-
246
- sig { params(string: String).returns(String) }
247
- def self.uncolor(string); end
248
- end
249
-
250
- VERSION = T.let(nil, String)
251
-
252
- class Wrapper
253
- sig { returns(T::Boolean) }
254
- attr_accessor :enabled
255
-
256
- sig { params(enabled: T::Boolean).void }
257
- def initialize(enabled = true); end
258
-
259
- sig { params(string: String).returns(T.any(Rainbow::Presenter, Rainbow::NullPresenter)) }
260
- def wrap(string); end
261
- end
262
-
263
- module X11ColorNames
264
- NAMES = T.let(nil, T::Hash[Symbol, [Integer, Integer, Integer]])
265
- end
266
- end
267
-
268
- sig { params(string: String).returns(Rainbow::Presenter) }
269
- def Rainbow(string); end