aerials 0.0.2 → 0.1.0

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.
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