schemacop 2.1.0 → 2.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (77) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +58 -0
  3. data/LICENSE +1 -1
  4. data/README.md +250 -16
  5. data/RUBY_VERSION +1 -1
  6. data/Rakefile +6 -1
  7. data/VERSION +1 -1
  8. data/doc/Schemacop.html +32 -5
  9. data/doc/Schemacop/ArrayValidator.html +4 -4
  10. data/doc/Schemacop/BooleanValidator.html +4 -4
  11. data/doc/Schemacop/Caster.html +379 -0
  12. data/doc/Schemacop/Collector.html +298 -46
  13. data/doc/Schemacop/Exceptions.html +3 -3
  14. data/doc/Schemacop/Exceptions/InvalidSchemaError.html +3 -3
  15. data/doc/Schemacop/Exceptions/ValidationError.html +3 -3
  16. data/doc/Schemacop/FieldNode.html +19 -7
  17. data/doc/Schemacop/FloatValidator.html +4 -4
  18. data/doc/Schemacop/HashValidator.html +33 -7
  19. data/doc/Schemacop/IntegerValidator.html +4 -4
  20. data/doc/Schemacop/NilValidator.html +4 -4
  21. data/doc/Schemacop/Node.html +97 -85
  22. data/doc/Schemacop/NodeResolver.html +28 -12
  23. data/doc/Schemacop/NodeSupportingField.html +4 -4
  24. data/doc/Schemacop/NodeSupportingType.html +5 -7
  25. data/doc/Schemacop/NodeWithBlock.html +4 -4
  26. data/doc/Schemacop/NumberValidator.html +4 -4
  27. data/doc/Schemacop/ObjectValidator.html +20 -10
  28. data/doc/Schemacop/RootNode.html +4 -4
  29. data/doc/Schemacop/Schema.html +6 -6
  30. data/doc/Schemacop/StringValidator.html +3 -3
  31. data/doc/Schemacop/SymbolValidator.html +4 -4
  32. data/doc/ScopedEnv.html +3 -3
  33. data/doc/_index.html +11 -4
  34. data/doc/class_list.html +1 -1
  35. data/doc/css/style.css +10 -6
  36. data/doc/file.README.html +255 -29
  37. data/doc/frames.html +1 -1
  38. data/doc/index.html +255 -29
  39. data/doc/js/app.js +55 -0
  40. data/doc/method_list.html +99 -51
  41. data/doc/top-level-namespace.html +3 -3
  42. data/lib/schemacop.rb +15 -0
  43. data/lib/schemacop/caster.rb +38 -0
  44. data/lib/schemacop/collector.rb +53 -6
  45. data/lib/schemacop/field_node.rb +25 -3
  46. data/lib/schemacop/node.rb +16 -4
  47. data/lib/schemacop/node_resolver.rb +10 -2
  48. data/lib/schemacop/node_supporting_field.rb +0 -2
  49. data/lib/schemacop/node_supporting_type.rb +21 -1
  50. data/lib/schemacop/schema.rb +3 -3
  51. data/lib/schemacop/validator/array_validator.rb +1 -1
  52. data/lib/schemacop/validator/float_validator.rb +1 -1
  53. data/lib/schemacop/validator/hash_validator.rb +15 -2
  54. data/lib/schemacop/validator/integer_validator.rb +1 -1
  55. data/lib/schemacop/validator/object_validator.rb +7 -1
  56. data/schemacop.gemspec +15 -9
  57. data/test/casting_test.rb +90 -0
  58. data/test/collector_test.rb +45 -0
  59. data/test/custom_check_test.rb +20 -13
  60. data/test/custom_if_test.rb +12 -12
  61. data/test/defaults_test.rb +71 -0
  62. data/test/nil_dis_allow_test.rb +6 -6
  63. data/test/node_resolver_test.rb +26 -0
  64. data/test/short_forms_test.rb +86 -64
  65. data/test/test_helper.rb +7 -0
  66. data/test/types_test.rb +5 -5
  67. data/test/validator_array_test.rb +16 -16
  68. data/test/validator_boolean_test.rb +2 -2
  69. data/test/validator_float_test.rb +15 -15
  70. data/test/validator_hash_test.rb +5 -5
  71. data/test/validator_integer_test.rb +9 -9
  72. data/test/validator_nil_test.rb +1 -1
  73. data/test/validator_number_test.rb +19 -19
  74. data/test/validator_object_test.rb +33 -15
  75. data/test/validator_string_test.rb +12 -12
  76. data/test/validator_symbol_test.rb +2 -2
  77. metadata +43 -6
@@ -1,8 +1,22 @@
1
1
  module Schemacop
2
+ DEFAULT_CASTERS = {
3
+ String => {
4
+ Integer => proc { |s| Integer(s) },
5
+ Float => proc { |s| Float(s) }
6
+ },
7
+ Float => {
8
+ Integer => proc { |f| Integer(f) }
9
+ },
10
+ Integer => {
11
+ Float => proc { |f| Float(f) }
12
+ }
13
+ }
2
14
  end
3
15
 
4
16
  require 'set'
5
17
  require 'active_support/core_ext/class/attribute'
18
+ require 'active_support/hash_with_indifferent_access'
19
+ require 'active_support/core_ext/object/deep_dup'
6
20
 
7
21
  require 'schemacop/scoped_env'
8
22
  require 'schemacop/exceptions'
@@ -15,6 +29,7 @@ require 'schemacop/node_supporting_type'
15
29
  require 'schemacop/field_node'
16
30
  require 'schemacop/root_node'
17
31
  require 'schemacop/node_supporting_field'
32
+ require 'schemacop/caster'
18
33
  require 'schemacop/validator/array_validator'
19
34
  require 'schemacop/validator/boolean_validator'
20
35
  require 'schemacop/validator/hash_validator'
@@ -0,0 +1,38 @@
1
+ module Schemacop
2
+ class Caster
3
+ def initialize(casts, data, target_type)
4
+ @casts = casts
5
+ @data = data
6
+ @target_type = target_type
7
+ @caster = nil
8
+
9
+ if casts.is_a?(Array)
10
+ from_types = casts
11
+ elsif casts.is_a?(Hash)
12
+ from_types = casts.keys
13
+ else
14
+ fail Exceptions::InvalidSchemaError, "Option `cast` must be either an array or a hash."
15
+ end
16
+
17
+ return unless from_types.include?(data.class)
18
+
19
+ if (casts.is_a?(Array) && casts.include?(data.class)) || casts[data.class] == :default
20
+ @caster = DEFAULT_CASTERS[data.class][target_type]
21
+ else
22
+ @caster = casts[data.class]
23
+ end
24
+ end
25
+
26
+ def castable?
27
+ !@caster.nil?
28
+ end
29
+
30
+ def cast
31
+ fail 'Not castable.' unless castable?
32
+ return @caster.call(@data)
33
+ rescue => e
34
+ fail Exceptions::InvalidSchemaError,
35
+ "Could not cast value #{@value.inspect} to #{@target_type}: #{e.message}."
36
+ end
37
+ end
38
+ end
@@ -1,21 +1,59 @@
1
1
  module Schemacop
2
2
  class Collector
3
- attr_reader :current_path
3
+ attr_reader :exceptions
4
4
 
5
- def initialize
5
+ def initialize(data)
6
6
  @exceptions = []
7
7
  @current_path = []
8
+ @ignore_next_segment = false
9
+ @current_datappoint_path = [data]
10
+ @current_index = nil
11
+ end
12
+
13
+ def data
14
+ return nil unless valid?
15
+ @current_datappoint_path.first
8
16
  end
9
17
 
10
18
  def valid?
11
19
  @exceptions.empty?
12
20
  end
13
21
 
14
- def path(segment)
15
- @current_path << segment
22
+ # Construct the current path
23
+ def path(segment, index, type)
24
+ ignore_this_segment = false
25
+
26
+ previous_index = @current_index
27
+
28
+ if @ignore_next_segment
29
+ ignore_this_segment = true
30
+ @ignore_next_segment = false
31
+ else
32
+ unless @current_datappoint_path.last
33
+ if type == :hash
34
+ @current_datappoint_path[-1] = {}
35
+ else
36
+ @current_datappoint_path[-1] = []
37
+ end
38
+ end
39
+ @current_path << segment unless ignore_this_segment
40
+ @current_datappoint_path << @current_datappoint_path.last[index]
41
+ @current_index = index
42
+ end
43
+
16
44
  yield
17
45
  ensure
18
- @current_path.pop
46
+ @current_index = previous_index
47
+ @current_datappoint_path.pop unless ignore_this_segment
48
+ @current_path.pop unless ignore_this_segment
49
+ end
50
+
51
+ def override_value(value)
52
+ if @current_datappoint_path.size > 1
53
+ @current_datappoint_path[-2][@current_index] = value
54
+ else
55
+ @current_datappoint_path[0] = value
56
+ end
19
57
  end
20
58
 
21
59
  def exception_message
@@ -26,9 +64,18 @@ module Schemacop
26
64
 
27
65
  def error(error_msg)
28
66
  @exceptions << {
29
- path: current_path.dup,
67
+ path: @current_path.dup,
30
68
  message: error_msg
31
69
  }
32
70
  end
71
+
72
+ # Does not include the path segment next time {Schemacop::Collector.path} is
73
+ # called.
74
+ #
75
+ # @return [Schemacop::Collector]
76
+ def ignore_next_segment
77
+ @ignore_next_segment = true
78
+ return self
79
+ end
33
80
  end
34
81
  end
@@ -16,11 +16,33 @@ module Schemacop
16
16
  def validate(data, collector)
17
17
  unless data.key?(name)
18
18
  collector.error "Missing key #{name.inspect}." if @required
19
- return
20
19
  end
21
- collector.path "/#{name}" do
22
- super(data[name], collector)
20
+
21
+ collector.path "/#{name}", name, :hash do
22
+ value, default_applied = apply_default!(data[name], collector)
23
+
24
+ unless data.key?(name) || default_applied
25
+ next
26
+ end
27
+
28
+ super(value, collector)
23
29
  end
24
30
  end
31
+
32
+ private
33
+
34
+ def apply_default!(data, collector)
35
+ return data, false unless data.nil?
36
+
37
+ @types.each do |type|
38
+ if type.option?(:default)
39
+ default = type.option(:default)
40
+ collector.override_value(default)
41
+ return default, true
42
+ end
43
+ end
44
+
45
+ return nil, false
46
+ end
25
47
  end
26
48
  end
@@ -17,6 +17,8 @@ module Schemacop
17
17
 
18
18
  option :if
19
19
  option :check
20
+ option :cast
21
+ option :default
20
22
 
21
23
  def type_label
22
24
  str = (symbols.first || 'unknown').to_s
@@ -40,8 +42,8 @@ module Schemacop
40
42
  self.klasses = [].freeze
41
43
  end
42
44
 
43
- def self.register(symbols: [], klasses: [], clear: true)
44
- NodeResolver.register(self)
45
+ def self.register(symbols: [], klasses: [], clear: true, before: nil)
46
+ NodeResolver.register(self, before: before)
45
47
  symbols = [*symbols]
46
48
  klasses = [*klasses]
47
49
  if clear
@@ -80,6 +82,12 @@ module Schemacop
80
82
  fail Exceptions::InvalidSchemaError,
81
83
  "Unrecognized option(s) #{obsolete_opts.inspect} for #{self.class.inspect}, allowed options: #{self.class.allowed_options.keys.inspect}."
82
84
  end
85
+
86
+ if option?(:cast) && self.class.klasses.size > 1
87
+ fail Exceptions::InvalidSchemaError,
88
+ "Casting is only allowed for single-value datatypes, but type #{self.class.inspect} has classes "\
89
+ "#{self.class.klasses.map(&:inspect)}."
90
+ end
83
91
  end
84
92
 
85
93
  def option(key)
@@ -119,8 +127,12 @@ module Schemacop
119
127
  protected
120
128
 
121
129
  def validate_custom_check(data, collector)
122
- if option?(:check) && !option(:check).call(data)
123
- collector.error 'Custom :check failed.'
130
+ if option?(:check) && (check_result = option(:check).call(data)) != true
131
+ if check_result.is_a?(String)
132
+ collector.error "Custom :check failed: #{check_result}."
133
+ else
134
+ collector.error 'Custom :check failed.'
135
+ end
124
136
  end
125
137
  end
126
138
  end
@@ -3,8 +3,16 @@ module Schemacop
3
3
  class_attribute :node_classes
4
4
  self.node_classes = [].freeze
5
5
 
6
- def self.register(node_class)
7
- self.node_classes += [node_class]
6
+ def self.register(node_class, before: nil)
7
+ if before
8
+ unless (index = self.node_classes.find_index(before))
9
+ fail "Cannot insert before class #{before} which has not been registered yet."
10
+ end
11
+
12
+ self.node_classes.insert(index, node_class)
13
+ else
14
+ self.node_classes += [node_class]
15
+ end
8
16
  end
9
17
 
10
18
  def self.resolve(type)
@@ -38,8 +38,6 @@ module Schemacop
38
38
  protected
39
39
 
40
40
  def field(*args, required:, allow_nil:, &block)
41
- # name = args.shift
42
- # options = args.last.is_a?(Hash) ? args.pop : {}
43
41
  name = args.shift
44
42
 
45
43
  if @fields[name]
@@ -93,13 +93,33 @@ module Schemacop
93
93
 
94
94
  def validate(data, collector)
95
95
  super
96
-
97
96
  validate_types(data, collector)
98
97
  end
99
98
 
100
99
  protected
101
100
 
101
+ def cast!(data, collector)
102
+ @types.each do |type|
103
+ if type.option?(:cast) && !type.type_matches?(data) && type.type_filter_matches?(data)
104
+ caster = Caster.new(type.option(:cast), data, type.class.klasses.first)
105
+
106
+ if caster.castable?
107
+ begin
108
+ data = caster.cast
109
+ collector.override_value(data)
110
+ return data
111
+ rescue Exceptions::InvalidSchemaError => e
112
+ collector.error e.message
113
+ end
114
+ end
115
+ end
116
+ end
117
+
118
+ return data
119
+ end
120
+
102
121
  def validate_types(data, collector)
122
+ data = cast!(data, collector)
103
123
  unless (match = @types.find { |t| t.type_matches?(data) })
104
124
  allowed_types = @types.map(&:type_label)
105
125
 
@@ -37,8 +37,8 @@ module Schemacop
37
37
  # @return [Schemacop::Collector] The object that collected errors
38
38
  # throughout the validation.
39
39
  def validate(data)
40
- collector = Collector.new
41
- @root.fields[:root].validate({ root: data }, collector)
40
+ collector = Collector.new(data.deep_dup)
41
+ @root.fields[:root].validate({ root: data }, collector.ignore_next_segment)
42
42
  return collector
43
43
  end
44
44
 
@@ -55,7 +55,7 @@ module Schemacop
55
55
  fail Exceptions::ValidationError, collector.exception_message
56
56
  end
57
57
 
58
- return nil
58
+ return collector.data
59
59
  end
60
60
  end
61
61
  end
@@ -21,7 +21,7 @@ module Schemacop
21
21
  collector.error "Array must have less (<=) than #{option(:max)} elements."
22
22
  end
23
23
  data.each_with_index do |entry, index|
24
- collector.path("[#{index}]") do
24
+ collector.path("[#{index}]", index, :array) do
25
25
  validate_types(entry, collector)
26
26
  end
27
27
  end
@@ -1,5 +1,5 @@
1
1
  module Schemacop
2
2
  class FloatValidator < NumberValidator
3
- register symbols: :float, klasses: Float
3
+ register symbols: :float, klasses: Float, before: NumberValidator
4
4
  end
5
5
  end
@@ -5,8 +5,21 @@ module Schemacop
5
5
  def validate(data, collector)
6
6
  super
7
7
 
8
- allowed_fields = @fields.keys
9
- obsolete_keys = data.keys - allowed_fields
8
+ if data.is_a? ActiveSupport::HashWithIndifferentAccess
9
+ allowed_fields = @fields.keys.map { |k| k.is_a?(String) ? k.to_sym : k }
10
+ data_keys = data.keys.map { |k| k.is_a?(String) ? k.to_sym : k }
11
+
12
+ # If the same key is specified in the schema as string and symbol, we
13
+ # definitely expect a Ruby hash and not one with indifferent access
14
+ if @fields.keys.length != Set.new(allowed_fields).length
15
+ fail Exceptions::ValidationError, 'Hash expected, but got ActiveSupport::HashWithIndifferentAccess.'
16
+ end
17
+ else
18
+ allowed_fields = @fields.keys
19
+ data_keys = data.keys
20
+ end
21
+
22
+ obsolete_keys = data_keys - allowed_fields
10
23
 
11
24
  collector.error "Obsolete keys: #{obsolete_keys.inspect}." if obsolete_keys.any?
12
25
 
@@ -1,5 +1,5 @@
1
1
  module Schemacop
2
2
  class IntegerValidator < NumberValidator
3
- register symbols: :integer, klasses: Integer
3
+ register symbols: :integer, klasses: Integer, before: NumberValidator
4
4
  end
5
5
  end
@@ -3,13 +3,19 @@ module Schemacop
3
3
  register symbols: :object, klasses: Object
4
4
 
5
5
  option :classes
6
+ option :strict
6
7
 
7
8
  def type_label
8
9
  "#{super} (#{classes.join(', ')})"
9
10
  end
10
11
 
11
12
  def type_matches?(data)
12
- super && (classes.empty? || classes.include?(data.class)) && !data.nil?
13
+ if option(:strict).is_a?(FalseClass)
14
+ sub_or_class = classes.map { |klass| data.class <= klass }.include?(true)
15
+ super && (classes.empty? || sub_or_class) && !data.nil?
16
+ else
17
+ super && (classes.empty? || classes.include?(data.class)) && !data.nil?
18
+ end
13
19
  end
14
20
 
15
21
  private
@@ -1,54 +1,60 @@
1
1
  # -*- encoding: utf-8 -*-
2
- # stub: schemacop 2.1.0 ruby lib
2
+ # stub: schemacop 2.4.0 ruby lib
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "schemacop".freeze
6
- s.version = "2.1.0"
6
+ s.version = "2.4.0"
7
7
 
8
8
  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
9
9
  s.require_paths = ["lib".freeze]
10
10
  s.authors = ["Sitrox".freeze]
11
- s.date = "2017-05-16"
12
- s.files = [".gitignore".freeze, ".releaser_config".freeze, ".rubocop.yml".freeze, ".travis.yml".freeze, ".yardopts".freeze, "CHANGELOG.md".freeze, "Gemfile".freeze, "LICENSE".freeze, "README.md".freeze, "RUBY_VERSION".freeze, "Rakefile".freeze, "VERSION".freeze, "doc/Schemacop.html".freeze, "doc/Schemacop/ArrayValidator.html".freeze, "doc/Schemacop/BooleanValidator.html".freeze, "doc/Schemacop/Collector.html".freeze, "doc/Schemacop/Exceptions.html".freeze, "doc/Schemacop/Exceptions/InvalidSchemaError.html".freeze, "doc/Schemacop/Exceptions/ValidationError.html".freeze, "doc/Schemacop/FieldNode.html".freeze, "doc/Schemacop/FloatValidator.html".freeze, "doc/Schemacop/HashValidator.html".freeze, "doc/Schemacop/IntegerValidator.html".freeze, "doc/Schemacop/NilValidator.html".freeze, "doc/Schemacop/Node.html".freeze, "doc/Schemacop/NodeResolver.html".freeze, "doc/Schemacop/NodeSupportingField.html".freeze, "doc/Schemacop/NodeSupportingType.html".freeze, "doc/Schemacop/NodeWithBlock.html".freeze, "doc/Schemacop/NumberValidator.html".freeze, "doc/Schemacop/ObjectValidator.html".freeze, "doc/Schemacop/RootNode.html".freeze, "doc/Schemacop/Schema.html".freeze, "doc/Schemacop/StringValidator.html".freeze, "doc/Schemacop/SymbolValidator.html".freeze, "doc/ScopedEnv.html".freeze, "doc/_index.html".freeze, "doc/class_list.html".freeze, "doc/css/common.css".freeze, "doc/css/full_list.css".freeze, "doc/css/style.css".freeze, "doc/file.README.html".freeze, "doc/file_list.html".freeze, "doc/frames.html".freeze, "doc/index.html".freeze, "doc/inheritance.graphml".freeze, "doc/inheritance.pdf".freeze, "doc/js/app.js".freeze, "doc/js/full_list.js".freeze, "doc/js/jquery.js".freeze, "doc/method_list.html".freeze, "doc/top-level-namespace.html".freeze, "lib/schemacop.rb".freeze, "lib/schemacop/collector.rb".freeze, "lib/schemacop/exceptions.rb".freeze, "lib/schemacop/field_node.rb".freeze, "lib/schemacop/node.rb".freeze, "lib/schemacop/node_resolver.rb".freeze, "lib/schemacop/node_supporting_field.rb".freeze, "lib/schemacop/node_supporting_type.rb".freeze, "lib/schemacop/node_with_block.rb".freeze, "lib/schemacop/root_node.rb".freeze, "lib/schemacop/schema.rb".freeze, "lib/schemacop/scoped_env.rb".freeze, "lib/schemacop/validator/array_validator.rb".freeze, "lib/schemacop/validator/boolean_validator.rb".freeze, "lib/schemacop/validator/float_validator.rb".freeze, "lib/schemacop/validator/hash_validator.rb".freeze, "lib/schemacop/validator/integer_validator.rb".freeze, "lib/schemacop/validator/nil_validator.rb".freeze, "lib/schemacop/validator/number_validator.rb".freeze, "lib/schemacop/validator/object_validator.rb".freeze, "lib/schemacop/validator/string_validator.rb".freeze, "lib/schemacop/validator/symbol_validator.rb".freeze, "schemacop.gemspec".freeze, "test/custom_check_test.rb".freeze, "test/custom_if_test.rb".freeze, "test/nil_dis_allow_test.rb".freeze, "test/short_forms_test.rb".freeze, "test/test_helper.rb".freeze, "test/types_test.rb".freeze, "test/validator_array_test.rb".freeze, "test/validator_boolean_test.rb".freeze, "test/validator_float_test.rb".freeze, "test/validator_hash_test.rb".freeze, "test/validator_integer_test.rb".freeze, "test/validator_nil_test.rb".freeze, "test/validator_number_test.rb".freeze, "test/validator_object_test.rb".freeze, "test/validator_string_test.rb".freeze, "test/validator_symbol_test.rb".freeze]
11
+ s.date = "2019-10-28"
12
+ s.files = [".gitignore".freeze, ".releaser_config".freeze, ".rubocop.yml".freeze, ".travis.yml".freeze, ".yardopts".freeze, "CHANGELOG.md".freeze, "Gemfile".freeze, "LICENSE".freeze, "README.md".freeze, "RUBY_VERSION".freeze, "Rakefile".freeze, "VERSION".freeze, "doc/Schemacop.html".freeze, "doc/Schemacop/ArrayValidator.html".freeze, "doc/Schemacop/BooleanValidator.html".freeze, "doc/Schemacop/Caster.html".freeze, "doc/Schemacop/Collector.html".freeze, "doc/Schemacop/Exceptions.html".freeze, "doc/Schemacop/Exceptions/InvalidSchemaError.html".freeze, "doc/Schemacop/Exceptions/ValidationError.html".freeze, "doc/Schemacop/FieldNode.html".freeze, "doc/Schemacop/FloatValidator.html".freeze, "doc/Schemacop/HashValidator.html".freeze, "doc/Schemacop/IntegerValidator.html".freeze, "doc/Schemacop/NilValidator.html".freeze, "doc/Schemacop/Node.html".freeze, "doc/Schemacop/NodeResolver.html".freeze, "doc/Schemacop/NodeSupportingField.html".freeze, "doc/Schemacop/NodeSupportingType.html".freeze, "doc/Schemacop/NodeWithBlock.html".freeze, "doc/Schemacop/NumberValidator.html".freeze, "doc/Schemacop/ObjectValidator.html".freeze, "doc/Schemacop/RootNode.html".freeze, "doc/Schemacop/Schema.html".freeze, "doc/Schemacop/StringValidator.html".freeze, "doc/Schemacop/SymbolValidator.html".freeze, "doc/ScopedEnv.html".freeze, "doc/_index.html".freeze, "doc/class_list.html".freeze, "doc/css/common.css".freeze, "doc/css/full_list.css".freeze, "doc/css/style.css".freeze, "doc/file.README.html".freeze, "doc/file_list.html".freeze, "doc/frames.html".freeze, "doc/index.html".freeze, "doc/inheritance.graphml".freeze, "doc/inheritance.pdf".freeze, "doc/js/app.js".freeze, "doc/js/full_list.js".freeze, "doc/js/jquery.js".freeze, "doc/method_list.html".freeze, "doc/top-level-namespace.html".freeze, "lib/schemacop.rb".freeze, "lib/schemacop/caster.rb".freeze, "lib/schemacop/collector.rb".freeze, "lib/schemacop/exceptions.rb".freeze, "lib/schemacop/field_node.rb".freeze, "lib/schemacop/node.rb".freeze, "lib/schemacop/node_resolver.rb".freeze, "lib/schemacop/node_supporting_field.rb".freeze, "lib/schemacop/node_supporting_type.rb".freeze, "lib/schemacop/node_with_block.rb".freeze, "lib/schemacop/root_node.rb".freeze, "lib/schemacop/schema.rb".freeze, "lib/schemacop/scoped_env.rb".freeze, "lib/schemacop/validator/array_validator.rb".freeze, "lib/schemacop/validator/boolean_validator.rb".freeze, "lib/schemacop/validator/float_validator.rb".freeze, "lib/schemacop/validator/hash_validator.rb".freeze, "lib/schemacop/validator/integer_validator.rb".freeze, "lib/schemacop/validator/nil_validator.rb".freeze, "lib/schemacop/validator/number_validator.rb".freeze, "lib/schemacop/validator/object_validator.rb".freeze, "lib/schemacop/validator/string_validator.rb".freeze, "lib/schemacop/validator/symbol_validator.rb".freeze, "schemacop.gemspec".freeze, "test/casting_test.rb".freeze, "test/collector_test.rb".freeze, "test/custom_check_test.rb".freeze, "test/custom_if_test.rb".freeze, "test/defaults_test.rb".freeze, "test/nil_dis_allow_test.rb".freeze, "test/node_resolver_test.rb".freeze, "test/short_forms_test.rb".freeze, "test/test_helper.rb".freeze, "test/types_test.rb".freeze, "test/validator_array_test.rb".freeze, "test/validator_boolean_test.rb".freeze, "test/validator_float_test.rb".freeze, "test/validator_hash_test.rb".freeze, "test/validator_integer_test.rb".freeze, "test/validator_nil_test.rb".freeze, "test/validator_number_test.rb".freeze, "test/validator_object_test.rb".freeze, "test/validator_string_test.rb".freeze, "test/validator_symbol_test.rb".freeze]
13
13
  s.homepage = "https://github.com/sitrox/schemacop".freeze
14
14
  s.licenses = ["MIT".freeze]
15
- s.rubygems_version = "2.6.6".freeze
15
+ s.rubygems_version = "3.0.3".freeze
16
16
  s.summary = "Schemacop validates ruby structures consisting of nested hashes and arrays against simple schema definitions.".freeze
17
- s.test_files = ["test/custom_check_test.rb".freeze, "test/custom_if_test.rb".freeze, "test/nil_dis_allow_test.rb".freeze, "test/short_forms_test.rb".freeze, "test/test_helper.rb".freeze, "test/types_test.rb".freeze, "test/validator_array_test.rb".freeze, "test/validator_boolean_test.rb".freeze, "test/validator_float_test.rb".freeze, "test/validator_hash_test.rb".freeze, "test/validator_integer_test.rb".freeze, "test/validator_nil_test.rb".freeze, "test/validator_number_test.rb".freeze, "test/validator_object_test.rb".freeze, "test/validator_string_test.rb".freeze, "test/validator_symbol_test.rb".freeze]
17
+ s.test_files = ["test/casting_test.rb".freeze, "test/collector_test.rb".freeze, "test/custom_check_test.rb".freeze, "test/custom_if_test.rb".freeze, "test/defaults_test.rb".freeze, "test/nil_dis_allow_test.rb".freeze, "test/node_resolver_test.rb".freeze, "test/short_forms_test.rb".freeze, "test/test_helper.rb".freeze, "test/types_test.rb".freeze, "test/validator_array_test.rb".freeze, "test/validator_boolean_test.rb".freeze, "test/validator_float_test.rb".freeze, "test/validator_hash_test.rb".freeze, "test/validator_integer_test.rb".freeze, "test/validator_nil_test.rb".freeze, "test/validator_number_test.rb".freeze, "test/validator_object_test.rb".freeze, "test/validator_string_test.rb".freeze, "test/validator_symbol_test.rb".freeze]
18
18
 
19
19
  if s.respond_to? :specification_version then
20
20
  s.specification_version = 4
21
21
 
22
22
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
23
+ s.add_runtime_dependency(%q<activesupport>.freeze, [">= 4.0"])
23
24
  s.add_development_dependency(%q<bundler>.freeze, ["~> 1.3"])
24
25
  s.add_development_dependency(%q<rake>.freeze, [">= 0"])
25
26
  s.add_development_dependency(%q<ci_reporter>.freeze, ["~> 2.0"])
26
27
  s.add_development_dependency(%q<ci_reporter_minitest>.freeze, [">= 0"])
27
- s.add_development_dependency(%q<activesupport>.freeze, [">= 0"])
28
28
  s.add_development_dependency(%q<haml>.freeze, [">= 0"])
29
+ s.add_development_dependency(%q<colorize>.freeze, [">= 0"])
29
30
  s.add_development_dependency(%q<yard>.freeze, [">= 0"])
30
31
  s.add_development_dependency(%q<rubocop>.freeze, ["= 0.35.1"])
31
32
  s.add_development_dependency(%q<redcarpet>.freeze, [">= 0"])
33
+ s.add_development_dependency(%q<pry>.freeze, [">= 0"])
32
34
  else
35
+ s.add_dependency(%q<activesupport>.freeze, [">= 4.0"])
33
36
  s.add_dependency(%q<bundler>.freeze, ["~> 1.3"])
34
37
  s.add_dependency(%q<rake>.freeze, [">= 0"])
35
38
  s.add_dependency(%q<ci_reporter>.freeze, ["~> 2.0"])
36
39
  s.add_dependency(%q<ci_reporter_minitest>.freeze, [">= 0"])
37
- s.add_dependency(%q<activesupport>.freeze, [">= 0"])
38
40
  s.add_dependency(%q<haml>.freeze, [">= 0"])
41
+ s.add_dependency(%q<colorize>.freeze, [">= 0"])
39
42
  s.add_dependency(%q<yard>.freeze, [">= 0"])
40
43
  s.add_dependency(%q<rubocop>.freeze, ["= 0.35.1"])
41
44
  s.add_dependency(%q<redcarpet>.freeze, [">= 0"])
45
+ s.add_dependency(%q<pry>.freeze, [">= 0"])
42
46
  end
43
47
  else
48
+ s.add_dependency(%q<activesupport>.freeze, [">= 4.0"])
44
49
  s.add_dependency(%q<bundler>.freeze, ["~> 1.3"])
45
50
  s.add_dependency(%q<rake>.freeze, [">= 0"])
46
51
  s.add_dependency(%q<ci_reporter>.freeze, ["~> 2.0"])
47
52
  s.add_dependency(%q<ci_reporter_minitest>.freeze, [">= 0"])
48
- s.add_dependency(%q<activesupport>.freeze, [">= 0"])
49
53
  s.add_dependency(%q<haml>.freeze, [">= 0"])
54
+ s.add_dependency(%q<colorize>.freeze, [">= 0"])
50
55
  s.add_dependency(%q<yard>.freeze, [">= 0"])
51
56
  s.add_dependency(%q<rubocop>.freeze, ["= 0.35.1"])
52
57
  s.add_dependency(%q<redcarpet>.freeze, [">= 0"])
58
+ s.add_dependency(%q<pry>.freeze, [">= 0"])
53
59
  end
54
60
  end