json-schema_builder 0.3.1 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 84f7722dca12970cabc9b5a3e3f464883c34272c
4
- data.tar.gz: dbb78e125209b463035cbd05d29abbff4da0e95a
3
+ metadata.gz: '0912320b00a0b8b43307a99560e5ac3f5f6eadee'
4
+ data.tar.gz: d74be2254534647d26b11c3f84dc22b67e9ac477
5
5
  SHA512:
6
- metadata.gz: a98084c33aedabf1fc46b37a56ff71da7ecf179013bac5d8e4edaf4292a88ba4ea5f8e49655b39f115b6525c8b7d87f7c80fa3c7f7aa17a721620790b55adf37
7
- data.tar.gz: 907cabeb1f50698e2d7c4103a43c273521ddba15dfeac29fcdc438563d697577675bae8dd764052bbaae8a8a3d99c9305dc98329a025d46e8544c46acaba5af7
6
+ metadata.gz: 0d9d7ea22df0b6c54e82cbb18edbe29e28e9f43efe51d97e306fec2eb68599c44ca9adf8c68ebfeb78a48010f3037f53566be7dfc7e1b024c0af6b2843fdac2d
7
+ data.tar.gz: f65201e295b2b744af78907cc67f57d85f1e4d9280ede6b2c8d945443da56fb2ead8237f78f10aa321e5246ef3db5fddd6b4447709a42830f8e45849e056648e
data/.gitignore CHANGED
@@ -3,3 +3,4 @@
3
3
  /coverage
4
4
  .DS_Store
5
5
  /Gemfile.lock
6
+ /gemfiles/*.lock
@@ -1,8 +1,16 @@
1
1
  language: ruby
2
2
  script: bundle exec rspec
3
3
  rvm:
4
- - 2.3.1
4
+ - 2.2.8
5
+ - 2.3.5
6
+ - 2.4.2
5
7
  addons:
6
8
  code_climate:
7
9
  repo_token:
8
10
  secure: X3mDel/6C4d8uSeaKgxA2YP4Oen5N2iklmi2mH1XzK3UihzlNKcQLxYC6IMTTfYiPlLu1BTO1KTElUqWIigpHxAAJj/Lb48S8mvKFAsmv48tOP5LaTeFNdnJA49k0hCXQbItlyVBmUhEtkdyelLciP3ygcKgEcR/jZGcJM/aZBY=
11
+ gemfile:
12
+ - gemfiles/activesupport_4.0.gemfile
13
+ - gemfiles/activesupport_4.1.gemfile
14
+ - gemfiles/activesupport_4.2.gemfile
15
+ - gemfiles/activesupport_5.0.gemfile
16
+ - gemfiles/activesupport_5.1.gemfile
@@ -0,0 +1,5 @@
1
+ %w(4.0 4.1 4.2 5.0 5.1).each do |version|
2
+ appraise "activesupport-#{version}" do
3
+ gem "activesupport", "~> #{version}"
4
+ end
5
+ end
@@ -0,0 +1,2 @@
1
+ ---
2
+ BUNDLE_RETRY: "1"
@@ -0,0 +1,7 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activesupport", "~> 4.0"
6
+
7
+ gemspec path: "../"
@@ -0,0 +1,7 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activesupport", "~> 4.1"
6
+
7
+ gemspec path: "../"
@@ -0,0 +1,7 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activesupport", "~> 4.2"
6
+
7
+ gemspec path: "../"
@@ -0,0 +1,7 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activesupport", "~> 5.0"
6
+
7
+ gemspec path: "../"
@@ -0,0 +1,7 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activesupport", "~> 5.1"
6
+
7
+ gemspec path: "../"
@@ -23,6 +23,7 @@ Gem::Specification.new do |spec|
23
23
  spec.add_development_dependency 'rspec', '~> 3.4'
24
24
  spec.add_development_dependency 'rspec-its'
25
25
  spec.add_development_dependency 'pry-byebug'
26
+ spec.add_development_dependency 'appraisal'
26
27
  spec.add_dependency 'activesupport', '>= 4.0'
27
28
  spec.add_dependency 'json-schema', '>= 2'
28
29
  end
@@ -1,7 +1,7 @@
1
1
  module JSON
2
2
  module SchemaBuilder
3
3
  class Schema
4
- attr_reader :data
4
+ attr_accessor :data
5
5
  delegate :[], :[]=, :to_h, :as_json, to: :data
6
6
 
7
7
  def initialize(hash = {})
@@ -19,13 +19,31 @@ module JSON
19
19
 
20
20
  def _deep_merge(this, other)
21
21
  this.deep_merge(other) do |current_key, this_value, other_value|
22
- if this_value.is_a?(::Array) && other_value.is_a?(::Array)
22
+ if current_key == "anyOf"
23
+ _deep_merge_any_of(Array(this_value), Array(other_value))
24
+ elsif this_value.is_a?(::Array) && other_value.is_a?(::Array)
23
25
  this_value + other_value
24
26
  else
25
27
  other_value
26
28
  end
27
29
  end
28
30
  end
31
+
32
+ def _deep_merge_any_of(this, other)
33
+ object = self.class.new
34
+ combined = []
35
+
36
+ (this + other).each do |item|
37
+ if item[:type].to_sym == :object
38
+ object.data = object._deep_merge(object.data, item)
39
+ else
40
+ combined << item
41
+ end
42
+ end
43
+
44
+ combined << object.data unless object.data.empty?
45
+ combined.uniq
46
+ end
29
47
  end
30
48
  end
31
49
  end
@@ -1,5 +1,5 @@
1
1
  module JSON
2
2
  module SchemaBuilder
3
- VERSION = '0.3.1'
3
+ VERSION = '0.4.0'
4
4
  end
5
5
  end
@@ -1,8 +1,33 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  RSpec.describe JSON::SchemaBuilder::Schema, type: :unit do
4
- let(:schema){ described_class.new a: 1, b: { c: 3 }, array: [123, { foo: 1, bar: { baz: 0 }}] }
5
- let(:other){ described_class.new a: 2, "b" => { d: 4 }, array: [456, { foo: 2, bar: { qux: 1 }}] }
4
+ let(:schema) do
5
+ described_class.new a: 1, b: { c: 3 }, array: [123, { foo: 1, bar: { baz: 0 }}], anyOf: [
6
+ { type: "null" },
7
+ { type: "string" },
8
+ {
9
+ type: "object",
10
+ properties: {
11
+ one: { type: "string" },
12
+ two: { type: "string" }
13
+ }
14
+ }
15
+ ]
16
+ end
17
+
18
+ let(:other) do
19
+ described_class.new a: 2, "b" => { d: 4 }, array: [456, { foo: 2, bar: { qux: 1 }}], anyOf: [
20
+ { type: "null" },
21
+ {
22
+ type: "object",
23
+ properties: {
24
+ two: { type: "string" },
25
+ three: { type: "string" }
26
+ }
27
+ }
28
+ ]
29
+ end
30
+
6
31
  let(:merged) do
7
32
  {
8
33
  "a" => 2,
@@ -23,6 +48,18 @@ RSpec.describe JSON::SchemaBuilder::Schema, type: :unit do
23
48
  "qux" => 1
24
49
  }
25
50
  }
51
+ ],
52
+ "anyOf" => [
53
+ { "type" => "null" },
54
+ { "type" => "string" },
55
+ {
56
+ "type" => "object",
57
+ "properties" => {
58
+ "one" => { "type" => "string" },
59
+ "two" => { "type" => "string" },
60
+ "three" => { "type" => "string" }
61
+ }
62
+ }
26
63
  ]
27
64
  }
28
65
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: json-schema_builder
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Parrish
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-11-10 00:00:00.000000000 Z
11
+ date: 2017-12-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: appraisal
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: activesupport
85
99
  requirement: !ruby/object:Gem::Requirement
@@ -119,10 +133,17 @@ files:
119
133
  - ".pryrc"
120
134
  - ".rspec"
121
135
  - ".travis.yml"
136
+ - Appraisals
122
137
  - Gemfile
123
138
  - LICENSE.txt
124
139
  - README.md
125
140
  - Rakefile
141
+ - gemfiles/.bundle/config
142
+ - gemfiles/activesupport_4.0.gemfile
143
+ - gemfiles/activesupport_4.1.gemfile
144
+ - gemfiles/activesupport_4.2.gemfile
145
+ - gemfiles/activesupport_5.0.gemfile
146
+ - gemfiles/activesupport_5.1.gemfile
126
147
  - json-schema_builder.gemspec
127
148
  - lib/json/schema_builder.rb
128
149
  - lib/json/schema_builder/any.rb