json_test_data 0.3.0.beta → 0.4.0.beta

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: 85db2f952ca98ddbca0f39241f90ea5669ef7bac
4
- data.tar.gz: 3cefe7526dc7b105bb76b743a84248332f776cee
3
+ metadata.gz: 71ba5da3a2348f2065d4163a0530a5d8c6a6eff4
4
+ data.tar.gz: d36bbc1dc9474d5c76bb798b11aa3a9679a2d0ac
5
5
  SHA512:
6
- metadata.gz: 3a3b9d10f9a62e8b49c79e5c4db3a91e4b4ee1394ad5ae9414659c2daa974a381b56540f8f3da032ffa6ce2d838dccca20c741ffb1d798440ddb432ba40bca2d
7
- data.tar.gz: 4dbbfa3e6edca85a32844bc0c516a06c8c1ad4ea693fac7a207e3d3a984ccb26d5cc92a1c1e0f30d7b5d3a876ea073fa153900cca22b437c44a24d947f61f0a2
6
+ metadata.gz: 664eb22114d96a3e9065a28d68df01cae560d4746f53207c56453b52910043f64d1a2144d87c342dfa435dfb34fcd3aa3b20d4d7116b9389570484937b052384
7
+ data.tar.gz: a731a6ea79cedba2e929c6d2785071886e749a32e88108da5d7cbdae38c2f74be5f492950c20c8e35ca6b69966cbb8734c4c4f7afc683fa3d690926755bedad9
data/.travis.yml CHANGED
@@ -1,9 +1,11 @@
1
1
  language: ruby
2
2
  rvm:
3
3
  - 2.1.8
4
- - 2.2.2
4
+ - 2.2.4
5
5
  - 2.3.0
6
6
  sudo: false
7
+ before_install:
8
+ - gem install regxing --version 0.1.0.beta
7
9
  branches:
8
10
  only:
9
11
  - master
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- json_test_data (0.2.0.beta)
4
+ json_test_data (0.4.0.beta)
5
5
  regxing (~> 0.1.0.beta)
6
6
 
7
7
  GEM
data/README.md CHANGED
@@ -12,7 +12,11 @@ gem "json_test_data", "~> 0.0.1"
12
12
  ```
13
13
  To use it, first require it, then generate the test data using:
14
14
  ```ruby
15
- data = JsonTestData.generate!
15
+ data = JsonTestData.generate!(schema)
16
+ ```
17
+ If you would prefer to return a Ruby object instead of a JSON object, simply include the `:ruby` option:
18
+ ```ruby
19
+ data = JsonTestData.generate!(schema, ruby: true)
16
20
  ```
17
21
 
18
22
  The input that you put into it must be valid [JSON schema](http://json-schema.org). The top-level object must have a `:type` key indicating the type of object to be generated ("object", "array", "string", etc.).
@@ -28,3 +28,28 @@ Feature: Generating empty objects
28
28
  """json
29
29
  [null]
30
30
  """
31
+
32
+ Scenario: Ruby hash
33
+ Given the following JSON schema:
34
+ """json
35
+ {
36
+ "$schema": "http://json-schema.org/draft-04/schema#",
37
+ "type": "object",
38
+ "properties": {}
39
+ }
40
+ """
41
+ When I run the JSON data generator with the "ruby" option
42
+ Then the output should be a Ruby hash
43
+
44
+
45
+ Scenario: Ruby array
46
+ Given the following JSON schema:
47
+ """json
48
+ {
49
+ "$schema": "http://json-schema.org/draft-04/schema#",
50
+ "type": "array",
51
+ "items": {}
52
+ }
53
+ """
54
+ When I run the JSON data generator with the "ruby" option
55
+ Then the output should be a Ruby array
@@ -6,10 +6,22 @@ When(/^I run the JSON data generator$/) do
6
6
  @output = JsonTestData.generate!(@schema)
7
7
  end
8
8
 
9
+ When(/^I run the JSON data generator with the "ruby" option$/) do
10
+ @output = JsonTestData.generate!(@schema, ruby: true)
11
+ end
12
+
9
13
  Then(/^the JSON output should be:$/) do |json|
10
14
  expect(@output).to eq json
11
15
  end
12
16
 
17
+ Then(/^the output should be a Ruby hash$/) do
18
+ expect(@output).to be_a(Hash)
19
+ end
20
+
21
+ Then(/^the output should be a Ruby array$/) do
22
+ expect(@output).to be_a(Array)
23
+ end
24
+
13
25
  Then(/^the "([^" ]*)" property of the JSON output should be a ([^ ]*)$/) do |prop, type|
14
26
  klass = Class.const_get(type)
15
27
  expect(JSON.parse(@output).fetch(prop).class).to eql klass
@@ -7,7 +7,7 @@ module JsonTestData
7
7
  adjust_for_maximum(number: num, maximum: maximum, step_size: step_size)
8
8
  end
9
9
 
10
- def adjust_for_minimum(number:, minimum:, step_size: nil)
10
+ def adjust_for_minimum(number:, minimum: nil, step_size: nil)
11
11
  return number unless minimum && minimum >= number
12
12
 
13
13
  num = !!step_size ? number + step_size : minimum + 1
@@ -15,15 +15,11 @@ module JsonTestData
15
15
  end
16
16
 
17
17
  def between(min:, max:, integer: false)
18
- return integer ? mean(min, max).to_i : mean(min, max)
18
+ return integer ? mean(min, max).round(0) : mean(min, max)
19
19
  end
20
20
 
21
21
  def mean(*numbers)
22
22
  numbers.inject(:+).to_f.quo(numbers.length)
23
23
  end
24
-
25
- def infinity
26
- Math.atanh(1)
27
- end
28
24
  end
29
25
  end
@@ -1,5 +1,3 @@
1
- require "regxing"
2
-
3
1
  module JsonTestData
4
2
  class String
5
3
  extend RegXing
@@ -1,9 +1,11 @@
1
1
  require 'json'
2
+ require 'regxing'
2
3
 
3
4
  require_relative './json_test_data/json_schema'
4
5
 
5
6
  module JsonTestData
6
- def self.generate!(schema)
7
- JsonSchema.new(schema).generate_example
7
+ def self.generate!(schema, opts={})
8
+ schema = JsonSchema.new(schema).generate_example
9
+ opts[:ruby] ? JSON.parse(schema) : schema
8
10
  end
9
11
  end
@@ -0,0 +1,146 @@
1
+ describe JsonTestData::NumberHelper do
2
+ include JsonTestData::NumberHelper
3
+
4
+ describe "#adjust_for_maximum" do
5
+ context "no maximum" do
6
+ let(:number) { 3 }
7
+
8
+ it "returns the given number" do
9
+ expect(adjust_for_maximum(number: number)).to eql number
10
+ end
11
+ end
12
+
13
+ context "number less than maximum" do
14
+ let(:number) { 3 }
15
+ let(:maximum) { 4 }
16
+
17
+ it "returns the given number" do
18
+ expect(adjust_for_maximum(number: number, maximum: maximum)).to eql number
19
+ end
20
+ end
21
+
22
+ context "number greater than or equal to maximum" do
23
+ let(:number) { 3 }
24
+ let(:maximum) { 3 }
25
+
26
+ it "returns one less than the maximum" do
27
+ expect(adjust_for_maximum(number: number, maximum: maximum)).to eql maximum - 1
28
+ end
29
+ end
30
+
31
+ context "step size greater than 1" do
32
+ let(:number) { 3 }
33
+ let(:maximum) { 3 }
34
+ let(:step_size) { 2 }
35
+
36
+ it "returns the number reduced by step size" do
37
+ expect(
38
+ adjust_for_maximum(number: number, maximum: maximum, step_size: step_size)
39
+ ).to eql maximum - step_size
40
+ end
41
+ end
42
+
43
+ context "step size less than 1" do
44
+ let(:number) { 3 }
45
+ let(:maximum) { 3 }
46
+ let(:step_size) { 0.25 }
47
+
48
+ it "returns the number reduced by step size" do
49
+ expect(
50
+ adjust_for_maximum(number: number, maximum: maximum, step_size: step_size)
51
+ ).to eql maximum - step_size
52
+ end
53
+ end
54
+ end
55
+
56
+ describe "#adjust_for_minimum" do
57
+ context "no minimum" do
58
+ let(:number) { 1 }
59
+
60
+ it "returns the given number" do
61
+ expect(adjust_for_minimum(number: number)).to eql number
62
+ end
63
+ end
64
+
65
+ context "number is greater than minimum" do
66
+ let(:number) { 1 }
67
+ let(:minimum) { 0 }
68
+
69
+ it "returns the number" do
70
+ expect(adjust_for_minimum(number: number, minimum: minimum)).to eql number
71
+ end
72
+ end
73
+
74
+ context "number is less than or equal to minimum" do
75
+ let(:number) { 2 }
76
+ let(:minimum) { 2 }
77
+
78
+ it "returns one more than the minimum" do
79
+ expect(adjust_for_minimum(number: number, minimum: minimum)).to eql minimum + 1
80
+ end
81
+ end
82
+
83
+ context "step size greater than 1" do
84
+ let(:number) { 2 }
85
+ let(:minimum) { 2 }
86
+ let(:step_size) { 2 }
87
+
88
+ it "returns the number increased by step size" do
89
+ expect(
90
+ adjust_for_minimum(number: number, minimum: minimum, step_size: step_size)
91
+ ).to eql minimum + step_size
92
+ end
93
+ end
94
+
95
+ context "step size less than 1" do
96
+ let(:number) { 2 }
97
+ let(:minimum) { 2 }
98
+ let(:step_size) { 0.5 }
99
+
100
+ it "returns the number reduced by step size" do
101
+ expect(
102
+ adjust_for_minimum(number: number, minimum: minimum, step_size: step_size)
103
+ ).to eql minimum + step_size
104
+ end
105
+ end
106
+ end
107
+
108
+ describe "#between" do
109
+ context "when it doesn't have to be an integer" do
110
+ let(:min) { 1 }
111
+ let(:max) { 2 }
112
+ let(:result) { 1.5 }
113
+
114
+ it "returns the mean" do
115
+ expect(between(min: min, max: max)).to be_within(0.0002).of(result)
116
+ end
117
+
118
+ it "is less than the max" do
119
+ expect(between(min: min, max: max)).to be_less_than(max)
120
+ end
121
+
122
+ it "is greater than the min" do
123
+ expect(between(min: min, max: max)).to be_greater_than(min)
124
+ end
125
+ end
126
+
127
+ context "when it has to be an integer" do
128
+ let(:min) { 2 }
129
+ let(:max) { 5 }
130
+ let(:result) { 4 }
131
+
132
+ it "returns the nearest integer" do
133
+ expect(between(min: min, max: max, integer: true)).to eql result
134
+ end
135
+ end
136
+ end
137
+
138
+ describe "#mean" do
139
+ let(:numbers) { [ 3, 4, 5, 6 ] }
140
+ let(:avg) { 4.5 }
141
+
142
+ it "returns the mean" do
143
+ expect(mean(*numbers)).to be_within(0.0002).of(avg)
144
+ end
145
+ end
146
+ end
@@ -12,6 +12,12 @@ RSpec::Matchers.define :be_greater_than do |expected|
12
12
  end
13
13
  end
14
14
 
15
+ RSpec::Matchers.define :be_less_than do |expected|
16
+ match do |actual|
17
+ actual < expected
18
+ end
19
+ end
20
+
15
21
  RSpec::Matchers.define :be_less_than_or_equal_to do |expected|
16
22
  match do |actual|
17
23
  actual <= expected
data/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module JsonTestData
2
- VERSION = '0.3.0.beta'
2
+ VERSION = '0.4.0.beta'
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: 0.3.0.beta
4
+ version: 0.4.0.beta
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-04-19 00:00:00.000000000 Z
11
+ date: 2016-04-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: regxing
@@ -151,6 +151,7 @@ files:
151
151
  - lib/json_test_data/data_structures/number.rb
152
152
  - lib/json_test_data/data_structures/string.rb
153
153
  - lib/json_test_data/json_schema.rb
154
+ - spec/json_test_data/data_structures/helpers/number_helper_spec.rb
154
155
  - spec/json_test_data/data_structures/number_spec.rb
155
156
  - spec/json_test_data/data_structures/string_spec.rb
156
157
  - spec/json_test_data/json_schema_spec.rb
@@ -181,7 +182,7 @@ rubyforge_project:
181
182
  rubygems_version: 2.5.1
182
183
  signing_key:
183
184
  specification_version: 4
184
- summary: rambo-0.3.0.beta
185
+ summary: rambo-0.4.0.beta
185
186
  test_files:
186
187
  - features/array_constraints.feature
187
188
  - features/data_types.feature
@@ -193,6 +194,7 @@ test_files:
193
194
  - features/step_definitions/json_test_data_steps.rb
194
195
  - features/string_constraints.feature
195
196
  - features/support/env.rb
197
+ - spec/json_test_data/data_structures/helpers/number_helper_spec.rb
196
198
  - spec/json_test_data/data_structures/number_spec.rb
197
199
  - spec/json_test_data/data_structures/string_spec.rb
198
200
  - spec/json_test_data/json_schema_spec.rb