activevalidation 0.1.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (123) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +32 -9
  3. data/.overcommit.yml +93 -0
  4. data/.rspec +1 -1
  5. data/.rubocop.yml +80 -0
  6. data/.rubocop_todo.yml +7 -0
  7. data/.travis.yml +42 -2
  8. data/.yardops +9 -0
  9. data/Appraisals +27 -0
  10. data/Gemfile +24 -1
  11. data/MIT-LICENSE +20 -0
  12. data/README.md +142 -20
  13. data/Rakefile +21 -3
  14. data/activevalidation.gemspec +35 -25
  15. data/bin/console +4 -7
  16. data/gemfiles/am_5.0.gemfile +17 -0
  17. data/gemfiles/am_5.0.gemfile.lock +159 -0
  18. data/gemfiles/am_5.1.gemfile +17 -0
  19. data/gemfiles/am_5.1.gemfile.lock +159 -0
  20. data/gemfiles/am_5.2.gemfile +17 -0
  21. data/gemfiles/am_5.2.gemfile.lock +159 -0
  22. data/gemfiles/am_6.0.gemfile +18 -0
  23. data/gemfiles/am_6.0.gemfile.lock +158 -0
  24. data/lib/active_validation.rb +27 -0
  25. data/lib/active_validation/base_adapter.rb +103 -0
  26. data/lib/active_validation/configuration.rb +52 -0
  27. data/lib/active_validation/decorator.rb +27 -0
  28. data/lib/active_validation/decorators/consistent_registry.rb +36 -0
  29. data/lib/active_validation/decorators/disallows_duplicates_registry.rb +17 -0
  30. data/lib/active_validation/errors.rb +28 -0
  31. data/lib/active_validation/ext/add_active_validation_context_check.rb +21 -0
  32. data/lib/active_validation/formatters/manifest_name_formatter.rb +13 -0
  33. data/lib/active_validation/formatters/validation_context_formatter.rb +28 -0
  34. data/lib/active_validation/frameworks/rspec.rb +10 -0
  35. data/lib/active_validation/frameworks/rspec/helpers.rb +15 -0
  36. data/lib/active_validation/internal/models/check.rb +51 -0
  37. data/lib/active_validation/internal/models/concerns/to_internal.rb +27 -0
  38. data/lib/active_validation/internal/models/manifest.rb +122 -0
  39. data/lib/active_validation/internal/models/manifest/installer.rb +86 -0
  40. data/lib/active_validation/internal/observers/manifest.rb +114 -0
  41. data/lib/active_validation/model_extension_base.rb +33 -0
  42. data/lib/active_validation/orm_plugins/active_record_plugin/adapter.rb +59 -0
  43. data/lib/active_validation/orm_plugins/active_record_plugin/internals/active_validation/internal_model_extensions/check.rb +11 -0
  44. data/lib/active_validation/orm_plugins/active_record_plugin/model_extension/active_validation/active_record_model_extension.rb +25 -0
  45. data/lib/active_validation/orm_plugins/active_record_plugin/models/active_validation/check.rb +31 -0
  46. data/lib/active_validation/orm_plugins/active_record_plugin/models/active_validation/check/concerns/method_must_be_allowed.rb +38 -0
  47. data/lib/active_validation/orm_plugins/active_record_plugin/models/active_validation/check/validate_method.rb +9 -0
  48. data/lib/active_validation/orm_plugins/active_record_plugin/models/active_validation/check/validates_method.rb +9 -0
  49. data/lib/active_validation/orm_plugins/active_record_plugin/models/active_validation/check/validates_with_method.rb +19 -0
  50. data/lib/active_validation/orm_plugins/active_record_plugin/models/active_validation/concerns/protect_from_mutable_instance_methods.rb +31 -0
  51. data/lib/active_validation/orm_plugins/active_record_plugin/models/active_validation/manifest.rb +21 -0
  52. data/lib/active_validation/orm_plugins/active_record_plugin/types/active_validation/type/version.rb +17 -0
  53. data/lib/active_validation/registry.rb +55 -0
  54. data/lib/active_validation/values/base.rb +39 -0
  55. data/lib/active_validation/values/method_name.rb +22 -0
  56. data/lib/active_validation/values/version.rb +17 -0
  57. data/lib/active_validation/verifier.rb +150 -0
  58. data/lib/active_validation/version.rb +5 -0
  59. data/spec/active_validation/base_adapter_spec.rb +23 -0
  60. data/spec/active_validation/configuration_spec.rb +52 -0
  61. data/spec/active_validation/decorators/consistent_registry_spec.rb +117 -0
  62. data/spec/active_validation/decorators/disallows_duplicates_registry_spec.rb +21 -0
  63. data/spec/active_validation/formatters/manifest_name_formatter_spec.rb +7 -0
  64. data/spec/active_validation/formatters/validation_context_formatter_spec.rb +39 -0
  65. data/spec/active_validation/internal/models/check_spec.rb +67 -0
  66. data/spec/active_validation/internal/models/manifest/installer_spec.rb +177 -0
  67. data/spec/active_validation/internal/models/manifest_spec.rb +136 -0
  68. data/spec/active_validation/internal/observers/manifest_spec.rb +201 -0
  69. data/spec/active_validation/model_extension_base_spec.rb +71 -0
  70. data/spec/active_validation/orm_plugins/active_record_plugin/adapter_spec.rb +31 -0
  71. data/spec/active_validation/orm_plugins/active_record_plugin/adapter_spec_orm_specific_spec.rb +84 -0
  72. data/spec/active_validation/orm_plugins/active_record_plugin/models/active_validation/check/validate_method_spec.rb +26 -0
  73. data/spec/active_validation/orm_plugins/active_record_plugin/models/active_validation/check/validates_method_spec.rb +26 -0
  74. data/spec/active_validation/orm_plugins/active_record_plugin/models/active_validation/check/validates_with_method_spec.rb +34 -0
  75. data/spec/active_validation/orm_plugins/active_record_plugin/models/active_validation/check_spec.rb +48 -0
  76. data/spec/active_validation/orm_plugins/active_record_plugin/models/active_validation/manifest_spec.rb +61 -0
  77. data/spec/active_validation/orm_plugins/active_record_plugin/readme_spec.rb +89 -0
  78. data/spec/active_validation/registry_spec.rb +76 -0
  79. data/spec/active_validation/values/base_spec.rb +61 -0
  80. data/spec/active_validation/values/method_name_spec.rb +16 -0
  81. data/spec/active_validation/values/version_spec.rb +36 -0
  82. data/spec/active_validation/verifier_spec.rb +214 -0
  83. data/spec/active_validation_spec.rb +19 -0
  84. data/spec/factories/internal/internal_check.rb +43 -0
  85. data/spec/features/active_record/child_record.feature +32 -0
  86. data/spec/features/active_record/new_record.feature +22 -0
  87. data/spec/features/no_orm/install.feature +19 -0
  88. data/spec/features/no_orm/validate.feature +27 -0
  89. data/spec/features/no_orm/validate_with_multiple_manifests.feature +29 -0
  90. data/spec/features/no_orm/validate_with_multiple_versions.feature +42 -0
  91. data/spec/features/placeholders/be_matcher.rb +7 -0
  92. data/spec/features/placeholders/klass.rb +5 -0
  93. data/spec/features/placeholders/version.rb +11 -0
  94. data/spec/features/placeholders/whether_to.rb +11 -0
  95. data/spec/features/step_definitions/active_record_steps.rb +7 -0
  96. data/spec/features/step_definitions/steps.rb +85 -0
  97. data/spec/orm/active_record/db_adapters/database.mysql.yml +12 -0
  98. data/spec/orm/active_record/db_adapters/database.postgres.yml +11 -0
  99. data/spec/orm/active_record/db_adapters/database.sqlite.yml +8 -0
  100. data/spec/orm/active_record/factories/check/check_validate.rb +8 -0
  101. data/spec/orm/active_record/factories/check/check_validates.rb +8 -0
  102. data/spec/orm/active_record/factories/check/check_validates_with.rb +19 -0
  103. data/spec/orm/active_record/factories/manifest.rb +29 -0
  104. data/spec/orm/active_record/prepare_db.rb +89 -0
  105. data/spec/orm/active_record/setup.rb +11 -0
  106. data/spec/orm/mongoid/setup.rb +15 -0
  107. data/spec/spec_helper.rb +38 -0
  108. data/spec/support/database_cleaner.rb +16 -0
  109. data/spec/support/deferred_garbage_collection.rb +31 -0
  110. data/spec/support/define_constant_macros.rb +17 -0
  111. data/spec/support/factory_bot.rb +12 -0
  112. data/spec/support/helpers.rb +3 -0
  113. data/spec/support/helpers/only_with_active_record.rb +15 -0
  114. data/spec/support/matchers/delegate.rb +50 -0
  115. data/spec/support/matchers/have_attr.rb +58 -0
  116. data/spec/support/mongoid.yml +6 -0
  117. data/spec/support/shared_examples/check_attributes.rb +9 -0
  118. data/spec/support/shared_examples/verifiers_registry.rb +10 -0
  119. data/spec/support/simplecov.rb +11 -0
  120. data/spec/turnip_helper.rb +4 -0
  121. metadata +304 -20
  122. data/lib/activevalidation.rb +0 -6
  123. data/lib/activevalidation/version.rb +0 -3
@@ -0,0 +1,17 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activerecord", "~> 5.2.0"
6
+
7
+ group :local_development do
8
+ gem "appraisal", "~> 2.2.0"
9
+ gem "overcommit", "~> 0.48.0"
10
+ gem "pry", "~> 0.12.0"
11
+ gem "pry-byebug", "~> 3.7.0"
12
+ gem "reek", "~> 5.4.0"
13
+ gem "rubocop", "~> 0.72.0"
14
+ gem "rubocop-rspec", "~> 1.32"
15
+ end
16
+
17
+ gemspec path: "../"
@@ -0,0 +1,159 @@
1
+ PATH
2
+ remote: ..
3
+ specs:
4
+ activevalidation (0.1.0)
5
+ activemodel (>= 5.0.0, < 6.1)
6
+ activesupport (>= 5.0.0, < 6.1)
7
+ concurrent-ruby (>= 1.0.0, < 2.0)
8
+ zeitwerk (~> 2.1.9)
9
+
10
+ GEM
11
+ remote: https://rubygems.org/
12
+ specs:
13
+ activemodel (5.2.3)
14
+ activesupport (= 5.2.3)
15
+ activerecord (5.2.3)
16
+ activemodel (= 5.2.3)
17
+ activesupport (= 5.2.3)
18
+ arel (>= 9.0)
19
+ activesupport (5.2.3)
20
+ concurrent-ruby (~> 1.0, >= 1.0.2)
21
+ i18n (>= 0.7, < 2)
22
+ minitest (~> 5.1)
23
+ tzinfo (~> 1.1)
24
+ appraisal (2.2.0)
25
+ bundler
26
+ rake
27
+ thor (>= 0.14.0)
28
+ arel (9.0.0)
29
+ ast (2.4.0)
30
+ axiom-types (0.1.1)
31
+ descendants_tracker (~> 0.0.4)
32
+ ice_nine (~> 0.11.0)
33
+ thread_safe (~> 0.3, >= 0.3.1)
34
+ byebug (11.0.1)
35
+ c21e (1.1.9)
36
+ childprocess (0.9.0)
37
+ ffi (~> 1.0, >= 1.0.11)
38
+ codeclimate-engine-rb (0.4.1)
39
+ virtus (~> 1.0)
40
+ coderay (1.1.2)
41
+ coercible (1.0.0)
42
+ descendants_tracker (~> 0.0.1)
43
+ concurrent-ruby (1.1.5)
44
+ cucumber-messages (2.1.2)
45
+ google-protobuf (>= 3.2, <= 3.7)
46
+ database_cleaner (1.7.0)
47
+ descendants_tracker (0.0.4)
48
+ thread_safe (~> 0.3, >= 0.3.1)
49
+ diff-lcs (1.3)
50
+ docile (1.3.2)
51
+ equalizer (0.0.11)
52
+ factory_bot (5.0.2)
53
+ activesupport (>= 4.2.0)
54
+ ffi (1.11.1)
55
+ gherkin (6.0.17)
56
+ c21e (~> 1.1.9)
57
+ cucumber-messages (~> 2.1.2)
58
+ google-protobuf (3.7.0-universal-darwin)
59
+ i18n (1.6.0)
60
+ concurrent-ruby (~> 1.0)
61
+ ice_nine (0.11.2)
62
+ iniparse (1.4.4)
63
+ jaro_winkler (1.5.3)
64
+ json (2.2.0)
65
+ kwalify (0.7.2)
66
+ method_source (0.9.2)
67
+ minitest (5.12.2)
68
+ mysql2 (0.5.2)
69
+ overcommit (0.48.1)
70
+ childprocess (~> 0.6, >= 0.6.3)
71
+ iniparse (~> 1.4)
72
+ parallel (1.17.0)
73
+ parser (2.6.4.1)
74
+ ast (~> 2.4.0)
75
+ pg (1.0.0)
76
+ pry (0.12.2)
77
+ coderay (~> 1.1.0)
78
+ method_source (~> 0.9.0)
79
+ pry-byebug (3.7.0)
80
+ byebug (~> 11.0)
81
+ pry (~> 0.10)
82
+ psych (3.1.0)
83
+ rainbow (3.0.0)
84
+ rake (13.0.0)
85
+ reek (5.4.0)
86
+ codeclimate-engine-rb (~> 0.4.0)
87
+ kwalify (~> 0.7.0)
88
+ parser (>= 2.5.0.0, < 2.7, != 2.5.1.1)
89
+ psych (~> 3.1.0)
90
+ rainbow (>= 2.0, < 4.0)
91
+ rspec (3.8.0)
92
+ rspec-core (~> 3.8.0)
93
+ rspec-expectations (~> 3.8.0)
94
+ rspec-mocks (~> 3.8.0)
95
+ rspec-core (3.8.2)
96
+ rspec-support (~> 3.8.0)
97
+ rspec-expectations (3.8.4)
98
+ diff-lcs (>= 1.2.0, < 2.0)
99
+ rspec-support (~> 3.8.0)
100
+ rspec-mocks (3.8.1)
101
+ diff-lcs (>= 1.2.0, < 2.0)
102
+ rspec-support (~> 3.8.0)
103
+ rspec-support (3.8.2)
104
+ rubocop (0.72.0)
105
+ jaro_winkler (~> 1.5.1)
106
+ parallel (~> 1.10)
107
+ parser (>= 2.6)
108
+ rainbow (>= 2.2.2, < 4.0)
109
+ ruby-progressbar (~> 1.7)
110
+ unicode-display_width (>= 1.4.0, < 1.7)
111
+ rubocop-rspec (1.36.0)
112
+ rubocop (>= 0.68.1)
113
+ ruby-progressbar (1.10.1)
114
+ simplecov (0.17.1)
115
+ docile (~> 1.1)
116
+ json (>= 1.8, < 3)
117
+ simplecov-html (~> 0.10.0)
118
+ simplecov-html (0.10.2)
119
+ sqlite3 (1.3.13)
120
+ thor (0.20.3)
121
+ thread_safe (0.3.6)
122
+ turnip (4.0.1)
123
+ gherkin (~> 6.0.17)
124
+ rspec (>= 3.0, < 4.0)
125
+ tzinfo (1.2.5)
126
+ thread_safe (~> 0.1)
127
+ unicode-display_width (1.6.0)
128
+ virtus (1.0.5)
129
+ axiom-types (~> 0.1)
130
+ coercible (~> 1.0)
131
+ descendants_tracker (~> 0.0, >= 0.0.3)
132
+ equalizer (~> 0.0, >= 0.0.9)
133
+ zeitwerk (2.1.10)
134
+
135
+ PLATFORMS
136
+ ruby
137
+
138
+ DEPENDENCIES
139
+ activerecord (~> 5.2.0)
140
+ activevalidation!
141
+ appraisal (~> 2.2.0)
142
+ bundler (~> 1.17)
143
+ database_cleaner (~> 1.7.0)
144
+ factory_bot (~> 5.0.0)
145
+ mysql2 (~> 0.5.2)
146
+ overcommit (~> 0.48.0)
147
+ pg (~> 1.0.0)
148
+ pry (~> 0.12.0)
149
+ pry-byebug (~> 3.7.0)
150
+ reek (~> 5.4.0)
151
+ rspec (~> 3.8)
152
+ rubocop (~> 0.72.0)
153
+ rubocop-rspec (~> 1.32)
154
+ simplecov (~> 0.16)
155
+ sqlite3 (>= 1.3.13)
156
+ turnip (~> 4.0.0)
157
+
158
+ BUNDLED WITH
159
+ 1.17.3
@@ -0,0 +1,18 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activerecord", "~> 6.0.0"
6
+ gem "sqlite3", "~> 1.4.0"
7
+
8
+ group :local_development do
9
+ gem "appraisal", "~> 2.2.0"
10
+ gem "overcommit", "~> 0.48.0"
11
+ gem "pry", "~> 0.12.0"
12
+ gem "pry-byebug", "~> 3.7.0"
13
+ gem "reek", "~> 5.4.0"
14
+ gem "rubocop", "~> 0.72.0"
15
+ gem "rubocop-rspec", "~> 1.32"
16
+ end
17
+
18
+ gemspec path: "../"
@@ -0,0 +1,158 @@
1
+ PATH
2
+ remote: ..
3
+ specs:
4
+ activevalidation (0.1.0)
5
+ activemodel (>= 5.0.0, < 6.1)
6
+ activesupport (>= 5.0.0, < 6.1)
7
+ concurrent-ruby (>= 1.0.0, < 2.0)
8
+ zeitwerk (~> 2.1.9)
9
+
10
+ GEM
11
+ remote: https://rubygems.org/
12
+ specs:
13
+ activemodel (6.0.0)
14
+ activesupport (= 6.0.0)
15
+ activerecord (6.0.0)
16
+ activemodel (= 6.0.0)
17
+ activesupport (= 6.0.0)
18
+ activesupport (6.0.0)
19
+ concurrent-ruby (~> 1.0, >= 1.0.2)
20
+ i18n (>= 0.7, < 2)
21
+ minitest (~> 5.1)
22
+ tzinfo (~> 1.1)
23
+ zeitwerk (~> 2.1, >= 2.1.8)
24
+ appraisal (2.2.0)
25
+ bundler
26
+ rake
27
+ thor (>= 0.14.0)
28
+ ast (2.4.0)
29
+ axiom-types (0.1.1)
30
+ descendants_tracker (~> 0.0.4)
31
+ ice_nine (~> 0.11.0)
32
+ thread_safe (~> 0.3, >= 0.3.1)
33
+ byebug (11.0.1)
34
+ c21e (1.1.9)
35
+ childprocess (0.9.0)
36
+ ffi (~> 1.0, >= 1.0.11)
37
+ codeclimate-engine-rb (0.4.1)
38
+ virtus (~> 1.0)
39
+ coderay (1.1.2)
40
+ coercible (1.0.0)
41
+ descendants_tracker (~> 0.0.1)
42
+ concurrent-ruby (1.1.5)
43
+ cucumber-messages (2.1.2)
44
+ google-protobuf (>= 3.2, <= 3.7)
45
+ database_cleaner (1.7.0)
46
+ descendants_tracker (0.0.4)
47
+ thread_safe (~> 0.3, >= 0.3.1)
48
+ diff-lcs (1.3)
49
+ docile (1.3.2)
50
+ equalizer (0.0.11)
51
+ factory_bot (5.0.2)
52
+ activesupport (>= 4.2.0)
53
+ ffi (1.11.1)
54
+ gherkin (6.0.17)
55
+ c21e (~> 1.1.9)
56
+ cucumber-messages (~> 2.1.2)
57
+ google-protobuf (3.7.0)
58
+ i18n (1.6.0)
59
+ concurrent-ruby (~> 1.0)
60
+ ice_nine (0.11.2)
61
+ iniparse (1.4.4)
62
+ jaro_winkler (1.5.3)
63
+ json (2.2.0)
64
+ kwalify (0.7.2)
65
+ method_source (0.9.2)
66
+ minitest (5.12.2)
67
+ mysql2 (0.5.2)
68
+ overcommit (0.48.1)
69
+ childprocess (~> 0.6, >= 0.6.3)
70
+ iniparse (~> 1.4)
71
+ parallel (1.17.0)
72
+ parser (2.6.4.1)
73
+ ast (~> 2.4.0)
74
+ pg (1.0.0)
75
+ pry (0.12.2)
76
+ coderay (~> 1.1.0)
77
+ method_source (~> 0.9.0)
78
+ pry-byebug (3.7.0)
79
+ byebug (~> 11.0)
80
+ pry (~> 0.10)
81
+ psych (3.1.0)
82
+ rainbow (3.0.0)
83
+ rake (13.0.0)
84
+ reek (5.4.0)
85
+ codeclimate-engine-rb (~> 0.4.0)
86
+ kwalify (~> 0.7.0)
87
+ parser (>= 2.5.0.0, < 2.7, != 2.5.1.1)
88
+ psych (~> 3.1.0)
89
+ rainbow (>= 2.0, < 4.0)
90
+ rspec (3.8.0)
91
+ rspec-core (~> 3.8.0)
92
+ rspec-expectations (~> 3.8.0)
93
+ rspec-mocks (~> 3.8.0)
94
+ rspec-core (3.8.2)
95
+ rspec-support (~> 3.8.0)
96
+ rspec-expectations (3.8.4)
97
+ diff-lcs (>= 1.2.0, < 2.0)
98
+ rspec-support (~> 3.8.0)
99
+ rspec-mocks (3.8.1)
100
+ diff-lcs (>= 1.2.0, < 2.0)
101
+ rspec-support (~> 3.8.0)
102
+ rspec-support (3.8.2)
103
+ rubocop (0.72.0)
104
+ jaro_winkler (~> 1.5.1)
105
+ parallel (~> 1.10)
106
+ parser (>= 2.6)
107
+ rainbow (>= 2.2.2, < 4.0)
108
+ ruby-progressbar (~> 1.7)
109
+ unicode-display_width (>= 1.4.0, < 1.7)
110
+ rubocop-rspec (1.36.0)
111
+ rubocop (>= 0.68.1)
112
+ ruby-progressbar (1.10.1)
113
+ simplecov (0.17.1)
114
+ docile (~> 1.1)
115
+ json (>= 1.8, < 3)
116
+ simplecov-html (~> 0.10.0)
117
+ simplecov-html (0.10.2)
118
+ sqlite3 (1.4.1)
119
+ thor (0.20.3)
120
+ thread_safe (0.3.6)
121
+ turnip (4.0.1)
122
+ gherkin (~> 6.0.17)
123
+ rspec (>= 3.0, < 4.0)
124
+ tzinfo (1.2.5)
125
+ thread_safe (~> 0.1)
126
+ unicode-display_width (1.6.0)
127
+ virtus (1.0.5)
128
+ axiom-types (~> 0.1)
129
+ coercible (~> 1.0)
130
+ descendants_tracker (~> 0.0, >= 0.0.3)
131
+ equalizer (~> 0.0, >= 0.0.9)
132
+ zeitwerk (2.1.10)
133
+
134
+ PLATFORMS
135
+ ruby
136
+
137
+ DEPENDENCIES
138
+ activerecord (~> 6.0.0)
139
+ activevalidation!
140
+ appraisal (~> 2.2.0)
141
+ bundler (~> 1.17)
142
+ database_cleaner (~> 1.7.0)
143
+ factory_bot (~> 5.0.0)
144
+ mysql2 (~> 0.5.2)
145
+ overcommit (~> 0.48.0)
146
+ pg (~> 1.0.0)
147
+ pry (~> 0.12.0)
148
+ pry-byebug (~> 3.7.0)
149
+ reek (~> 5.4.0)
150
+ rspec (~> 3.8)
151
+ rubocop (~> 0.72.0)
152
+ rubocop-rspec (~> 1.32)
153
+ simplecov (~> 0.16)
154
+ sqlite3 (~> 1.4.0)
155
+ turnip (~> 4.0.0)
156
+
157
+ BUNDLED WITH
158
+ 1.17.3
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "set"
4
+ require "active_support/core_ext/string/inflections"
5
+ require "active_support/core_ext/module/delegation"
6
+ require "active_support/core_ext/hash/indifferent_access"
7
+ require "active_support/ordered_options"
8
+ require "active_support/concern"
9
+ require "active_model"
10
+ require "zeitwerk"
11
+
12
+ loader = Zeitwerk::Loader.for_gem
13
+ loader.ignore "#{__dir__}/active_validation/orm_plugins"
14
+ loader.setup
15
+
16
+ module ActiveValidation
17
+ class << self
18
+ def configuration
19
+ @configuration ||= Configuration.new
20
+ yield(@configuration) if block_given?
21
+ @configuration
22
+ end
23
+ alias config configuration
24
+ end
25
+ end
26
+
27
+ ::ActiveModel::Validations.prepend ActiveValidation::Ext::AddActiveValidationContextCheck
@@ -0,0 +1,103 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ActiveValidation
4
+ class BaseAdapter
5
+ class << self
6
+ mattr_accessor :initialised, default: false
7
+
8
+ def inherited(base)
9
+ # ruby 2.4 require this :send
10
+ base.singleton_class.send(:attr_accessor, :abstract)
11
+
12
+ # set default loading paths from the plugin root folder
13
+ base.singleton_class.send(:attr_accessor, :loading_paths)
14
+ base.loading_paths = []
15
+ base.abstract = false
16
+ ActiveValidation.config.orm_adapters_registry.register base.plugin_name, base
17
+ super
18
+ end
19
+
20
+ def loader
21
+ return @loader if @loader
22
+
23
+ @loader = Zeitwerk::Loader.new
24
+ loading_paths.each do |loading_path|
25
+ @loader.push_dir(Pathname.new(File.expand_path(__dir__)).join("orm_plugins", plugin_name, loading_path))
26
+ end
27
+ @loader.setup
28
+ @loader
29
+ end
30
+
31
+ # Abstract adapter should not be used directly
32
+ def abstract
33
+ true
34
+ end
35
+
36
+ def plugin_name
37
+ klass_name = name.split("::").detect { |c| c =~ /Plugin\z/ }
38
+ klass_name ? klass_name.underscore : "base"
39
+ end
40
+
41
+ def adapter_name
42
+ plugin_name.sub(/_plugin\z/, "")
43
+ end
44
+
45
+ def to_s
46
+ abstract ? "#{plugin_name} (abstract)" : plugin_name
47
+ end
48
+ end
49
+
50
+ delegate :to_s, :plugin_name, :adapter_name, to: :class
51
+
52
+ # @abstract
53
+ # should setup self.class.initialised to true after loading all dependencies
54
+ def setup
55
+ raise NotImplementedError, "abstract"
56
+ end
57
+
58
+ # @abstract
59
+ # @param [Internal::Models::Manifest] :manifest
60
+ # @return [Internal::Models::Manifest] :manifest
61
+ def add_manifest(_manifest)
62
+ raise NotImplementedError, "abstract"
63
+ end
64
+
65
+ # @abstract
66
+ # Return the most recent Manifest, which meet the criteria
67
+ #
68
+ # @param [Hash] Look up criteria
69
+ # @option manifest_hash [String] :name Human readable name, by default build with selected
70
+ # formatter for current manifest
71
+ # @option manifest_hash [String, Class] :base_klass (base_klass) Base klass for the Manifest
72
+ # @option manifest_hash [String, Symbol, Integer, Values::Version] :version (:current) Version
73
+ # of the current manifest
74
+ #
75
+ # @example find_manifest({ base_klass: 'Bar' })
76
+ #
77
+ # @see Internal::Models::Manifest
78
+ #
79
+ # @return [Internal::Models::Manifest]
80
+ def find_manifest(**_wheres)
81
+ raise NotImplementedError, "abstract"
82
+ end
83
+
84
+ # @abstract
85
+ # Return the most recent Manifests, which meet the criteria
86
+ #
87
+ # @param [Hash] Look up criteria
88
+ # @option manifest_hash [String] :name Human readable name, by default build with selected
89
+ # formatter for current manifest
90
+ # @option manifest_hash [String, Class] :base_klass (base_klass) Base klass for the Manifest
91
+ # @option manifest_hash [String, Symbol, Integer, Values::Version] :version (:current) Version
92
+ # of the current manifest
93
+ #
94
+ # @example find_manifests({ base_klass: 'Bar' })
95
+ #
96
+ # @see Internal::Models::Manifest
97
+ #
98
+ # @return [Array<Internal::Models::Manifest>]
99
+ def find_manifests(**_wheres)
100
+ raise NotImplementedError, "abstract"
101
+ end
102
+ end
103
+ end