schemacop 2.1.0 → 2.4.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.
- checksums.yaml +5 -5
- data/CHANGELOG.md +58 -0
- data/LICENSE +1 -1
- data/README.md +250 -16
- data/RUBY_VERSION +1 -1
- data/Rakefile +6 -1
- data/VERSION +1 -1
- data/doc/Schemacop.html +32 -5
- data/doc/Schemacop/ArrayValidator.html +4 -4
- data/doc/Schemacop/BooleanValidator.html +4 -4
- data/doc/Schemacop/Caster.html +379 -0
- data/doc/Schemacop/Collector.html +298 -46
- data/doc/Schemacop/Exceptions.html +3 -3
- data/doc/Schemacop/Exceptions/InvalidSchemaError.html +3 -3
- data/doc/Schemacop/Exceptions/ValidationError.html +3 -3
- data/doc/Schemacop/FieldNode.html +19 -7
- data/doc/Schemacop/FloatValidator.html +4 -4
- data/doc/Schemacop/HashValidator.html +33 -7
- data/doc/Schemacop/IntegerValidator.html +4 -4
- data/doc/Schemacop/NilValidator.html +4 -4
- data/doc/Schemacop/Node.html +97 -85
- data/doc/Schemacop/NodeResolver.html +28 -12
- data/doc/Schemacop/NodeSupportingField.html +4 -4
- data/doc/Schemacop/NodeSupportingType.html +5 -7
- data/doc/Schemacop/NodeWithBlock.html +4 -4
- data/doc/Schemacop/NumberValidator.html +4 -4
- data/doc/Schemacop/ObjectValidator.html +20 -10
- data/doc/Schemacop/RootNode.html +4 -4
- data/doc/Schemacop/Schema.html +6 -6
- data/doc/Schemacop/StringValidator.html +3 -3
- data/doc/Schemacop/SymbolValidator.html +4 -4
- data/doc/ScopedEnv.html +3 -3
- data/doc/_index.html +11 -4
- data/doc/class_list.html +1 -1
- data/doc/css/style.css +10 -6
- data/doc/file.README.html +255 -29
- data/doc/frames.html +1 -1
- data/doc/index.html +255 -29
- data/doc/js/app.js +55 -0
- data/doc/method_list.html +99 -51
- data/doc/top-level-namespace.html +3 -3
- data/lib/schemacop.rb +15 -0
- data/lib/schemacop/caster.rb +38 -0
- data/lib/schemacop/collector.rb +53 -6
- data/lib/schemacop/field_node.rb +25 -3
- data/lib/schemacop/node.rb +16 -4
- data/lib/schemacop/node_resolver.rb +10 -2
- data/lib/schemacop/node_supporting_field.rb +0 -2
- data/lib/schemacop/node_supporting_type.rb +21 -1
- data/lib/schemacop/schema.rb +3 -3
- data/lib/schemacop/validator/array_validator.rb +1 -1
- data/lib/schemacop/validator/float_validator.rb +1 -1
- data/lib/schemacop/validator/hash_validator.rb +15 -2
- data/lib/schemacop/validator/integer_validator.rb +1 -1
- data/lib/schemacop/validator/object_validator.rb +7 -1
- data/schemacop.gemspec +15 -9
- data/test/casting_test.rb +90 -0
- data/test/collector_test.rb +45 -0
- data/test/custom_check_test.rb +20 -13
- data/test/custom_if_test.rb +12 -12
- data/test/defaults_test.rb +71 -0
- data/test/nil_dis_allow_test.rb +6 -6
- data/test/node_resolver_test.rb +26 -0
- data/test/short_forms_test.rb +86 -64
- data/test/test_helper.rb +7 -0
- data/test/types_test.rb +5 -5
- data/test/validator_array_test.rb +16 -16
- data/test/validator_boolean_test.rb +2 -2
- data/test/validator_float_test.rb +15 -15
- data/test/validator_hash_test.rb +5 -5
- data/test/validator_integer_test.rb +9 -9
- data/test/validator_nil_test.rb +1 -1
- data/test/validator_number_test.rb +19 -19
- data/test/validator_object_test.rb +33 -15
- data/test/validator_string_test.rb +12 -12
- data/test/validator_symbol_test.rb +2 -2
- metadata +43 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: e82135ea68e1aa89e4fa729d481bcb6097705e01ba339b9692f7a69d2260f334
|
4
|
+
data.tar.gz: 26358b8124dfd17505830b7e5fb1446c37d34eb9d09533cc3b5f216d9fcccba3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ba3a66136b5a4a756f08bf2f377621bbb047574f68e2e97f9a0d21680040330c44510e8c05b18f39da93d34a96d86a4342495d8bdcb2a0522336743a9cb19d9d
|
7
|
+
data.tar.gz: 8f0901419e3e22952ee289d47cc911f7304d5fa848456e1840255e2a5964a374ce48284927e804c530b22eb61408eb4b516dcbce8da46e969e16e504084469ef
|
data/CHANGELOG.md
CHANGED
@@ -10,6 +10,64 @@
|
|
10
10
|
### Changes
|
11
11
|
-->
|
12
12
|
|
13
|
+
## 2.4.0 (2019-10-28)
|
14
|
+
|
15
|
+
### New features
|
16
|
+
|
17
|
+
* Add support for default values
|
18
|
+
|
19
|
+
* Add support for type casting
|
20
|
+
|
21
|
+
### Bug fixes
|
22
|
+
|
23
|
+
* Change order of built-in validators so that `Integer` and `String` come
|
24
|
+
*before* `Number` which matches both.
|
25
|
+
|
26
|
+
### Changes
|
27
|
+
|
28
|
+
## 2.3.2 (2019-09-26)
|
29
|
+
|
30
|
+
### New features
|
31
|
+
|
32
|
+
* Add ability to return custom error messages from `:check` blocks
|
33
|
+
|
34
|
+
## 2.3.1 (2019-08-19)
|
35
|
+
|
36
|
+
### Changes
|
37
|
+
|
38
|
+
* Make compatible with Rails 6
|
39
|
+
|
40
|
+
## 2.3.0 (2017-05-18)
|
41
|
+
|
42
|
+
### New features
|
43
|
+
|
44
|
+
* Option `strict` for the Type `:object`
|
45
|
+
|
46
|
+
This option, which defaults to true, ensures that instance classes are checked
|
47
|
+
strictly. If set to false, instances of derived classes are also allowed.
|
48
|
+
|
49
|
+
### Bug fixes
|
50
|
+
|
51
|
+
* Removed '/root' from the paths in the error messages
|
52
|
+
|
53
|
+
### Changes
|
54
|
+
|
55
|
+
* Added tests for the Collector paths to ensure correct behavior
|
56
|
+
* Added symbol Type to the short forms test
|
57
|
+
|
58
|
+
## 2.2.0 (2017-05-17)
|
59
|
+
|
60
|
+
### Changes
|
61
|
+
|
62
|
+
* Handle `ActiveSupport::HashWithIndifferentAccess` objects gracefully when
|
63
|
+
performing the validation. This allows the user to specify the schema using
|
64
|
+
a mixture of symbols and strings, but during the validation of a
|
65
|
+
`HashWithIndifferentAccess` it transparently converts the keys, both in the
|
66
|
+
schema and in the hash, to symbols.
|
67
|
+
|
68
|
+
In the event that a key is defined both in the string and symbol version,
|
69
|
+
Schemacop expects a Ruby hash and will throw a ValidationError otherwise.
|
70
|
+
|
13
71
|
## 2.1.0 (2017-05-16)
|
14
72
|
|
15
73
|
### New features
|
data/LICENSE
CHANGED
data/README.md
CHANGED
@@ -79,7 +79,7 @@ end
|
|
79
79
|
At runtime:
|
80
80
|
|
81
81
|
```ruby
|
82
|
-
|
82
|
+
my_schema.validate!(
|
83
83
|
# Your data goes here
|
84
84
|
)
|
85
85
|
```
|
@@ -108,7 +108,7 @@ this:
|
|
108
108
|
s = Schema.new do
|
109
109
|
type :integer
|
110
110
|
type :hash do
|
111
|
-
req '
|
111
|
+
req 'present' do
|
112
112
|
type :boolean
|
113
113
|
end
|
114
114
|
end
|
@@ -124,12 +124,40 @@ We will see Type and Field lines in more detail below.
|
|
124
124
|
### `validate` vs `validate!` vs `valid?`
|
125
125
|
|
126
126
|
The method `validate` will return a `Collector` object that contains all
|
127
|
-
validation errors (if any)
|
128
|
-
and
|
127
|
+
validation errors (if any) as well as a deep copy of your data with applied
|
128
|
+
defaults and castings, whereas `validate!` will accumulate all violations
|
129
|
+
and finally throw an exception describing them or, if the validation was
|
130
|
+
successful, a deep-copy of your supplied data with defaults and castings
|
131
|
+
applied.
|
129
132
|
|
130
133
|
For simply querying the validity of some data, use the methods `valid?` or
|
131
134
|
`invalid?`.
|
132
135
|
|
136
|
+
Examples:
|
137
|
+
|
138
|
+
```ruby
|
139
|
+
# validate! returns your modified data or throws a validation error
|
140
|
+
s = Schema.new do
|
141
|
+
req :foo, default: 42
|
142
|
+
end
|
143
|
+
s.validate!({}) # => { foo: 42 }
|
144
|
+
|
145
|
+
# validate returns a collector
|
146
|
+
s = Schema.new do
|
147
|
+
req :foo, default: 42
|
148
|
+
end
|
149
|
+
|
150
|
+
collector = s.validate({})
|
151
|
+
collector.valid? # true
|
152
|
+
collector.data # => { foo: 42 }
|
153
|
+
|
154
|
+
collector = s.validate({ foo: 'invalid' })
|
155
|
+
collector.valid? # false
|
156
|
+
collector.data # => nil
|
157
|
+
collector.exceptions # => Validation error
|
158
|
+
```
|
159
|
+
|
160
|
+
|
133
161
|
## Schemacop's DSL
|
134
162
|
|
135
163
|
In this section, we will ignore [short forms](#short-forms) and explicitly
|
@@ -182,7 +210,7 @@ Consider a scenario in which you want to have the following rule set:
|
|
182
210
|
The corresponding schema would look as follows:
|
183
211
|
|
184
212
|
```ruby
|
185
|
-
|
213
|
+
Schema.new do
|
186
214
|
type :integer, if: proc { |data| data.odd? }, max: 15
|
187
215
|
type :integer
|
188
216
|
end
|
@@ -203,8 +231,8 @@ the type checking, meaning that it only gets executed if the data has the right
|
|
203
231
|
type and the proc in `if` (if any) has returned true.
|
204
232
|
|
205
233
|
The proc passed to the `check` option is given the data being analyzed. It is to
|
206
|
-
return true if the data passes the custom check. If it returns false
|
207
|
-
considers the data to be invalid.
|
234
|
+
return true if the data passes the custom check. If it returns false or an error
|
235
|
+
message as a string, Schemacop considers the data to be invalid.
|
208
236
|
|
209
237
|
The following example illustrates the use of the option `check`: Consider a
|
210
238
|
scenario in which you want the following rule set:
|
@@ -224,10 +252,21 @@ end
|
|
224
252
|
The above Type Line has type `:string` and two options (`min` and `check`). The
|
225
253
|
option `min` is supported by the `:string` validator (covered later).
|
226
254
|
|
255
|
+
You can also specify a custom error message by returning a string:
|
256
|
+
|
257
|
+
|
258
|
+
```ruby
|
259
|
+
Schema.new do
|
260
|
+
type :integer, check: proc { |i| i.even? ? true : 'Custom error' }
|
261
|
+
end
|
262
|
+
```
|
263
|
+
|
264
|
+
This will include `Custom error` in the validation error message.
|
265
|
+
|
227
266
|
### Field Line
|
228
267
|
|
229
|
-
Inside a Type Line of type `:hash
|
230
|
-
|
268
|
+
Inside a Type Line of type `:hash`, you may specify an arbitrary number of field
|
269
|
+
lines (one for each key-value pair you want to be in the hash).
|
231
270
|
|
232
271
|
Field Lines start with one of the following six identifiers: `req`, `req?`,
|
233
272
|
`req!`, `opt`, `opt?` or `opt!`:
|
@@ -273,6 +312,36 @@ end
|
|
273
312
|
You might find the notation cumbersome, and you'd be right to say so. Luckily
|
274
313
|
there are plenty of short forms available which we will see below.
|
275
314
|
|
315
|
+
#### Handling hashes with indifferent access
|
316
|
+
|
317
|
+
Schemacop has special handling for objects of the class
|
318
|
+
`ActiveSupport::HashWithIndifferentAccess`: You may specify the keys as symbols
|
319
|
+
or strings, and Schemacop will handle the conversion necessary for proper
|
320
|
+
validation internally. Note that if you define the same key as string and
|
321
|
+
symbol, it will throw a `ValidationError` [exception](#exceptions) when asked to
|
322
|
+
validate a hash with indifferent access.
|
323
|
+
|
324
|
+
Thus, the following two schema definitions are equivalent when validating a hash
|
325
|
+
with indifferent access:
|
326
|
+
|
327
|
+
```ruby
|
328
|
+
Schema.new do
|
329
|
+
type :hash do
|
330
|
+
req :name do
|
331
|
+
type :string
|
332
|
+
end
|
333
|
+
end
|
334
|
+
end
|
335
|
+
|
336
|
+
Schema.new do
|
337
|
+
type :hash do
|
338
|
+
req 'name' do
|
339
|
+
type :string
|
340
|
+
end
|
341
|
+
end
|
342
|
+
end
|
343
|
+
```
|
344
|
+
|
276
345
|
## Types
|
277
346
|
|
278
347
|
Types are defined via their validators, which is a class under `validator/`.
|
@@ -302,11 +371,16 @@ The following types are supported by Schemacop by default:
|
|
302
371
|
|
303
372
|
* `:object` accepts an arbitrary Ruby object (any object if no option is given).
|
304
373
|
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
374
|
+
Supported options:
|
375
|
+
|
376
|
+
- `classes`: Ruby class (or an array of them) that will be the only recognized
|
377
|
+
filters. Unlike other options, this one affects not the validation but the
|
378
|
+
type recognition, meaning that you can have multiple Type Lines with
|
379
|
+
different `classes` option for the same field, each having its own
|
380
|
+
validation (e.g. through the option `check`).
|
381
|
+
|
382
|
+
- `strict`: Boolean option, defaults to true. If set to false, the validator
|
383
|
+
also allows derived classes of those specified with `classes`.
|
310
384
|
|
311
385
|
* `:array` accepts a Ruby Array.
|
312
386
|
|
@@ -317,7 +391,7 @@ The following types are supported by Schemacop by default:
|
|
317
391
|
- TODO no lookahead for different arrays, see
|
318
392
|
validator_array_test#test_multiple_arrays
|
319
393
|
|
320
|
-
* `:hash` accepts a Ruby Hash
|
394
|
+
* `:hash` accepts a Ruby Hash or an `ActiveSupport::HashWithIndifferentAccess`.
|
321
395
|
|
322
396
|
- accepts a block with an arbitrary number of Field Lines.
|
323
397
|
|
@@ -443,6 +517,10 @@ Schema.new do
|
|
443
517
|
end
|
444
518
|
```
|
445
519
|
|
520
|
+
Note that this does not allow you to specify any options for the hash itself.
|
521
|
+
You still need to specify `:hash` as a type if you want to pass any options to
|
522
|
+
the hash (i.e. a `default`).
|
523
|
+
|
446
524
|
### Shortform for subtypes
|
447
525
|
|
448
526
|
In case of nested arrays, you can group all Type Lines to a single one.
|
@@ -501,6 +579,149 @@ of type Array with children of type Array with children of type Hash in which at
|
|
501
579
|
least one of the Symbol keys `:food` and `:drink` (with any non-nil value type)
|
502
580
|
is present.
|
503
581
|
|
582
|
+
## Defaults
|
583
|
+
|
584
|
+
Starting from version 2.4.0, Schemacop allows you to define default values at
|
585
|
+
any point in your schema. If the validated data contains a nil value, it will be
|
586
|
+
substituted by the given default value.
|
587
|
+
|
588
|
+
Note that Schemacop never modifies the data you pass to it. If you want to
|
589
|
+
benefit from Schemacop-applied defaults, you need to access the cloned, modified
|
590
|
+
data returned by `validate` or `validate!`.
|
591
|
+
|
592
|
+
Applying defaults is done before validating the substructure and before any type
|
593
|
+
casting. The provided default will be validated same as user-supplied data, so
|
594
|
+
if your given default does not validate properly, a validation error is thrown.
|
595
|
+
Make sure your default values always match the underlying schema.
|
596
|
+
|
597
|
+
Defaults can be specified at any point:
|
598
|
+
|
599
|
+
|
600
|
+
```ruby
|
601
|
+
# Basic usage
|
602
|
+
Schema.new do
|
603
|
+
type :string, default: 'Hello World'
|
604
|
+
end
|
605
|
+
|
606
|
+
# The default given for the first type will match
|
607
|
+
Schema.new do
|
608
|
+
type :string, default: 'Hello World' # This will always be applied of no value is supplied
|
609
|
+
type :integer, default: 42
|
610
|
+
end
|
611
|
+
|
612
|
+
# You can also pass entire hashes or arrays to your defaults
|
613
|
+
Schema.new do
|
614
|
+
req :foo, :hash, default: { foo: :bar } do
|
615
|
+
req :foo, :symbol
|
616
|
+
end
|
617
|
+
req :bar, :array, :integer, default: [1, 2, 3]
|
618
|
+
end
|
619
|
+
|
620
|
+
# Defaults must match the given schema. The following will fail.
|
621
|
+
Schema.new do
|
622
|
+
req :foo, default: { bar: :baz } do
|
623
|
+
req :foo
|
624
|
+
end
|
625
|
+
end
|
626
|
+
```
|
627
|
+
|
628
|
+
### Required data points
|
629
|
+
|
630
|
+
Note that any *required* validation is done before applying the defaults. If you
|
631
|
+
specify a `req` field, it must always be given, no matter if you have specified
|
632
|
+
a default or not. Therefore, specifying `req` fields do not make sense in
|
633
|
+
conjunction with defaults, as the default is always ignored.
|
634
|
+
|
635
|
+
## Type casting
|
636
|
+
|
637
|
+
Starting from version 2.4.0, Schemacop allows you to specify type castings that
|
638
|
+
can alter the validated data. Consider the following:
|
639
|
+
|
640
|
+
```ruby
|
641
|
+
s = Schema.new do
|
642
|
+
req :id, :integer, cast: [String]
|
643
|
+
end
|
644
|
+
|
645
|
+
data = s.validate!(id: '42')
|
646
|
+
data # => { id: 42 }
|
647
|
+
```
|
648
|
+
|
649
|
+
Note that Schemacop never modifies the data you pass to it. If you want to
|
650
|
+
benefit from Schemacop-applied castings, you need to access the cloned, modified
|
651
|
+
data returned by `validate` or `validate!`.
|
652
|
+
|
653
|
+
### Specifying type castings
|
654
|
+
|
655
|
+
Type castings can be specified using two forms: Either as a hash or as an array.
|
656
|
+
While using an array only allows you to specify the supported source types to be
|
657
|
+
casted, using a hash allows you to specify custom casting logic as blocks.
|
658
|
+
|
659
|
+
For hashes, the key must be a class and the value must be either `:default` for
|
660
|
+
using a built-in caster or a callable object (proc or lambda) that receives the
|
661
|
+
value and is supposed to cast it. If the value can't be casted, the proc must
|
662
|
+
fail with an exception. The exception message will then be contained in the
|
663
|
+
collected validation errors.
|
664
|
+
|
665
|
+
Example:
|
666
|
+
|
667
|
+
```ruby
|
668
|
+
Schema.new do
|
669
|
+
# Pass array to `cast`. This enables casting from String or Float to Integer
|
670
|
+
# using the built-in casters.
|
671
|
+
req: id_1, :integer, cast: [String, Float]
|
672
|
+
|
673
|
+
# Pass hash to `cast`. This enables casting from Float to Integer using the
|
674
|
+
# built-in caster and from String to Integer using a custom callback.
|
675
|
+
req :id_2, :integer, cast: { Float => :default, String => proc { |s| Integer(s) }
|
676
|
+
end
|
677
|
+
```
|
678
|
+
|
679
|
+
### Built-in casters
|
680
|
+
|
681
|
+
Schemacop comes with the following casters:
|
682
|
+
|
683
|
+
- `String` to `Integer` and `Float`
|
684
|
+
- `Float` to `Integer`
|
685
|
+
- `Integer` to `Float`
|
686
|
+
|
687
|
+
Note that all built-in casters are precise, so the string `foo` will fail with
|
688
|
+
an error if casted to an Integer. When casting float values and strings
|
689
|
+
containing float values to integers, the decimal places will be discarded
|
690
|
+
however.
|
691
|
+
|
692
|
+
### Execution order
|
693
|
+
|
694
|
+
The casting is done *before* the options `if` and `check` are evaluated.
|
695
|
+
Example:
|
696
|
+
|
697
|
+
```ruby
|
698
|
+
s = Schema.new do
|
699
|
+
type :integer, if: proc { |i| i == 42 } # 1
|
700
|
+
type :integer, check: proc { |i| i < 3 } # 2
|
701
|
+
type :string
|
702
|
+
end
|
703
|
+
|
704
|
+
s.validate!('42') # 1 will match
|
705
|
+
s.validate!('2') # 2 will match
|
706
|
+
s.validate!('234') # 3 will match
|
707
|
+
s.validate!(5) # Will fail, as nothing matches
|
708
|
+
```
|
709
|
+
|
710
|
+
### Caveats
|
711
|
+
|
712
|
+
Casting only works with type definitions that only include one type. For
|
713
|
+
instance, the `Numeric` validator includes both `Integer` and `Float`, which
|
714
|
+
would made it unclear what to cast a string into:
|
715
|
+
|
716
|
+
```ruby
|
717
|
+
# This does not work, as it is unclear whether to cast the String into an
|
718
|
+
# Integer or a Float.
|
719
|
+
type :number, cast: [String]
|
720
|
+
```
|
721
|
+
|
722
|
+
The same also applies to booleans, as they compound both `TrueClass` and
|
723
|
+
`FalseClass`. This may be tackled in future releases.
|
724
|
+
|
504
725
|
## Exceptions
|
505
726
|
|
506
727
|
Schemacop will throw one of the following checked exceptions:
|
@@ -526,6 +747,19 @@ Schemacop will throw one of the following checked exceptions:
|
|
526
747
|
|
527
748
|
* Schemacop does not yet support string regex matching.
|
528
749
|
|
750
|
+
## Development
|
751
|
+
|
752
|
+
To run tests:
|
753
|
+
|
754
|
+
* Check out the source
|
755
|
+
|
756
|
+
* Run `bundle install`
|
757
|
+
|
758
|
+
* Run `bundle exec rake test` to run all tests
|
759
|
+
|
760
|
+
* Run `bundle exec rake test TEST=test/unit/some/file.rb` to run a single test
|
761
|
+
file
|
762
|
+
|
529
763
|
## Contributors
|
530
764
|
|
531
765
|
Thanks to [Rubocop](https://github.com/bbatsov/rubocop) for great inspiration
|
@@ -534,4 +768,4 @@ to [SubGit](http://www.subgit.com/) for their great open source licensing.
|
|
534
768
|
|
535
769
|
## Copyright
|
536
770
|
|
537
|
-
Copyright (c)
|
771
|
+
Copyright (c) 2019 Sitrox. See `LICENSE` for further details.
|
data/RUBY_VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
ruby-2.
|
1
|
+
ruby-2.6.2-p47
|
data/Rakefile
CHANGED
@@ -14,15 +14,20 @@ task :gemspec do
|
|
14
14
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
15
15
|
spec.require_paths = ['lib']
|
16
16
|
|
17
|
+
# This lower bound for ActiveSupport is not necessarily true. Schemacop
|
18
|
+
# needs access to ActiveSupport::HashWithIndifferentAccess and expects
|
19
|
+
# behavior of that as in version 5 of ActiveSupport.
|
20
|
+
spec.add_dependency 'activesupport', '>= 4.0'
|
17
21
|
spec.add_development_dependency 'bundler', '~> 1.3'
|
18
22
|
spec.add_development_dependency 'rake'
|
19
23
|
spec.add_development_dependency 'ci_reporter', '~> 2.0'
|
20
24
|
spec.add_development_dependency 'ci_reporter_minitest'
|
21
|
-
spec.add_development_dependency 'activesupport'
|
22
25
|
spec.add_development_dependency 'haml'
|
26
|
+
spec.add_development_dependency 'colorize'
|
23
27
|
spec.add_development_dependency 'yard'
|
24
28
|
spec.add_development_dependency 'rubocop', '0.35.1'
|
25
29
|
spec.add_development_dependency 'redcarpet'
|
30
|
+
spec.add_development_dependency 'pry'
|
26
31
|
end
|
27
32
|
|
28
33
|
File.open('schemacop.gemspec', 'w') { |f| f.write(gemspec.to_ruby.strip) }
|