json-inference 0.0.2 → 0.0.3
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.
- data/Gemfile.lock +1 -1
- data/lib/json-inference.rb +10 -1
- data/lib/json-inference/version.rb +1 -1
- data/test/json_inference_test.rb +31 -16
- metadata +4 -4
data/Gemfile.lock
CHANGED
data/lib/json-inference.rb
CHANGED
@@ -4,7 +4,7 @@ module JsonInference
|
|
4
4
|
end
|
5
5
|
|
6
6
|
def self.percent_string(numerator, denominator)
|
7
|
-
"
|
7
|
+
sprintf("%.2f%", numerator / denominator.to_f * 100)
|
8
8
|
end
|
9
9
|
|
10
10
|
class Report
|
@@ -59,9 +59,11 @@ module JsonInference
|
|
59
59
|
@reported_class = reported_class
|
60
60
|
@size = 0
|
61
61
|
@empties = 0
|
62
|
+
@values_by_count = Hash.new(0)
|
62
63
|
end
|
63
64
|
|
64
65
|
def <<(value)
|
66
|
+
@values_by_count[value] += 1
|
65
67
|
@size += 1
|
66
68
|
if [Array, String].include?(@reported_class)
|
67
69
|
@empties += 1 if value.empty?
|
@@ -70,6 +72,13 @@ module JsonInference
|
|
70
72
|
|
71
73
|
def to_s(all_values_count)
|
72
74
|
str = "#{@reported_class}: #{JsonInference.percent_string(size, all_values_count)}"
|
75
|
+
primary_value_record = @values_by_count.detect { |value, count|
|
76
|
+
count / size.to_f >= 0.9
|
77
|
+
}
|
78
|
+
if primary_value_record
|
79
|
+
primary_value, count = primary_value_record
|
80
|
+
str << ", #{JsonInference.percent_string(count, size)} #{primary_value.inspect}"
|
81
|
+
end
|
73
82
|
if [Array, String].include?(@reported_class)
|
74
83
|
str << ", #{JsonInference.percent_string(@empties, size)} empty"
|
75
84
|
end
|
data/test/json_inference_test.rb
CHANGED
@@ -15,11 +15,11 @@ class JsonInferenceTestCase < Test::Unit::TestCase
|
|
15
15
|
|
16
16
|
should "count selectors as part of the total" do
|
17
17
|
assert_match(/:root > .foo/, @string)
|
18
|
-
assert_match(/3\/3 \(100%\)/, @string)
|
18
|
+
assert_match(/3\/3 \(100.00%\)/, @string)
|
19
19
|
end
|
20
20
|
|
21
21
|
should "count classes per selector" do
|
22
|
-
assert_match(/String: 100%/, @string)
|
22
|
+
assert_match(/String: 100.00%/, @string)
|
23
23
|
end
|
24
24
|
|
25
25
|
should "sort report by selector" do
|
@@ -36,7 +36,7 @@ class JsonInferenceTestCase < Test::Unit::TestCase
|
|
36
36
|
end
|
37
37
|
|
38
38
|
should "recognize date fields based on format" do
|
39
|
-
assert_match(/Date: 100%/, @string)
|
39
|
+
assert_match(/Date: 100.00%/, @string)
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
@@ -49,7 +49,7 @@ class JsonInferenceTestCase < Test::Unit::TestCase
|
|
49
49
|
end
|
50
50
|
|
51
51
|
should "group boolean fields" do
|
52
|
-
assert_match(/Boolean: 100%/, @string)
|
52
|
+
assert_match(/Boolean: 100.00%/, @string)
|
53
53
|
end
|
54
54
|
end
|
55
55
|
|
@@ -63,11 +63,11 @@ class JsonInferenceTestCase < Test::Unit::TestCase
|
|
63
63
|
|
64
64
|
should "show full selectors" do
|
65
65
|
assert_match(/:root > .embedded > .title/, @string)
|
66
|
-
assert_match(/2\/2 \(100%\)/, @string)
|
66
|
+
assert_match(/2\/2 \(100.00%\)/, @string)
|
67
67
|
end
|
68
68
|
|
69
69
|
should "count classes per selector" do
|
70
|
-
assert_match(/String: 100%/, @string)
|
70
|
+
assert_match(/String: 100.00%/, @string)
|
71
71
|
end
|
72
72
|
|
73
73
|
should "sort report by selector" do
|
@@ -75,7 +75,7 @@ class JsonInferenceTestCase < Test::Unit::TestCase
|
|
75
75
|
end
|
76
76
|
|
77
77
|
should "display count for the overall hash too" do
|
78
|
-
assert_match(/:root > .embedded: 2\/2 \(100%\)/, @string)
|
78
|
+
assert_match(/:root > .embedded: 2\/2 \(100.00%\)/, @string)
|
79
79
|
end
|
80
80
|
end
|
81
81
|
|
@@ -88,7 +88,7 @@ class JsonInferenceTestCase < Test::Unit::TestCase
|
|
88
88
|
end
|
89
89
|
|
90
90
|
should "calculate percentages related to occurrences of the field" do
|
91
|
-
assert_match(/String: 100%/, @string)
|
91
|
+
assert_match(/String: 100.00%/, @string)
|
92
92
|
end
|
93
93
|
end
|
94
94
|
|
@@ -101,8 +101,8 @@ class JsonInferenceTestCase < Test::Unit::TestCase
|
|
101
101
|
end
|
102
102
|
|
103
103
|
should "display all top-level classes" do
|
104
|
-
assert_match(/Hash: 50%/, @string)
|
105
|
-
assert_match(/String: 50%/, @string)
|
104
|
+
assert_match(/Hash: 50.00%/, @string)
|
105
|
+
assert_match(/String: 50.00%/, @string)
|
106
106
|
end
|
107
107
|
|
108
108
|
should "display sub nodes" do
|
@@ -123,7 +123,7 @@ class JsonInferenceTestCase < Test::Unit::TestCase
|
|
123
123
|
end
|
124
124
|
|
125
125
|
should "count types of children" do
|
126
|
-
assert_match(/Fixnum: 100%/, @string)
|
126
|
+
assert_match(/Fixnum: 100.00%/, @string)
|
127
127
|
end
|
128
128
|
end
|
129
129
|
|
@@ -136,13 +136,13 @@ class JsonInferenceTestCase < Test::Unit::TestCase
|
|
136
136
|
end
|
137
137
|
|
138
138
|
should "count elements in each hash" do
|
139
|
-
assert_match(/:root > .items:nth-child\(\) > .one: 4\/4 \(100%\)$/, @string)
|
140
|
-
assert_match(/:root > .items:nth-child\(\) > .two: 4\/4 \(100%\)$/, @string)
|
139
|
+
assert_match(/:root > .items:nth-child\(\) > .one: 4\/4 \(100.00%\)$/, @string)
|
140
|
+
assert_match(/:root > .items:nth-child\(\) > .two: 4\/4 \(100.00%\)$/, @string)
|
141
141
|
end
|
142
142
|
|
143
143
|
should "count value classes in hashes too" do
|
144
|
-
assert_match(/String: 75%/, @string)
|
145
|
-
assert_match(/Fixnum: 25%/, @string)
|
144
|
+
assert_match(/String: 75.00%/, @string)
|
145
|
+
assert_match(/Fixnum: 25.00%/, @string)
|
146
146
|
end
|
147
147
|
end
|
148
148
|
|
@@ -169,7 +169,22 @@ class JsonInferenceTestCase < Test::Unit::TestCase
|
|
169
169
|
end
|
170
170
|
|
171
171
|
should "note how likely it is to be empty" do
|
172
|
-
assert_match(/String: 100%, 67% empty/, @string)
|
172
|
+
assert_match(/String: 100.00%, 66.67% empty/, @string)
|
173
|
+
end
|
174
|
+
end
|
175
|
+
|
176
|
+
context "field with the same value most of the time" do
|
177
|
+
setup do
|
178
|
+
report = JsonInference.new_report
|
179
|
+
19.times do
|
180
|
+
report << {something: true}
|
181
|
+
end
|
182
|
+
report << {something: false}
|
183
|
+
@string = report.to_s
|
184
|
+
end
|
185
|
+
|
186
|
+
should "note that the value is almost always the same" do
|
187
|
+
assert_match(/Boolean: 100.00%, 95.00% true/, @string)
|
173
188
|
end
|
174
189
|
end
|
175
190
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: json-inference
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-
|
12
|
+
date: 2014-02-10 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -80,7 +80,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
80
80
|
version: '0'
|
81
81
|
segments:
|
82
82
|
- 0
|
83
|
-
hash: -
|
83
|
+
hash: -1108998192670081338
|
84
84
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
85
85
|
none: false
|
86
86
|
requirements:
|
@@ -89,7 +89,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
89
89
|
version: '0'
|
90
90
|
segments:
|
91
91
|
- 0
|
92
|
-
hash: -
|
92
|
+
hash: -1108998192670081338
|
93
93
|
requirements: []
|
94
94
|
rubyforge_project:
|
95
95
|
rubygems_version: 1.8.23
|