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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: dfeb52aadb8fbd51583379067ea0917411b66038
4
- data.tar.gz: e47d08335dc26865205bfae7f40735cfd96bd4fb
3
+ metadata.gz: dc24615c4e2f6e21790e36209bb2a4a2716df8d0
4
+ data.tar.gz: c2054bb6d80b95f598ffb4277e6316c17d59cc33
5
5
  SHA512:
6
- metadata.gz: 3f8cd1663a37bfcccfa7a43175f562324873fc183b94492c09bfe219df8bd764692f140c8c2cc4758549505ea109c487e5d626043c50c7c0d16cdf190a38744b
7
- data.tar.gz: a88207e5f1cd99a4681356353a1cccfbb6101e95f81ad9b3c96d92814d37e273dd442df08bec811c0018890564ca7892cc4a11a1c1cd3025687c12cccfc944ab
6
+ metadata.gz: 226875170e3e5070e6535578995cde8967dd1e42820dd205e08da42ef58bd0cb55c51d002466012418d5b928e97c407f6a56295050651e59df22871d5a4ce16a
7
+ data.tar.gz: d2de277775e553156063f7243dd0dc3b517b3b0c7f055a4bdb97eebc5fe5cf5c7dda5650556a4785f94de0e1ac9373948b3c38596aaa75010dfb3d37d1a95058
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Aerials
2
2
 
3
- TODO: Write a gem description
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
- TODO: Write usage instructions here
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
 
@@ -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
- "'#{ elem.to_s.gsub("'","\\'") }'"
34
+ "\"#{ elem.to_s.gsub('"','\"') }\""
35
35
  else
36
- "'#{ elem.to_s }'"
36
+ "\"#{ elem.to_s }\""
37
37
  end
38
38
  end
39
39
  end
@@ -1,3 +1,3 @@
1
1
  class Aerials
2
- VERSION = "0.0.2"
2
+ VERSION = "0.1.0"
3
3
  end
@@ -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 "{'key_a':'val_a','key_b':'val_b'}"
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 "['val_a','val_b']"
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 "{'a':'g','b':'c','c':'z'}"
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 "['a','b','c']"
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 "{'key_a':'val_a','key_b':{'key_c':'val_c','key_d':'val_d'},'key_e':'val_e'}"
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 "{'key_a':'val_a','key_b':['val_c','val_d'],'key_e':'val_e'}"
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 "['1','2']"
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 "{'1':'2','3':'4'}"
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 "{'a':'g','b':'c'}"
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 "{'data':'some data'}"
71
+ expect(Aerials.create_json_rails struct).to eq '{"data":"some data"}'
72
72
  end
73
73
  end
74
74
  end
@@ -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.2
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-09-24 00:00:00.000000000 Z
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