json_model_rb 0.1.20 → 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 (97) 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 +44 -78
  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 -7
  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 +69 -40
  45. data/spec/schema_meta_spec.rb +0 -40
  46. data/spec/schema_spec.rb +43 -59
  47. metadata +84 -58
  48. data/lib/json_model/composeable.rb +0 -35
  49. data/lib/json_model/errors/invalid_ref_mode_error.rb +0 -12
  50. data/lib/json_model/errors/type_error.rb +0 -8
  51. data/lib/json_model/errors/unknown_attribute_error.rb +0 -13
  52. data/lib/json_model/properties.rb +0 -86
  53. data/lib/json_model/property.rb +0 -54
  54. data/lib/json_model/ref_mode.rb +0 -9
  55. data/lib/json_model/type_spec/array.rb +0 -72
  56. data/lib/json_model/type_spec/castable.rb +0 -34
  57. data/lib/json_model/type_spec/composition/all_of.rb +0 -29
  58. data/lib/json_model/type_spec/composition/any_of.rb +0 -34
  59. data/lib/json_model/type_spec/composition/one_of.rb +0 -38
  60. data/lib/json_model/type_spec/composition.rb +0 -79
  61. data/lib/json_model/type_spec/const.rb +0 -35
  62. data/lib/json_model/type_spec/enum.rb +0 -35
  63. data/lib/json_model/type_spec/object.rb +0 -32
  64. data/lib/json_model/type_spec/primitive/boolean.rb +0 -13
  65. data/lib/json_model/type_spec/primitive/integer.rb +0 -21
  66. data/lib/json_model/type_spec/primitive/null.rb +0 -13
  67. data/lib/json_model/type_spec/primitive/number.rb +0 -14
  68. data/lib/json_model/type_spec/primitive/numeric.rb +0 -85
  69. data/lib/json_model/type_spec/primitive/string.rb +0 -150
  70. data/lib/json_model/type_spec/primitive.rb +0 -40
  71. data/lib/json_model/type_spec.rb +0 -82
  72. data/lib/json_model/types/all_of.rb +0 -29
  73. data/lib/json_model/types/array.rb +0 -29
  74. data/lib/json_model/types/boolean.rb +0 -7
  75. data/lib/json_model/types/const.rb +0 -23
  76. data/lib/json_model/types/enum.rb +0 -23
  77. data/lib/json_model/types/integer.rb +0 -23
  78. data/lib/json_model/types/null.rb +0 -7
  79. data/lib/json_model/types/number.rb +0 -23
  80. data/lib/json_model/types/string.rb +0 -23
  81. data/spec/properties_spec.rb +0 -76
  82. data/spec/property_spec.rb +0 -86
  83. data/spec/type_spec/array_spec.rb +0 -206
  84. data/spec/type_spec/castable_spec.rb +0 -19
  85. data/spec/type_spec/composition/all_of_spec.rb +0 -57
  86. data/spec/type_spec/composition/any_of_spec.rb +0 -54
  87. data/spec/type_spec/composition/one_of_spec.rb +0 -59
  88. data/spec/type_spec/composition_spec.rb +0 -90
  89. data/spec/type_spec/const_spec.rb +0 -18
  90. data/spec/type_spec/enum_spec.rb +0 -84
  91. data/spec/type_spec/primitive/boolean_spec.rb +0 -12
  92. data/spec/type_spec/primitive/integer_spec.rb +0 -57
  93. data/spec/type_spec/primitive/null_spec.rb +0 -12
  94. data/spec/type_spec/primitive/number_spec.rb +0 -12
  95. data/spec/type_spec/primitive/numeric_spec.rb +0 -176
  96. data/spec/type_spec/primitive/string_spec.rb +0 -119
  97. 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,122 +1,88 @@
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(Composeable)
7
- include(Properties)
8
9
  include(SchemaMeta)
9
10
 
10
- # @param [Hash, nil] attributes
11
- def initialize(attributes = nil)
12
- return unless attributes
13
-
14
- assign_attributes(attributes)
15
-
16
- if JsonModel.config.validate_after_instantiation
17
- validate!
18
- end
19
- end
20
-
21
- private
22
-
23
- # @param [Hash, nil] attributes
24
- def assign_attributes(attributes)
25
- attributes.each { |name, value| assign_attribute(name, value) }
26
- end
27
-
28
- # @param [Symbol] name
29
- # @param [Object] value
30
- def assign_attribute(name, value)
31
- if respond_to?("#{name}=")
32
- send("#{name}=", value)
33
- else
34
- self.class.raise_unknown_attribute_error(name)
35
- end
36
- end
37
-
38
11
  class_methods do
39
12
  # @param [::Object] json
40
13
  # @return [::Object, nil]
41
14
  def from_json(json)
42
- attributes = json.transform_keys { |key| invert_alias(key) || raise_unknown_attribute_error(key) }
15
+ attributes = json.transform_keys { |key| invert_alias(key) }
43
16
  new(attributes)
44
17
  end
45
18
 
46
- # @param [Symbol] name
47
- def raise_unknown_attribute_error(name)
48
- if !additional_properties && JsonModel.config.validate_after_instantiation
49
- raise(Errors::UnknownAttributeError.new(self, name))
50
- end
19
+ def invert_alias(key)
20
+ builder = builders.find { |b| b.alias.to_s == key.to_s }
21
+ builder&.type&.name
51
22
  end
52
23
 
53
- # @param [Symbol] ref_mode
54
- # @param [Hash] _options
55
24
  # @return [Hash]
56
- def as_schema(ref_mode: RefMode::INLINE, **_options)
57
- case ref_mode
58
- when RefMode::INLINE
59
- meta_attributes
60
- .merge(
61
- properties: properties_as_schema,
62
- required: required_properties_as_schema,
63
- '$defs': defs_as_schema,
64
- )
65
- .merge(**composed_types_as_schema)
66
- .merge(type: 'object')
67
- .compact
68
- when RefMode::LOCAL
69
- { '$ref': "#/$defs/#{name}" }
70
- when RefMode::EXTERNAL
71
- { '$ref': schema_id }
72
- else
73
- raise(Errors::InvalidRefModeError, ref_mode)
74
- 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
75
34
  end
76
35
 
77
36
  # @return [Hash, nil]
78
37
  def properties_as_schema
79
- if local_properties.any?
80
- local_properties
81
- .sort_by { |key, _property| key }
82
- .map { |_key, property| property.as_schema }
38
+ if builders.any?
39
+ builders
40
+ .sort_by(&:alias)
41
+ .map(&:as_schema)
83
42
  .inject({}, &:merge)
84
43
  end
85
44
  end
86
45
 
87
46
  # @return [Array, nil]
88
47
  def required_properties_as_schema
89
- if local_properties.any?
90
- local_properties
91
- .values
92
- .select(&:required?)
48
+ if builders.any?
49
+ builders
50
+ .reject(&:optional?)
93
51
  .map(&:alias)
94
52
  .sort
95
53
  end
96
54
  end
97
55
 
56
+ # @return [Hash, nil]
98
57
  def defs_as_schema
99
- referenced_schemas = (composed_type_defs + local_properties.values.flat_map(&:referenced_schemas)).uniq
58
+ referenced_schemas = builders
59
+ .flat_map(&:referenced_schemas)
60
+ .uniq
61
+
100
62
  if referenced_schemas.any?
101
63
  referenced_schemas.to_h { |type| [type.name.to_sym, type.as_schema] }
102
64
  end
103
65
  end
104
66
 
105
- # @return [Array<Class>]
106
- def parent_schemas
107
- @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) }
108
73
  end
109
74
 
110
- # @return [Hash]
111
- def local_properties
112
- if !defined?(@local_properties)
113
- ancestor_properties = parent_schemas.flat_map { |property| property.properties.values }
114
- @local_properties = properties.select do |_key, property|
115
- ancestor_properties.none? { |ancestor_property| ancestor_property.as_schema == property.as_schema }
116
- end
117
- 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
118
81
 
119
- @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
120
86
  end
121
87
  end
122
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.20'
4
+ VERSION = '0.1.22'
5
5
  end
data/lib/json_model.rb CHANGED
@@ -1,19 +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
- require('json_model/composeable')
9
9
  require('json_model/config')
10
10
  require('json_model/errors')
11
- require('json_model/properties')
12
- require('json_model/property')
13
- require('json_model/ref_mode')
14
- require('json_model/schema_meta')
11
+ require('json_model/predicates')
15
12
  require('json_model/schema')
16
- require('json_model/type_spec')
17
13
  require('json_model/types')
18
14
  require('json_model/version')
19
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)