aerials 0.0.2 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +32 -2
- data/lib/aerials.rb +4 -4
- data/lib/aerials/version.rb +1 -1
- data/spec/aerials_spec.rb +10 -10
- data/spec/json_spec.rb +41 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dc24615c4e2f6e21790e36209bb2a4a2716df8d0
|
4
|
+
data.tar.gz: c2054bb6d80b95f598ffb4277e6316c17d59cc33
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 226875170e3e5070e6535578995cde8967dd1e42820dd205e08da42ef58bd0cb55c51d002466012418d5b928e97c407f6a56295050651e59df22871d5a4ce16a
|
7
|
+
data.tar.gz: d2de277775e553156063f7243dd0dc3b517b3b0c7f055a4bdb97eebc5fe5cf5c7dda5650556a4785f94de0e1ac9373948b3c38596aaa75010dfb3d37d1a95058
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Aerials
|
2
2
|
|
3
|
-
|
3
|
+
Gem generates constant JSON. As consequence, you can MD5 it and this will remain the same.
|
4
4
|
|
5
5
|
## Installation
|
6
6
|
|
@@ -18,7 +18,37 @@ Or install it yourself as:
|
|
18
18
|
|
19
19
|
## Usage
|
20
20
|
|
21
|
-
|
21
|
+
### JSON generation rules:
|
22
|
+
- No extra spaces
|
23
|
+
- Always use double quotes for keys and array/hash values ("")
|
24
|
+
- Always add slashes to double quotes (replace " with \")
|
25
|
+
- Always use UTF8 (TODO)
|
26
|
+
- Always sort by keys on each level (arrays should be sorted by values)
|
27
|
+
- Always sort as strings
|
28
|
+
|
29
|
+
### Example:
|
30
|
+
|
31
|
+
struct = {
|
32
|
+
array: [2, '1'],
|
33
|
+
hash: {
|
34
|
+
'a' => '1'
|
35
|
+
},
|
36
|
+
a: 2,
|
37
|
+
}
|
38
|
+
Aerials.create_json struct
|
39
|
+
|
40
|
+
# will eq
|
41
|
+
# '{"a":"2","array":["1","2"],"hash":{"a":"1"}}'
|
42
|
+
|
43
|
+
You can exclude fields:
|
44
|
+
|
45
|
+
Aerials.create_json(struct, exclude: [:controller])
|
46
|
+
|
47
|
+
Or use default Rails exclusion:
|
48
|
+
|
49
|
+
Aerials.create_json_rails struct
|
50
|
+
# equals to:
|
51
|
+
Aerials.create_json struct, exclude: [:action, :controller, :key]
|
22
52
|
|
23
53
|
## Contributing
|
24
54
|
|
data/lib/aerials.rb
CHANGED
@@ -13,10 +13,10 @@ class Aerials
|
|
13
13
|
if struct.is_a? Hash
|
14
14
|
struct = struct.clone
|
15
15
|
exclude.each { |key| struct.delete(key) }
|
16
|
-
struct = struct.sort
|
16
|
+
struct = struct.sort rescue struct
|
17
17
|
"{#{ struct.map{|elem| "#{to_val elem[0]}:#{to_val elem[1]}"}.join(',') }}"
|
18
18
|
elsif struct.is_a? Array
|
19
|
-
struct = struct.clone.sort
|
19
|
+
struct = struct.clone.map!{|el| el.is_a?(Symbol)? el.to_s : el }.sort
|
20
20
|
"[#{ struct.map{|elem| to_val elem }.join(',') }]"
|
21
21
|
elsif struct.respond_to? :to_s
|
22
22
|
struct.to_s
|
@@ -31,9 +31,9 @@ class Aerials
|
|
31
31
|
if elem.is_a?(Hash) || elem.is_a?(Array)
|
32
32
|
self.create_json(elem)
|
33
33
|
elsif elem.is_a?(String)
|
34
|
-
"
|
34
|
+
"\"#{ elem.to_s.gsub('"','\"') }\""
|
35
35
|
else
|
36
|
-
"
|
36
|
+
"\"#{ elem.to_s }\""
|
37
37
|
end
|
38
38
|
end
|
39
39
|
end
|
data/lib/aerials/version.rb
CHANGED
data/spec/aerials_spec.rb
CHANGED
@@ -8,7 +8,7 @@ describe Aerials do
|
|
8
8
|
'symbol keys & vals' => {:key_a => :val_a, :key_b => :val_b}
|
9
9
|
}.each do |type, struct|
|
10
10
|
it "processes plain hash with #{type} correctly" do
|
11
|
-
expect(Aerials.create_json struct).to eq "
|
11
|
+
expect(Aerials.create_json struct).to eq '{"key_a":"val_a","key_b":"val_b"}'
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
@@ -17,18 +17,18 @@ describe Aerials do
|
|
17
17
|
'symbol vals' => [:val_a, :val_b]
|
18
18
|
}.each do |type, struct|
|
19
19
|
it "processes plain array with #{type} correctly" do
|
20
|
-
expect(Aerials.create_json struct).to eq "
|
20
|
+
expect(Aerials.create_json struct).to eq '["val_a","val_b"]'
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
24
|
it 'sorts hash keys' do
|
25
25
|
struct = {'b' => 'c', 'c' => 'z', 'a' => 'g'}
|
26
|
-
expect(Aerials.create_json struct).to eq "
|
26
|
+
expect(Aerials.create_json struct).to eq '{"a":"g","b":"c","c":"z"}'
|
27
27
|
end
|
28
28
|
|
29
29
|
it 'sorts array' do
|
30
30
|
struct = ['b', 'c', 'a']
|
31
|
-
expect(Aerials.create_json struct).to eq "
|
31
|
+
expect(Aerials.create_json struct).to eq '["a","b","c"]'
|
32
32
|
end
|
33
33
|
|
34
34
|
it 'processes nested hash' do
|
@@ -37,7 +37,7 @@ describe Aerials do
|
|
37
37
|
'key_e' => 'val_e' }
|
38
38
|
expect(
|
39
39
|
Aerials.create_json struct
|
40
|
-
).to eq "
|
40
|
+
).to eq '{"key_a":"val_a","key_b":{"key_c":"val_c","key_d":"val_d"},"key_e":"val_e"}'
|
41
41
|
end
|
42
42
|
|
43
43
|
it 'processes nested array' do
|
@@ -46,29 +46,29 @@ describe Aerials do
|
|
46
46
|
'key_e' => 'val_e' }
|
47
47
|
expect(
|
48
48
|
Aerials.create_json struct
|
49
|
-
).to eq "
|
49
|
+
).to eq '{"key_a":"val_a","key_b":["val_c","val_d"],"key_e":"val_e"}'
|
50
50
|
end
|
51
51
|
|
52
52
|
it 'quotes numbers in array' do
|
53
53
|
struct = [1, 2]
|
54
|
-
expect(Aerials.create_json struct).to eq "
|
54
|
+
expect(Aerials.create_json struct).to eq '["1","2"]'
|
55
55
|
end
|
56
56
|
|
57
57
|
it 'quotes numbers' do
|
58
58
|
struct = { 1 => 2, 3 => 4 }
|
59
|
-
expect(Aerials.create_json struct).to eq "
|
59
|
+
expect(Aerials.create_json struct).to eq '{"1":"2","3":"4"}'
|
60
60
|
end
|
61
61
|
|
62
62
|
it 'excludes keys' do
|
63
63
|
struct = {'b' => 'c', 'c' => 'z', 'a' => 'g', 'd' => 'e'}
|
64
|
-
expect(Aerials.create_json struct, exclude: ['c', 'd']).to eq "
|
64
|
+
expect(Aerials.create_json struct, exclude: ['c', 'd']).to eq '{"a":"g","b":"c"}'
|
65
65
|
end
|
66
66
|
|
67
67
|
it 'excludes controller & action for Rails' do
|
68
68
|
struct = { action: 'action',
|
69
69
|
controller: 'controller',
|
70
70
|
data: 'some data'}
|
71
|
-
expect(Aerials.create_json_rails struct).to eq "
|
71
|
+
expect(Aerials.create_json_rails struct).to eq '{"data":"some data"}'
|
72
72
|
end
|
73
73
|
end
|
74
74
|
end
|
data/spec/json_spec.rb
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper.rb'
|
2
|
+
require 'json'
|
3
|
+
|
4
|
+
describe Aerials do
|
5
|
+
context 'create_json' do
|
6
|
+
{
|
7
|
+
'string array' => [
|
8
|
+
['val_a', 'val_b'],
|
9
|
+
['val_a', 'val_b']
|
10
|
+
],
|
11
|
+
'symbol array' => [
|
12
|
+
[:val_a, :val_b],
|
13
|
+
['val_a', 'val_b']
|
14
|
+
],
|
15
|
+
'mixed array' => [
|
16
|
+
['val_a', :val_b],
|
17
|
+
['val_a', 'val_b']
|
18
|
+
],
|
19
|
+
'string hash' => [
|
20
|
+
{'b' => 'c', 'c' => 'z', 'a' => 'g'},
|
21
|
+
{'b' => 'c', 'c' => 'z', 'a' => 'g'}
|
22
|
+
],
|
23
|
+
'hash with symbol keys' => [
|
24
|
+
{:b => 'c', :c => 'z', :a => 'g'},
|
25
|
+
{'b' => 'c', 'c' => 'z', 'a' => 'g'}
|
26
|
+
],
|
27
|
+
'symbol hash' => [
|
28
|
+
{:b => :c, :c => :z, :a => :g},
|
29
|
+
{'b' => 'c', 'c' => 'z', 'a' => 'g'}
|
30
|
+
],
|
31
|
+
'nested' => [
|
32
|
+
{:b => :c, 'c' => [:z, 'y'], :a => {:g => :d}},
|
33
|
+
{'b' => 'c', 'c' => ['y', 'z'], 'a' => {'g' => 'd'}},
|
34
|
+
]
|
35
|
+
}.each do |type, struct|
|
36
|
+
it "creates parsable json from #{type}" do
|
37
|
+
expect(JSON.parse(Aerials.create_json struct[0])).to eq struct[1]
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: aerials
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Roman Exempliarov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-11-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -68,6 +68,7 @@ files:
|
|
68
68
|
- lib/aerials.rb
|
69
69
|
- lib/aerials/version.rb
|
70
70
|
- spec/aerials_spec.rb
|
71
|
+
- spec/json_spec.rb
|
71
72
|
- spec/spec_helper.rb
|
72
73
|
homepage: https://github.com/appelsin/aerials
|
73
74
|
licenses:
|
@@ -95,4 +96,5 @@ specification_version: 4
|
|
95
96
|
summary: Sorted json generator. Use it for hash signing.
|
96
97
|
test_files:
|
97
98
|
- spec/aerials_spec.rb
|
99
|
+
- spec/json_spec.rb
|
98
100
|
- spec/spec_helper.rb
|