data_model 0.3.0 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
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