smart_schema 0.10.0 → 0.12.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 (46) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +1 -1
  3. data/CHANGELOG.md +17 -0
  4. data/Gemfile.lock +229 -67
  5. data/LICENSE.txt +1 -1
  6. data/README.md +69 -0
  7. data/bin/console +1 -1
  8. data/lib/smart_core/schema/checker/rules/optional.rb +2 -0
  9. data/lib/smart_core/schema/checker/rules/options/type.rb +6 -4
  10. data/lib/smart_core/schema/checker/rules/required.rb +2 -0
  11. data/lib/smart_core/schema/checker/rules/requirement/result.rb +2 -2
  12. data/lib/smart_core/schema/configuration.rb +33 -0
  13. data/lib/smart_core/schema/errors.rb +52 -0
  14. data/lib/smart_core/schema/plugins/abstract.rb +55 -0
  15. data/lib/smart_core/schema/plugins/access_mixin.rb +47 -0
  16. data/lib/smart_core/schema/plugins/dry_types/dry_types/abstract_factory.rb +91 -0
  17. data/lib/smart_core/schema/plugins/dry_types/dry_types/operation/base.rb +9 -0
  18. data/lib/smart_core/schema/plugins/dry_types/dry_types/operation/cast.rb +21 -0
  19. data/lib/smart_core/schema/plugins/dry_types/dry_types/operation/valid.rb +16 -0
  20. data/lib/smart_core/schema/plugins/dry_types/dry_types/operation/validate.rb +19 -0
  21. data/lib/smart_core/schema/plugins/dry_types/dry_types/operation.rb +12 -0
  22. data/lib/smart_core/schema/plugins/dry_types/dry_types.rb +10 -0
  23. data/lib/smart_core/schema/plugins/dry_types/errors.rb +13 -0
  24. data/lib/smart_core/schema/plugins/dry_types.rb +27 -0
  25. data/lib/smart_core/schema/plugins/registry.rb +158 -0
  26. data/lib/smart_core/schema/plugins/registry_interface.rb +63 -0
  27. data/lib/smart_core/schema/plugins.rb +17 -0
  28. data/lib/smart_core/schema/type_system/interop/abstract_factory.rb +80 -0
  29. data/lib/smart_core/schema/type_system/interop/aliasing/alias_list.rb +131 -0
  30. data/lib/smart_core/schema/type_system/interop/aliasing.rb +72 -0
  31. data/lib/smart_core/schema/type_system/interop/operation.rb +30 -0
  32. data/lib/smart_core/schema/type_system/interop.rb +120 -0
  33. data/lib/smart_core/schema/type_system/registry.rb +162 -0
  34. data/lib/smart_core/schema/type_system/registry_interface.rb +87 -0
  35. data/lib/smart_core/schema/type_system/smart_types/abstract_factory.rb +91 -0
  36. data/lib/smart_core/schema/type_system/smart_types/operation/base.rb +8 -0
  37. data/lib/smart_core/schema/type_system/smart_types/operation/cast.rb +16 -0
  38. data/lib/smart_core/schema/type_system/smart_types/operation/valid.rb +16 -0
  39. data/lib/smart_core/schema/type_system/smart_types/operation/validate.rb +16 -0
  40. data/lib/smart_core/schema/type_system/smart_types/operation.rb +13 -0
  41. data/lib/smart_core/schema/type_system/smart_types.rb +48 -0
  42. data/lib/smart_core/schema/type_system.rb +16 -0
  43. data/lib/smart_core/schema/version.rb +2 -2
  44. data/lib/smart_core/schema.rb +16 -1
  45. data/smart_schema.gemspec +18 -14
  46. metadata +91 -22
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SmartCore::Schema::TypeSystem::SmartTypes::Operation
4
+ # @api private
5
+ # @since 0.12.0
6
+ class Valid < Base
7
+ # @param value [Any]
8
+ # @return [Boolean]
9
+ #
10
+ # @api private
11
+ # @since 0.12.0
12
+ def call(value)
13
+ type.valid?(value)
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SmartCore::Schema::TypeSystem::SmartTypes::Operation
4
+ # @api private
5
+ # @since 0.12.0
6
+ class Validate < Base
7
+ # @param value [Any]
8
+ # @return [void]
9
+ #
10
+ # @api private
11
+ # @since 0.12.0
12
+ def call(value)
13
+ type.validate!(value)
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SmartCore::Schema::TypeSystem
4
+ # @abstract
5
+ # @api private
6
+ # @since 0.12.0
7
+ module SmartTypes::Operation
8
+ require_relative 'operation/base'
9
+ require_relative 'operation/valid'
10
+ require_relative 'operation/validate'
11
+ require_relative 'operation/cast'
12
+ end
13
+ end
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ # @api private
4
+ # @since 0.12.0
5
+ class SmartCore::Schema::TypeSystem::SmartTypes < SmartCore::Schema::TypeSystem::Interop
6
+ require_relative 'smart_types/abstract_factory'
7
+ require_relative 'smart_types/operation'
8
+
9
+ type_alias('value.any', SmartCore::Types::Value::Any)
10
+ type_alias('value.nil', SmartCore::Types::Value::Nil)
11
+ type_alias('value.string', SmartCore::Types::Value::String)
12
+ type_alias('value.symbol', SmartCore::Types::Value::Symbol)
13
+ type_alias('value.text', SmartCore::Types::Value::Text)
14
+ type_alias('value.integer', SmartCore::Types::Value::Integer)
15
+ type_alias('value.float', SmartCore::Types::Value::Float)
16
+ type_alias('value.numeric', SmartCore::Types::Value::Numeric)
17
+ type_alias('value.big_decimal', SmartCore::Types::Value::BigDecimal)
18
+ type_alias('value.boolean', SmartCore::Types::Value::Boolean)
19
+ type_alias('value.array', SmartCore::Types::Value::Array)
20
+ type_alias('value.hash', SmartCore::Types::Value::Hash)
21
+ type_alias('value.proc', SmartCore::Types::Value::Proc)
22
+ type_alias('value.class', SmartCore::Types::Value::Class)
23
+ type_alias('value.module', SmartCore::Types::Value::Module)
24
+ type_alias('value.time', SmartCore::Types::Value::Time)
25
+ type_alias('value.date_time', SmartCore::Types::Value::DateTime)
26
+ type_alias('value.date', SmartCore::Types::Value::Date)
27
+ type_alias('value.time_based', SmartCore::Types::Value::TimeBased)
28
+
29
+ type_alias(:any, SmartCore::Types::Value::Any)
30
+ type_alias(:nil, SmartCore::Types::Value::Nil)
31
+ type_alias(:string, SmartCore::Types::Value::String)
32
+ type_alias(:symbol, SmartCore::Types::Value::Symbol)
33
+ type_alias(:text, SmartCore::Types::Value::Text)
34
+ type_alias(:integer, SmartCore::Types::Value::Integer)
35
+ type_alias(:float, SmartCore::Types::Value::Float)
36
+ type_alias(:numeric, SmartCore::Types::Value::Numeric)
37
+ type_alias(:big_decimal, SmartCore::Types::Value::BigDecimal)
38
+ type_alias(:boolean, SmartCore::Types::Value::Boolean)
39
+ type_alias(:array, SmartCore::Types::Value::Array)
40
+ type_alias(:hash, SmartCore::Types::Value::Hash)
41
+ type_alias(:proc, SmartCore::Types::Value::Proc)
42
+ type_alias(:class, SmartCore::Types::Value::Class)
43
+ type_alias(:module, SmartCore::Types::Value::Module)
44
+ type_alias(:time, SmartCore::Types::Value::Time)
45
+ type_alias(:date_time, SmartCore::Types::Value::DateTime)
46
+ type_alias(:date, SmartCore::Types::Value::Date)
47
+ type_alias(:time_based, SmartCore::Types::Value::TimeBased)
48
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ # @api pulic
4
+ # @since 0.12.0
5
+ module SmartCore::Schema::TypeSystem
6
+ require_relative 'type_system/interop'
7
+ require_relative 'type_system/registry'
8
+ require_relative 'type_system/smart_types'
9
+ require_relative 'type_system/registry_interface'
10
+
11
+ # @since 0.12.0
12
+ extend SmartCore::Schema::TypeSystem::RegistryInterface
13
+
14
+ # @since 0.12.0
15
+ register(:smart_types, SmartCore::Schema::TypeSystem::SmartTypes)
16
+ end
@@ -7,8 +7,8 @@ module SmartCore
7
7
  #
8
8
  # @api public
9
9
  # @since 0.1.0
10
- # @version 0.10.0
11
- VERSION = '0.10.0'
10
+ # @version 0.12.0
11
+ VERSION = '0.12.0'
12
12
  end
13
13
  # rubocop:enable Style/StaticClass
14
14
  end
@@ -2,7 +2,6 @@
2
2
 
3
3
  require 'smart_core'
4
4
  require 'smart_core/types'
5
- require 'set'
6
5
  require 'forwardable'
7
6
 
8
7
  # @api pulic
@@ -13,6 +12,9 @@ module SmartCore
13
12
  class Schema
14
13
  require_relative 'schema/version'
15
14
  require_relative 'schema/errors'
15
+ require_relative 'schema/plugins'
16
+ require_relative 'schema/type_system'
17
+ require_relative 'schema/configuration'
16
18
  require_relative 'schema/key_control'
17
19
  require_relative 'schema/result'
18
20
  require_relative 'schema/checker'
@@ -21,6 +23,19 @@ module SmartCore
21
23
  # @since 0.1.0
22
24
  include SmartCore::Schema::DSL
23
25
 
26
+ # @sicnce 0.12.0
27
+ extend SmartCore::Schema::Plugins::AccessMixin
28
+
29
+ class << self
30
+ # NOTE/TODO: will be totally reworked with dynamic schema-instance-configurated type-system
31
+ #
32
+ # @api public
33
+ # @since 0.12.0
34
+ def type_system
35
+ SmartCore::Schema::TypeSystem.resolve(SmartCore::Schema::Configuration[:type_system])
36
+ end
37
+ end
38
+
24
39
  # @param verifiable_hash [Hash<String|Symbol,Any>]
25
40
  # @return [Boolean]
26
41
  #
data/smart_schema.gemspec CHANGED
@@ -3,17 +3,17 @@
3
3
  require_relative 'lib/smart_core/schema/version'
4
4
 
5
5
  Gem::Specification.new do |spec|
6
- spec.required_ruby_version = Gem::Requirement.new('>= 2.5.8')
6
+ spec.required_ruby_version = Gem::Requirement.new('>= 3.3')
7
7
 
8
- spec.name = 'smart_schema'
8
+ spec.name = 'smart_schema'
9
9
  spec.version = SmartCore::Schema::VERSION
10
10
  spec.authors = ['Rustam Ibragimov']
11
- spec.email = ['iamdaiver@gmail.com']
11
+ spec.email = ['iamdaiver@gmail.com']
12
12
 
13
- spec.summary = 'SmartCore::Schema is a schema validator for Hash-like data structures'
13
+ spec.summary = 'SmartCore::Schema is a schema validator for Hash-like data structures'
14
14
  spec.description = 'SmartCore::Schema is a schema validator for Hash-like data structures'
15
- spec.homepage = 'https://github.com/smart-rb/smart_schema'
16
- spec.license = 'MIT'
15
+ spec.homepage = 'https://github.com/smart-rb/smart_schema'
16
+ spec.license = 'MIT'
17
17
 
18
18
  spec.metadata['homepage_uri'] =
19
19
  spec.homepage
@@ -31,12 +31,16 @@ Gem::Specification.new do |spec|
31
31
  spec.require_paths = ['lib']
32
32
 
33
33
  spec.add_dependency 'smart_engine', '~> 0.17'
34
- spec.add_dependency 'smart_types', '~> 0.4'
35
-
36
- spec.add_development_dependency 'pry', '~> 0.13'
37
- spec.add_development_dependency 'bundler', '~> 2.2'
38
- spec.add_development_dependency 'rake', '~> 13.0'
39
- spec.add_development_dependency 'rspec', '~> 3.10'
40
- spec.add_development_dependency 'armitage-rubocop', '~> 1.7'
41
- spec.add_development_dependency 'simplecov', '~> 0.21'
34
+ spec.add_dependency 'smart_types', '~> 0.8'
35
+ spec.add_dependency 'qonfig', '~> 0.30'
36
+
37
+ spec.add_development_dependency 'dry-types', '~> 1.9'
38
+
39
+ spec.add_development_dependency 'pry', '~> 0.16'
40
+ spec.add_development_dependency 'pry-doc', '~> 1.7'
41
+ spec.add_development_dependency 'bundler' # rubocop:disable Gemspec/DependencyVersion
42
+ spec.add_development_dependency 'rake', '~> 13.3'
43
+ spec.add_development_dependency 'rspec', '~> 3.13'
44
+ spec.add_development_dependency 'armitage-rubocop', '~> 1.81'
45
+ spec.add_development_dependency 'simplecov', '~> 0.22'
42
46
  end
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: smart_schema
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.0
4
+ version: 0.12.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rustam Ibragimov
8
- autorequire:
9
8
  bindir: exe
10
9
  cert_chain: []
11
- date: 2022-10-16 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: smart_engine
@@ -30,98 +29,140 @@ dependencies:
30
29
  requirements:
31
30
  - - "~>"
32
31
  - !ruby/object:Gem::Version
33
- version: '0.4'
32
+ version: '0.8'
34
33
  type: :runtime
35
34
  prerelease: false
36
35
  version_requirements: !ruby/object:Gem::Requirement
37
36
  requirements:
38
37
  - - "~>"
39
38
  - !ruby/object:Gem::Version
40
- version: '0.4'
39
+ version: '0.8'
40
+ - !ruby/object:Gem::Dependency
41
+ name: qonfig
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '0.30'
47
+ type: :runtime
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '0.30'
54
+ - !ruby/object:Gem::Dependency
55
+ name: dry-types
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '1.9'
61
+ type: :development
62
+ prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '1.9'
41
68
  - !ruby/object:Gem::Dependency
42
69
  name: pry
43
70
  requirement: !ruby/object:Gem::Requirement
44
71
  requirements:
45
72
  - - "~>"
46
73
  - !ruby/object:Gem::Version
47
- version: '0.13'
74
+ version: '0.16'
48
75
  type: :development
49
76
  prerelease: false
50
77
  version_requirements: !ruby/object:Gem::Requirement
51
78
  requirements:
52
79
  - - "~>"
53
80
  - !ruby/object:Gem::Version
54
- version: '0.13'
81
+ version: '0.16'
55
82
  - !ruby/object:Gem::Dependency
56
- name: bundler
83
+ name: pry-doc
57
84
  requirement: !ruby/object:Gem::Requirement
58
85
  requirements:
59
86
  - - "~>"
60
87
  - !ruby/object:Gem::Version
61
- version: '2.2'
88
+ version: '1.7'
62
89
  type: :development
63
90
  prerelease: false
64
91
  version_requirements: !ruby/object:Gem::Requirement
65
92
  requirements:
66
93
  - - "~>"
67
94
  - !ruby/object:Gem::Version
68
- version: '2.2'
95
+ version: '1.7'
96
+ - !ruby/object:Gem::Dependency
97
+ name: bundler
98
+ requirement: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ type: :development
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
69
110
  - !ruby/object:Gem::Dependency
70
111
  name: rake
71
112
  requirement: !ruby/object:Gem::Requirement
72
113
  requirements:
73
114
  - - "~>"
74
115
  - !ruby/object:Gem::Version
75
- version: '13.0'
116
+ version: '13.3'
76
117
  type: :development
77
118
  prerelease: false
78
119
  version_requirements: !ruby/object:Gem::Requirement
79
120
  requirements:
80
121
  - - "~>"
81
122
  - !ruby/object:Gem::Version
82
- version: '13.0'
123
+ version: '13.3'
83
124
  - !ruby/object:Gem::Dependency
84
125
  name: rspec
85
126
  requirement: !ruby/object:Gem::Requirement
86
127
  requirements:
87
128
  - - "~>"
88
129
  - !ruby/object:Gem::Version
89
- version: '3.10'
130
+ version: '3.13'
90
131
  type: :development
91
132
  prerelease: false
92
133
  version_requirements: !ruby/object:Gem::Requirement
93
134
  requirements:
94
135
  - - "~>"
95
136
  - !ruby/object:Gem::Version
96
- version: '3.10'
137
+ version: '3.13'
97
138
  - !ruby/object:Gem::Dependency
98
139
  name: armitage-rubocop
99
140
  requirement: !ruby/object:Gem::Requirement
100
141
  requirements:
101
142
  - - "~>"
102
143
  - !ruby/object:Gem::Version
103
- version: '1.7'
144
+ version: '1.81'
104
145
  type: :development
105
146
  prerelease: false
106
147
  version_requirements: !ruby/object:Gem::Requirement
107
148
  requirements:
108
149
  - - "~>"
109
150
  - !ruby/object:Gem::Version
110
- version: '1.7'
151
+ version: '1.81'
111
152
  - !ruby/object:Gem::Dependency
112
153
  name: simplecov
113
154
  requirement: !ruby/object:Gem::Requirement
114
155
  requirements:
115
156
  - - "~>"
116
157
  - !ruby/object:Gem::Version
117
- version: '0.21'
158
+ version: '0.22'
118
159
  type: :development
119
160
  prerelease: false
120
161
  version_requirements: !ruby/object:Gem::Requirement
121
162
  requirements:
122
163
  - - "~>"
123
164
  - !ruby/object:Gem::Version
124
- version: '0.21'
165
+ version: '0.22'
125
166
  description: SmartCore::Schema is a schema validator for Hash-like data structures
126
167
  email:
127
168
  - iamdaiver@gmail.com
@@ -173,10 +214,40 @@ files:
173
214
  - lib/smart_core/schema/checker/rules/verifier.rb
174
215
  - lib/smart_core/schema/checker/rules/verifier/result.rb
175
216
  - lib/smart_core/schema/checker/verifiable_hash.rb
217
+ - lib/smart_core/schema/configuration.rb
176
218
  - lib/smart_core/schema/dsl.rb
177
219
  - lib/smart_core/schema/errors.rb
178
220
  - lib/smart_core/schema/key_control.rb
221
+ - lib/smart_core/schema/plugins.rb
222
+ - lib/smart_core/schema/plugins/abstract.rb
223
+ - lib/smart_core/schema/plugins/access_mixin.rb
224
+ - lib/smart_core/schema/plugins/dry_types.rb
225
+ - lib/smart_core/schema/plugins/dry_types/dry_types.rb
226
+ - lib/smart_core/schema/plugins/dry_types/dry_types/abstract_factory.rb
227
+ - lib/smart_core/schema/plugins/dry_types/dry_types/operation.rb
228
+ - lib/smart_core/schema/plugins/dry_types/dry_types/operation/base.rb
229
+ - lib/smart_core/schema/plugins/dry_types/dry_types/operation/cast.rb
230
+ - lib/smart_core/schema/plugins/dry_types/dry_types/operation/valid.rb
231
+ - lib/smart_core/schema/plugins/dry_types/dry_types/operation/validate.rb
232
+ - lib/smart_core/schema/plugins/dry_types/errors.rb
233
+ - lib/smart_core/schema/plugins/registry.rb
234
+ - lib/smart_core/schema/plugins/registry_interface.rb
179
235
  - lib/smart_core/schema/result.rb
236
+ - lib/smart_core/schema/type_system.rb
237
+ - lib/smart_core/schema/type_system/interop.rb
238
+ - lib/smart_core/schema/type_system/interop/abstract_factory.rb
239
+ - lib/smart_core/schema/type_system/interop/aliasing.rb
240
+ - lib/smart_core/schema/type_system/interop/aliasing/alias_list.rb
241
+ - lib/smart_core/schema/type_system/interop/operation.rb
242
+ - lib/smart_core/schema/type_system/registry.rb
243
+ - lib/smart_core/schema/type_system/registry_interface.rb
244
+ - lib/smart_core/schema/type_system/smart_types.rb
245
+ - lib/smart_core/schema/type_system/smart_types/abstract_factory.rb
246
+ - lib/smart_core/schema/type_system/smart_types/operation.rb
247
+ - lib/smart_core/schema/type_system/smart_types/operation/base.rb
248
+ - lib/smart_core/schema/type_system/smart_types/operation/cast.rb
249
+ - lib/smart_core/schema/type_system/smart_types/operation/valid.rb
250
+ - lib/smart_core/schema/type_system/smart_types/operation/validate.rb
180
251
  - lib/smart_core/schema/version.rb
181
252
  - smart_schema.gemspec
182
253
  homepage: https://github.com/smart-rb/smart_schema
@@ -186,7 +257,6 @@ metadata:
186
257
  homepage_uri: https://github.com/smart-rb/smart_schema
187
258
  source_code_uri: https://github.com/smart-rb/smart_schema
188
259
  changelog_uri: https://github.com/smart-rb/smart_schema/blob/master/CHANGELOG.md
189
- post_install_message:
190
260
  rdoc_options: []
191
261
  require_paths:
192
262
  - lib
@@ -194,15 +264,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
194
264
  requirements:
195
265
  - - ">="
196
266
  - !ruby/object:Gem::Version
197
- version: 2.5.8
267
+ version: '3.3'
198
268
  required_rubygems_version: !ruby/object:Gem::Requirement
199
269
  requirements:
200
270
  - - ">="
201
271
  - !ruby/object:Gem::Version
202
272
  version: '0'
203
273
  requirements: []
204
- rubygems_version: 3.3.11
205
- signing_key:
274
+ rubygems_version: 4.0.3
206
275
  specification_version: 4
207
276
  summary: SmartCore::Schema is a schema validator for Hash-like data structures
208
277
  test_files: []