json_test_data 1.1.3 → 1.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 11ec919ef40122e3f7a7554a567d2de668c26141
4
- data.tar.gz: a67b25bb51a6ad31f0e53e1e99b3f50e72aa70db
3
+ metadata.gz: 91d511d9d89b523ca86526ab673249d1c5edea5e
4
+ data.tar.gz: bd8e1bc944c83cdc74bd8a4e89f666a60e269295
5
5
  SHA512:
6
- metadata.gz: b1e0053b67a99537671cbcff9d90cc1f07fc1195a4403592d2deb5ee0cfe05914901e6d7fe35890fea9a1ca2e92a2e1ff3973036082ebabfe15678902af42fab
7
- data.tar.gz: ce74240e11fd3175db3a93f850609b05ef4b1d3aa6c75e0c200d83742f6e304f31e2b6dac5fc0b4a6e9fd20b906466090720f4469a1de1fe7d2beebf5a49cc78
6
+ metadata.gz: 3b9655beb95eddddb1decba4e5249833da1c046503b2068bd5389ca155bb775be0dcbf3c183dbed12c64ce6588ab5f43e0b1806589436fd15e6e288b61a53464
7
+ data.tar.gz: 98f726b0e9636c94ff4a949abfef0674c5f43ded288c1d98c22835a5ad89780fa9c133ec29e7f0de13f4a737f54aff4992c5d40ce66edb9b9291151952a63fb8
@@ -7,15 +7,16 @@ PATH
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
- addressable (2.3.8)
11
- builder (3.2.2)
12
- coderay (1.1.1)
13
- coveralls (0.8.13)
14
- json (~> 1.8)
15
- simplecov (~> 0.11.0)
10
+ addressable (2.5.2)
11
+ public_suffix (>= 2.0.2, < 4.0)
12
+ builder (3.2.3)
13
+ coderay (1.1.2)
14
+ coveralls (0.8.21)
15
+ json (>= 1.8, < 3)
16
+ simplecov (~> 0.14.1)
16
17
  term-ansicolor (~> 1.3)
17
- thor (~> 0.19.1)
18
- tins (~> 1.6.0)
18
+ thor (~> 0.19.4)
19
+ tins (~> 1.6)
19
20
  cucumber (2.4.0)
20
21
  builder (>= 2.1.2)
21
22
  cucumber-core (~> 1.5.0)
@@ -27,44 +28,45 @@ GEM
27
28
  cucumber-core (1.5.0)
28
29
  gherkin (~> 4.0)
29
30
  cucumber-wire (0.0.1)
30
- diff-lcs (1.2.5)
31
+ diff-lcs (1.3)
31
32
  docile (1.1.5)
32
- gherkin (4.0.0)
33
- json (1.8.3)
34
- json-schema (2.6.2)
35
- addressable (~> 2.3.8)
33
+ gherkin (4.1.3)
34
+ json (1.8.6)
35
+ json-schema (2.8.0)
36
+ addressable (>= 2.4)
36
37
  method_source (0.8.2)
37
- multi_json (1.12.1)
38
+ multi_json (1.12.2)
38
39
  multi_test (0.1.2)
39
- pry (0.10.3)
40
+ pry (0.10.4)
40
41
  coderay (~> 1.1.0)
41
42
  method_source (~> 0.8.1)
42
43
  slop (~> 3.4)
43
- rake (11.1.2)
44
- regexp-examples (1.2.1)
45
- rspec (3.4.0)
46
- rspec-core (~> 3.4.0)
47
- rspec-expectations (~> 3.4.0)
48
- rspec-mocks (~> 3.4.0)
49
- rspec-core (3.4.4)
50
- rspec-support (~> 3.4.0)
51
- rspec-expectations (3.4.0)
44
+ public_suffix (3.0.0)
45
+ rake (11.3.0)
46
+ regexp-examples (1.3.2)
47
+ rspec (3.6.0)
48
+ rspec-core (~> 3.6.0)
49
+ rspec-expectations (~> 3.6.0)
50
+ rspec-mocks (~> 3.6.0)
51
+ rspec-core (3.6.0)
52
+ rspec-support (~> 3.6.0)
53
+ rspec-expectations (3.6.0)
52
54
  diff-lcs (>= 1.2.0, < 2.0)
53
- rspec-support (~> 3.4.0)
54
- rspec-mocks (3.4.1)
55
+ rspec-support (~> 3.6.0)
56
+ rspec-mocks (3.6.0)
55
57
  diff-lcs (>= 1.2.0, < 2.0)
56
- rspec-support (~> 3.4.0)
57
- rspec-support (3.4.1)
58
- simplecov (0.11.2)
58
+ rspec-support (~> 3.6.0)
59
+ rspec-support (3.6.0)
60
+ simplecov (0.14.1)
59
61
  docile (~> 1.1.0)
60
- json (~> 1.8)
62
+ json (>= 1.8, < 3)
61
63
  simplecov-html (~> 0.10.0)
62
- simplecov-html (0.10.0)
64
+ simplecov-html (0.10.2)
63
65
  slop (3.6.0)
64
- term-ansicolor (1.3.2)
66
+ term-ansicolor (1.6.0)
65
67
  tins (~> 1.0)
66
- thor (0.19.1)
67
- tins (1.6.0)
68
+ thor (0.19.4)
69
+ tins (1.15.0)
68
70
 
69
71
  PLATFORMS
70
72
  ruby
@@ -80,4 +82,4 @@ DEPENDENCIES
80
82
  rspec (~> 3.4)
81
83
 
82
84
  BUNDLED WITH
83
- 1.12.5
85
+ 1.15.4
@@ -0,0 +1,16 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-04/schema#",
3
+ "type": "object",
4
+ "properties": {
5
+ "created_at": {
6
+ "type": "string",
7
+ "format": "date-time"
8
+ },
9
+ "count": {
10
+ "type": "number"
11
+ },
12
+ "user_count": {
13
+ "type": "number"
14
+ }
15
+ }
16
+ }
@@ -5,7 +5,7 @@ require_relative "./json_test_data/json_schema"
5
5
 
6
6
  module JsonTestData
7
7
  def self.generate!(schema, opts={})
8
- schema = JsonSchema.new(schema).generate_example
8
+ schema = JsonSchema.new(schema, opts[:handler]).generate_example
9
9
  opts[:ruby] ? JSON.parse(schema, symbolize_names: true) : schema
10
10
  end
11
11
  end
@@ -3,10 +3,11 @@ require_relative "./data_structures/number"
3
3
 
4
4
  module JsonTestData
5
5
  class JsonSchema
6
- attr_accessor :schema
6
+ attr_accessor :schema, :handler
7
7
 
8
- def initialize(schema)
8
+ def initialize(schema, handler = nil)
9
9
  @schema = JSON.parse(schema, symbolize_names: true)
10
+ @handler = handler
10
11
  end
11
12
 
12
13
  def generate_example
@@ -14,7 +15,9 @@ module JsonTestData
14
15
  end
15
16
 
16
17
  private
17
- def generate_data(obj)
18
+ def generate_data(obj, key)
19
+ return handler.get_data(key, obj) if handler && handler.manages_key?(key)
20
+
18
21
  case obj.fetch(:type)
19
22
  when "number"
20
23
  JsonTestData::Number.create(obj)
@@ -27,13 +30,13 @@ module JsonTestData
27
30
  end
28
31
  end
29
32
 
30
- def generate(obj)
33
+ def generate(obj, key = nil)
31
34
  if is_object?(obj)
32
35
  generate_object(obj)
33
36
  elsif is_array?(obj)
34
37
  generate_array(obj)
35
38
  else
36
- generate_data(obj)
39
+ generate_data(obj, key)
37
40
  end
38
41
  end
39
42
 
@@ -65,9 +68,12 @@ module JsonTestData
65
68
 
66
69
  if object.has_key?(:properties)
67
70
  object.fetch(:properties).each do |k, v|
68
- obj[k] = nil unless v.has_key?(:type)
71
+ unless v.has_key?(:type)
72
+ obj[k] = nil
73
+ next
74
+ end
69
75
 
70
- obj[k] = generate(v)
76
+ obj[k] = generate(v, k)
71
77
  end
72
78
  end
73
79
 
@@ -0,0 +1,55 @@
1
+ require 'spec_helper'
2
+
3
+ class FakeHandler
4
+ def manages_key?(key); end
5
+ def get_data(key, obj); end
6
+ end
7
+
8
+ RSpec.describe 'Schema custom handler' do
9
+ let(:schema) { File.read('./fixtures/basic_schema.json') }
10
+ let(:result) { JSON.parse(subject.generate_example) }
11
+
12
+ subject { JsonTestData::JsonSchema.new(schema, handler) }
13
+
14
+ before do
15
+ allow(JsonTestData::Number).to receive(:create).and_return(9000)
16
+ end
17
+
18
+ describe 'when custom_handler is not passed' do
19
+ let(:handler) { nil }
20
+
21
+ it 'doesnt error' do
22
+ expect{result}.not_to raise_error
23
+ end
24
+
25
+ it 'still generates data' do
26
+ expect(result['count']).to eq 9000
27
+ end
28
+ end
29
+
30
+ describe 'when handler passed' do
31
+ let(:handler) { FakeHandler.new }
32
+
33
+ before do
34
+ allow(handler).to receive(:manages_key?).and_return(false)
35
+ end
36
+
37
+ context 'and it manages key' do
38
+ it 'gets data from the handler' do
39
+ expect(handler).to receive(:manages_key?).with(:count).and_return(true)
40
+ expect(handler).to receive(:get_data).with(:count, { type: 'number' }).and_return(5555)
41
+ expect(result['count']).to eq 5555
42
+ end
43
+ end
44
+
45
+ context "and it doesn't manage key" do
46
+ it 'returns number test data' do
47
+ expect(handler).to receive(:manages_key?).with(:count).and_return(false)
48
+ allow(handler).to receive(:get_data).and_return(5555)
49
+
50
+ expect(result['count']).to eq 9000
51
+ expect(result['user_count']).to eq 9000
52
+ end
53
+ end
54
+ end
55
+ end
@@ -312,5 +312,23 @@ describe JsonTestData::JsonSchema do
312
312
  end
313
313
  end
314
314
  end
315
+
316
+ describe 'when type is missing' do
317
+ let(:schema) do
318
+ {
319
+ :'$schema' => 'http://json-schema.org/draft-04/schema#',
320
+ :type => 'object',
321
+ :properties => {
322
+ :user => {},
323
+ :title => { :type => 'string', :enum => [ 'Foobar' ] },
324
+ }
325
+ }.to_json
326
+ end
327
+
328
+ it 'returns nil' do
329
+ json_schema = JsonTestData::JsonSchema.new(schema)
330
+ expect(json_schema.generate_example).to eq({ user: nil, title: 'Foobar' }.to_json)
331
+ end
332
+ end
315
333
  end
316
334
  end
data/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module JsonTestData
2
- VERSION = '1.1.3'
2
+ VERSION = '1.2.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: json_test_data
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.3
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dana Scheider
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-06-16 00:00:00.000000000 Z
11
+ date: 2017-09-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: regexp-examples
@@ -135,12 +135,14 @@ files:
135
135
  - features/step_definitions/json_test_data_steps.rb
136
136
  - features/string_constraints.feature
137
137
  - features/support/env.rb
138
+ - fixtures/basic_schema.json
138
139
  - json_test_data.gemspec
139
140
  - lib/json_test_data.rb
140
141
  - lib/json_test_data/data_structures/helpers/number_helper.rb
141
142
  - lib/json_test_data/data_structures/number.rb
142
143
  - lib/json_test_data/data_structures/string.rb
143
144
  - lib/json_test_data/json_schema.rb
145
+ - spec/json_test_data/custom_handler_spec.rb
144
146
  - spec/json_test_data/data_structures/helpers/number_helper_spec.rb
145
147
  - spec/json_test_data/data_structures/number_spec.rb
146
148
  - spec/json_test_data/data_structures/string_spec.rb
@@ -171,10 +173,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
171
173
  version: '0'
172
174
  requirements: []
173
175
  rubyforge_project:
174
- rubygems_version: 2.5.1
176
+ rubygems_version: 2.6.11
175
177
  signing_key:
176
178
  specification_version: 4
177
- summary: json_test_data-1.1.3
179
+ summary: json_test_data-1.2.0
178
180
  test_files:
179
181
  - features/array_constraints.feature
180
182
  - features/conditional_properties.feature
@@ -187,6 +189,7 @@ test_files:
187
189
  - features/step_definitions/json_test_data_steps.rb
188
190
  - features/string_constraints.feature
189
191
  - features/support/env.rb
192
+ - spec/json_test_data/custom_handler_spec.rb
190
193
  - spec/json_test_data/data_structures/helpers/number_helper_spec.rb
191
194
  - spec/json_test_data/data_structures/number_spec.rb
192
195
  - spec/json_test_data/data_structures/string_spec.rb