schemacop 3.0.0.rc2 → 3.0.1
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.
- checksums.yaml +4 -4
- data/.releaser_config +0 -1
- data/CHANGELOG.md +33 -3
- data/README.md +1 -1
- data/README_V3.md +127 -59
- data/Rakefile +1 -0
- data/VERSION +1 -1
- data/lib/schemacop.rb +1 -0
- data/lib/schemacop/railtie.rb +7 -0
- data/lib/schemacop/scoped_env.rb +3 -3
- data/lib/schemacop/v2.rb +0 -1
- data/lib/schemacop/v2/caster.rb +1 -0
- data/lib/schemacop/v3/hash_node.rb +34 -23
- data/lib/schemacop/v3/node.rb +9 -5
- data/lib/schemacop/v3/node_registry.rb +0 -4
- data/lib/schemacop/v3/reference_node.rb +7 -1
- data/lib/schemacop/v3/string_node.rb +18 -7
- data/schemacop.gemspec +8 -5
- data/test/lib/test_helper.rb +17 -2
- data/test/unit/schemacop/v2/casting_test.rb +37 -0
- data/test/unit/schemacop/v2/validator_hash_test.rb +11 -0
- data/test/unit/schemacop/v3/global_context_test.rb +2 -0
- data/test/unit/schemacop/v3/hash_node_test.rb +94 -6
- data/test/unit/schemacop/v3/node_test.rb +14 -0
- data/test/unit/schemacop/v3/reference_node_test.rb +16 -0
- data/test/unit/schemacop/v3/string_node_test.rb +55 -0
- metadata +24 -11
- data/lib/schemacop/v2/root_node.rb +0 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b87ad53205f0d50ca9f4fcc2916375616a1123b379bd621a896275e05b94279d
|
4
|
+
data.tar.gz: 89e105928ed6ae0078f251795d53298222393fcf5af750acd8d3930ea0ab0461
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8d957a52a69e9f7174f850eb1a86c972fc44a4d5575f128db8152568cd317bc6c511093d137af4a13626eef12de029379b289f2bc29d4a2083e701adee247034
|
7
|
+
data.tar.gz: 7b9b7e640e70743d5ce7c5ae8dc0f6626c10d5ed0d627de174cbca622904e26a9e469f453099e1295f905436af8626e9874c9e0659949959779d3eca1ac815af
|
data/.releaser_config
CHANGED
data/CHANGELOG.md
CHANGED
@@ -10,13 +10,43 @@
|
|
10
10
|
### Changes
|
11
11
|
-->
|
12
12
|
|
13
|
-
## 3.0.
|
13
|
+
## 3.0.1 (2021-02-11)
|
14
|
+
|
15
|
+
* Add format `symbol` to strings
|
16
|
+
|
17
|
+
## 3.0.0 (2021-02-08)
|
18
|
+
|
19
|
+
* Setup Zeitwerk ignores for Rails applications
|
20
|
+
|
21
|
+
* Read previous `3.0.0.rcX` entries for all changes included
|
22
|
+
in this stable release
|
23
|
+
|
24
|
+
## 3.0.0.rc5 (2021-02-05)
|
25
|
+
|
26
|
+
* Use `ruby2_keywords` for compatibility with ruby `2.6.2`
|
27
|
+
|
28
|
+
## 3.0.0.rc4 (2021-02-02)
|
29
|
+
|
30
|
+
* Fix some minor bugs
|
31
|
+
|
32
|
+
* Improve documentation
|
33
|
+
|
34
|
+
* `used_external_schemas` for the `ReferenceNode` is now applied
|
35
|
+
recursively
|
36
|
+
|
37
|
+
## 3.0.0.rc3 (2021-01-28)
|
38
|
+
|
39
|
+
* Add minor improvements to the documentation
|
40
|
+
|
41
|
+
* Internal restructuring, no changes in API
|
42
|
+
|
43
|
+
## 3.0.0.rc2 (2021-01-28)
|
14
44
|
|
15
45
|
* Represent node names as strings internally
|
16
46
|
|
17
47
|
* Update documentation
|
18
48
|
|
19
|
-
## 3.0.0.rc1
|
49
|
+
## 3.0.0.rc1 (2021-01-22)
|
20
50
|
|
21
51
|
* Add support for ruby `3.0.0`
|
22
52
|
|
@@ -24,7 +54,7 @@
|
|
24
54
|
|
25
55
|
* Document all `v3` nodes
|
26
56
|
|
27
|
-
## 3.0.0.rc0
|
57
|
+
## 3.0.0.rc0 (2021-01-14)
|
28
58
|
|
29
59
|
* Add `Schemacop::Schema3`
|
30
60
|
|
data/README.md
CHANGED
data/README_V3.md
CHANGED
@@ -24,7 +24,7 @@
|
|
24
24
|
|
25
25
|
## Validation
|
26
26
|
|
27
|
-
Using
|
27
|
+
Using Schemacop, you can either choose to validate your data either using the
|
28
28
|
graceful `validate` method, or the bang variant, `validate!`.
|
29
29
|
|
30
30
|
The `validate` method on a schema with some supplied data will return a
|
@@ -68,14 +68,14 @@ schema.validate!('Foo') # => Schemacop::Exceptions::ValidationError: /:
|
|
68
68
|
|
69
69
|
Schemacop can raise the following exceptions:
|
70
70
|
|
71
|
-
* `Schemacop::Exceptions::ValidationError`: This exception is raised when the
|
72
|
-
method is used, and the data that was passed in is invalid. The
|
73
|
-
additional
|
71
|
+
* `Schemacop::Exceptions::ValidationError`: This exception is raised when the
|
72
|
+
`validate!` method is used, and the data that was passed in is invalid. The
|
73
|
+
exception message contains additional information why the validation failed.
|
74
74
|
|
75
75
|
Example:
|
76
76
|
|
77
77
|
```ruby
|
78
|
-
schema = Schemacop::Schema3.new
|
78
|
+
schema = Schemacop::Schema3.new do
|
79
79
|
int! :foo
|
80
80
|
end
|
81
81
|
|
@@ -83,13 +83,13 @@ Schemacop can raise the following exceptions:
|
|
83
83
|
# => Schemacop::Exceptions::ValidationError: /foo: Invalid type, expected "integer".
|
84
84
|
```
|
85
85
|
|
86
|
-
* `Schemacop::Exceptions::InvalidSchemaError`: This exception is raised when the
|
87
|
-
itself is not valid. The exception message contains additional
|
88
|
-
validation failed.
|
86
|
+
* `Schemacop::Exceptions::InvalidSchemaError`: This exception is raised when the
|
87
|
+
schema itself is not valid. The exception message contains additional
|
88
|
+
information why the validation failed.
|
89
89
|
|
90
90
|
Example:
|
91
91
|
|
92
|
-
|
92
|
+
```ruby
|
93
93
|
Schemacop::Schema3.new :hash do
|
94
94
|
int!
|
95
95
|
end
|
@@ -109,7 +109,6 @@ The nodes in Schemacop v3 also support generic keywords, similar to JSON schema:
|
|
109
109
|
* `default`: You may provide a default value for items that will be set if the
|
110
110
|
value is not given
|
111
111
|
|
112
|
-
|
113
112
|
The three keywords `title`, `description` and `examples` aren't used for validation,
|
114
113
|
but can be used to document the schema. They will be included in the JSON output
|
115
114
|
when you use the `as_json` method:
|
@@ -134,7 +133,7 @@ schema.validate!('bar') # => "bar"
|
|
134
133
|
schema.validate!('baz') # => Schemacop::Exceptions::ValidationError: /: Value not included in enum ["foo", "bar"].
|
135
134
|
```
|
136
135
|
|
137
|
-
Please note
|
136
|
+
Please note that you can also specify values in the enum that are not valid for
|
138
137
|
the schema. This means that the validation will still fail:
|
139
138
|
|
140
139
|
```ruby
|
@@ -196,9 +195,9 @@ transformed into various types.
|
|
196
195
|
#### Options
|
197
196
|
|
198
197
|
* `min_length`
|
199
|
-
Defines the minimum required string length
|
198
|
+
Defines the (inclusive) minimum required string length
|
200
199
|
* `max_length`
|
201
|
-
Defines the maximum required string length
|
200
|
+
Defines the (inclusive) maximum required string length
|
202
201
|
* `pattern`
|
203
202
|
Defines a (ruby) regex pattern the value will be matched against. Must be a
|
204
203
|
string and should generally start with `^` and end with `$` so as to evaluate
|
@@ -230,7 +229,7 @@ transformed into various types.
|
|
230
229
|
|
231
230
|
* `boolean`
|
232
231
|
The string must be either `true` or `false`. This value will be casted to
|
233
|
-
|
232
|
+
Ruby's `TrueClass` or `FalseClass`.
|
234
233
|
|
235
234
|
* `binary`
|
236
235
|
The string is expected to contain binary contents. No casting or additional
|
@@ -242,6 +241,9 @@ transformed into various types.
|
|
242
241
|
* `number`
|
243
242
|
The string must be a number and will be casted to a ruby `Float` object.
|
244
243
|
|
244
|
+
* `symbol`
|
245
|
+
The string can be anything and will be casted to a ruby `Symbol` object.
|
246
|
+
|
245
247
|
#### Examples
|
246
248
|
|
247
249
|
```ruby
|
@@ -381,7 +383,7 @@ schema.validate!(1234) # => Schemacop::Exceptions::ValidationError: /: Invali
|
|
381
383
|
### Array
|
382
384
|
|
383
385
|
Type: `:array`\
|
384
|
-
DSL: `
|
386
|
+
DSL: `ary`
|
385
387
|
|
386
388
|
The array type represents a ruby `Array`.
|
387
389
|
It consists of one or multiple values, which can be validated using arbitrary nodes.
|
@@ -403,11 +405,11 @@ It consists of one or multiple values, which can be validated using arbitrary no
|
|
403
405
|
|
404
406
|
#### Contains
|
405
407
|
|
406
|
-
The `array` node features the contains node, which you can use with the DSL
|
407
|
-
method `cont`. With that DSL method, you can specify a schema which at least
|
408
|
-
|
408
|
+
The `array` node features the *contains* node, which you can use with the DSL
|
409
|
+
method `cont`. With that DSL method, you can specify a schema which at least one
|
410
|
+
item in the array needs to validate against.
|
409
411
|
|
410
|
-
One
|
412
|
+
One use case for example could be that you want an array of integers, from which
|
411
413
|
at least one must be 5 or larger:
|
412
414
|
|
413
415
|
```ruby
|
@@ -447,9 +449,10 @@ how you specify your array contents.
|
|
447
449
|
|
448
450
|
List validation validates a sequence of arbitrary length where each item matches
|
449
451
|
the same schema. Unless you specify a `min_items` count on the array node, an
|
450
|
-
empty array will also
|
451
|
-
|
452
|
-
|
452
|
+
empty array will also suffice. To specify a list validation, use the `list` DSL
|
453
|
+
method, and specify the type you want to validate against. Here, you need to
|
454
|
+
specify the type of the element using the long `type` name (e.g. `integer` and
|
455
|
+
not `int`).
|
453
456
|
|
454
457
|
For example, you can specify that you want an array with only integers between 1 and 5:
|
455
458
|
|
@@ -542,8 +545,8 @@ schema.validate!([1, 'foo', 'bar']) # => Schemacop::Exceptions::ValidationError:
|
|
542
545
|
schema.validate!([1, 'foo', 2, 3]) # => [1, "foo", 2, 3]
|
543
546
|
```
|
544
547
|
|
545
|
-
Please note
|
546
|
-
an exception:
|
548
|
+
Please note that you cannot use multiple `add` in the same array schema, this
|
549
|
+
will result in an exception:
|
547
550
|
|
548
551
|
```ruby
|
549
552
|
schema = Schemacop::Schema3.new :array do
|
@@ -555,9 +558,10 @@ end
|
|
555
558
|
# => Schemacop::Exceptions::InvalidSchemaError: You can only use "add" once to specify additional items.
|
556
559
|
```
|
557
560
|
|
558
|
-
If you want to specify that your schema accept multiple additional types, use
|
559
|
-
type (see below for more infos). The correct way to specify that
|
560
|
-
items, which may be an integer or a string is as
|
561
|
+
If you want to specify that your schema accept multiple additional types, use
|
562
|
+
the `one_of` type (see below for more infos). The correct way to specify that
|
563
|
+
you want to allow additional items, which may be an integer or a string is as
|
564
|
+
follows:
|
561
565
|
|
562
566
|
```ruby
|
563
567
|
schema = Schemacop::Schema3.new :array do
|
@@ -586,13 +590,14 @@ It consists of key-value-pairs that can be validated using arbitrary nodes.
|
|
586
590
|
|
587
591
|
* `additional_properties`
|
588
592
|
This option specifies whether additional, unspecified properties are allowed
|
589
|
-
(`true`) or not (`false`). By default, this is `
|
590
|
-
|
593
|
+
(`true`) or not (`false`). By default, this is `false`, i.e. you need to
|
594
|
+
explicitly set it to `true` if you want to allow arbitrary additional properties,
|
595
|
+
or use the `add` DSL method (see below) to specify additional properties.
|
591
596
|
|
592
597
|
* `property_names`
|
593
598
|
This option allows to specify a regexp pattern (as string) which validates the
|
594
599
|
keys of any properties that are not specified in the hash. This option only
|
595
|
-
makes sense if `additional_properties` is enabled. See below for more
|
600
|
+
makes sense if `additional_properties` is enabled. See below for more information.
|
596
601
|
|
597
602
|
* `min_properties`
|
598
603
|
Specifies the (inclusive) minimum number of properties a hash must contain.
|
@@ -645,8 +650,8 @@ schema.validate!('foo' => 42) # => {"foo"=>42}
|
|
645
650
|
|
646
651
|
The result in both cases will be a
|
647
652
|
[HashWithIndifferentAccess](https://api.rubyonrails.org/classes/ActiveSupport/HashWithIndifferentAccess.html),
|
648
|
-
which means that you can access the data in the hash with the symbol as well
|
649
|
-
|
653
|
+
which means that you can access the data in the hash with the symbol as well as
|
654
|
+
the string representation:
|
650
655
|
|
651
656
|
```ruby
|
652
657
|
schema = Schemacop::Schema3.new :hash do
|
@@ -660,9 +665,9 @@ result[:foo] # => 42
|
|
660
665
|
result['foo'] # 42
|
661
666
|
```
|
662
667
|
|
663
|
-
Please note
|
664
|
-
once with the key being a symbol and once being a string, Schemacop
|
665
|
-
error:
|
668
|
+
Please note that if you specify the value twice in the data you want to
|
669
|
+
validate, once with the key being a symbol and once being a string, Schemacop
|
670
|
+
will raise an error:
|
666
671
|
|
667
672
|
```ruby
|
668
673
|
schema = Schemacop::Schema3.new :hash do
|
@@ -672,6 +677,61 @@ end
|
|
672
677
|
schema.validate!(foo: 42, 'foo' => 43) # => Schemacop::Exceptions::ValidationError: /: Has 1 ambiguous properties: [:foo].
|
673
678
|
```
|
674
679
|
|
680
|
+
In addition to the normal node options (which vary from type to type, check
|
681
|
+
the respective nodes for details), properties also support the `as` option.
|
682
|
+
|
683
|
+
With this, you can "rename" properties in the output:
|
684
|
+
|
685
|
+
```ruby
|
686
|
+
schema = Schemacop::Schema3.new :hash do
|
687
|
+
int! :foo, as: :bar
|
688
|
+
end
|
689
|
+
|
690
|
+
schema.validate!({foo: 42}) # => {"bar"=>42}
|
691
|
+
```
|
692
|
+
|
693
|
+
Please note that if you specify a node with the same property name multiple
|
694
|
+
times, or use the `as` option to rename a node to the same name of another
|
695
|
+
node, the last specified node will be used:
|
696
|
+
|
697
|
+
```ruby
|
698
|
+
schema = Schemacop::Schema3.new :hash do
|
699
|
+
int? :foo
|
700
|
+
str? :foo
|
701
|
+
end
|
702
|
+
|
703
|
+
schema.validate!({foo: 1}) # => Schemacop::Exceptions::ValidationError: /foo: Invalid type, expected "string".
|
704
|
+
schema.validate!({foo: 'bar'}) # => {"foo"=>"bar"}
|
705
|
+
```
|
706
|
+
|
707
|
+
As well as:
|
708
|
+
|
709
|
+
```ruby
|
710
|
+
schema = Schemacop::Schema3.new :hash do
|
711
|
+
int? :foo
|
712
|
+
int? :bar, as: :foo
|
713
|
+
end
|
714
|
+
|
715
|
+
schema.validate!({foo: 1}) # => {"foo"=>1}
|
716
|
+
schema.validate!({foo: 1, bar: 2}) # => {"foo"=>2}
|
717
|
+
schema.validate!({bar: 2}) # => {"foo"=>2}
|
718
|
+
```
|
719
|
+
|
720
|
+
If you want to specify a node which may be one of multiple types, use the `one_of`
|
721
|
+
node (see further down for more details):
|
722
|
+
|
723
|
+
```ruby
|
724
|
+
schema = Schemacop::Schema3.new :hash do
|
725
|
+
one_of! :foo do
|
726
|
+
int
|
727
|
+
str
|
728
|
+
end
|
729
|
+
end
|
730
|
+
|
731
|
+
schema.validate!({foo: 1}) # => {"foo"=>1}
|
732
|
+
schema.validate!({foo: 'bar'}) # => {"foo"=>"bar"}
|
733
|
+
```
|
734
|
+
|
675
735
|
##### Pattern properties
|
676
736
|
|
677
737
|
In addition to symbols, property keys can also be a regular expression. Here,
|
@@ -798,10 +858,11 @@ schema.validate!({
|
|
798
858
|
Type: `:object`\
|
799
859
|
DSL: `obj`
|
800
860
|
|
801
|
-
The object type represents a
|
802
|
-
on nodes of this type will just return `{}` (an empty JSON object), as
|
803
|
-
a useful way to represent a
|
804
|
-
If you want to represent
|
861
|
+
The object type represents a Ruby `Object`. Please note that the `as_json`
|
862
|
+
method on nodes of this type will just return `{}` (an empty JSON object), as
|
863
|
+
there isn't a useful way to represent a Ruby object without conflicting with the
|
864
|
+
`Hash` type. If you want to represent a JSON object, you should use the `Hash`
|
865
|
+
node.
|
805
866
|
|
806
867
|
In the most basic form, this node will accept anything:
|
807
868
|
|
@@ -882,7 +943,7 @@ schema.validate!('foooo') # => Schemacop::Exceptions::ValidationError: /: Does n
|
|
882
943
|
Type: `:any_of`\
|
883
944
|
DSL: `any_of`
|
884
945
|
|
885
|
-
Similar to the
|
946
|
+
Similar to the `all_of` node, you can specify multiple schemas, for which the
|
886
947
|
given value needs to validate against at least one of the schemas.
|
887
948
|
|
888
949
|
For example, your value needs to be either a string which is at least 2
|
@@ -899,7 +960,7 @@ schema.validate!('foo') # => "foo"
|
|
899
960
|
schema.validate!(42) # => 42
|
900
961
|
```
|
901
962
|
|
902
|
-
Please note that you need to specify at least one item in the
|
963
|
+
Please note that you need to specify at least one item in the `any_of` node:
|
903
964
|
|
904
965
|
```ruby
|
905
966
|
Schemacop::Schema3.new :any_of # => Schemacop::Exceptions::InvalidSchemaError: Node "any_of" makes only sense with at least 1 item.
|
@@ -910,9 +971,9 @@ Schemacop::Schema3.new :any_of # => Schemacop::Exceptions::InvalidSchemaError: N
|
|
910
971
|
Type: `:one_of`\
|
911
972
|
DSL: `one_of`
|
912
973
|
|
913
|
-
Similar to the
|
914
|
-
given value needs to validate against
|
915
|
-
|
974
|
+
Similar to the `all_of` node, you can specify multiple schemas, for which the
|
975
|
+
given value needs to validate against exaclty one of the schemas. If the given
|
976
|
+
value validates against multiple schemas, the value is invalid.
|
916
977
|
|
917
978
|
For example, if you want an integer which is either a multiple of 2 or 3,
|
918
979
|
but not both (i.e. no multiple of 6), you could do it as follows:
|
@@ -951,7 +1012,7 @@ schema.validate!(6) # => Schemacop::Exceptions::ValidationError: /: Matches 2 de
|
|
951
1012
|
Type: `:is_not`\
|
952
1013
|
DSL: `is_not`
|
953
1014
|
|
954
|
-
With the
|
1015
|
+
With the `is_not` node, you can specify a schema which the given value must not
|
955
1016
|
validate against, i.e. every value which matches the schema will make this node
|
956
1017
|
invalid.
|
957
1018
|
|
@@ -969,7 +1030,7 @@ schema.validate!(3) # => Schemacop::Exceptions::ValidationError: /: Must not
|
|
969
1030
|
schema.validate!('foo') # => "foo"
|
970
1031
|
```
|
971
1032
|
|
972
|
-
Note that a
|
1033
|
+
Note that a `is_not` node needs exactly one item:
|
973
1034
|
|
974
1035
|
```ruby
|
975
1036
|
schema = Schemacop::Schema3.new :is_not # => Schemacop::Exceptions::InvalidSchemaError: Node "is_not" only allows exactly one item.
|
@@ -984,7 +1045,7 @@ Type: `reference`
|
|
984
1045
|
**Definition**
|
985
1046
|
DSL: `scm`
|
986
1047
|
|
987
|
-
Finally, with the Reference node, you can define schemas and then later reference
|
1048
|
+
Finally, with the *Reference* node, you can define schemas and then later reference
|
988
1049
|
them for usage, e.g. when you have a rather long schema which you need at multiple
|
989
1050
|
places.
|
990
1051
|
|
@@ -1052,7 +1113,7 @@ schema.validate!([id: 42, first_name: 'Joe']) # => Schemacop::Except
|
|
1052
1113
|
|
1053
1114
|
## Context
|
1054
1115
|
|
1055
|
-
Schemacop
|
1116
|
+
Schemacop also features the concept of a `Context`. You can define schemas in a
|
1056
1117
|
context, and then reference them in other schemas in that context. This is e.g.
|
1057
1118
|
useful if you need a part of the schema to be different depending on the
|
1058
1119
|
business action.
|
@@ -1076,7 +1137,7 @@ context.schema :PersonInfo do
|
|
1076
1137
|
end
|
1077
1138
|
|
1078
1139
|
# Now we can define our general schema, where we reference the :Person schema.
|
1079
|
-
# Note that at this point, we don't know what's in the :Person
|
1140
|
+
# Note that at this point, we don't know what's in the :Person schema.
|
1080
1141
|
schema = Schemacop::Schema3.new :reference, path: :Person
|
1081
1142
|
|
1082
1143
|
# Validate the data in the context we defined before, where we need the first_name
|
@@ -1097,7 +1158,7 @@ other_context.schema :Person do
|
|
1097
1158
|
end
|
1098
1159
|
|
1099
1160
|
# Finally, validate the data in the new context. We do not want the real name or
|
1100
|
-
# birth date of the person, instead only the nickname is allowed
|
1161
|
+
# birth date of the person, instead only the nickname is allowed.
|
1101
1162
|
Schemacop.with_context other_context do
|
1102
1163
|
schema.validate!({first_name: 'Joe', last_name: 'Doe', info: { born_at: '1980-01-01'} })
|
1103
1164
|
# => Schemacop::Exceptions::ValidationError: /nickname: Value must be given.
|
@@ -1115,11 +1176,11 @@ to use other data in the second context than in the first.
|
|
1115
1176
|
|
1116
1177
|
## External schemas
|
1117
1178
|
|
1118
|
-
Finally,
|
1119
|
-
This is especially useful is you have schemas in your application which
|
1120
|
-
multiple times
|
1179
|
+
Finally, Schemacop features the possibility to specify schemas in seperate
|
1180
|
+
files. This is especially useful is you have schemas in your application which
|
1181
|
+
are used multiple times throughout the application.
|
1121
1182
|
|
1122
|
-
For each schema, you define the schema in a
|
1183
|
+
For each schema, you define the schema in a separate file, and after loading the
|
1123
1184
|
schemas, you can reference them in other schemas.
|
1124
1185
|
|
1125
1186
|
The default load path is `'app/schemas'`, but this can be configured by setting
|
@@ -1133,14 +1194,17 @@ local schemas > context schemas > global schemas
|
|
1133
1194
|
|
1134
1195
|
Where:
|
1135
1196
|
|
1136
|
-
* local schemas: Defined by using the DSL method
|
1197
|
+
* local schemas: Defined by using the DSL method `scm`
|
1137
1198
|
* context schemas: Defined in the current context using `context.schema`
|
1138
1199
|
* global schemas: Defined in a ruby file in the load path
|
1139
1200
|
|
1140
1201
|
### Rails applications
|
1141
1202
|
|
1142
|
-
In Rails applications, your schemas are automatically eager-
|
1143
|
-
path `'app/schemas'` when your application is started
|
1203
|
+
In Rails applications, your schemas are automatically eager-loaded from the load
|
1204
|
+
path `'app/schemas'` when your application is started, unless your application
|
1205
|
+
is running in the `DEVELOPMENT` environment. In the `DEVELOPMENT` environment,
|
1206
|
+
schemas are loaded each time when they are used, and as such you can make changes
|
1207
|
+
to your external schemas without having to restart the server each time.
|
1144
1208
|
|
1145
1209
|
After starting your application, you can reference them like normally defined
|
1146
1210
|
reference schemas, with the name being relative to the load path.
|
@@ -1188,8 +1252,12 @@ schema.validate!({usr: {first_name: 'Joe', last_name: 'Doe', groups: [{name: 'fo
|
|
1188
1252
|
### Non-Rails applications
|
1189
1253
|
|
1190
1254
|
Usage in non-Rails applications is the same as with usage in Rails applications,
|
1191
|
-
however you need to eager load the schemas yourself:
|
1255
|
+
however you might need to eager load the schemas yourself:
|
1192
1256
|
|
1193
1257
|
```ruby
|
1194
1258
|
Schemacop::V3::GlobalContext.eager_load!
|
1195
|
-
```
|
1259
|
+
```
|
1260
|
+
|
1261
|
+
As mentioned before, you can also use the external schemas without having to
|
1262
|
+
eager-load them, but if you use the schemas multiple times, it might be better
|
1263
|
+
to eager-load them on start of your application / script.
|