json_model_rb 0.1.19 → 0.1.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +156 -572
  3. data/lib/json_model/builder/alias_builder.rb +10 -0
  4. data/lib/json_model/builder/array_builder.rb +24 -0
  5. data/lib/json_model/builder/base_builder.rb +24 -0
  6. data/lib/json_model/builder/composition/any_of_builder.rb +16 -0
  7. data/lib/json_model/builder/composition/builder.rb +47 -0
  8. data/lib/json_model/builder/composition/intersection_builder.rb +16 -0
  9. data/lib/json_model/builder/composition/one_of_builder.rb +16 -0
  10. data/lib/json_model/builder/composition/sum_builder.rb +16 -0
  11. data/lib/json_model/builder/composition.rb +6 -0
  12. data/lib/json_model/builder/constrained_builder.rb +83 -0
  13. data/lib/json_model/builder/default_builder.rb +14 -0
  14. data/lib/json_model/builder/enum_builder.rb +16 -0
  15. data/lib/json_model/builder/format_builder.rb +47 -0
  16. data/lib/json_model/builder/key_builder.rb +30 -0
  17. data/lib/json_model/builder/nested_builder.rb +31 -0
  18. data/lib/json_model/builder/primitive/boolean_builder.rb +16 -0
  19. data/lib/json_model/builder/primitive/builder.rb +25 -0
  20. data/lib/json_model/builder/primitive/integer_builder.rb +16 -0
  21. data/lib/json_model/builder/primitive/null_builder.rb +16 -0
  22. data/lib/json_model/builder/primitive/number_builder.rb +16 -0
  23. data/lib/json_model/builder/primitive/string_builder.rb +16 -0
  24. data/lib/json_model/builder/primitive.rb +7 -0
  25. data/lib/json_model/builder/ref_builder.rb +35 -0
  26. data/lib/json_model/builder/schema_builder.rb +14 -0
  27. data/lib/json_model/builder.rb +65 -0
  28. data/lib/json_model/config/options.rb +5 -2
  29. data/lib/json_model/config.rb +0 -2
  30. data/lib/json_model/errors.rb +0 -3
  31. data/lib/json_model/logic/predicates/methods.rb +17 -0
  32. data/lib/json_model/predicates.rb +3 -0
  33. data/lib/json_model/schema.rb +41 -77
  34. data/lib/json_model/schema_meta.rb +7 -28
  35. data/lib/json_model/types/alias.rb +33 -0
  36. data/lib/json_model/types/any_of.rb +51 -20
  37. data/lib/json_model/types/one_of.rb +51 -20
  38. data/lib/json_model/types/ref.rb +32 -0
  39. data/lib/json_model/types.rb +47 -9
  40. data/lib/json_model/version.rb +1 -1
  41. data/lib/json_model.rb +3 -6
  42. data/spec/config_spec.rb +0 -14
  43. data/spec/examples/file_system_spec.rb +71 -31
  44. data/spec/examples/user_spec.rb +67 -26
  45. data/spec/schema_meta_spec.rb +0 -40
  46. data/spec/schema_spec.rb +43 -59
  47. metadata +84 -57
  48. data/lib/json_model/errors/invalid_ref_mode_error.rb +0 -12
  49. data/lib/json_model/errors/type_error.rb +0 -8
  50. data/lib/json_model/errors/unknown_attribute_error.rb +0 -13
  51. data/lib/json_model/properties.rb +0 -86
  52. data/lib/json_model/property.rb +0 -54
  53. data/lib/json_model/ref_mode.rb +0 -9
  54. data/lib/json_model/type_spec/array.rb +0 -72
  55. data/lib/json_model/type_spec/castable.rb +0 -34
  56. data/lib/json_model/type_spec/composition/all_of.rb +0 -29
  57. data/lib/json_model/type_spec/composition/any_of.rb +0 -34
  58. data/lib/json_model/type_spec/composition/one_of.rb +0 -38
  59. data/lib/json_model/type_spec/composition.rb +0 -79
  60. data/lib/json_model/type_spec/const.rb +0 -35
  61. data/lib/json_model/type_spec/enum.rb +0 -35
  62. data/lib/json_model/type_spec/object.rb +0 -32
  63. data/lib/json_model/type_spec/primitive/boolean.rb +0 -13
  64. data/lib/json_model/type_spec/primitive/integer.rb +0 -21
  65. data/lib/json_model/type_spec/primitive/null.rb +0 -13
  66. data/lib/json_model/type_spec/primitive/number.rb +0 -14
  67. data/lib/json_model/type_spec/primitive/numeric.rb +0 -85
  68. data/lib/json_model/type_spec/primitive/string.rb +0 -150
  69. data/lib/json_model/type_spec/primitive.rb +0 -40
  70. data/lib/json_model/type_spec.rb +0 -82
  71. data/lib/json_model/types/all_of.rb +0 -29
  72. data/lib/json_model/types/array.rb +0 -29
  73. data/lib/json_model/types/boolean.rb +0 -7
  74. data/lib/json_model/types/const.rb +0 -23
  75. data/lib/json_model/types/enum.rb +0 -23
  76. data/lib/json_model/types/integer.rb +0 -23
  77. data/lib/json_model/types/null.rb +0 -7
  78. data/lib/json_model/types/number.rb +0 -23
  79. data/lib/json_model/types/string.rb +0 -23
  80. data/spec/properties_spec.rb +0 -76
  81. data/spec/property_spec.rb +0 -86
  82. data/spec/type_spec/array_spec.rb +0 -206
  83. data/spec/type_spec/castable_spec.rb +0 -19
  84. data/spec/type_spec/composition/all_of_spec.rb +0 -57
  85. data/spec/type_spec/composition/any_of_spec.rb +0 -54
  86. data/spec/type_spec/composition/one_of_spec.rb +0 -59
  87. data/spec/type_spec/composition_spec.rb +0 -90
  88. data/spec/type_spec/const_spec.rb +0 -18
  89. data/spec/type_spec/enum_spec.rb +0 -84
  90. data/spec/type_spec/primitive/boolean_spec.rb +0 -12
  91. data/spec/type_spec/primitive/integer_spec.rb +0 -57
  92. data/spec/type_spec/primitive/null_spec.rb +0 -12
  93. data/spec/type_spec/primitive/number_spec.rb +0 -12
  94. data/spec/type_spec/primitive/numeric_spec.rb +0 -176
  95. data/spec/type_spec/primitive/string_spec.rb +0 -119
  96. data/spec/type_spec_spec.rb +0 -32
@@ -1,6 +1,3 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative('errors/error')
4
- require_relative('errors/invalid_ref_mode_error')
5
- require_relative('errors/type_error')
6
- require_relative('errors/unknown_attribute_error')
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module JsonModel
4
+ module Logic
5
+ module Predicates
6
+ module Methods
7
+ # @param [Array] value
8
+ # @return [FalseClass, TrueClass]
9
+ def unique?(value)
10
+ value.respond_to?(:uniq) && value.uniq.size == value.size
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+
17
+ Dry::Logic::Predicates::Methods.prepend(JsonModel::Logic::Predicates::Methods)
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative('logic/predicates/methods')
@@ -1,101 +1,61 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative('builder')
4
+ require_relative('schema_meta')
5
+
3
6
  module JsonModel
4
7
  module Schema
5
8
  extend(ActiveSupport::Concern)
6
- include(Properties)
7
9
  include(SchemaMeta)
8
10
 
9
- # @param [Hash, nil] attributes
10
- def initialize(attributes = nil)
11
- return unless attributes
12
-
13
- assign_attributes(attributes)
14
-
15
- if JsonModel.config.validate_after_instantiation
16
- validate!
17
- end
18
- end
19
-
20
- private
21
-
22
- # @param [Hash, nil] attributes
23
- def assign_attributes(attributes)
24
- attributes.each { |name, value| assign_attribute(name, value) }
25
- end
26
-
27
- # @param [Symbol] name
28
- # @param [Object] value
29
- def assign_attribute(name, value)
30
- if respond_to?("#{name}=")
31
- send("#{name}=", value)
32
- else
33
- self.class.raise_unknown_attribute_error(name)
34
- end
35
- end
36
-
37
11
  class_methods do
38
12
  # @param [::Object] json
39
13
  # @return [::Object, nil]
40
14
  def from_json(json)
41
- attributes = json.transform_keys { |key| invert_alias(key) || raise_unknown_attribute_error(key) }
15
+ attributes = json.transform_keys { |key| invert_alias(key) }
42
16
  new(attributes)
43
17
  end
44
18
 
45
- # @param [Symbol] name
46
- def raise_unknown_attribute_error(name)
47
- if !additional_properties && JsonModel.config.validate_after_instantiation
48
- raise(Errors::UnknownAttributeError.new(self, name))
49
- end
19
+ def invert_alias(key)
20
+ builder = builders.find { |b| b.alias.to_s == key.to_s }
21
+ builder&.type&.name
50
22
  end
51
23
 
52
- # @param [Symbol] ref_mode
53
- # @param [Hash] _options
54
24
  # @return [Hash]
55
- def as_schema(ref_mode: RefMode::INLINE, **_options)
56
- case ref_mode
57
- when RefMode::INLINE
58
- meta_attributes
59
- .merge(
60
- properties: properties_as_schema,
61
- required: required_properties_as_schema,
62
- '$defs': defs_as_schema,
63
- )
64
- .merge(type: 'object')
65
- .compact
66
- when RefMode::LOCAL
67
- { '$ref': "#/$defs/#{name}" }
68
- when RefMode::EXTERNAL
69
- { '$ref': schema_id }
70
- else
71
- raise(Errors::InvalidRefModeError, ref_mode)
72
- end
25
+ def as_schema
26
+ {
27
+ properties: properties_as_schema,
28
+ required: required_properties_as_schema,
29
+ '$defs': defs_as_schema,
30
+ }
31
+ .merge(type: 'object')
32
+ .merge(meta_attributes)
33
+ .compact
73
34
  end
74
35
 
75
36
  # @return [Hash, nil]
76
37
  def properties_as_schema
77
- if local_properties.any?
78
- local_properties
79
- .sort_by { |key, _property| key }
80
- .map { |_key, property| property.as_schema }
38
+ if builders.any?
39
+ builders
40
+ .sort_by(&:alias)
41
+ .map(&:as_schema)
81
42
  .inject({}, &:merge)
82
43
  end
83
44
  end
84
45
 
85
46
  # @return [Array, nil]
86
47
  def required_properties_as_schema
87
- if local_properties.any?
88
- local_properties
89
- .values
90
- .select(&:required?)
48
+ if builders.any?
49
+ builders
50
+ .reject(&:optional?)
91
51
  .map(&:alias)
92
52
  .sort
93
53
  end
94
54
  end
95
55
 
56
+ # @return [Hash, nil]
96
57
  def defs_as_schema
97
- referenced_schemas = local_properties
98
- .values
58
+ referenced_schemas = builders
99
59
  .flat_map(&:referenced_schemas)
100
60
  .uniq
101
61
 
@@ -104,21 +64,25 @@ module JsonModel
104
64
  end
105
65
  end
106
66
 
107
- # @return [Array<Class>]
108
- def parent_schemas
109
- @parent_schemas ||= ancestors.select { |klass| klass != self && klass < Schema }
67
+ # @return [Array<Builder>]
68
+ def builders
69
+ @builders ||= @schema
70
+ .type
71
+ .reject { |type| parent_keys.include?(type) }
72
+ .map { |type| Builder.for(type) }
110
73
  end
111
74
 
112
- # @return [Hash]
113
- def local_properties
114
- if !defined?(@local_properties)
115
- ancestor_properties = parent_schemas.flat_map { |property| property.properties.values }
116
- @local_properties = properties.select do |_key, property|
117
- ancestor_properties.none? { |ancestor_property| ancestor_property.as_schema == property.as_schema }
118
- end
119
- end
75
+ # @return [Array<Class>]
76
+ def parent_keys
77
+ @parent_keys ||= ancestors
78
+ .select { |klass| referenceable_parent?(klass) }
79
+ .flat_map { |klass| klass.schema.type.keys }
80
+ end
120
81
 
121
- @local_properties
82
+ # @param [Class] klass
83
+ # @return [FalseClass, TrueClass]
84
+ def referenceable_parent?(klass)
85
+ klass < JsonModel::Schema && klass != self && schema_id != klass.schema_id
122
86
  end
123
87
  end
124
88
  end
@@ -16,8 +16,7 @@ module JsonModel
16
16
  # @param [Class] subclass
17
17
  def self.inherited(subclass)
18
18
  super
19
- subclass.schema_id(JsonModel.config.schema_id_naming_strategy.call(subclass))
20
- subclass.schema_version(JsonModel.config.schema_version)
19
+ subclass.meta_attributes.merge!(meta_attributes.dup)
21
20
  subclass.meta_attributes[:$ref] = schema_id
22
21
  end
23
22
 
@@ -26,11 +25,6 @@ module JsonModel
26
25
  end
27
26
 
28
27
  class_methods do
29
- # @return [Hash]
30
- def meta_attributes
31
- @meta_attributes ||= {}
32
- end
33
-
34
28
  # @param [String, nil] description
35
29
  # @return [String, nil]
36
30
  def description(description = nil)
@@ -61,28 +55,8 @@ module JsonModel
61
55
  end
62
56
  end
63
57
 
64
- # @param [Boolean, nil] value
65
- # @return [Boolean]
66
- def additional_properties(value = nil)
67
- if value.nil?
68
- meta_attributes[:additionalProperties] || false
69
- else
70
- meta_attributes[:additionalProperties] = value
71
- end
72
- end
73
-
74
- # @param [Boolean, nil] value
75
- # @return [Boolean]
76
- def unevaluated_properties(value = nil)
77
- if value.nil?
78
- meta_attributes[:unevaluatedProperties] || false
79
- else
80
- meta_attributes[:unevaluatedProperties] = value
81
- end
82
- end
83
-
84
58
  # @param [Symbol, nil] version
85
- # @return [Boolean]
59
+ # @return [TrueClass, FalseClass]
86
60
  def schema_version(version = nil)
87
61
  if version.nil?
88
62
  meta_attributes[:$schema]
@@ -90,6 +64,11 @@ module JsonModel
90
64
  meta_attributes[:$schema] = SCHEMA_VERSIONS[version]
91
65
  end
92
66
  end
67
+
68
+ # @return [Hash]
69
+ def meta_attributes
70
+ @meta_attributes ||= { unevaluatedProperties: @schema&.strict? ? false : nil }.compact
71
+ end
93
72
  end
94
73
  end
95
74
  end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ module JsonModel
4
+ module Types
5
+ class Alias < Dry::Types::Constructor
6
+ # @return [Array]
7
+ def to_ast
8
+ [
9
+ :alias,
10
+ [
11
+ options[:as],
12
+ type.to_ast,
13
+ ],
14
+ ]
15
+ end
16
+
17
+ # @return [Symbol]
18
+ def alias
19
+ options[:as]
20
+ end
21
+
22
+ module Builder
23
+ # @param [Symbol] name
24
+ # @return [Alias]
25
+ def as(name)
26
+ Alias.new(self, as: name) { |input| input }
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+
33
+ Dry::Types::Builder.prepend(JsonModel::Types::Alias::Builder)
@@ -1,28 +1,59 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module T
4
- class AnyOf
5
- # @param [Array<Class>] types
6
- # @param [Hash] options
7
- def initialize(*types, **options)
8
- @types = types
9
- @options = options
3
+ module JsonModel
4
+ module Types
5
+ class << self
6
+ # @param [Symbol] tag_key
7
+ # @return [AnyOf]
8
+ def any_of(tag_key, &)
9
+ builder = AnyOf::Builder.new(tag_key)
10
+ builder.instance_eval(&)
11
+ builder.build
12
+ end
10
13
  end
11
14
 
12
- # @return [JsonModel::TypeSpec::Composition::AnyOf]
13
- def to_type_spec
14
- JsonModel::TypeSpec::Composition::AnyOf.new(
15
- *@types.map { |type| JsonModel::TypeSpec.resolve(type) },
16
- **@options,
17
- )
18
- end
15
+ class AnyOf < Dry::Types::Constructor
16
+ attr_reader(:tag_key, :mapping)
19
17
 
20
- class << self
21
- # @param [Array] types
22
- # @param [Hash] options
23
- # @return [AnyOf]
24
- def [](*types, **options)
25
- AnyOf.new(*types, **options)
18
+ # @return [Array]
19
+ def to_ast
20
+ [
21
+ :any_of,
22
+ {
23
+ tag_key: options[:tag_key],
24
+ mapping: options[:mapping].transform_values do |type|
25
+ type.respond_to?(:to_ast) ? type.to_ast : type.class.name
26
+ end,
27
+ meta: meta,
28
+ },
29
+ ]
30
+ end
31
+
32
+ class Builder
33
+ attr_reader(:tag_key, :mapping)
34
+
35
+ # @param [Symbol] tag_key
36
+ def initialize(tag_key)
37
+ @tag_key = tag_key
38
+ @mapping = {}
39
+ end
40
+
41
+ # @param [Array<Symbol>] tags
42
+ # @param [Dry::Types::Type] type
43
+ def on(*tags, type)
44
+ tags.each { |tag| mapping[tag] = type }
45
+ end
46
+
47
+ # @return [AnyOf]
48
+ def build
49
+ AnyOf.new(mapping.values.uniq.reduce(&:|), tag_key: tag_key, mapping: mapping) do |input|
50
+ tag = input[tag_key]
51
+ type = mapping[tag]
52
+ raise(Dry::Types::ConstraintError, "Unknown tag #{tag.inspect}") unless type
53
+
54
+ type[input]
55
+ end
56
+ end
26
57
  end
27
58
  end
28
59
  end
@@ -1,28 +1,59 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module T
4
- class OneOf
5
- # @param [Array<Class>] types
6
- # @param [Hash] options
7
- def initialize(*types, **options)
8
- @types = types
9
- @options = options
3
+ module JsonModel
4
+ module Types
5
+ class << self
6
+ # @param [Symbol] tag_key
7
+ # @return [OneOf]
8
+ def one_of(tag_key, &)
9
+ builder = OneOf::Builder.new(tag_key)
10
+ builder.instance_eval(&)
11
+ builder.build
12
+ end
10
13
  end
11
14
 
12
- # @return [JsonModel::TypeSpec::Composition::OneOf]
13
- def to_type_spec
14
- JsonModel::TypeSpec::Composition::OneOf.new(
15
- *@types.map { |type| JsonModel::TypeSpec.resolve(type) },
16
- **@options,
17
- )
18
- end
15
+ class OneOf < Dry::Types::Constructor
16
+ attr_reader(:tag_key, :mapping)
19
17
 
20
- class << self
21
- # @param [Array] types
22
- # @param [Hash] options
23
- # @return [OneOf]
24
- def [](*types, **options)
25
- OneOf.new(*types, **options)
18
+ # @return [Array]
19
+ def to_ast
20
+ [
21
+ :one_of,
22
+ {
23
+ tag_key: options[:tag_key],
24
+ mapping: options[:mapping].transform_values do |type|
25
+ type.respond_to?(:to_ast) ? type.to_ast : type.class.name
26
+ end,
27
+ meta: meta,
28
+ },
29
+ ]
30
+ end
31
+
32
+ class Builder
33
+ attr_reader(:tag_key, :mapping)
34
+
35
+ # @param [Symbol] tag_key
36
+ def initialize(tag_key)
37
+ @tag_key = tag_key
38
+ @mapping = {}
39
+ end
40
+
41
+ # @param [Array<Symbol>] tags
42
+ # @param [Dry::Types::Type] type
43
+ def on(*tags, type)
44
+ tags.each { |tag| mapping[tag] = type }
45
+ end
46
+
47
+ # @return [OneOf]
48
+ def build
49
+ OneOf.new(mapping.values.uniq.reduce(&:|), tag_key: tag_key, mapping: mapping) do |input|
50
+ tag = input[tag_key]
51
+ type = mapping[tag]
52
+ raise(Dry::Types::ConstraintError, "Unknown tag #{tag.inspect}") unless type
53
+
54
+ type[input]
55
+ end
56
+ end
26
57
  end
27
58
  end
28
59
  end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ module JsonModel
4
+ module Types
5
+ class Ref < Dry::Types::Constructor
6
+ # @return [Array]
7
+ def to_ast
8
+ [
9
+ :ref,
10
+ [
11
+ options[:mode],
12
+ type.to_ast,
13
+ ],
14
+ ]
15
+ end
16
+
17
+ module Builder
18
+ # @return [Ref]
19
+ def external
20
+ Ref.new(self, mode: :external) { |input| input }
21
+ end
22
+
23
+ # @return [Ref]
24
+ def local
25
+ Ref.new(self, mode: :local) { |input| input }
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+
32
+ Dry::Types::Builder.prepend(JsonModel::Types::Ref::Builder)
@@ -1,13 +1,51 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative('types/all_of')
3
+ require('resolv')
4
+ require_relative('types/alias')
4
5
  require_relative('types/any_of')
5
- require_relative('types/array')
6
- require_relative('types/boolean')
7
- require_relative('types/const')
8
- require_relative('types/enum')
9
- require_relative('types/integer')
10
- require_relative('types/null')
11
- require_relative('types/number')
12
6
  require_relative('types/one_of')
13
- require_relative('types/string')
7
+ require_relative('types/ref')
8
+
9
+ module JsonModel
10
+ module Types
11
+ include(Dry.Types())
12
+
13
+ Date = Dry::Types['date'].meta(format: 'date')
14
+
15
+ DateTime = Dry::Types['date_time'].meta(format: 'date-time')
16
+
17
+ Email = String.constrained(format: URI::MailTo::EMAIL_REGEXP).meta(format: 'email')
18
+
19
+ Hostname = String.constrained(
20
+ format: /(?i)^(?:([a-z0-9-]+|\*)\.)?([a-z0-9-]{1,61})\.([a-z0-9]{2,7})$/,
21
+ ).meta(format: 'hostname')
22
+
23
+ IPv4 = String.constrained(
24
+ format: ::Resolv::IPv4::Regex,
25
+ ).meta(format: 'ipv4')
26
+
27
+ IPv6 = String.constrained(
28
+ format: ::Resolv::IPv6::Regex,
29
+ ).meta(format: 'ipv6')
30
+
31
+ Time = Dry::Types['time'].meta(format: 'time')
32
+
33
+ UUID = String.constrained(
34
+ format: /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/,
35
+ ).meta(format: 'uuid')
36
+
37
+ URI = String.constrained(
38
+ format: ::URI::DEFAULT_PARSER.make_regexp,
39
+ ).meta(format: 'uri')
40
+
41
+ UriReference = String.constrained(
42
+ format: %r{^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?},
43
+ ).meta(format: 'uri-reference')
44
+
45
+ Regex = String.constrained(
46
+ format: %r{\A(/?)(.+)\1([a-z]*)\z}i,
47
+ ).meta(format: 'regex')
48
+
49
+ UniqueArray = Array.constrained(unique: true)
50
+ end
51
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module JsonModel
4
- VERSION = '0.1.19'
4
+ VERSION = '0.1.22'
5
5
  end
data/lib/json_model.rb CHANGED
@@ -1,18 +1,15 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require('active_model')
4
3
  require('active_support/concern')
5
4
  require('active_support/core_ext/class/attribute')
6
5
  require('active_support/descendants_tracker')
6
+ require('dry-struct')
7
+ require('dry-validation')
7
8
  require('uri')
8
9
  require('json_model/config')
9
10
  require('json_model/errors')
10
- require('json_model/properties')
11
- require('json_model/property')
12
- require('json_model/ref_mode')
13
- require('json_model/schema_meta')
11
+ require('json_model/predicates')
14
12
  require('json_model/schema')
15
- require('json_model/type_spec')
16
13
  require('json_model/types')
17
14
  require('json_model/version')
18
15
 
data/spec/config_spec.rb CHANGED
@@ -33,20 +33,6 @@ RSpec.describe(JsonModel::Config) do
33
33
  end
34
34
  end
35
35
 
36
- describe('#validate_after_instantiation') do
37
- it('defaults to true') do
38
- expect(JsonModel.config.validate_after_instantiation)
39
- .to(eq(true))
40
- end
41
-
42
- it('can be changed to false') do
43
- JsonModel.configure { |config| config.validate_after_instantiation = false }
44
-
45
- expect(JsonModel.config.validate_after_instantiation)
46
- .to(eq(false))
47
- end
48
- end
49
-
50
36
  describe('#schema_id_base_uri') do
51
37
  it('defaults to nil') do
52
38
  expect(JsonModel.config.schema_id_base_uri)