smart_schema 0.12.1 → 0.12.2

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 (82) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +12 -0
  3. data/.rspec +3 -0
  4. data/.rubocop.yml +20 -0
  5. data/CHANGELOG.md +106 -0
  6. data/CODE_OF_CONDUCT.md +74 -0
  7. data/Gemfile +5 -0
  8. data/Gemfile.lock +266 -0
  9. data/LICENSE.txt +21 -0
  10. data/README.md +305 -0
  11. data/Rakefile +21 -0
  12. data/bin/console +8 -0
  13. data/bin/setup +8 -0
  14. data/lib/smart_core/schema/checker/reconciler/constructor.rb +60 -0
  15. data/lib/smart_core/schema/checker/reconciler/matcher/options.rb +33 -0
  16. data/lib/smart_core/schema/checker/reconciler/matcher/result.rb +87 -0
  17. data/lib/smart_core/schema/checker/reconciler/matcher/result_finalizer.rb +186 -0
  18. data/lib/smart_core/schema/checker/reconciler/matcher.rb +62 -0
  19. data/lib/smart_core/schema/checker/reconciler.rb +106 -0
  20. data/lib/smart_core/schema/checker/rules/base.rb +110 -0
  21. data/lib/smart_core/schema/checker/rules/extra_keys/failure.rb +24 -0
  22. data/lib/smart_core/schema/checker/rules/extra_keys/result.rb +37 -0
  23. data/lib/smart_core/schema/checker/rules/extra_keys/success.rb +30 -0
  24. data/lib/smart_core/schema/checker/rules/extra_keys.rb +31 -0
  25. data/lib/smart_core/schema/checker/rules/optional.rb +27 -0
  26. data/lib/smart_core/schema/checker/rules/options/empty.rb +43 -0
  27. data/lib/smart_core/schema/checker/rules/options/filled.rb +49 -0
  28. data/lib/smart_core/schema/checker/rules/options/type.rb +88 -0
  29. data/lib/smart_core/schema/checker/rules/options.rb +60 -0
  30. data/lib/smart_core/schema/checker/rules/required.rb +27 -0
  31. data/lib/smart_core/schema/checker/rules/requirement/optional.rb +36 -0
  32. data/lib/smart_core/schema/checker/rules/requirement/required.rb +36 -0
  33. data/lib/smart_core/schema/checker/rules/requirement/result.rb +95 -0
  34. data/lib/smart_core/schema/checker/rules/requirement.rb +9 -0
  35. data/lib/smart_core/schema/checker/rules/result/base.rb +44 -0
  36. data/lib/smart_core/schema/checker/rules/result/failure.rb +41 -0
  37. data/lib/smart_core/schema/checker/rules/result/success.rb +15 -0
  38. data/lib/smart_core/schema/checker/rules/result.rb +9 -0
  39. data/lib/smart_core/schema/checker/rules/type_aliases.rb +57 -0
  40. data/lib/smart_core/schema/checker/rules/verifier/result.rb +75 -0
  41. data/lib/smart_core/schema/checker/rules/verifier.rb +74 -0
  42. data/lib/smart_core/schema/checker/rules.rb +89 -0
  43. data/lib/smart_core/schema/checker/verifiable_hash.rb +65 -0
  44. data/lib/smart_core/schema/checker.rb +106 -0
  45. data/lib/smart_core/schema/configuration.rb +33 -0
  46. data/lib/smart_core/schema/dsl.rb +81 -0
  47. data/lib/smart_core/schema/errors.rb +65 -0
  48. data/lib/smart_core/schema/key_control.rb +39 -0
  49. data/lib/smart_core/schema/plugins/abstract.rb +55 -0
  50. data/lib/smart_core/schema/plugins/access_mixin.rb +47 -0
  51. data/lib/smart_core/schema/plugins/dry_types/dry_types/abstract_factory.rb +99 -0
  52. data/lib/smart_core/schema/plugins/dry_types/dry_types/operation/base.rb +9 -0
  53. data/lib/smart_core/schema/plugins/dry_types/dry_types/operation/cast.rb +21 -0
  54. data/lib/smart_core/schema/plugins/dry_types/dry_types/operation/valid.rb +16 -0
  55. data/lib/smart_core/schema/plugins/dry_types/dry_types/operation/validate.rb +19 -0
  56. data/lib/smart_core/schema/plugins/dry_types/dry_types/operation.rb +12 -0
  57. data/lib/smart_core/schema/plugins/dry_types/dry_types.rb +10 -0
  58. data/lib/smart_core/schema/plugins/dry_types/errors.rb +13 -0
  59. data/lib/smart_core/schema/plugins/dry_types.rb +27 -0
  60. data/lib/smart_core/schema/plugins/registry.rb +158 -0
  61. data/lib/smart_core/schema/plugins/registry_interface.rb +63 -0
  62. data/lib/smart_core/schema/plugins.rb +17 -0
  63. data/lib/smart_core/schema/result.rb +62 -0
  64. data/lib/smart_core/schema/type_system/interop/abstract_factory.rb +92 -0
  65. data/lib/smart_core/schema/type_system/interop/aliasing/alias_list.rb +131 -0
  66. data/lib/smart_core/schema/type_system/interop/aliasing.rb +72 -0
  67. data/lib/smart_core/schema/type_system/interop/operation.rb +30 -0
  68. data/lib/smart_core/schema/type_system/interop.rb +128 -0
  69. data/lib/smart_core/schema/type_system/registry.rb +162 -0
  70. data/lib/smart_core/schema/type_system/registry_interface.rb +87 -0
  71. data/lib/smart_core/schema/type_system/smart_types/abstract_factory.rb +99 -0
  72. data/lib/smart_core/schema/type_system/smart_types/operation/base.rb +8 -0
  73. data/lib/smart_core/schema/type_system/smart_types/operation/cast.rb +16 -0
  74. data/lib/smart_core/schema/type_system/smart_types/operation/valid.rb +16 -0
  75. data/lib/smart_core/schema/type_system/smart_types/operation/validate.rb +16 -0
  76. data/lib/smart_core/schema/type_system/smart_types/operation.rb +13 -0
  77. data/lib/smart_core/schema/type_system/smart_types.rb +48 -0
  78. data/lib/smart_core/schema/type_system.rb +16 -0
  79. data/lib/smart_core/schema/version.rb +14 -0
  80. data/lib/smart_core/schema.rb +67 -0
  81. data/smart_schema.gemspec +46 -0
  82. metadata +83 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4162311849cefaf2f251e61ec03b62044853f349da1505a34d5d292b0f2b0208
4
- data.tar.gz: dae5536d6035f67546136f12ffe1fc52d602bdffc8dd5eeba120fec2313c4cd7
3
+ metadata.gz: 1baeb9efbe28675cb34582cba0f687b6a70bf05c4864e8d5e94517276536efc5
4
+ data.tar.gz: de5f2789d69a4a16fc93cbbee9caa71c9f1a21779efe3fafcca69edbd3f7d4f2
5
5
  SHA512:
6
- metadata.gz: 172d8026909f6676a079672bb48b9a856d29f1a30c10b59debcb2ddd37f83bf3ecad00ebd658a440c082ffea806d73d1ed7d2750b0fcd1134b05697c473a5393
7
- data.tar.gz: 8cf8d948c812075b068479e25737a0d43999831f2dea87a018d6d62fe8c1049d96bb27076f88173ed91d4bd4ae1939669d768402ee9e8ce8e5c215c14014d909
6
+ metadata.gz: 79b8b451be28bfa26c0cba74d4fbf0508a8f380aaeb26a4483f034b34cad15aaf7151349c5154d48e18d4dcdedbc41887d4c62ebd5c3b2cb8c614af78e40152a
7
+ data.tar.gz: 9da91cb3e55e452721c602ab0e6cc22c0f4cc1af6a79b7a1a736401cfd7ab7ff536b38b9040a0b7da7f10f22b8916f6e97aa606fb7736739266290e700e7fd1a
data/.gitignore ADDED
@@ -0,0 +1,12 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /_yardoc/
4
+ /coverage/
5
+ /doc/
6
+ /pkg/
7
+ /spec/reports/
8
+ /tmp/
9
+ .rspec_status
10
+ /.idea
11
+ .ruby-version
12
+ *.gem
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --format progress
2
+ --color
3
+ --require spec_helper
data/.rubocop.yml ADDED
@@ -0,0 +1,20 @@
1
+ inherit_gem:
2
+ armitage-rubocop:
3
+ - lib/rubocop.general.yml
4
+ - lib/rubocop.rake.yml
5
+ - lib/rubocop.rspec.yml
6
+
7
+ AllCops:
8
+ TargetRubyVersion: 3.3
9
+ NewCops: enable
10
+ Include:
11
+ - lib/**/*.rb
12
+ - spec/**/*.rb
13
+ - Gemfile
14
+ - Rakefile
15
+ - smart_schema.gemspec
16
+ - bin/console
17
+
18
+ # NOTE: It is not suitable for infrastracture-level frameworks
19
+ Metrics/ParameterLists:
20
+ Enabled: false
data/CHANGELOG.md ADDED
@@ -0,0 +1,106 @@
1
+ # Changelog
2
+ All notable changes to this project will be documented in this file.
3
+
4
+ # [0.12.2] - 2026-02-18
5
+ - Empty release for the gem republishing;
6
+
7
+ # [0.12.1] - 2026-02-18
8
+ ## Fixed
9
+ - Nested schemas requires :hash type for their schema key, but
10
+ this type is resolved from the type alias, not from the type object.
11
+ - Added an object reference to the hash primitive in `type interop` subsystem (interop + abstract factory);
12
+ - each type system should provide hash type class:
13
+ - smart-core provides/recognizes nested structures with `SmartCore::Types::Hash`;
14
+ - dry-types provides/recognizes nested structures with `Dry::Types['hash']`;
15
+
16
+ ```ruby
17
+ # before:
18
+
19
+ require 'dry-types'
20
+ SmartCore::Schema::Configuration.configure { |c| c.type_system = :dry_types }
21
+
22
+ class MySchema < SmartCore::Schema
23
+ schema do
24
+ requried(:some_data) do # <- previously: failed on unrecognized type with :hash alias
25
+ requireqd(:some_key).type(Dry::Types['string'])
26
+ end
27
+ end
28
+ end
29
+ ```
30
+
31
+ # [0.12.0] - 2026-02-17
32
+ ## Added
33
+ - Plugin ecosystem;
34
+ - Support for **Ruby@4.x**;
35
+ - Support for `dry-types` type system;
36
+ - An ability to chose the preferred type system (globally at the moment):
37
+ - supports `smart-types` (by default);
38
+ - supports `dry-types` (as a plugin);
39
+ ## Changed
40
+ - *Ruby@3.3* is a minimal ruby version at the moment;
41
+
42
+ # [0.11.0] - 2022-11-25
43
+ ## Changed
44
+ - Reduced object allocation count inside the type validation logic (updated `smart_types` to `~> 0.8`);
45
+ - Support for *Ruby@2.5* and *Ruby@2.6* has ended;
46
+ - Updated development dependencies;
47
+
48
+ # [0.10.0] - 2022-10-16
49
+ ## Changed
50
+ - Updated `smart_engine` dependency with a `SmartCore::Engine::ReadWriteLock` fixes;
51
+
52
+ # [0.9.0] - 2022-09-30
53
+ ## Changed
54
+ - Reduced context switching count during lock operations (migrate from `SmartCore::Engine::Lock` to `SmartCore::Engine::ReadWriteLock`);
55
+
56
+ # [0.8.0] - 2022-09-30
57
+ ## Changed
58
+ - Reduced object allocations and mutex usage:
59
+ - only one mutex of `SmartCore::Schema::Checker` instance is enough cuz this mutex covers the entire validation process;
60
+ - more retained objects in `SmartCore::Schema::Checker::Rules` (cache layer for rule names);
61
+ - Updated development dependencies;
62
+ - Updated `smart_engine` dependency (`~> 0.11` -> `~> 0.13`);
63
+
64
+ # [0.7.0] - 2022-09-28
65
+ ## Changed
66
+ - Started the total code refactoring in order to decrease object and memory allocations:
67
+ - Decreased object allocations in `SmartCore::Schema::Checker::VerifiableHash#fetch(key)`
68
+
69
+ # [0.6.0] - 2022-09-27
70
+ ## Added
71
+ - Now `Forwardable` module has explicit requiring in order to support *Ruby@3.1* (`lib/smart_core/smart_schema.rb#6`);
72
+
73
+ # [0.5.0] - 2021-01-18
74
+ ## Changed
75
+ - Updated `smart_types` dependency (`~> 0.4.0`) to guarantee **Ruby@3** compatability;
76
+
77
+ # [0.4.0] - 2021-01-18
78
+ ## Added
79
+ - Support for **Ruby@3**;
80
+
81
+ ## Changed
82
+ - No more `TravisCI` (TODO: migrate to `GitHub Actions`);
83
+ - Updated development dependencies;
84
+
85
+ # [0.3.0] - 2020-12-03
86
+ ### Added
87
+ - Support for *strict* and *non-strict* schemas;
88
+ - `strict!` DSL directive marks your schema as a strict schema (your hash can not have extra keys);
89
+ - `non_strict!` DSL directive marks your schema as non-strict schema (your hash can have extra keys);
90
+ - use `strict!` in any schema's context place to mark your current schema context as a strict;
91
+ - use `non_strict` in any schema's context place to mark your current schema context as a strict;
92
+ - use `schema(:strict)` to globally define strict schema (default behavior);
93
+ - use `schema(:non_strict)` to globally define non-strict schema;
94
+ - nested schemas inherits strict behavior from outer schemas;
95
+ - root schema is `:strict` by default;
96
+ - schema reopening without mode attribute does not change original schema mode
97
+ (you should manually pass a mode attribute to redefine already defined schema mode);
98
+
99
+ # [0.2.0] - 2020-11-09
100
+ ### Added
101
+ - `#errors` now includes `#extra_keys` too (`:extra_key` error code for each extra key);
102
+ - Unfreezed `SmartCore::Schema::Checker::Rules::TYPE_ALIASES` for extendability (until `smart_type-syste` has been integrated);
103
+
104
+ # [0.1.0] - 2020-08-25
105
+
106
+ - Release :)
@@ -0,0 +1,74 @@
1
+ # Contributor Covenant Code of Conduct
2
+
3
+ ## Our Pledge
4
+
5
+ In the interest of fostering an open and welcoming environment, we as
6
+ contributors and maintainers pledge to making participation in our project and
7
+ our community a harassment-free experience for everyone, regardless of age, body
8
+ size, disability, ethnicity, gender identity and expression, level of experience,
9
+ nationality, personal appearance, race, religion, or sexual identity and
10
+ orientation.
11
+
12
+ ## Our Standards
13
+
14
+ Examples of behavior that contributes to creating a positive environment
15
+ include:
16
+
17
+ * Using welcoming and inclusive language
18
+ * Being respectful of differing viewpoints and experiences
19
+ * Gracefully accepting constructive criticism
20
+ * Focusing on what is best for the community
21
+ * Showing empathy towards other community members
22
+
23
+ Examples of unacceptable behavior by participants include:
24
+
25
+ * The use of sexualized language or imagery and unwelcome sexual attention or
26
+ advances
27
+ * Trolling, insulting/derogatory comments, and personal or political attacks
28
+ * Public or private harassment
29
+ * Publishing others' private information, such as a physical or electronic
30
+ address, without explicit permission
31
+ * Other conduct which could reasonably be considered inappropriate in a
32
+ professional setting
33
+
34
+ ## Our Responsibilities
35
+
36
+ Project maintainers are responsible for clarifying the standards of acceptable
37
+ behavior and are expected to take appropriate and fair corrective action in
38
+ response to any instances of unacceptable behavior.
39
+
40
+ Project maintainers have the right and responsibility to remove, edit, or
41
+ reject comments, commits, code, wiki edits, issues, and other contributions
42
+ that are not aligned to this Code of Conduct, or to ban temporarily or
43
+ permanently any contributor for other behaviors that they deem inappropriate,
44
+ threatening, offensive, or harmful.
45
+
46
+ ## Scope
47
+
48
+ This Code of Conduct applies both within project spaces and in public spaces
49
+ when an individual is representing the project or its community. Examples of
50
+ representing a project or community include using an official project e-mail
51
+ address, posting via an official social media account, or acting as an appointed
52
+ representative at an online or offline event. Representation of a project may be
53
+ further defined and clarified by project maintainers.
54
+
55
+ ## Enforcement
56
+
57
+ Instances of abusive, harassing, or otherwise unacceptable behavior may be
58
+ reported by contacting the project team at iamdaiver@gmail.com. All
59
+ complaints will be reviewed and investigated and will result in a response that
60
+ is deemed necessary and appropriate to the circumstances. The project team is
61
+ obligated to maintain confidentiality with regard to the reporter of an incident.
62
+ Further details of specific enforcement policies may be posted separately.
63
+
64
+ Project maintainers who do not follow or enforce the Code of Conduct in good
65
+ faith may face temporary or permanent repercussions as determined by other
66
+ members of the project's leadership.
67
+
68
+ ## Attribution
69
+
70
+ This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
71
+ available at [https://contributor-covenant.org/version/1/4][version]
72
+
73
+ [homepage]: https://contributor-covenant.org
74
+ [version]: https://contributor-covenant.org/version/1/4/
data/Gemfile ADDED
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
4
+
5
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,266 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ smart_schema (0.12.2)
5
+ qonfig (~> 0.30)
6
+ smart_engine (~> 0.17)
7
+ smart_types (~> 0.8)
8
+
9
+ GEM
10
+ remote: https://rubygems.org/
11
+ specs:
12
+ activesupport (8.1.2)
13
+ base64
14
+ bigdecimal
15
+ concurrent-ruby (~> 1.0, >= 1.3.1)
16
+ connection_pool (>= 2.2.5)
17
+ drb
18
+ i18n (>= 1.6, < 2)
19
+ json
20
+ logger (>= 1.4.2)
21
+ minitest (>= 5.1)
22
+ securerandom (>= 0.3)
23
+ tzinfo (~> 2.0, >= 2.0.5)
24
+ uri (>= 0.13.1)
25
+ armitage-rubocop (1.81.7.0)
26
+ rubocop (= 1.81.7)
27
+ rubocop-capybara (= 2.22.1)
28
+ rubocop-factory_bot (= 2.28.0)
29
+ rubocop-on-rbs (= 1.8.0)
30
+ rubocop-performance (= 1.26.1)
31
+ rubocop-rails (= 2.33.4)
32
+ rubocop-rake (= 0.7.1)
33
+ rubocop-rspec (= 3.8.0)
34
+ rubocop-rspec_rails (= 2.32.0)
35
+ rubocop-thread_safety (= 0.7.3)
36
+ ast (2.4.3)
37
+ base64 (0.3.0)
38
+ bigdecimal (4.0.1)
39
+ coderay (1.1.3)
40
+ concurrent-ruby (1.3.6)
41
+ connection_pool (3.0.2)
42
+ diff-lcs (1.6.2)
43
+ docile (1.4.1)
44
+ drb (2.2.3)
45
+ dry-core (1.2.0)
46
+ concurrent-ruby (~> 1.0)
47
+ logger
48
+ zeitwerk (~> 2.6)
49
+ dry-inflector (1.3.1)
50
+ dry-logic (1.6.0)
51
+ bigdecimal
52
+ concurrent-ruby (~> 1.0)
53
+ dry-core (~> 1.1)
54
+ zeitwerk (~> 2.6)
55
+ dry-types (1.9.1)
56
+ bigdecimal (>= 3.0)
57
+ concurrent-ruby (~> 1.0)
58
+ dry-core (~> 1.0)
59
+ dry-inflector (~> 1.0)
60
+ dry-logic (~> 1.4)
61
+ zeitwerk (~> 2.6)
62
+ i18n (1.14.8)
63
+ concurrent-ruby (~> 1.0)
64
+ io-console (0.8.2)
65
+ json (2.18.1)
66
+ language_server-protocol (3.17.0.5)
67
+ lint_roller (1.1.0)
68
+ logger (1.7.0)
69
+ method_source (1.1.0)
70
+ minitest (6.0.1)
71
+ prism (~> 1.5)
72
+ parallel (1.27.0)
73
+ parser (3.3.10.2)
74
+ ast (~> 2.4.1)
75
+ racc
76
+ prism (1.9.0)
77
+ pry (0.16.0)
78
+ coderay (~> 1.1)
79
+ method_source (~> 1.0)
80
+ reline (>= 0.6.0)
81
+ pry-doc (1.7.0)
82
+ pry (~> 0.11)
83
+ yard (~> 0.9.21)
84
+ qonfig (0.30.0)
85
+ base64 (>= 0.2)
86
+ racc (1.8.1)
87
+ rack (3.2.5)
88
+ rainbow (3.1.1)
89
+ rake (13.3.1)
90
+ rbs (3.10.3)
91
+ logger
92
+ tsort
93
+ regexp_parser (2.11.3)
94
+ reline (0.6.3)
95
+ io-console (~> 0.5)
96
+ rspec (3.13.2)
97
+ rspec-core (~> 3.13.0)
98
+ rspec-expectations (~> 3.13.0)
99
+ rspec-mocks (~> 3.13.0)
100
+ rspec-core (3.13.6)
101
+ rspec-support (~> 3.13.0)
102
+ rspec-expectations (3.13.5)
103
+ diff-lcs (>= 1.2.0, < 2.0)
104
+ rspec-support (~> 3.13.0)
105
+ rspec-mocks (3.13.7)
106
+ diff-lcs (>= 1.2.0, < 2.0)
107
+ rspec-support (~> 3.13.0)
108
+ rspec-support (3.13.7)
109
+ rubocop (1.81.7)
110
+ json (~> 2.3)
111
+ language_server-protocol (~> 3.17.0.2)
112
+ lint_roller (~> 1.1.0)
113
+ parallel (~> 1.10)
114
+ parser (>= 3.3.0.2)
115
+ rainbow (>= 2.2.2, < 4.0)
116
+ regexp_parser (>= 2.9.3, < 3.0)
117
+ rubocop-ast (>= 1.47.1, < 2.0)
118
+ ruby-progressbar (~> 1.7)
119
+ unicode-display_width (>= 2.4.0, < 4.0)
120
+ rubocop-ast (1.49.0)
121
+ parser (>= 3.3.7.2)
122
+ prism (~> 1.7)
123
+ rubocop-capybara (2.22.1)
124
+ lint_roller (~> 1.1)
125
+ rubocop (~> 1.72, >= 1.72.1)
126
+ rubocop-factory_bot (2.28.0)
127
+ lint_roller (~> 1.1)
128
+ rubocop (~> 1.72, >= 1.72.1)
129
+ rubocop-on-rbs (1.8.0)
130
+ lint_roller (~> 1.1)
131
+ rbs (~> 3.5)
132
+ rubocop (>= 1.72.1, < 2.0)
133
+ zlib
134
+ rubocop-performance (1.26.1)
135
+ lint_roller (~> 1.1)
136
+ rubocop (>= 1.75.0, < 2.0)
137
+ rubocop-ast (>= 1.47.1, < 2.0)
138
+ rubocop-rails (2.33.4)
139
+ activesupport (>= 4.2.0)
140
+ lint_roller (~> 1.1)
141
+ rack (>= 1.1)
142
+ rubocop (>= 1.75.0, < 2.0)
143
+ rubocop-ast (>= 1.44.0, < 2.0)
144
+ rubocop-rake (0.7.1)
145
+ lint_roller (~> 1.1)
146
+ rubocop (>= 1.72.1)
147
+ rubocop-rspec (3.8.0)
148
+ lint_roller (~> 1.1)
149
+ rubocop (~> 1.81)
150
+ rubocop-rspec_rails (2.32.0)
151
+ lint_roller (~> 1.1)
152
+ rubocop (~> 1.72, >= 1.72.1)
153
+ rubocop-rspec (~> 3.5)
154
+ rubocop-thread_safety (0.7.3)
155
+ lint_roller (~> 1.1)
156
+ rubocop (~> 1.72, >= 1.72.1)
157
+ rubocop-ast (>= 1.44.0, < 2.0)
158
+ ruby-progressbar (1.13.0)
159
+ securerandom (0.4.1)
160
+ simplecov (0.22.0)
161
+ docile (~> 1.1)
162
+ simplecov-html (~> 0.11)
163
+ simplecov_json_formatter (~> 0.1)
164
+ simplecov-html (0.13.2)
165
+ simplecov_json_formatter (0.1.4)
166
+ smart_engine (0.17.0)
167
+ smart_types (0.8.0)
168
+ smart_engine (~> 0.11)
169
+ tsort (0.2.0)
170
+ tzinfo (2.0.6)
171
+ concurrent-ruby (~> 1.0)
172
+ unicode-display_width (3.2.0)
173
+ unicode-emoji (~> 4.1)
174
+ unicode-emoji (4.2.0)
175
+ uri (1.1.1)
176
+ yard (0.9.38)
177
+ zeitwerk (2.7.4)
178
+ zlib (3.2.2)
179
+
180
+ PLATFORMS
181
+ arm64-darwin-25
182
+ ruby
183
+
184
+ DEPENDENCIES
185
+ armitage-rubocop (~> 1.81)
186
+ bundler
187
+ dry-types (~> 1.9)
188
+ pry (~> 0.16)
189
+ pry-doc (~> 1.7)
190
+ rake (~> 13.3)
191
+ rspec (~> 3.13)
192
+ simplecov (~> 0.22)
193
+ smart_schema!
194
+
195
+ CHECKSUMS
196
+ activesupport (8.1.2) sha256=88842578ccd0d40f658289b0e8c842acfe9af751afee2e0744a7873f50b6fdae
197
+ armitage-rubocop (1.81.7.0) sha256=7ee404a2fea0f6dac5e12bda0d152851e90f0f6c9eb661064ea1c0f22e3511a9
198
+ ast (2.4.3) sha256=954615157c1d6a382bc27d690d973195e79db7f55e9765ac7c481c60bdb4d383
199
+ base64 (0.3.0) sha256=27337aeabad6ffae05c265c450490628ef3ebd4b67be58257393227588f5a97b
200
+ bigdecimal (4.0.1) sha256=8b07d3d065a9f921c80ceaea7c9d4ae596697295b584c296fe599dd0ad01c4a7
201
+ coderay (1.1.3) sha256=dc530018a4684512f8f38143cd2a096c9f02a1fc2459edcfe534787a7fc77d4b
202
+ concurrent-ruby (1.3.6) sha256=6b56837e1e7e5292f9864f34b69c5a2cbc75c0cf5338f1ce9903d10fa762d5ab
203
+ connection_pool (3.0.2) sha256=33fff5ba71a12d2aa26cb72b1db8bba2a1a01823559fb01d29eb74c286e62e0a
204
+ diff-lcs (1.6.2) sha256=9ae0d2cba7d4df3075fe8cd8602a8604993efc0dfa934cff568969efb1909962
205
+ docile (1.4.1) sha256=96159be799bfa73cdb721b840e9802126e4e03dfc26863db73647204c727f21e
206
+ drb (2.2.3) sha256=0b00d6fdb50995fe4a45dea13663493c841112e4068656854646f418fda13373
207
+ dry-core (1.2.0) sha256=0cc5a7da88df397f153947eeeae42e876e999c1e30900f3c536fb173854e96a1
208
+ dry-inflector (1.3.1) sha256=7fb0c2bb04f67638f25c52e7ba39ab435d922a3a5c3cd196120f63accb682dcc
209
+ dry-logic (1.6.0) sha256=da6fedbc0f90fc41f9b0cc7e6f05f5d529d1efaef6c8dcc8e0733f685745cea2
210
+ dry-types (1.9.1) sha256=baebeecdb9f8395d6c9d227b62011279440943e3ef2468fe8ccc1ba11467f178
211
+ i18n (1.14.8) sha256=285778639134865c5e0f6269e0b818256017e8cde89993fdfcbfb64d088824a5
212
+ io-console (0.8.2) sha256=d6e3ae7a7cc7574f4b8893b4fca2162e57a825b223a177b7afa236c5ef9814cc
213
+ json (2.18.1) sha256=fe112755501b8d0466b5ada6cf50c8c3f41e897fa128ac5d263ec09eedc9f986
214
+ language_server-protocol (3.17.0.5) sha256=fd1e39a51a28bf3eec959379985a72e296e9f9acfce46f6a79d31ca8760803cc
215
+ lint_roller (1.1.0) sha256=2c0c845b632a7d172cb849cc90c1bce937a28c5c8ccccb50dfd46a485003cc87
216
+ logger (1.7.0) sha256=196edec7cc44b66cfb40f9755ce11b392f21f7967696af15d274dde7edff0203
217
+ method_source (1.1.0) sha256=181301c9c45b731b4769bc81e8860e72f9161ad7d66dd99103c9ab84f560f5c5
218
+ minitest (6.0.1) sha256=7854c74f48e2e975969062833adc4013f249a4b212f5e7b9d5c040bf838d54bb
219
+ parallel (1.27.0) sha256=4ac151e1806b755fb4e2dc2332cbf0e54f2e24ba821ff2d3dcf86bf6dc4ae130
220
+ parser (3.3.10.2) sha256=6f60c84aa4bdcedb6d1a2434b738fe8a8136807b6adc8f7f53b97da9bc4e9357
221
+ prism (1.9.0) sha256=7b530c6a9f92c24300014919c9dcbc055bf4cdf51ec30aed099b06cd6674ef85
222
+ pry (0.16.0) sha256=d76c69065698ed1f85e717bd33d7942c38a50868f6b0673c636192b3d1b6054e
223
+ pry-doc (1.7.0) sha256=6ada9fec062b54441c6444e44f94c345e5c8c0af499d654e40d5a581eb222d8e
224
+ qonfig (0.30.0) sha256=c6b9cd02fb707e919b72e17c866a69f16018c3f8c5e0faca4127f15deab29e19
225
+ racc (1.8.1) sha256=4a7f6929691dbec8b5209a0b373bc2614882b55fc5d2e447a21aaa691303d62f
226
+ rack (3.2.5) sha256=4cbd0974c0b79f7a139b4812004a62e4c60b145cba76422e288ee670601ed6d3
227
+ rainbow (3.1.1) sha256=039491aa3a89f42efa1d6dec2fc4e62ede96eb6acd95e52f1ad581182b79bc6a
228
+ rake (13.3.1) sha256=8c9e89d09f66a26a01264e7e3480ec0607f0c497a861ef16063604b1b08eb19c
229
+ rbs (3.10.3) sha256=70627f3919016134d554e6c99195552ae3ef6020fe034c8e983facc9c192daa6
230
+ regexp_parser (2.11.3) sha256=ca13f381a173b7a93450e53459075c9b76a10433caadcb2f1180f2c741fc55a4
231
+ reline (0.6.3) sha256=1198b04973565b36ec0f11542ab3f5cfeeec34823f4e54cebde90968092b1835
232
+ rspec (3.13.2) sha256=206284a08ad798e61f86d7ca3e376718d52c0bc944626b2349266f239f820587
233
+ rspec-core (3.13.6) sha256=a8823c6411667b60a8bca135364351dda34cd55e44ff94c4be4633b37d828b2d
234
+ rspec-expectations (3.13.5) sha256=33a4d3a1d95060aea4c94e9f237030a8f9eae5615e9bd85718fe3a09e4b58836
235
+ rspec-mocks (3.13.7) sha256=0979034e64b1d7a838aaaddf12bf065ea4dc40ef3d4c39f01f93ae2c66c62b1c
236
+ rspec-support (3.13.7) sha256=0640e5570872aafefd79867901deeeeb40b0c9875a36b983d85f54fb7381c47c
237
+ rubocop (1.81.7) sha256=6fb5cc298c731691e2a414fe0041a13eb1beed7bab23aec131da1bcc527af094
238
+ rubocop-ast (1.49.0) sha256=49c3676d3123a0923d333e20c6c2dbaaae2d2287b475273fddee0c61da9f71fd
239
+ rubocop-capybara (2.22.1) sha256=ced88caef23efea53f46e098ff352f8fc1068c649606ca75cb74650970f51c0c
240
+ rubocop-factory_bot (2.28.0) sha256=4b17fc02124444173317e131759d195b0d762844a71a29fe8139c1105d92f0cb
241
+ rubocop-on-rbs (1.8.0) sha256=ee8b734cd5bc0371fae32c8ff95082440cde562f52e1b74b5dfbe488de004643
242
+ rubocop-performance (1.26.1) sha256=cd19b936ff196df85829d264b522fd4f98b6c89ad271fa52744a8c11b8f71834
243
+ rubocop-rails (2.33.4) sha256=34ec8f6637706dc224483d949ccc88b3e41596a81a11a1ec0c7d74ecbea356b5
244
+ rubocop-rake (0.7.1) sha256=3797f2b6810c3e9df7376c26d5f44f3475eda59eb1adc38e6f62ecf027cbae4d
245
+ rubocop-rspec (3.8.0) sha256=28440dccb3f223a9938ca1f946bd3438275b8c6c156dab909e2cb8bc424cab33
246
+ rubocop-rspec_rails (2.32.0) sha256=4a0d641c72f6ebb957534f539d9d0a62c47abd8ce0d0aeee1ef4701e892a9100
247
+ rubocop-thread_safety (0.7.3) sha256=067cdd52fbf5deffc18995437e45b5194236eaff4f71de3375a1f6052e48f431
248
+ ruby-progressbar (1.13.0) sha256=80fc9c47a9b640d6834e0dc7b3c94c9df37f08cb072b7761e4a71e22cff29b33
249
+ securerandom (0.4.1) sha256=cc5193d414a4341b6e225f0cb4446aceca8e50d5e1888743fac16987638ea0b1
250
+ simplecov (0.22.0) sha256=fe2622c7834ff23b98066bb0a854284b2729a569ac659f82621fc22ef36213a5
251
+ simplecov-html (0.13.2) sha256=bd0b8e54e7c2d7685927e8d6286466359b6f16b18cb0df47b508e8d73c777246
252
+ simplecov_json_formatter (0.1.4) sha256=529418fbe8de1713ac2b2d612aa3daa56d316975d307244399fa4838c601b428
253
+ smart_engine (0.17.0) sha256=33321745063737a9262f53ef7b5b040d65f8d8f5a5230ac6d3c2461b0404a52b
254
+ smart_schema (0.12.2)
255
+ smart_types (0.8.0) sha256=87879face377e4738e887f4b34657f8ed9572b8d22bd2deb6028bb45261a5bb7
256
+ tsort (0.2.0) sha256=9650a793f6859a43b6641671278f79cfead60ac714148aabe4e3f0060480089f
257
+ tzinfo (2.0.6) sha256=8daf828cc77bcf7d63b0e3bdb6caa47e2272dcfaf4fbfe46f8c3a9df087a829b
258
+ unicode-display_width (3.2.0) sha256=0cdd96b5681a5949cdbc2c55e7b420facae74c4aaf9a9815eee1087cb1853c42
259
+ unicode-emoji (4.2.0) sha256=519e69150f75652e40bf736106cfbc8f0f73aa3fb6a65afe62fefa7f80b0f80f
260
+ uri (1.1.1) sha256=379fa58d27ffb1387eaada68c749d1426738bd0f654d812fcc07e7568f5c57c6
261
+ yard (0.9.38) sha256=721fb82afb10532aa49860655f6cc2eaa7130889df291b052e1e6b268283010f
262
+ zeitwerk (2.7.4) sha256=2bef90f356bdafe9a6c2bd32bcd804f83a4f9b8bc27f3600fff051eb3edcec8b
263
+ zlib (3.2.2) sha256=908e61263f99c1371b5422581e2d6663bd37c6b04ae13b5f8cb10b0d09379f40
264
+
265
+ BUNDLED WITH
266
+ 4.0.3
data/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2020-2026 Rustam Ibragimov
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.