neatjson 0.6 → 0.6.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +194 -190
- data/lib/neatjson.rb +2 -0
- data/neatjson.gemspec +17 -17
- data/test/test_neatjson.js +22 -17
- data/test/test_neatjson.rb +5 -4
- data/test/tests.js +161 -135
- data/test/tests.rb +160 -133
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 25e68572d39dc687907b501288dee898cd91b0fe
|
4
|
+
data.tar.gz: 945e91700e9d4a0494efa3bf21f38a257580bcdb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7eabc205eb0b9f291ff8d06d717b38c06abbaa43030811e09bd080db2fe5adb7c2e76df76f33e36c5db30b4c6cbb63fdb8cd5b59c1c59c8bcbf159a6b8d3e338
|
7
|
+
data.tar.gz: 642c88a6ca834738c8f095e3c17ede54570d07785f79a2a5c5e6a295a205e1580174a23ba724f6ddd41c62c392e6cff99198fcfc7e8d73173e03558cc3e139cf
|
data/README.md
CHANGED
@@ -1,190 +1,194 @@
|
|
1
|
-
# NeatJSON
|
2
|
-
|
3
|
-
[![Gem Version](https://badge.fury.io/rb/neatjson.svg)](http://badge.fury.io/rb/neatjson)
|
4
|
-
[![Gem Downloads](http://ruby-gem-downloads-badge.herokuapp.com/neatjson?type=total&color=brightgreen)](https://rubygems.org/gems/neatjson)
|
5
|
-
|
6
|
-
Pretty-print your JSON in Ruby with more power than is provided by `JSON.pretty_generate`. In particular, like Ruby's `pp` (pretty print), NeatJSON will keep objects on one line if they fit, but break them over multiple lines if needed.
|
7
|
-
|
8
|
-
Here's an excerpt (from a much larger JSON):
|
9
|
-
|
10
|
-
~~~ json
|
11
|
-
{
|
12
|
-
"navigation.createroute.poi":[
|
13
|
-
{"text":"Lay in a course to the Hilton","params":{"poi":"Hilton"}},
|
14
|
-
{"text":"Take me to the airport","params":{"poi":"airport"}},
|
15
|
-
{"text":"Let's go to IHOP","params":{"poi":"IHOP"}},
|
16
|
-
{"text":"Show me how to get to The Med","params":{"poi":"The Med"}},
|
17
|
-
{"text":"Create a route to Arby's","params":{"poi":"Arby's"}},
|
18
|
-
{
|
19
|
-
"text":"Go to the Hilton by the Airport",
|
20
|
-
"params":{"poi":"Hilton","location":"Airport"}
|
21
|
-
},
|
22
|
-
{
|
23
|
-
"text":"Take me to the Fry's in Fresno",
|
24
|
-
"params":{"poi":"Fry's","location":"Fresno"}
|
25
|
-
}
|
26
|
-
],
|
27
|
-
"navigation.eta":[
|
28
|
-
{"text":"When will we get there?"},
|
29
|
-
{"text":"When will I arrive?"},
|
30
|
-
{"text":"What time will I get to the destination?"},
|
31
|
-
{"text":"What time will I reach the destination?"},
|
32
|
-
{"text":"What time will it be when I arrive?"}
|
33
|
-
]
|
34
|
-
}
|
35
|
-
~~~
|
36
|
-
|
37
|
-
## Installation
|
38
|
-
|
39
|
-
`gem install neatjson`
|
40
|
-
|
41
|
-
## Examples
|
42
|
-
|
43
|
-
~~~ ruby
|
44
|
-
require 'neatjson'
|
45
|
-
|
46
|
-
o = { b:42.005, a:[42,17], longer:true, str:"yes
|
47
|
-
please" }
|
48
|
-
|
49
|
-
puts JSON.neat_generate(o)
|
50
|
-
#=> {"b":42.005,"a":[42,17],"longer":true,"str":"yes\nplease"}
|
51
|
-
|
52
|
-
puts JSON.neat_generate(o,sorted:true)
|
53
|
-
#=> {"a":[42,17],"b":42.005,"longer":true,"str":"yes\nplease"}
|
54
|
-
|
55
|
-
puts JSON.neat_generate(o,sorted:true,padding:1,after_comma:1)
|
56
|
-
#=> { "a":[ 42, 17 ], "b":42.005, "longer":true, "str":"yes\nplease" }
|
57
|
-
|
58
|
-
puts JSON.neat_generate(o,sorted:true,wrap:40)
|
59
|
-
#=> {
|
60
|
-
#=> "a":[42,17],
|
61
|
-
#=> "b":42.005,
|
62
|
-
#=> "longer":true,
|
63
|
-
#=> "str":"yes\nplease"
|
64
|
-
#=> }
|
65
|
-
|
66
|
-
puts JSON.neat_generate(o,sorted:true,wrap:40,decimals:2)
|
67
|
-
#=> {
|
68
|
-
#=> "a":[42,17],
|
69
|
-
#=> "b":42.01,
|
70
|
-
#=> "longer":true,
|
71
|
-
#=> "str":"yes\nplease"
|
72
|
-
#=> }
|
73
|
-
|
74
|
-
puts JSON.neat_generate(o,sorted:true,wrap:40,aligned:true)
|
75
|
-
#=> {
|
76
|
-
#=> "a" :[42,17],
|
77
|
-
#=> "b" :42.005,
|
78
|
-
#=> "longer":true,
|
79
|
-
#=> "str" :"yes\nplease"
|
80
|
-
#=> }
|
81
|
-
|
82
|
-
puts JSON.neat_generate(o,sorted:true,wrap:40,aligned:true,around_colon:1)
|
83
|
-
#=> {
|
84
|
-
#=> "a" : [42,17],
|
85
|
-
#=> "b" : 42.005,
|
86
|
-
#=> "longer" : true,
|
87
|
-
#=> "str" : "yes\nplease"
|
88
|
-
#=> }
|
89
|
-
|
90
|
-
puts JSON.neat_generate(o,sorted:true,wrap:40,aligned:true,around_colon:1,short:true)
|
91
|
-
#=> {"a" : [42,17],
|
92
|
-
#=> "b" : 42.005,
|
93
|
-
#=> "longer" : true,
|
94
|
-
#=> "str" : "yes\nplease"}
|
95
|
-
|
96
|
-
a = [1,2,[3,4,[5]]]
|
97
|
-
puts JSON.neat_generate(a)
|
98
|
-
#=> [1,2,[3,4,[5]]]
|
99
|
-
|
100
|
-
puts JSON.pretty_generate(a) # oof!
|
101
|
-
#=> [
|
102
|
-
#=> 1,
|
103
|
-
#=> 2,
|
104
|
-
#=> [
|
105
|
-
#=> 3,
|
106
|
-
#=> 4,
|
107
|
-
#=> [
|
108
|
-
#=> 5
|
109
|
-
#=> ]
|
110
|
-
#=> ]
|
111
|
-
#=> ]
|
112
|
-
|
113
|
-
puts JSON.neat_generate( a, wrap:true, short:true )
|
114
|
-
#=> [1,
|
115
|
-
#=> 2,
|
116
|
-
#=> [3,
|
117
|
-
#=> 4,
|
118
|
-
#=> [5]]]
|
119
|
-
~~~
|
120
|
-
|
121
|
-
## Options
|
122
|
-
You may pass any of the following option symbols to `neat_generate`:
|
123
|
-
|
124
|
-
* `:wrap` — The maximum line width before wrapping. Use `false` to never wrap, or `true` (or `-1`) to always wrap. Default: `80`
|
125
|
-
* `:indent` — Whitespace used to indent each level when wrapping. Default: `" "` (two spaces)
|
126
|
-
* `:short` — Keep the output 'short' when wrapping? This puts opening brackets on the same line as the first value, and closing brackets on the same line as the last. Default: `false`
|
127
|
-
* _This causes the `:indent` option to be ignored, instead basing indentation on array and object padding._
|
128
|
-
* `:sorted` — Sort the keys for objects to be in alphabetical order? Default: `false`
|
129
|
-
* `:aligned` — When wrapping objects, line up the colons (per object)? Default: `false`
|
130
|
-
* `:decimals` — Decimal precision to use for non-integer numbers; use `false` to keep float values precise. Default: `false`
|
131
|
-
* `:array_padding` — Number of spaces to put inside brackets for arrays. Default: `0`
|
132
|
-
* `:object_padding` — Number of spaces to put inside braces for objects. Default: `0`
|
133
|
-
* `:padding` — Shorthand to set both `:array_padding` and `:object_padding`. Default: `0`
|
134
|
-
* `:before_comma` — Number of spaces to put before commas (for both arrays and objects). Default: `0`
|
135
|
-
* `:after_comma` — Number of spaces to put after commas (for both arrays and objects). Default: `0`
|
136
|
-
* `:around_comma` — Shorthand to set both `:before_comma` and `:after_comma`. Default: `0`
|
137
|
-
* `:before_colon_1` — Number of spaces before a colon when the object is on one line. Default: `0`
|
138
|
-
* `:after_colon_1` — Number of spaces after a colon when the object is on one line. Default: `0`
|
139
|
-
* `:before_colon_n` — Number of spaces before a colon when the object is on multiple lines. Default: `0`
|
140
|
-
* `:after_colon_n` — Number of spaces after a colon when the object is on multiple lines. Default: `0`
|
141
|
-
* `:before_colon` — Shorthand to set both `:before_colon_1` and `:before_colon_n`. Default: `0`
|
142
|
-
* `:after_colon` — Shorthand to set both `:after_colon_1` and `:after_colon_n`. Default: `0`
|
143
|
-
* `:around_colon` — Shorthand to set both `:before_colon` and `:after_colon`. Default: `0`
|
144
|
-
|
145
|
-
|
146
|
-
## License & Contact
|
147
|
-
|
148
|
-
NeatJSON is copyright ©2015 by Gavin Kistner and is released under
|
149
|
-
the [MIT License](http://www.opensource.org/licenses/mit-license.php).
|
150
|
-
See the LICENSE.txt file for more details.
|
151
|
-
|
152
|
-
For bugs or feature requests please open [issues on GitHub][1].
|
153
|
-
For other communication you can [email the author directly](mailto:!@phrogz.net?subject=NeatJSON).
|
154
|
-
|
155
|
-
## TODO (aka Known Limitations)
|
156
|
-
|
157
|
-
* Figure out the best way to play with custom objects that use `to_json` for their representation.
|
158
|
-
* Detect circular references.
|
159
|
-
* Possibly allow illegal JSON values like `NaN` or `Infinity`.
|
160
|
-
* Possibly allow "JSON5" output (legal identifiers unquoted, etc.)
|
161
|
-
|
162
|
-
## HISTORY
|
163
|
-
|
164
|
-
* **v0.6** -
|
165
|
-
*
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
*
|
170
|
-
|
171
|
-
|
172
|
-
*
|
173
|
-
*
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
1
|
+
# NeatJSON
|
2
|
+
|
3
|
+
[![Gem Version](https://badge.fury.io/rb/neatjson.svg)](http://badge.fury.io/rb/neatjson)
|
4
|
+
[![Gem Downloads](http://ruby-gem-downloads-badge.herokuapp.com/neatjson?type=total&color=brightgreen)](https://rubygems.org/gems/neatjson)
|
5
|
+
|
6
|
+
Pretty-print your JSON in Ruby with more power than is provided by `JSON.pretty_generate`. In particular, like Ruby's `pp` (pretty print), NeatJSON will keep objects on one line if they fit, but break them over multiple lines if needed.
|
7
|
+
|
8
|
+
Here's an excerpt (from a much larger JSON):
|
9
|
+
|
10
|
+
~~~ json
|
11
|
+
{
|
12
|
+
"navigation.createroute.poi":[
|
13
|
+
{"text":"Lay in a course to the Hilton","params":{"poi":"Hilton"}},
|
14
|
+
{"text":"Take me to the airport","params":{"poi":"airport"}},
|
15
|
+
{"text":"Let's go to IHOP","params":{"poi":"IHOP"}},
|
16
|
+
{"text":"Show me how to get to The Med","params":{"poi":"The Med"}},
|
17
|
+
{"text":"Create a route to Arby's","params":{"poi":"Arby's"}},
|
18
|
+
{
|
19
|
+
"text":"Go to the Hilton by the Airport",
|
20
|
+
"params":{"poi":"Hilton","location":"Airport"}
|
21
|
+
},
|
22
|
+
{
|
23
|
+
"text":"Take me to the Fry's in Fresno",
|
24
|
+
"params":{"poi":"Fry's","location":"Fresno"}
|
25
|
+
}
|
26
|
+
],
|
27
|
+
"navigation.eta":[
|
28
|
+
{"text":"When will we get there?"},
|
29
|
+
{"text":"When will I arrive?"},
|
30
|
+
{"text":"What time will I get to the destination?"},
|
31
|
+
{"text":"What time will I reach the destination?"},
|
32
|
+
{"text":"What time will it be when I arrive?"}
|
33
|
+
]
|
34
|
+
}
|
35
|
+
~~~
|
36
|
+
|
37
|
+
## Installation
|
38
|
+
|
39
|
+
`gem install neatjson`
|
40
|
+
|
41
|
+
## Examples
|
42
|
+
|
43
|
+
~~~ ruby
|
44
|
+
require 'neatjson'
|
45
|
+
|
46
|
+
o = { b:42.005, a:[42,17], longer:true, str:"yes
|
47
|
+
please" }
|
48
|
+
|
49
|
+
puts JSON.neat_generate(o)
|
50
|
+
#=> {"b":42.005,"a":[42,17],"longer":true,"str":"yes\nplease"}
|
51
|
+
|
52
|
+
puts JSON.neat_generate(o,sorted:true)
|
53
|
+
#=> {"a":[42,17],"b":42.005,"longer":true,"str":"yes\nplease"}
|
54
|
+
|
55
|
+
puts JSON.neat_generate(o,sorted:true,padding:1,after_comma:1)
|
56
|
+
#=> { "a":[ 42, 17 ], "b":42.005, "longer":true, "str":"yes\nplease" }
|
57
|
+
|
58
|
+
puts JSON.neat_generate(o,sorted:true,wrap:40)
|
59
|
+
#=> {
|
60
|
+
#=> "a":[42,17],
|
61
|
+
#=> "b":42.005,
|
62
|
+
#=> "longer":true,
|
63
|
+
#=> "str":"yes\nplease"
|
64
|
+
#=> }
|
65
|
+
|
66
|
+
puts JSON.neat_generate(o,sorted:true,wrap:40,decimals:2)
|
67
|
+
#=> {
|
68
|
+
#=> "a":[42,17],
|
69
|
+
#=> "b":42.01,
|
70
|
+
#=> "longer":true,
|
71
|
+
#=> "str":"yes\nplease"
|
72
|
+
#=> }
|
73
|
+
|
74
|
+
puts JSON.neat_generate(o,sorted:true,wrap:40,aligned:true)
|
75
|
+
#=> {
|
76
|
+
#=> "a" :[42,17],
|
77
|
+
#=> "b" :42.005,
|
78
|
+
#=> "longer":true,
|
79
|
+
#=> "str" :"yes\nplease"
|
80
|
+
#=> }
|
81
|
+
|
82
|
+
puts JSON.neat_generate(o,sorted:true,wrap:40,aligned:true,around_colon:1)
|
83
|
+
#=> {
|
84
|
+
#=> "a" : [42,17],
|
85
|
+
#=> "b" : 42.005,
|
86
|
+
#=> "longer" : true,
|
87
|
+
#=> "str" : "yes\nplease"
|
88
|
+
#=> }
|
89
|
+
|
90
|
+
puts JSON.neat_generate(o,sorted:true,wrap:40,aligned:true,around_colon:1,short:true)
|
91
|
+
#=> {"a" : [42,17],
|
92
|
+
#=> "b" : 42.005,
|
93
|
+
#=> "longer" : true,
|
94
|
+
#=> "str" : "yes\nplease"}
|
95
|
+
|
96
|
+
a = [1,2,[3,4,[5]]]
|
97
|
+
puts JSON.neat_generate(a)
|
98
|
+
#=> [1,2,[3,4,[5]]]
|
99
|
+
|
100
|
+
puts JSON.pretty_generate(a) # oof!
|
101
|
+
#=> [
|
102
|
+
#=> 1,
|
103
|
+
#=> 2,
|
104
|
+
#=> [
|
105
|
+
#=> 3,
|
106
|
+
#=> 4,
|
107
|
+
#=> [
|
108
|
+
#=> 5
|
109
|
+
#=> ]
|
110
|
+
#=> ]
|
111
|
+
#=> ]
|
112
|
+
|
113
|
+
puts JSON.neat_generate( a, wrap:true, short:true )
|
114
|
+
#=> [1,
|
115
|
+
#=> 2,
|
116
|
+
#=> [3,
|
117
|
+
#=> 4,
|
118
|
+
#=> [5]]]
|
119
|
+
~~~
|
120
|
+
|
121
|
+
## Options
|
122
|
+
You may pass any of the following option symbols to `neat_generate`:
|
123
|
+
|
124
|
+
* `:wrap` — The maximum line width before wrapping. Use `false` to never wrap, or `true` (or `-1`) to always wrap. Default: `80`
|
125
|
+
* `:indent` — Whitespace used to indent each level when wrapping. Default: `" "` (two spaces)
|
126
|
+
* `:short` — Keep the output 'short' when wrapping? This puts opening brackets on the same line as the first value, and closing brackets on the same line as the last. Default: `false`
|
127
|
+
* _This causes the `:indent` option to be ignored, instead basing indentation on array and object padding._
|
128
|
+
* `:sorted` — Sort the keys for objects to be in alphabetical order? Default: `false`
|
129
|
+
* `:aligned` — When wrapping objects, line up the colons (per object)? Default: `false`
|
130
|
+
* `:decimals` — Decimal precision to use for non-integer numbers; use `false` to keep float values precise. Default: `false`
|
131
|
+
* `:array_padding` — Number of spaces to put inside brackets for arrays. Default: `0`
|
132
|
+
* `:object_padding` — Number of spaces to put inside braces for objects. Default: `0`
|
133
|
+
* `:padding` — Shorthand to set both `:array_padding` and `:object_padding`. Default: `0`
|
134
|
+
* `:before_comma` — Number of spaces to put before commas (for both arrays and objects). Default: `0`
|
135
|
+
* `:after_comma` — Number of spaces to put after commas (for both arrays and objects). Default: `0`
|
136
|
+
* `:around_comma` — Shorthand to set both `:before_comma` and `:after_comma`. Default: `0`
|
137
|
+
* `:before_colon_1` — Number of spaces before a colon when the object is on one line. Default: `0`
|
138
|
+
* `:after_colon_1` — Number of spaces after a colon when the object is on one line. Default: `0`
|
139
|
+
* `:before_colon_n` — Number of spaces before a colon when the object is on multiple lines. Default: `0`
|
140
|
+
* `:after_colon_n` — Number of spaces after a colon when the object is on multiple lines. Default: `0`
|
141
|
+
* `:before_colon` — Shorthand to set both `:before_colon_1` and `:before_colon_n`. Default: `0`
|
142
|
+
* `:after_colon` — Shorthand to set both `:after_colon_1` and `:after_colon_n`. Default: `0`
|
143
|
+
* `:around_colon` — Shorthand to set both `:before_colon` and `:after_colon`. Default: `0`
|
144
|
+
|
145
|
+
|
146
|
+
## License & Contact
|
147
|
+
|
148
|
+
NeatJSON is copyright ©2015 by Gavin Kistner and is released under
|
149
|
+
the [MIT License](http://www.opensource.org/licenses/mit-license.php).
|
150
|
+
See the LICENSE.txt file for more details.
|
151
|
+
|
152
|
+
For bugs or feature requests please open [issues on GitHub][1].
|
153
|
+
For other communication you can [email the author directly](mailto:!@phrogz.net?subject=NeatJSON).
|
154
|
+
|
155
|
+
## TODO (aka Known Limitations)
|
156
|
+
|
157
|
+
* Figure out the best way to play with custom objects that use `to_json` for their representation.
|
158
|
+
* Detect circular references.
|
159
|
+
* Possibly allow illegal JSON values like `NaN` or `Infinity`.
|
160
|
+
* Possibly allow "JSON5" output (legal identifiers unquoted, etc.)
|
161
|
+
|
162
|
+
## HISTORY
|
163
|
+
|
164
|
+
* **v0.6.1** - October 12th, 2015
|
165
|
+
* Fix handling of nested empty objects and arrays. (Would cause a runtime error in many cases.)
|
166
|
+
* _This change causes empty arrays in a tight wrapping scenario to appear on a single line where they would previously take up three lines._
|
167
|
+
|
168
|
+
* **v0.6** - April 26th, 2015
|
169
|
+
* Added `before_colon_1` and `before_colon_n` to distinguish between single-line and multi-line objects.
|
170
|
+
|
171
|
+
* **v0.5** - April 19th, 2015
|
172
|
+
* Do not format integers (or floats that equal their integer) using `decimals` option.
|
173
|
+
* Make `neatJSON()` JavaScript available to Node.js as well as web browsers.
|
174
|
+
* Add (Node-based) testing for the JavaScript version.
|
175
|
+
|
176
|
+
* **v0.4** - April 18th, 2015
|
177
|
+
* Add JavaScript version with online runner.
|
178
|
+
|
179
|
+
* **v0.3.2** - April 16th, 2015
|
180
|
+
* Force YARD to use Markdown for documentation.
|
181
|
+
|
182
|
+
* **v0.3.1** - April 16th, 2015
|
183
|
+
* Remove some debugging code accidentally left in.
|
184
|
+
|
185
|
+
* **v0.3** - April 16th, 2015
|
186
|
+
* Fix another bug with `short:true` and wrapping array values inside objects.
|
187
|
+
|
188
|
+
* **v0.2** - April 16th, 2015
|
189
|
+
* Fix bug with `short:true` and wrapping values inside objects.
|
190
|
+
|
191
|
+
* **v0.1** - April 15th, 2015
|
192
|
+
* Initial release.
|
193
|
+
|
194
|
+
[1]: https://github.com/Phrogz/NeatJSON/issues
|
data/lib/neatjson.rb
CHANGED
@@ -66,6 +66,7 @@ module JSON
|
|
66
66
|
end
|
67
67
|
|
68
68
|
when Array
|
69
|
+
return "#{indent}[]" if o.empty?
|
69
70
|
pieces = o.map{ |v| build[v,''] }
|
70
71
|
one_line = "#{indent}[#{apad}#{pieces.join comma}#{apad}]"
|
71
72
|
if !opts[:wrap] || (one_line.length <= opts[:wrap])
|
@@ -82,6 +83,7 @@ module JSON
|
|
82
83
|
end
|
83
84
|
|
84
85
|
when Hash
|
86
|
+
return "#{indent}{}" if o.empty?
|
85
87
|
keyvals = o.map{ |k,v| [ k.to_s.inspect, build[v,''] ] }
|
86
88
|
keyvals = keyvals.sort_by(&:first) if opts[:sorted]
|
87
89
|
keyvals = keyvals.map{ |kv| kv.join(colon1) }.join(comma)
|
data/neatjson.gemspec
CHANGED
@@ -1,17 +1,17 @@
|
|
1
|
-
# encoding: UTF-8
|
2
|
-
require 'date'
|
3
|
-
Gem::Specification.new do |s|
|
4
|
-
s.name = "neatjson"
|
5
|
-
s.version = "0.6"
|
6
|
-
s.date = Date.today.iso8601
|
7
|
-
s.authors = ["Gavin Kistner"]
|
8
|
-
s.email = "gavin@phrogz.net"
|
9
|
-
s.homepage = "http://github.com/Phrogz/NeatJSON"
|
10
|
-
s.summary = "Pretty, powerful, flexible JSON generation."
|
11
|
-
s.description = "Generate JSON strings from Ruby objects with flexible formatting options. Key features: keep arrays and objects on a single line when they fit; format floats to specific precision; sort and align object keys; adjust whitespace padding of arrays and objects, inside and around commas and colons. JavaScript version included."
|
12
|
-
s.license = "MIT license (MIT)"
|
13
|
-
s.platform = Gem::Platform::RUBY
|
14
|
-
s.require_paths = ['lib']
|
15
|
-
s.files = Dir.glob("{lib,test,html}/**/*") + ['LICENSE.txt', 'README.md', '.yardopts', __FILE__]
|
16
|
-
s.has_rdoc = 'yard'
|
17
|
-
end
|
1
|
+
# encoding: UTF-8
|
2
|
+
require 'date'
|
3
|
+
Gem::Specification.new do |s|
|
4
|
+
s.name = "neatjson"
|
5
|
+
s.version = "0.6.1"
|
6
|
+
s.date = Date.today.iso8601
|
7
|
+
s.authors = ["Gavin Kistner"]
|
8
|
+
s.email = "gavin@phrogz.net"
|
9
|
+
s.homepage = "http://github.com/Phrogz/NeatJSON"
|
10
|
+
s.summary = "Pretty, powerful, flexible JSON generation."
|
11
|
+
s.description = "Generate JSON strings from Ruby objects with flexible formatting options. Key features: keep arrays and objects on a single line when they fit; format floats to specific precision; sort and align object keys; adjust whitespace padding of arrays and objects, inside and around commas and colons. JavaScript version included."
|
12
|
+
s.license = "MIT license (MIT)"
|
13
|
+
s.platform = Gem::Platform::RUBY
|
14
|
+
s.require_paths = ['lib']
|
15
|
+
s.files = Dir.glob("{lib,test,html}/**/*") + ['LICENSE.txt', 'README.md', '.yardopts', __FILE__]
|
16
|
+
s.has_rdoc = 'yard'
|
17
|
+
end
|
data/test/test_neatjson.js
CHANGED
@@ -4,23 +4,28 @@ var count=0, pass=0;
|
|
4
4
|
require('./tests.js').tests.forEach(function(valTest){
|
5
5
|
var value = valTest.value;
|
6
6
|
valTest.tests.forEach(function(test){
|
7
|
-
var
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
7
|
+
var cmd = "neatJSON("+JSON.stringify(value)+(test.opts?","+JSON.stringify(test.opts):'')+")";
|
8
|
+
try{
|
9
|
+
if (test.opts){
|
10
|
+
var opts = {};
|
11
|
+
for (var k in test.opts) opts[k] = test.opts[k];
|
12
|
+
var json = neatJSON(value,opts);
|
13
|
+
}else{
|
14
|
+
var json = neatJSON(value);
|
15
|
+
}
|
16
|
+
var success = (test.json.constructor==RegExp) ? test.json.test(json) : json==test.json;
|
17
|
+
if (success) pass+=1;
|
18
|
+
else{
|
19
|
+
console.log(cmd);
|
20
|
+
console.log('EXPECTED');
|
21
|
+
console.log(test.json);
|
22
|
+
console.log('ACTUAL');
|
23
|
+
console.log(json,"\n");
|
24
|
+
}
|
25
|
+
} catch (e){
|
26
|
+
console.log("Error running "+cmd);
|
27
|
+
console.log(e.stack);
|
28
|
+
console.log("")
|
24
29
|
}
|
25
30
|
count+=1;
|
26
31
|
});
|
data/test/test_neatjson.rb
CHANGED
@@ -7,16 +7,17 @@ count = 0
|
|
7
7
|
TESTS.each do |value_tests|
|
8
8
|
val, tests = value_tests[:value], value_tests[:tests]
|
9
9
|
tests.each do |test|
|
10
|
+
cmd = test[:opts] ? "JSON.neat_generate(#{val.inspect},#{test[:opts].inspect})" : "JSON.neat_generate(#{val.inspect})"
|
10
11
|
begin
|
11
|
-
count += 1
|
12
12
|
json = test[:opts] ? JSON.neat_generate(val,test[:opts].dup) : JSON.neat_generate(val)
|
13
|
-
|
14
|
-
raise "#{mesg}\nEXPECTED:\n#{test[:json]}\nACTUAL:\n#{json}\n\n" unless test[:json]===json
|
13
|
+
raise "EXPECTED:\n#{test[:json]}\nACTUAL:\n#{json}" unless test[:json]===json
|
15
14
|
pass += 1
|
16
15
|
rescue StandardError => e
|
17
|
-
puts e
|
16
|
+
puts "Error running #{cmd}", e, ""
|
18
17
|
end
|
18
|
+
count += 1
|
19
19
|
end
|
20
20
|
end
|
21
21
|
elapsed = Time.now-start
|
22
|
+
elapsed = 0.0001 if elapsed==0
|
22
23
|
puts "%d/%d test#{:s if count!=1} passed in %.2fms (%d tests per second)" % [pass, count, elapsed*1000, count/elapsed]
|
data/test/tests.js
CHANGED
@@ -1,135 +1,161 @@
|
|
1
|
-
exports.tests = [
|
2
|
-
{value:true, tests:[{json:"true" }]},
|
3
|
-
{value:false, tests:[{json:"false" }]},
|
4
|
-
// {value:nil, tests:[{json:"null" }]},
|
5
|
-
{value:null, tests:[{json:"null" }]},
|
6
|
-
{value:undefined,tests:[{json:"null" }]},
|
7
|
-
{value:5, tests:[
|
8
|
-
{json:"5"},
|
9
|
-
{json:"5", opts:{decimals:3}}
|
10
|
-
]},
|
11
|
-
{value:5.0, tests:[
|
12
|
-
{json:"5"},
|
13
|
-
{json:"5", opts:{decimals:3}}
|
14
|
-
]},
|
15
|
-
{value:5.0001, tests:[
|
16
|
-
{json:"5.0001"},
|
17
|
-
{json:"5.000", opts:{decimals:3}}
|
18
|
-
]},
|
19
|
-
{value:4.2, tests:[
|
20
|
-
{json:"4.2"},
|
21
|
-
{json:"4", opts:{decimals:0}},
|
22
|
-
{json:"4.20",opts:{decimals:2}},
|
23
|
-
]},
|
24
|
-
{value:4.199, tests:[{json:"4.20", opts:{decimals:2}}]},
|
25
|
-
{value:4.204, tests:[{json:"4.20", opts:{decimals:2}}]},
|
26
|
-
{value:-1.9, tests:[{json:"-2", opts:{decimals:0}}]},
|
27
|
-
{value:-2.4, tests:[{json:"-2", opts:{decimals:0}}]},
|
28
|
-
{value:1e23, tests:[{json:/1(?:\.0+)?e\+23/i}]},
|
29
|
-
{value:1e-9, tests:[{json:/1(?:\.0+)?e-0*9/i}]},
|
30
|
-
{value:-2.4, tests:[{json:"-2", opts:{decimals:0}}]},
|
31
|
-
|
32
|
-
{value:"foo", tests:[{json:"\"foo\""}]},
|
33
|
-
// {value: :foo, tests:[{json:"\"foo\""}]},
|
34
|
-
{value:"foo\nbar", tests:[{json:"\"foo\\nbar\""}]},
|
35
|
-
|
36
|
-
{value:[1,2,3,4,[5,6,7,[8,9,10],11,12]], tests:[
|
37
|
-
{ json:"[1,2,3,4,[5,6,7,[8,9,10],11,12]]" },
|
38
|
-
{ json:"[\n 1,\n 2,\n 3,\n 4,\n [5,6,7,[8,9,10],11,12]\n]", opts:{wrap:30} },
|
39
|
-
{ json:"[\n 1,\n 2,\n 3,\n 4,\n [\n 5,\n 6,\n 7,\n [8,9,10],\n 11,\n 12\n ]\n]", opts:{wrap:20} },
|
40
|
-
{ json:"[\n 1,\n 2,\n 3,\n 4,\n [\n 5,\n 6,\n 7,\n [\n 8,\n 9,\n 10\n ],\n 11,\n 12\n ]\n]", opts:{wrap:true} },
|
41
|
-
{ json:"[\n\t1,\n\t2,\n\t3,\n\t4,\n\t[\n\t\t5,\n\t\t6,\n\t\t7,\n\t\t[\n\t\t\t8,\n\t\t\t9,\n\t\t\t10\n\t\t],\n\t\t11,\n\t\t12\n\t]\n]", opts:{wrap:true,indent:"\t"} },
|
42
|
-
{ json:"[1,2,3,4,[5,6,7,[8,9,10],11,12]]", opts:{arrayPadding:0} },
|
43
|
-
{ json:"[ 1,2,3,4,[ 5,6,7,[ 8,9,10 ],11,12 ] ]", opts:{arrayPadding:1} },
|
44
|
-
{ json:"[ 1,2,3,4,[ 5,6,7,[ 8,9,10 ],11,12 ] ]", opts:{arrayPadding:2} },
|
45
|
-
{ json:"[1, 2, 3, 4, [5, 6, 7, [8, 9, 10], 11, 12]]", opts:{afterComma:1} },
|
46
|
-
{ json:"[ 1, 2, 3, 4, [ 5, 6, 7, [ 8, 9, 10 ], 11, 12 ] ]", opts:{afterComma:1,arrayPadding:1} },
|
47
|
-
{ json:"[1,\n 2,\n 3,\n 4,\n [5,\n 6,\n 7,\n [8,\n 9,\n 10],\n 11,\n 12]]", opts:{short:true,wrap:true} },
|
48
|
-
{ json:"[1,\n 2,\n 3,\n 4,\n [5,\n 6,\n 7,\n [8,\n 9,\n 10],\n 11,\n 12]]", opts:{short:true,wrap:true,afterComma:1} },
|
49
|
-
{ json:"[ 1,\n 2,\n 3,\n 4,\n [ 5,\n 6,\n 7,\n [ 8,\n 9,\n 10 ],\n 11,\n 12 ] ]", opts:{short:true,wrap:true,arrayPadding:1} },
|
50
|
-
]},
|
51
|
-
|
52
|
-
{value:[1,2,3], tests:[
|
53
|
-
{ json:"[1,2,3]" },
|
54
|
-
{ json:"[1 ,2 ,3]", opts:{beforeComma:1} },
|
55
|
-
{ json:"[1 , 2 , 3]", opts:{aroundComma:1} }
|
56
|
-
]},
|
57
|
-
|
58
|
-
{value:{b:1,a:2}, tests:[
|
59
|
-
{ json:'{"b":1,"a":2}' },
|
60
|
-
{ json:'{"a":2,"b":1}', opts:{sorted:true} },
|
61
|
-
{ json:'{"a":2, "b":1}', opts:{sorted:true,afterComma:1} },
|
62
|
-
{ json:'{"a" :2,"b" :1}', opts:{sorted:true,beforeColon:1} },
|
63
|
-
{ json:'{"a": 2,"b": 1}', opts:{sorted:true,afterColon:1} },
|
64
|
-
{ json:'{"a" : 2,"b" : 1}', opts:{sorted:true,beforeColon:1,afterColon:1} },
|
65
|
-
{ json:'{"a" : 2, "b" : 1}', opts:{sorted:true,beforeColon:1,afterColon:1,afterComma:1} },
|
66
|
-
{ json:'{ "a" : 2, "b" : 1 }', opts:{sorted:true,beforeColon:1,afterColon:1,afterComma:1,padding:1} },
|
67
|
-
{ json:'{ "a" : 2, "b" : 1 }', opts:{sorted:true,aroundColon:1,afterComma:1,objectPadding:1} },
|
68
|
-
{ json:'{"a" : 2, "b" : 1}', opts:{sorted:true,beforeColon:1,afterColon:1,afterComma:1,arrayPadding:1} },
|
69
|
-
{ json:'{ "a" : 2, "b" : 1 }', opts:{sorted:true,aroundColon:2,afterComma:1,padding:2} },
|
70
|
-
{ json:'{ "a":2, "b":1 }', opts:{sorted:true,afterComma:1,padding:2} },
|
71
|
-
{ json:'{"b": 1,"a": 2}', opts:{afterColon1:2} },
|
72
|
-
{ json:'{"b" : 1,"a" : 2}', opts:{aroundColon1:2} },
|
73
|
-
{ json:"{\n \"b\":1,\n \"a\":2\n}", opts:{wrap:true,aroundColon1:2} },
|
74
|
-
{ json:"{\n \"b\": 1,\n \"a\": 2\n}", opts:{wrap:true,afterColon:1} },
|
75
|
-
{ json:"{\n \"b\": 1,\n \"a\": 2\n}", opts:{wrap:true,afterColonN:1} },
|
76
|
-
{ json:"{\"b\":1,\n \"a\":2}", opts:{wrap:true,short:true} },
|
77
|
-
{ json:"{\"b\": 1,\n \"a\": 2}", opts:{wrap:true,short:true,afterColon:1} },
|
78
|
-
{ json:"{\"b\": 1,\n \"a\": 2}", opts:{wrap:true,short:true,afterColonN:1} },
|
79
|
-
{ json:"{\"b\":1,\n \"a\":2}", opts:{wrap:true,short:true,afterColon1:1} }
|
80
|
-
]},
|
81
|
-
|
82
|
-
{value:{b:1,aaa:2,cc:3}, tests:[
|
83
|
-
{ json:"{\n \"b\":1,\n \"aaa\":2,\n \"cc\":3\n}", opts:{wrap:true} },
|
84
|
-
{ json:"{\n \"b\" :1,\n \"aaa\":2,\n \"cc\" :3\n}", opts:{wrap:true,aligned:true} },
|
85
|
-
{ json:"{\"b\":1,\"aaa\":2,\"cc\":3}", opts:{aligned:true} },
|
86
|
-
{ json:"{\n \"aaa\":2,\n \"b\" :1,\n \"cc\" :3\n}", opts:{wrap:true,aligned:true,sorted:true} }
|
87
|
-
]},
|
88
|
-
|
89
|
-
{value:{a:1}, tests:[
|
90
|
-
{ json:'{"a":1}' },
|
91
|
-
{ json:"{\n \"a\":1\n}", opts:{wrap:true} }
|
92
|
-
]},
|
93
|
-
|
94
|
-
{value:{ b:17, a:42 }, tests:[
|
95
|
-
{ json:"{\"a\":42,\n \"b\":17}", opts:{wrap:10,sorted:true,short:true} }
|
96
|
-
]},
|
97
|
-
|
98
|
-
{value:[1,{a:2},3], tests:[
|
99
|
-
{ json:'[1,{"a":2},3]' },
|
100
|
-
{ json:'[ 1,{ "a":2 },3 ]', opts:{padding:1} },
|
101
|
-
{ json:'[ 1, { "a":2 }, 3 ]', opts:{padding:1,afterComma:1} },
|
102
|
-
{ json:"[\n 1,\n {\n \"a\":2\n },\n 3\n]", opts:{wrap:true} },
|
103
|
-
{ json:"[\n 1,\n {\"a\":2},\n 3\n]", opts:{wrap:10} }
|
104
|
-
]},
|
105
|
-
|
106
|
-
{value:[1,{a:2,b:3},4], tests:[
|
107
|
-
{ json:"[1,\n {\"a\":2,\n \"b\":3},\n 4]", opts:{wrap:0,short:true} },
|
108
|
-
]},
|
109
|
-
|
110
|
-
{value:{a:1,b:[2,3,4],c:3}, tests:[
|
111
|
-
{ json:'{"a":1,"b":[2,3,4],"c":3}' },
|
112
|
-
{ json:"{\n \"a\":1,\n \"b\":[2,3,4],\n \"c\":3\n}", opts:{wrap:10} },
|
113
|
-
{ json:"{\n \"a\":1,\n \"b\":[\n 2,\n 3,\n 4\n ],\n \"c\":3\n}", opts:{wrap:true} }
|
114
|
-
]},
|
115
|
-
|
116
|
-
{value:{hooo:42,whee:['yaaa','oooo','booy'],zoop:"whoop"}, tests:[
|
117
|
-
{ json:"{\"hooo\":42,\n \"whee\":[\"yaaa\",\n \"oooo\",\n \"booy\"],\n \"zoop\":\"whoop\"}", opts:{wrap:20,short:true} }
|
118
|
-
]},
|
119
|
-
|
120
|
-
{value:{ a:[ {x:"foo",y:"jim"}, {x:"bar",y:"jam"} ] }, tests:[
|
121
|
-
{ json:"{\"a\":[{\"x\":\"foo\",\n \"y\":\"jim\"},\n {\"x\":\"bar\",\n \"y\":\"jam\"}]}", opts:{wrap:true,short:true} }
|
122
|
-
]},
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
]
|
135
|
-
|
1
|
+
exports.tests = [
|
2
|
+
{value:true, tests:[{json:"true" }]},
|
3
|
+
{value:false, tests:[{json:"false" }]},
|
4
|
+
// {value:nil, tests:[{json:"null" }]},
|
5
|
+
{value:null, tests:[{json:"null" }]},
|
6
|
+
{value:undefined,tests:[{json:"null" }]},
|
7
|
+
{value:5, tests:[
|
8
|
+
{json:"5"},
|
9
|
+
{json:"5", opts:{decimals:3}}
|
10
|
+
]},
|
11
|
+
{value:5.0, tests:[
|
12
|
+
{json:"5"},
|
13
|
+
{json:"5", opts:{decimals:3}}
|
14
|
+
]},
|
15
|
+
{value:5.0001, tests:[
|
16
|
+
{json:"5.0001"},
|
17
|
+
{json:"5.000", opts:{decimals:3}}
|
18
|
+
]},
|
19
|
+
{value:4.2, tests:[
|
20
|
+
{json:"4.2"},
|
21
|
+
{json:"4", opts:{decimals:0}},
|
22
|
+
{json:"4.20",opts:{decimals:2}},
|
23
|
+
]},
|
24
|
+
{value:4.199, tests:[{json:"4.20", opts:{decimals:2}}]},
|
25
|
+
{value:4.204, tests:[{json:"4.20", opts:{decimals:2}}]},
|
26
|
+
{value:-1.9, tests:[{json:"-2", opts:{decimals:0}}]},
|
27
|
+
{value:-2.4, tests:[{json:"-2", opts:{decimals:0}}]},
|
28
|
+
{value:1e23, tests:[{json:/1(?:\.0+)?e\+23/i}]},
|
29
|
+
{value:1e-9, tests:[{json:/1(?:\.0+)?e-0*9/i}]},
|
30
|
+
{value:-2.4, tests:[{json:"-2", opts:{decimals:0}}]},
|
31
|
+
|
32
|
+
{value:"foo", tests:[{json:"\"foo\""}]},
|
33
|
+
// {value: :foo, tests:[{json:"\"foo\""}]},
|
34
|
+
{value:"foo\nbar", tests:[{json:"\"foo\\nbar\""}]},
|
35
|
+
|
36
|
+
{value:[1,2,3,4,[5,6,7,[8,9,10],11,12]], tests:[
|
37
|
+
{ json:"[1,2,3,4,[5,6,7,[8,9,10],11,12]]" },
|
38
|
+
{ json:"[\n 1,\n 2,\n 3,\n 4,\n [5,6,7,[8,9,10],11,12]\n]", opts:{wrap:30} },
|
39
|
+
{ json:"[\n 1,\n 2,\n 3,\n 4,\n [\n 5,\n 6,\n 7,\n [8,9,10],\n 11,\n 12\n ]\n]", opts:{wrap:20} },
|
40
|
+
{ json:"[\n 1,\n 2,\n 3,\n 4,\n [\n 5,\n 6,\n 7,\n [\n 8,\n 9,\n 10\n ],\n 11,\n 12\n ]\n]", opts:{wrap:true} },
|
41
|
+
{ json:"[\n\t1,\n\t2,\n\t3,\n\t4,\n\t[\n\t\t5,\n\t\t6,\n\t\t7,\n\t\t[\n\t\t\t8,\n\t\t\t9,\n\t\t\t10\n\t\t],\n\t\t11,\n\t\t12\n\t]\n]", opts:{wrap:true,indent:"\t"} },
|
42
|
+
{ json:"[1,2,3,4,[5,6,7,[8,9,10],11,12]]", opts:{arrayPadding:0} },
|
43
|
+
{ json:"[ 1,2,3,4,[ 5,6,7,[ 8,9,10 ],11,12 ] ]", opts:{arrayPadding:1} },
|
44
|
+
{ json:"[ 1,2,3,4,[ 5,6,7,[ 8,9,10 ],11,12 ] ]", opts:{arrayPadding:2} },
|
45
|
+
{ json:"[1, 2, 3, 4, [5, 6, 7, [8, 9, 10], 11, 12]]", opts:{afterComma:1} },
|
46
|
+
{ json:"[ 1, 2, 3, 4, [ 5, 6, 7, [ 8, 9, 10 ], 11, 12 ] ]", opts:{afterComma:1,arrayPadding:1} },
|
47
|
+
{ json:"[1,\n 2,\n 3,\n 4,\n [5,\n 6,\n 7,\n [8,\n 9,\n 10],\n 11,\n 12]]", opts:{short:true,wrap:true} },
|
48
|
+
{ json:"[1,\n 2,\n 3,\n 4,\n [5,\n 6,\n 7,\n [8,\n 9,\n 10],\n 11,\n 12]]", opts:{short:true,wrap:true,afterComma:1} },
|
49
|
+
{ json:"[ 1,\n 2,\n 3,\n 4,\n [ 5,\n 6,\n 7,\n [ 8,\n 9,\n 10 ],\n 11,\n 12 ] ]", opts:{short:true,wrap:true,arrayPadding:1} },
|
50
|
+
]},
|
51
|
+
|
52
|
+
{value:[1,2,3], tests:[
|
53
|
+
{ json:"[1,2,3]" },
|
54
|
+
{ json:"[1 ,2 ,3]", opts:{beforeComma:1} },
|
55
|
+
{ json:"[1 , 2 , 3]", opts:{aroundComma:1} }
|
56
|
+
]},
|
57
|
+
|
58
|
+
{value:{b:1,a:2}, tests:[
|
59
|
+
{ json:'{"b":1,"a":2}' },
|
60
|
+
{ json:'{"a":2,"b":1}', opts:{sorted:true} },
|
61
|
+
{ json:'{"a":2, "b":1}', opts:{sorted:true,afterComma:1} },
|
62
|
+
{ json:'{"a" :2,"b" :1}', opts:{sorted:true,beforeColon:1} },
|
63
|
+
{ json:'{"a": 2,"b": 1}', opts:{sorted:true,afterColon:1} },
|
64
|
+
{ json:'{"a" : 2,"b" : 1}', opts:{sorted:true,beforeColon:1,afterColon:1} },
|
65
|
+
{ json:'{"a" : 2, "b" : 1}', opts:{sorted:true,beforeColon:1,afterColon:1,afterComma:1} },
|
66
|
+
{ json:'{ "a" : 2, "b" : 1 }', opts:{sorted:true,beforeColon:1,afterColon:1,afterComma:1,padding:1} },
|
67
|
+
{ json:'{ "a" : 2, "b" : 1 }', opts:{sorted:true,aroundColon:1,afterComma:1,objectPadding:1} },
|
68
|
+
{ json:'{"a" : 2, "b" : 1}', opts:{sorted:true,beforeColon:1,afterColon:1,afterComma:1,arrayPadding:1} },
|
69
|
+
{ json:'{ "a" : 2, "b" : 1 }', opts:{sorted:true,aroundColon:2,afterComma:1,padding:2} },
|
70
|
+
{ json:'{ "a":2, "b":1 }', opts:{sorted:true,afterComma:1,padding:2} },
|
71
|
+
{ json:'{"b": 1,"a": 2}', opts:{afterColon1:2} },
|
72
|
+
{ json:'{"b" : 1,"a" : 2}', opts:{aroundColon1:2} },
|
73
|
+
{ json:"{\n \"b\":1,\n \"a\":2\n}", opts:{wrap:true,aroundColon1:2} },
|
74
|
+
{ json:"{\n \"b\": 1,\n \"a\": 2\n}", opts:{wrap:true,afterColon:1} },
|
75
|
+
{ json:"{\n \"b\": 1,\n \"a\": 2\n}", opts:{wrap:true,afterColonN:1} },
|
76
|
+
{ json:"{\"b\":1,\n \"a\":2}", opts:{wrap:true,short:true} },
|
77
|
+
{ json:"{\"b\": 1,\n \"a\": 2}", opts:{wrap:true,short:true,afterColon:1} },
|
78
|
+
{ json:"{\"b\": 1,\n \"a\": 2}", opts:{wrap:true,short:true,afterColonN:1} },
|
79
|
+
{ json:"{\"b\":1,\n \"a\":2}", opts:{wrap:true,short:true,afterColon1:1} }
|
80
|
+
]},
|
81
|
+
|
82
|
+
{value:{b:1,aaa:2,cc:3}, tests:[
|
83
|
+
{ json:"{\n \"b\":1,\n \"aaa\":2,\n \"cc\":3\n}", opts:{wrap:true} },
|
84
|
+
{ json:"{\n \"b\" :1,\n \"aaa\":2,\n \"cc\" :3\n}", opts:{wrap:true,aligned:true} },
|
85
|
+
{ json:"{\"b\":1,\"aaa\":2,\"cc\":3}", opts:{aligned:true} },
|
86
|
+
{ json:"{\n \"aaa\":2,\n \"b\" :1,\n \"cc\" :3\n}", opts:{wrap:true,aligned:true,sorted:true} }
|
87
|
+
]},
|
88
|
+
|
89
|
+
{value:{a:1}, tests:[
|
90
|
+
{ json:'{"a":1}' },
|
91
|
+
{ json:"{\n \"a\":1\n}", opts:{wrap:true} }
|
92
|
+
]},
|
93
|
+
|
94
|
+
{value:{ b:17, a:42 }, tests:[
|
95
|
+
{ json:"{\"a\":42,\n \"b\":17}", opts:{wrap:10,sorted:true,short:true} }
|
96
|
+
]},
|
97
|
+
|
98
|
+
{value:[1,{a:2},3], tests:[
|
99
|
+
{ json:'[1,{"a":2},3]' },
|
100
|
+
{ json:'[ 1,{ "a":2 },3 ]', opts:{padding:1} },
|
101
|
+
{ json:'[ 1, { "a":2 }, 3 ]', opts:{padding:1,afterComma:1} },
|
102
|
+
{ json:"[\n 1,\n {\n \"a\":2\n },\n 3\n]", opts:{wrap:true} },
|
103
|
+
{ json:"[\n 1,\n {\"a\":2},\n 3\n]", opts:{wrap:10} }
|
104
|
+
]},
|
105
|
+
|
106
|
+
{value:[1,{a:2,b:3},4], tests:[
|
107
|
+
{ json:"[1,\n {\"a\":2,\n \"b\":3},\n 4]", opts:{wrap:0,short:true} },
|
108
|
+
]},
|
109
|
+
|
110
|
+
{value:{a:1,b:[2,3,4],c:3}, tests:[
|
111
|
+
{ json:'{"a":1,"b":[2,3,4],"c":3}' },
|
112
|
+
{ json:"{\n \"a\":1,\n \"b\":[2,3,4],\n \"c\":3\n}", opts:{wrap:10} },
|
113
|
+
{ json:"{\n \"a\":1,\n \"b\":[\n 2,\n 3,\n 4\n ],\n \"c\":3\n}", opts:{wrap:true} }
|
114
|
+
]},
|
115
|
+
|
116
|
+
{value:{hooo:42,whee:['yaaa','oooo','booy'],zoop:"whoop"}, tests:[
|
117
|
+
{ json:"{\"hooo\":42,\n \"whee\":[\"yaaa\",\n \"oooo\",\n \"booy\"],\n \"zoop\":\"whoop\"}", opts:{wrap:20,short:true} }
|
118
|
+
]},
|
119
|
+
|
120
|
+
{value:{ a:[ {x:"foo",y:"jim"}, {x:"bar",y:"jam"} ] }, tests:[
|
121
|
+
{ json:"{\"a\":[{\"x\":\"foo\",\n \"y\":\"jim\"},\n {\"x\":\"bar\",\n \"y\":\"jam\"}]}", opts:{wrap:true,short:true} }
|
122
|
+
]},
|
123
|
+
|
124
|
+
{value:{"abcdefghij":[{"abcdefghijklmnop":{}}]}, tests:[
|
125
|
+
{ json:'{"abcdefghij":[{"abcdefghijklmnop":{}}]}' },
|
126
|
+
{ json:'{"abcdefghij" : [{"abcdefghijklmnop" : {}}]}', opts:{wrap:1, short:true, aroundColonN:1} },
|
127
|
+
]},
|
128
|
+
|
129
|
+
{value:{"foo":{}}, tests:[
|
130
|
+
{ json:'{"foo":{}}' },
|
131
|
+
{ json:'{"foo":{}}', opts:{wrap:false} },
|
132
|
+
{ json:'{\n "foo":{}\n}', opts:{wrap:5} },
|
133
|
+
{ json:'{"foo":{}}', opts:{wrap:1, short:true} }
|
134
|
+
]},
|
135
|
+
|
136
|
+
{value:["foo",{},"bar"], tests:[
|
137
|
+
{ json:'[\n "foo",\n {},\n "bar"\n]', opts:{wrap:1} },
|
138
|
+
{ json:'["foo",\n {},\n "bar"]', opts:{wrap:1, short:true} }
|
139
|
+
]},
|
140
|
+
|
141
|
+
{value:["foo",[],"bar"], tests:[
|
142
|
+
{ json:'[\n "foo",\n [],\n "bar"\n]', opts:{wrap:1} },
|
143
|
+
{ json:'["foo",\n [],\n "bar"]', opts:{wrap:1, short:true} }
|
144
|
+
]},
|
145
|
+
|
146
|
+
{value:["foo",[{},[{"foo":[]},42]],"bar"], tests:[
|
147
|
+
{ json:'["foo",\n [{},\n [{"foo":[]},\n 42]],\n "bar"]', opts:{wrap:1, short:true} },
|
148
|
+
]}
|
149
|
+
|
150
|
+
// {value:Class.new{ def to_json(*a); {a:1}.to_json(*a); end }.new, tests:[
|
151
|
+
// { json:'{ "a":1}' },
|
152
|
+
// { json:'{ "a":1}', opts:{wrap:true} },
|
153
|
+
// { json:'{"a":1}', opts:{indent:''} },
|
154
|
+
// ]},
|
155
|
+
|
156
|
+
// {value:Class.new{ def to_json(*a); JSON.neat_generate({a:1},*a); end }.new, tests:[
|
157
|
+
// { json:'{"a":1}' },
|
158
|
+
// { json:"{\n \"a\":1\n}", opts:{wrap:true} }
|
159
|
+
// ]}
|
160
|
+
]
|
161
|
+
|
data/test/tests.rb
CHANGED
@@ -1,133 +1,160 @@
|
|
1
|
-
TESTS = [
|
2
|
-
{value:true, tests:[{json:"true" }]},
|
3
|
-
{value:false, tests:[{json:"false" }]},
|
4
|
-
{value:nil, tests:[{json:"null" }]},
|
5
|
-
{value:5, tests:[
|
6
|
-
{json:"5"},
|
7
|
-
{json:"5", opts:{decimals:3}}
|
8
|
-
]},
|
9
|
-
{value:5.0, tests:[
|
10
|
-
{json:"5"},
|
11
|
-
{json:"5", opts:{decimals:3}}
|
12
|
-
]},
|
13
|
-
{value:5.0001, tests:[
|
14
|
-
{json:"5.0001"},
|
15
|
-
{json:"5.000", opts:{decimals:3}}
|
16
|
-
]},
|
17
|
-
{value:4.2, tests:[
|
18
|
-
{json:"4.2"},
|
19
|
-
{json:"4", opts:{decimals:0}},
|
20
|
-
{json:"4.20",opts:{decimals:2}},
|
21
|
-
]},
|
22
|
-
{value:4.199, tests:[{json:"4.20", opts:{decimals:2}}]},
|
23
|
-
{value:4.204, tests:[{json:"4.20", opts:{decimals:2}}]},
|
24
|
-
{value:-1.9, tests:[{json:"-2", opts:{decimals:0}}]},
|
25
|
-
{value:-2.4, tests:[{json:"-2", opts:{decimals:0}}]},
|
26
|
-
{value:1e23, tests:[{json:/1(?:\.0+)?e\+23/i}]},
|
27
|
-
{value:1e-9, tests:[{json:/1(?:\.0+)?e-0*9/i}]},
|
28
|
-
{value:-2.4, tests:[{json:"-2", opts:{decimals:0}}]},
|
29
|
-
|
30
|
-
{value:"foo", tests:[{json:"\"foo\""}]},
|
31
|
-
{value: :foo, tests:[{json:"\"foo\""}]},
|
32
|
-
{value:"foo\nbar", tests:[{json:"\"foo\\nbar\""}]},
|
33
|
-
|
34
|
-
{value:[1,2,3,4,[5,6,7,[8,9,10],11,12]], tests:[
|
35
|
-
{ json:"[1,2,3,4,[5,6,7,[8,9,10],11,12]]" },
|
36
|
-
{ json:"[\n 1,\n 2,\n 3,\n 4,\n [5,6,7,[8,9,10],11,12]\n]", opts:{wrap:30} },
|
37
|
-
{ json:"[\n 1,\n 2,\n 3,\n 4,\n [\n 5,\n 6,\n 7,\n [8,9,10],\n 11,\n 12\n ]\n]", opts:{wrap:20} },
|
38
|
-
{ json:"[\n 1,\n 2,\n 3,\n 4,\n [\n 5,\n 6,\n 7,\n [\n 8,\n 9,\n 10\n ],\n 11,\n 12\n ]\n]", opts:{wrap:true} },
|
39
|
-
{ json:"[\n\t1,\n\t2,\n\t3,\n\t4,\n\t[\n\t\t5,\n\t\t6,\n\t\t7,\n\t\t[\n\t\t\t8,\n\t\t\t9,\n\t\t\t10\n\t\t],\n\t\t11,\n\t\t12\n\t]\n]", opts:{wrap:true,indent:"\t"} },
|
40
|
-
{ json:"[1,2,3,4,[5,6,7,[8,9,10],11,12]]", opts:{array_padding:0} },
|
41
|
-
{ json:"[ 1,2,3,4,[ 5,6,7,[ 8,9,10 ],11,12 ] ]", opts:{array_padding:1} },
|
42
|
-
{ json:"[ 1,2,3,4,[ 5,6,7,[ 8,9,10 ],11,12 ] ]", opts:{array_padding:2} },
|
43
|
-
{ json:"[1, 2, 3, 4, [5, 6, 7, [8, 9, 10], 11, 12]]", opts:{after_comma:1} },
|
44
|
-
{ json:"[ 1, 2, 3, 4, [ 5, 6, 7, [ 8, 9, 10 ], 11, 12 ] ]", opts:{after_comma:1,array_padding:1} },
|
45
|
-
{ json:"[1,\n 2,\n 3,\n 4,\n [5,\n 6,\n 7,\n [8,\n 9,\n 10],\n 11,\n 12]]", opts:{short:true,wrap:true} },
|
46
|
-
{ json:"[1,\n 2,\n 3,\n 4,\n [5,\n 6,\n 7,\n [8,\n 9,\n 10],\n 11,\n 12]]", opts:{short:true,wrap:true,after_comma:1} },
|
47
|
-
{ json:"[ 1,\n 2,\n 3,\n 4,\n [ 5,\n 6,\n 7,\n [ 8,\n 9,\n 10 ],\n 11,\n 12 ] ]", opts:{short:true,wrap:true,array_padding:1} },
|
48
|
-
]},
|
49
|
-
|
50
|
-
{value:[1,2,3], tests:[
|
51
|
-
{ json:"[1,2,3]" },
|
52
|
-
{ json:"[1 ,2 ,3]", opts:{before_comma:1} },
|
53
|
-
{ json:"[1 , 2 , 3]", opts:{around_comma:1} }
|
54
|
-
]},
|
55
|
-
|
56
|
-
{value:{b:1,a:2}, tests:[
|
57
|
-
{ json:'{"b":1,"a":2}' },
|
58
|
-
{ json:'{"a":2,"b":1}', opts:{sorted:true} },
|
59
|
-
{ json:'{"a":2, "b":1}', opts:{sorted:true,after_comma:1} },
|
60
|
-
{ json:'{"a" :2,"b" :1}', opts:{sorted:true,before_colon:1} },
|
61
|
-
{ json:'{"a": 2,"b": 1}', opts:{sorted:true,after_colon:1} },
|
62
|
-
{ json:'{"a" : 2,"b" : 1}', opts:{sorted:true,before_colon:1,after_colon:1} },
|
63
|
-
{ json:'{"a" : 2, "b" : 1}', opts:{sorted:true,before_colon:1,after_colon:1,after_comma:1} },
|
64
|
-
{ json:'{ "a" : 2, "b" : 1 }', opts:{sorted:true,before_colon:1,after_colon:1,after_comma:1,padding:1} },
|
65
|
-
{ json:'{ "a" : 2, "b" : 1 }', opts:{sorted:true,around_colon:1,after_comma:1,object_padding:1} },
|
66
|
-
{ json:'{"a" : 2, "b" : 1}', opts:{sorted:true,before_colon:1,after_colon:1,after_comma:1,array_padding:1} },
|
67
|
-
{ json:'{ "a" : 2, "b" : 1 }', opts:{sorted:true,around_colon:2,after_comma:1,padding:2} },
|
68
|
-
{ json:'{ "a":2, "b":1 }', opts:{sorted:true,after_comma:1,padding:2} },
|
69
|
-
{ json:'{"b": 1,"a": 2}', opts:{after_colon_1:2} },
|
70
|
-
{ json:'{"b" : 1,"a" : 2}', opts:{around_colon_1:2} },
|
71
|
-
{ json:"{\n \"b\":1,\n \"a\":2\n}", opts:{wrap:true,around_colon_1:2} },
|
72
|
-
{ json:"{\n \"b\": 1,\n \"a\": 2\n}", opts:{wrap:true,after_colon:1} },
|
73
|
-
{ json:"{\n \"b\": 1,\n \"a\": 2\n}", opts:{wrap:true,after_colon_n:1} },
|
74
|
-
{ json:"{\"b\":1,\n \"a\":2}", opts:{wrap:true,short:true} },
|
75
|
-
{ json:"{\"b\": 1,\n \"a\": 2}", opts:{wrap:true,short:true,after_colon:1} },
|
76
|
-
{ json:"{\"b\": 1,\n \"a\": 2}", opts:{wrap:true,short:true,after_colon_n:1} },
|
77
|
-
{ json:"{\"b\":1,\n \"a\":2}", opts:{wrap:true,short:true,after_colon_1:1} },
|
78
|
-
]},
|
79
|
-
|
80
|
-
{value:{b:1,aaa:2,cc:3}, tests:[
|
81
|
-
{ json:"{\n \"b\":1,\n \"aaa\":2,\n \"cc\":3\n}", opts:{wrap:true} },
|
82
|
-
{ json:"{\n \"b\" :1,\n \"aaa\":2,\n \"cc\" :3\n}", opts:{wrap:true,aligned:true} },
|
83
|
-
{ json:"{\"b\":1,\"aaa\":2,\"cc\":3}", opts:{aligned:true} },
|
84
|
-
{ json:"{\n \"aaa\":2,\n \"b\" :1,\n \"cc\" :3\n}", opts:{wrap:true,aligned:true,sorted:true} }
|
85
|
-
]},
|
86
|
-
|
87
|
-
{value:{a:1}, tests:[
|
88
|
-
{ json:'{"a":1}' },
|
89
|
-
{ json:"{\n \"a\":1\n}", opts:{wrap:true} }
|
90
|
-
]},
|
91
|
-
|
92
|
-
{value:{ b:17, a:42 }, tests:[
|
93
|
-
{ json:"{\"a\":42,\n \"b\":17}", opts:{wrap:10,sorted:true,short:true} }
|
94
|
-
]},
|
95
|
-
|
96
|
-
{value:[1,{a:2},3], tests:[
|
97
|
-
{ json:'[1,{"a":2},3]' },
|
98
|
-
{ json:'[ 1,{ "a":2 },3 ]', opts:{padding:1} },
|
99
|
-
{ json:'[ 1, { "a":2 }, 3 ]', opts:{padding:1,after_comma:1} },
|
100
|
-
{ json:"[\n 1,\n {\n \"a\":2\n },\n 3\n]", opts:{wrap:true} },
|
101
|
-
{ json:"[\n 1,\n {\"a\":2},\n 3\n]", opts:{wrap:10} }
|
102
|
-
]},
|
103
|
-
|
104
|
-
{value:[1,{a:2,b:3},4], tests:[
|
105
|
-
{ json:"[1,\n {\"a\":2,\n \"b\":3},\n 4]", opts:{wrap:0,short:true} },
|
106
|
-
]},
|
107
|
-
|
108
|
-
{value:{a:1,b:[2,3,4],c:3}, tests:[
|
109
|
-
{ json:'{"a":1,"b":[2,3,4],"c":3}' },
|
110
|
-
{ json:"{\n \"a\":1,\n \"b\":[2,3,4],\n \"c\":3\n}", opts:{wrap:10} },
|
111
|
-
{ json:"{\n \"a\":1,\n \"b\":[\n 2,\n 3,\n 4\n ],\n \"c\":3\n}", opts:{wrap:true} }
|
112
|
-
]},
|
113
|
-
|
114
|
-
{value:{hooo:42,whee:['yaaa','oooo','booy'],zoop:"whoop"}, tests:[
|
115
|
-
{ json:"{\"hooo\":42,\n \"whee\":[\"yaaa\",\n \"oooo\",\n \"booy\"],\n \"zoop\":\"whoop\"}", opts:{wrap:20,short:true} }
|
116
|
-
]},
|
117
|
-
|
118
|
-
{value:{ a:[ {x:"foo",y:"jim"}, {x:"bar",y:"jam"} ] }, tests:[
|
119
|
-
{ json:"{\"a\":[{\"x\":\"foo\",\n \"y\":\"jim\"},\n {\"x\":\"bar\",\n \"y\":\"jam\"}]}", opts:{wrap:true,short:true} }
|
120
|
-
]},
|
121
|
-
|
122
|
-
{value:
|
123
|
-
{ json:
|
124
|
-
{ json:
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
{ json:
|
130
|
-
{ json:"{\n \"
|
131
|
-
|
132
|
-
]
|
133
|
-
|
1
|
+
TESTS = [
|
2
|
+
{value:true, tests:[{json:"true" }]},
|
3
|
+
{value:false, tests:[{json:"false" }]},
|
4
|
+
{value:nil, tests:[{json:"null" }]},
|
5
|
+
{value:5, tests:[
|
6
|
+
{json:"5"},
|
7
|
+
{json:"5", opts:{decimals:3}}
|
8
|
+
]},
|
9
|
+
{value:5.0, tests:[
|
10
|
+
{json:"5"},
|
11
|
+
{json:"5", opts:{decimals:3}}
|
12
|
+
]},
|
13
|
+
{value:5.0001, tests:[
|
14
|
+
{json:"5.0001"},
|
15
|
+
{json:"5.000", opts:{decimals:3}}
|
16
|
+
]},
|
17
|
+
{value:4.2, tests:[
|
18
|
+
{json:"4.2"},
|
19
|
+
{json:"4", opts:{decimals:0}},
|
20
|
+
{json:"4.20",opts:{decimals:2}},
|
21
|
+
]},
|
22
|
+
{value:4.199, tests:[{json:"4.20", opts:{decimals:2}}]},
|
23
|
+
{value:4.204, tests:[{json:"4.20", opts:{decimals:2}}]},
|
24
|
+
{value:-1.9, tests:[{json:"-2", opts:{decimals:0}}]},
|
25
|
+
{value:-2.4, tests:[{json:"-2", opts:{decimals:0}}]},
|
26
|
+
{value:1e23, tests:[{json:/1(?:\.0+)?e\+23/i}]},
|
27
|
+
{value:1e-9, tests:[{json:/1(?:\.0+)?e-0*9/i}]},
|
28
|
+
{value:-2.4, tests:[{json:"-2", opts:{decimals:0}}]},
|
29
|
+
|
30
|
+
{value:"foo", tests:[{json:"\"foo\""}]},
|
31
|
+
{value: :foo, tests:[{json:"\"foo\""}]},
|
32
|
+
{value:"foo\nbar", tests:[{json:"\"foo\\nbar\""}]},
|
33
|
+
|
34
|
+
{value:[1,2,3,4,[5,6,7,[8,9,10],11,12]], tests:[
|
35
|
+
{ json:"[1,2,3,4,[5,6,7,[8,9,10],11,12]]" },
|
36
|
+
{ json:"[\n 1,\n 2,\n 3,\n 4,\n [5,6,7,[8,9,10],11,12]\n]", opts:{wrap:30} },
|
37
|
+
{ json:"[\n 1,\n 2,\n 3,\n 4,\n [\n 5,\n 6,\n 7,\n [8,9,10],\n 11,\n 12\n ]\n]", opts:{wrap:20} },
|
38
|
+
{ json:"[\n 1,\n 2,\n 3,\n 4,\n [\n 5,\n 6,\n 7,\n [\n 8,\n 9,\n 10\n ],\n 11,\n 12\n ]\n]", opts:{wrap:true} },
|
39
|
+
{ json:"[\n\t1,\n\t2,\n\t3,\n\t4,\n\t[\n\t\t5,\n\t\t6,\n\t\t7,\n\t\t[\n\t\t\t8,\n\t\t\t9,\n\t\t\t10\n\t\t],\n\t\t11,\n\t\t12\n\t]\n]", opts:{wrap:true,indent:"\t"} },
|
40
|
+
{ json:"[1,2,3,4,[5,6,7,[8,9,10],11,12]]", opts:{array_padding:0} },
|
41
|
+
{ json:"[ 1,2,3,4,[ 5,6,7,[ 8,9,10 ],11,12 ] ]", opts:{array_padding:1} },
|
42
|
+
{ json:"[ 1,2,3,4,[ 5,6,7,[ 8,9,10 ],11,12 ] ]", opts:{array_padding:2} },
|
43
|
+
{ json:"[1, 2, 3, 4, [5, 6, 7, [8, 9, 10], 11, 12]]", opts:{after_comma:1} },
|
44
|
+
{ json:"[ 1, 2, 3, 4, [ 5, 6, 7, [ 8, 9, 10 ], 11, 12 ] ]", opts:{after_comma:1,array_padding:1} },
|
45
|
+
{ json:"[1,\n 2,\n 3,\n 4,\n [5,\n 6,\n 7,\n [8,\n 9,\n 10],\n 11,\n 12]]", opts:{short:true,wrap:true} },
|
46
|
+
{ json:"[1,\n 2,\n 3,\n 4,\n [5,\n 6,\n 7,\n [8,\n 9,\n 10],\n 11,\n 12]]", opts:{short:true,wrap:true,after_comma:1} },
|
47
|
+
{ json:"[ 1,\n 2,\n 3,\n 4,\n [ 5,\n 6,\n 7,\n [ 8,\n 9,\n 10 ],\n 11,\n 12 ] ]", opts:{short:true,wrap:true,array_padding:1} },
|
48
|
+
]},
|
49
|
+
|
50
|
+
{value:[1,2,3], tests:[
|
51
|
+
{ json:"[1,2,3]" },
|
52
|
+
{ json:"[1 ,2 ,3]", opts:{before_comma:1} },
|
53
|
+
{ json:"[1 , 2 , 3]", opts:{around_comma:1} }
|
54
|
+
]},
|
55
|
+
|
56
|
+
{value:{b:1,a:2}, tests:[
|
57
|
+
{ json:'{"b":1,"a":2}' },
|
58
|
+
{ json:'{"a":2,"b":1}', opts:{sorted:true} },
|
59
|
+
{ json:'{"a":2, "b":1}', opts:{sorted:true,after_comma:1} },
|
60
|
+
{ json:'{"a" :2,"b" :1}', opts:{sorted:true,before_colon:1} },
|
61
|
+
{ json:'{"a": 2,"b": 1}', opts:{sorted:true,after_colon:1} },
|
62
|
+
{ json:'{"a" : 2,"b" : 1}', opts:{sorted:true,before_colon:1,after_colon:1} },
|
63
|
+
{ json:'{"a" : 2, "b" : 1}', opts:{sorted:true,before_colon:1,after_colon:1,after_comma:1} },
|
64
|
+
{ json:'{ "a" : 2, "b" : 1 }', opts:{sorted:true,before_colon:1,after_colon:1,after_comma:1,padding:1} },
|
65
|
+
{ json:'{ "a" : 2, "b" : 1 }', opts:{sorted:true,around_colon:1,after_comma:1,object_padding:1} },
|
66
|
+
{ json:'{"a" : 2, "b" : 1}', opts:{sorted:true,before_colon:1,after_colon:1,after_comma:1,array_padding:1} },
|
67
|
+
{ json:'{ "a" : 2, "b" : 1 }', opts:{sorted:true,around_colon:2,after_comma:1,padding:2} },
|
68
|
+
{ json:'{ "a":2, "b":1 }', opts:{sorted:true,after_comma:1,padding:2} },
|
69
|
+
{ json:'{"b": 1,"a": 2}', opts:{after_colon_1:2} },
|
70
|
+
{ json:'{"b" : 1,"a" : 2}', opts:{around_colon_1:2} },
|
71
|
+
{ json:"{\n \"b\":1,\n \"a\":2\n}", opts:{wrap:true,around_colon_1:2} },
|
72
|
+
{ json:"{\n \"b\": 1,\n \"a\": 2\n}", opts:{wrap:true,after_colon:1} },
|
73
|
+
{ json:"{\n \"b\": 1,\n \"a\": 2\n}", opts:{wrap:true,after_colon_n:1} },
|
74
|
+
{ json:"{\"b\":1,\n \"a\":2}", opts:{wrap:true,short:true} },
|
75
|
+
{ json:"{\"b\": 1,\n \"a\": 2}", opts:{wrap:true,short:true,after_colon:1} },
|
76
|
+
{ json:"{\"b\": 1,\n \"a\": 2}", opts:{wrap:true,short:true,after_colon_n:1} },
|
77
|
+
{ json:"{\"b\":1,\n \"a\":2}", opts:{wrap:true,short:true,after_colon_1:1} },
|
78
|
+
]},
|
79
|
+
|
80
|
+
{value:{b:1,aaa:2,cc:3}, tests:[
|
81
|
+
{ json:"{\n \"b\":1,\n \"aaa\":2,\n \"cc\":3\n}", opts:{wrap:true} },
|
82
|
+
{ json:"{\n \"b\" :1,\n \"aaa\":2,\n \"cc\" :3\n}", opts:{wrap:true,aligned:true} },
|
83
|
+
{ json:"{\"b\":1,\"aaa\":2,\"cc\":3}", opts:{aligned:true} },
|
84
|
+
{ json:"{\n \"aaa\":2,\n \"b\" :1,\n \"cc\" :3\n}", opts:{wrap:true,aligned:true,sorted:true} }
|
85
|
+
]},
|
86
|
+
|
87
|
+
{value:{a:1}, tests:[
|
88
|
+
{ json:'{"a":1}' },
|
89
|
+
{ json:"{\n \"a\":1\n}", opts:{wrap:true} }
|
90
|
+
]},
|
91
|
+
|
92
|
+
{value:{ b:17, a:42 }, tests:[
|
93
|
+
{ json:"{\"a\":42,\n \"b\":17}", opts:{wrap:10,sorted:true,short:true} }
|
94
|
+
]},
|
95
|
+
|
96
|
+
{value:[1,{a:2},3], tests:[
|
97
|
+
{ json:'[1,{"a":2},3]' },
|
98
|
+
{ json:'[ 1,{ "a":2 },3 ]', opts:{padding:1} },
|
99
|
+
{ json:'[ 1, { "a":2 }, 3 ]', opts:{padding:1,after_comma:1} },
|
100
|
+
{ json:"[\n 1,\n {\n \"a\":2\n },\n 3\n]", opts:{wrap:true} },
|
101
|
+
{ json:"[\n 1,\n {\"a\":2},\n 3\n]", opts:{wrap:10} }
|
102
|
+
]},
|
103
|
+
|
104
|
+
{value:[1,{a:2,b:3},4], tests:[
|
105
|
+
{ json:"[1,\n {\"a\":2,\n \"b\":3},\n 4]", opts:{wrap:0,short:true} },
|
106
|
+
]},
|
107
|
+
|
108
|
+
{value:{a:1,b:[2,3,4],c:3}, tests:[
|
109
|
+
{ json:'{"a":1,"b":[2,3,4],"c":3}' },
|
110
|
+
{ json:"{\n \"a\":1,\n \"b\":[2,3,4],\n \"c\":3\n}", opts:{wrap:10} },
|
111
|
+
{ json:"{\n \"a\":1,\n \"b\":[\n 2,\n 3,\n 4\n ],\n \"c\":3\n}", opts:{wrap:true} }
|
112
|
+
]},
|
113
|
+
|
114
|
+
{value:{hooo:42,whee:['yaaa','oooo','booy'],zoop:"whoop"}, tests:[
|
115
|
+
{ json:"{\"hooo\":42,\n \"whee\":[\"yaaa\",\n \"oooo\",\n \"booy\"],\n \"zoop\":\"whoop\"}", opts:{wrap:20,short:true} }
|
116
|
+
]},
|
117
|
+
|
118
|
+
{value:{ a:[ {x:"foo",y:"jim"}, {x:"bar",y:"jam"} ] }, tests:[
|
119
|
+
{ json:"{\"a\":[{\"x\":\"foo\",\n \"y\":\"jim\"},\n {\"x\":\"bar\",\n \"y\":\"jam\"}]}", opts:{wrap:true,short:true} }
|
120
|
+
]},
|
121
|
+
|
122
|
+
{value:{"abcdefghij"=>[{"abcdefghijklmnop"=>{}}]}, tests:[
|
123
|
+
{ json:"{\"abcdefghij\":[{\"abcdefghijklmnop\":{}}]}" },
|
124
|
+
{ json:"{\"abcdefghij\" : [{\"abcdefghijklmnop\" : {}}]}", opts:{wrap:1, short:true, around_colon_n:1} },
|
125
|
+
]},
|
126
|
+
|
127
|
+
{value:{foo:{}}, tests:[
|
128
|
+
{ json:"{\"foo\":{}}" },
|
129
|
+
{ json:"{\"foo\":{}}", opts:{wrap:false} },
|
130
|
+
{ json:"{\n \"foo\":{}\n}", opts:{wrap:5} },
|
131
|
+
{ json:"{\"foo\":{}}", opts:{wrap:1, short:true} }
|
132
|
+
]},
|
133
|
+
|
134
|
+
{value:["foo",{},"bar"], tests:[
|
135
|
+
{ json:"[\n \"foo\",\n {},\n \"bar\"\n]", opts:{wrap:1} },
|
136
|
+
{ json:"[\"foo\",\n {},\n \"bar\"]", opts:{wrap:1, short:true} }
|
137
|
+
]},
|
138
|
+
|
139
|
+
{value:["foo",[],"bar"], tests:[
|
140
|
+
{ json:"[\n \"foo\",\n [],\n \"bar\"\n]", opts:{wrap:1} },
|
141
|
+
{ json:"[\"foo\",\n [],\n \"bar\"]", opts:{wrap:1, short:true} }
|
142
|
+
]},
|
143
|
+
|
144
|
+
{value:["foo",[{},[{foo:[]},42]],"bar"], tests:[
|
145
|
+
{ json:"[\"foo\",\n [{},\n [{\"foo\":[]},\n 42]],\n \"bar\"]", opts:{wrap:1, short:true} },
|
146
|
+
]},
|
147
|
+
|
148
|
+
{value:Class.new{ def to_json(*a); {a:1}.to_json(*a); end }.new, tests:[
|
149
|
+
{ json:'{ "a":1}' },
|
150
|
+
{ json:'{ "a":1}', opts:{wrap:true} },
|
151
|
+
{ json:'{"a":1}', opts:{indent:''} },
|
152
|
+
]},
|
153
|
+
|
154
|
+
{value:Class.new{ def to_json(*a); JSON.neat_generate({a:1},*a); end }.new, tests:[
|
155
|
+
{ json:'{"a":1}' },
|
156
|
+
{ json:"{\n \"a\":1\n}", opts:{wrap:true} }
|
157
|
+
]}
|
158
|
+
|
159
|
+
]
|
160
|
+
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: neatjson
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 0.6.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gavin Kistner
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-10-12 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: 'Generate JSON strings from Ruby objects with flexible formatting options.
|
14
14
|
Key features: keep arrays and objects on a single line when they fit; format floats
|
@@ -48,8 +48,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
48
48
|
version: '0'
|
49
49
|
requirements: []
|
50
50
|
rubyforge_project:
|
51
|
-
rubygems_version: 2.
|
51
|
+
rubygems_version: 2.2.3
|
52
52
|
signing_key:
|
53
53
|
specification_version: 4
|
54
54
|
summary: Pretty, powerful, flexible JSON generation.
|
55
55
|
test_files: []
|
56
|
+
has_rdoc: yard
|