pigeon_hole 0.0.1 → 0.0.2

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.
Files changed (56) hide show
  1. checksums.yaml +4 -4
  2. data/lib/pigeon_hole/json_date_time.rb +4 -17
  3. data/lib/pigeon_hole/monster-vim-2016-07-25-16-44-46.rb +29 -0
  4. data/lib/pigeon_hole/monster-vim-2016-07-25-16-44-47.rb +29 -0
  5. data/lib/pigeon_hole/monster-vim-2016-07-25-16-44-58.rb +41 -0
  6. data/lib/pigeon_hole/monster-vim-2016-07-25-16-47-02.rb +41 -0
  7. data/lib/pigeon_hole/monster-vim-2016-07-25-16-47-08.rb +41 -0
  8. data/lib/pigeon_hole/monster-vim-2016-07-25-16-47-09.rb +41 -0
  9. data/lib/pigeon_hole/monster-vim-2016-07-25-16-47-10.rb +41 -0
  10. data/lib/pigeon_hole/monster-vim-2016-07-25-16-47-35.rb +29 -0
  11. data/lib/pigeon_hole/monster-vim-2016-07-25-16-47-36.rb +29 -0
  12. data/lib/pigeon_hole/monster-vim-2016-07-25-16-47-37.rb +29 -0
  13. data/lib/pigeon_hole/monster-vim-2016-07-25-16-47-38.rb +29 -0
  14. data/lib/pigeon_hole/monster-vim-2016-07-26-10-09-11.rb +41 -0
  15. data/lib/pigeon_hole/monster-vim-2016-07-26-10-09-41.rb +34 -0
  16. data/lib/pigeon_hole/monster-vim-2016-07-26-10-09-42.rb +34 -0
  17. data/lib/pigeon_hole/monster-vim-2016-07-26-10-11-26.rb +35 -0
  18. data/lib/pigeon_hole/monster-vim-2016-07-26-10-15-33.rb +39 -0
  19. data/lib/pigeon_hole/monster-vim-2016-07-26-10-15-46.rb +40 -0
  20. data/lib/pigeon_hole/monster-vim-2016-07-26-10-15-57.rb +37 -0
  21. data/lib/pigeon_hole/monster-vim-2016-07-26-10-16-03.rb +27 -0
  22. data/lib/pigeon_hole/monster-vim-2016-07-26-10-16-04.rb +27 -0
  23. data/lib/pigeon_hole/monster-vim-2016-07-26-10-16-05.rb +27 -0
  24. data/lib/pigeon_hole/monster-vim-2016-07-26-10-17-22.rb +28 -0
  25. data/lib/pigeon_hole/monster-vim-2016-07-26-10-17-23.rb +28 -0
  26. data/lib/pigeon_hole/monster-vim-2016-07-26-10-19-14.rb +28 -0
  27. data/lib/pigeon_hole/monster-vim-2016-07-26-10-20-50.rb +28 -0
  28. data/lib/pigeon_hole/monster-vim-2016-07-26-10-20-52.rb +28 -0
  29. data/lib/pigeon_hole/monster-vim-2016-07-26-10-20-53.rb +28 -0
  30. data/lib/pigeon_hole/monster-vim-2016-07-26-10-26-57.rb +42 -0
  31. data/lib/pigeon_hole/monster-vim-2016-07-26-10-26-58.rb +42 -0
  32. data/lib/pigeon_hole/monster-vim-2016-07-26-10-27-58.rb +42 -0
  33. data/lib/pigeon_hole/monster-vim-2016-07-26-10-27-59.rb +42 -0
  34. data/lib/pigeon_hole/monster-vim-2016-07-26-10-33-40.rb +42 -0
  35. data/lib/pigeon_hole/monster-vim-2016-07-26-10-33-41.rb +42 -0
  36. data/lib/pigeon_hole/monster-vim-2016-07-26-10-33-42.rb +42 -0
  37. data/lib/pigeon_hole/monster-vim-2016-07-26-10-33-53.rb +42 -0
  38. data/lib/pigeon_hole/monster-vim-2016-07-26-10-37-07.rb +42 -0
  39. data/lib/pigeon_hole/monster-vim-2016-07-26-10-37-08.rb +42 -0
  40. data/lib/pigeon_hole/monster-vim-2016-07-26-10-37-09.rb +42 -0
  41. data/lib/pigeon_hole/monster-vim-2016-07-26-10-37-20.rb +44 -0
  42. data/lib/pigeon_hole/monster-vim-2016-07-26-10-37-21.rb +44 -0
  43. data/lib/pigeon_hole/monster-vim-2016-07-26-10-37-22.rb +44 -0
  44. data/lib/pigeon_hole/monster-vim-2016-07-26-10-37-23.rb +44 -0
  45. data/lib/pigeon_hole/monster-vim-2016-07-26-10-37-24.rb +44 -0
  46. data/lib/pigeon_hole/monster-vim-2016-07-26-10-37-25.rb +44 -0
  47. data/lib/pigeon_hole/monster-vim-2016-07-26-10-38-26.rb +53 -0
  48. data/lib/pigeon_hole/monster-vim-2016-07-26-10-38-27.rb +53 -0
  49. data/lib/pigeon_hole/monster-vim-2016-07-26-10-38-28.rb +53 -0
  50. data/lib/pigeon_hole/monster-vim-2016-07-26-10-38-29.rb +53 -0
  51. data/lib/pigeon_hole/monster-vim-2016-07-26-10-39-14.rb +53 -0
  52. data/lib/pigeon_hole/typed_json.rb +13 -0
  53. data/spec/integration_spec.rb +18 -0
  54. data/spec/monster-vim-2016-07-26-10-29-02.rb +117 -0
  55. data/spec/monster-vim-2016-07-26-10-29-53.rb +118 -0
  56. metadata +55 -2
@@ -0,0 +1,53 @@
1
+ require 'json'
2
+
3
+ module PigeonHole
4
+ class TypedJSON
5
+ def self.generate(obj, *args)
6
+ hash_dup = each_with_parent(obj)
7
+ JSON.generate(hash_dup, *args)
8
+ end
9
+
10
+ def self.map_to_json(obj)
11
+ case obj
12
+ when Time
13
+ JSONTime.new(obj)
14
+ when DateTime
15
+ JSONDateTime.new(obj)
16
+ when Date
17
+ JSONDate.new(obj)
18
+ when Symbol
19
+ JSONSymbol.new(obj)
20
+ else
21
+ obj
22
+ end
23
+ end
24
+
25
+ def self.map_array_value(value)
26
+ case value
27
+ when Hash
28
+ each_with_parent(value)
29
+ when Array
30
+ value.map_array_value
31
+ else
32
+ map_to_json(value)
33
+ end
34
+ end
35
+
36
+ def self.each_with_parent(hash, result=nil)
37
+ duplicated_hash = {} || result
38
+
39
+ hash.each do |k, v|
40
+ case v
41
+ when Hash
42
+ duplicated_hash[k] = each_with_parent(v, duplicated_hash)
43
+ when Array
44
+ duplicated_hash[k] = v.map { |av| map_to_json(av) map_to_json(av) }.to_a
45
+ else
46
+ duplicated_hash[k] = map_to_json(v)
47
+ end
48
+ end
49
+
50
+ duplicated_hash
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,53 @@
1
+ require 'json'
2
+
3
+ module PigeonHole
4
+ class TypedJSON
5
+ def self.generate(obj, *args)
6
+ hash_dup = each_with_parent(obj)
7
+ JSON.generate(hash_dup, *args)
8
+ end
9
+
10
+ def self.map_to_json(obj)
11
+ case obj
12
+ when Time
13
+ JSONTime.new(obj)
14
+ when DateTime
15
+ JSONDateTime.new(obj)
16
+ when Date
17
+ JSONDate.new(obj)
18
+ when Symbol
19
+ JSONSymbol.new(obj)
20
+ else
21
+ obj
22
+ end
23
+ end
24
+
25
+ def self.map_array_value(value)
26
+ case value
27
+ when Hash
28
+ each_with_parent(value)
29
+ when Array
30
+ value.mamap_array_value
31
+ else
32
+ map_to_json(value)
33
+ end
34
+ end
35
+
36
+ def self.each_with_parent(hash, result=nil)
37
+ duplicated_hash = {} || result
38
+
39
+ hash.each do |k, v|
40
+ case v
41
+ when Hash
42
+ duplicated_hash[k] = each_with_parent(v, duplicated_hash)
43
+ when Array
44
+ duplicated_hash[k] = v.map { |av| map_to_json(av) map_to_json(av) }.to_a
45
+ else
46
+ duplicated_hash[k] = map_to_json(v)
47
+ end
48
+ end
49
+
50
+ duplicated_hash
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,53 @@
1
+ require 'json'
2
+
3
+ module PigeonHole
4
+ class TypedJSON
5
+ def self.generate(obj, *args)
6
+ hash_dup = each_with_parent(obj)
7
+ JSON.generate(hash_dup, *args)
8
+ end
9
+
10
+ def self.map_to_json(obj)
11
+ case obj
12
+ when Time
13
+ JSONTime.new(obj)
14
+ when DateTime
15
+ JSONDateTime.new(obj)
16
+ when Date
17
+ JSONDate.new(obj)
18
+ when Symbol
19
+ JSONSymbol.new(obj)
20
+ else
21
+ obj
22
+ end
23
+ end
24
+
25
+ def self.map_array_value(value)
26
+ case value
27
+ when Hash
28
+ each_with_parent(value)
29
+ when Array
30
+ value.map(&:map_array_value)
31
+ else
32
+ map_to_json(value)
33
+ end
34
+ end
35
+
36
+ def self.each_with_parent(hash, result=nil)
37
+ duplicated_hash = {} || result
38
+
39
+ hash.each do |k, v|
40
+ case v
41
+ when Hash
42
+ duplicated_hash[k] = each_with_parent(v, duplicated_hash)
43
+ when Array
44
+ duplicated_hash[k] = v.map
45
+ else
46
+ duplicated_hash[k] = map_to_json(v)
47
+ end
48
+ end
49
+
50
+ duplicated_hash
51
+ end
52
+ end
53
+ end
@@ -22,6 +22,17 @@ module PigeonHole
22
22
  end
23
23
  end
24
24
 
25
+ def self.map_array_value(value)
26
+ case value
27
+ when Hash
28
+ each_with_parent(value)
29
+ when Array
30
+ value.map { |av| map_array_value(av) }
31
+ else
32
+ map_to_json(value)
33
+ end
34
+ end
35
+
25
36
  def self.each_with_parent(hash, result=nil)
26
37
  duplicated_hash = {} || result
27
38
 
@@ -29,6 +40,8 @@ module PigeonHole
29
40
  case v
30
41
  when Hash
31
42
  duplicated_hash[k] = each_with_parent(v, duplicated_hash)
43
+ when Array
44
+ duplicated_hash[k] = v.map { |av| map_array_value(av) }
32
45
  else
33
46
  duplicated_hash[k] = map_to_json(v)
34
47
  end
@@ -73,6 +73,24 @@ describe "serializing symbols" do
73
73
  end
74
74
  end
75
75
 
76
+ describe "serializing arrays" do
77
+ let(:array) { [:a_symbol, { "test" => :foo } ] }
78
+
79
+ subject { PigeonHole.generate(array: array) }
80
+
81
+ it "serializes hash into a string" do
82
+ result = subject
83
+ expect(result).to_not be_empty
84
+ end
85
+
86
+ it "can be deserialized to a array" do
87
+ result = subject
88
+ hash = PigeonHole.parse(result)
89
+ expect(hash).to eq({ "array" => array })
90
+ expect(hash["array"]).to be_a(Array)
91
+ end
92
+ end
93
+
76
94
  describe "serializing nested hashes" do
77
95
  let(:expected) do
78
96
  {
@@ -0,0 +1,117 @@
1
+ require 'spec_helper'
2
+
3
+ describe "serializing dates" do
4
+ let(:date) { random_date }
5
+
6
+ subject { PigeonHole.generate(date: date) }
7
+
8
+ it "serializes hash into a string" do
9
+ result = subject
10
+ expect(result).to_not be_empty
11
+ end
12
+
13
+ it "can be deserialized to a date time" do
14
+ result = subject
15
+ hash = PigeonHole.parse(result)
16
+ expect(hash).to eq({ "date" => date })
17
+ expect(hash["date"]).to be_a(Date)
18
+ end
19
+ end
20
+
21
+ describe "serializing times" do
22
+ let(:time) { random_time }
23
+
24
+ subject { PigeonHole.generate(time: time) }
25
+
26
+ it "serializes hash into a string" do
27
+ result = subject
28
+ expect(result).to_not be_empty
29
+ end
30
+
31
+ it "can be deserialized to a time" do
32
+ result = subject
33
+ hash = PigeonHole.parse(result)
34
+ expect(hash).to eq({ "time" => time })
35
+ expect(hash["time"]).to be_a(Time)
36
+ end
37
+ end
38
+
39
+ describe "serializing datetimes" do
40
+ let(:date_time) { random_date_time }
41
+
42
+ subject { PigeonHole.generate(date_time: date_time) }
43
+
44
+ it "serializes hash into a string" do
45
+ result = subject
46
+ expect(result).to_not be_empty
47
+ end
48
+
49
+ it "can be deserialized to a date_time" do
50
+ result = subject
51
+ hash = PigeonHole.parse(result)
52
+ expect(hash["date_time"]).to be_a(DateTime)
53
+ expect(hash["date_time"].to_date).to eq(date_time.to_date)
54
+ expect(hash["date_time"].to_time.to_i).to eq(date_time.to_time.to_i)
55
+ end
56
+ end
57
+
58
+ describe "serializing symbols" do
59
+ let(:symbol) { :a_symbol }
60
+
61
+ subject { PigeonHole.generate(symbol: symbol) }
62
+
63
+ it "serializes hash into a string" do
64
+ result = subject
65
+ expect(result).to_not be_empty
66
+ end
67
+
68
+ it "can be deserialized to a symbol" do
69
+ result = subject
70
+ hash = PigeonHole.parse(result)
71
+ expect(hash).to eq({ "symbol" => symbol })
72
+ expect(hash["symbol"]).to be_a(Symbol)
73
+ end
74
+ end
75
+
76
+ describe "serializing arrays" do
77
+ let(:symbol) { [:a_symbol] }
78
+
79
+ subject { PigeonHole.generate(symbol: symbol) }
80
+
81
+ it "serializes hash into a string" do
82
+ result = subject
83
+ expect(result).to_not be_empty
84
+ end
85
+
86
+ it "can be deserialized to a symbol" do
87
+ result = subject
88
+ hash = PigeonHole.parse(result)
89
+ expect(hash).to eq({ "symbol" => symbol })
90
+ expect(hash["symbol"].first).to be_a(Symbol)
91
+ end
92
+ end
93
+
94
+ describe "serializing nested hashes" do
95
+ let(:expected) do
96
+ {
97
+ foo: {
98
+ bar: random_time,
99
+ baz: :temp
100
+ }
101
+ }
102
+ end
103
+
104
+ subject { PigeonHole.generate(expected) }
105
+
106
+ it "serializes hash into a string" do
107
+ result = subject
108
+ expect(result).to_not be_empty
109
+ end
110
+
111
+ it "can be deserialized to a symbol" do
112
+ result = subject
113
+ hash = PigeonHole.parse(result)
114
+
115
+ expect(symbolize_hash(hash)).to eq(expected)
116
+ end
117
+ end
@@ -0,0 +1,118 @@
1
+ require 'spec_helper'
2
+
3
+ describe "serializing dates" do
4
+ let(:date) { random_date }
5
+
6
+ subject { PigeonHole.generate(date: date) }
7
+
8
+ it "serializes hash into a string" do
9
+ result = subject
10
+ expect(result).to_not be_empty
11
+ end
12
+
13
+ it "can be deserialized to a date time" do
14
+ result = subject
15
+ hash = PigeonHole.parse(result)
16
+ expect(hash).to eq({ "date" => date })
17
+ expect(hash["date"]).to be_a(Date)
18
+ end
19
+ end
20
+
21
+ describe "serializing times" do
22
+ let(:time) { random_time }
23
+
24
+ subject { PigeonHole.generate(time: time) }
25
+
26
+ it "serializes hash into a string" do
27
+ result = subject
28
+ expect(result).to_not be_empty
29
+ end
30
+
31
+ it "can be deserialized to a time" do
32
+ result = subject
33
+ hash = PigeonHole.parse(result)
34
+ expect(hash).to eq({ "time" => time })
35
+ expect(hash["time"]).to be_a(Time)
36
+ end
37
+ end
38
+
39
+ describe "serializing datetimes" do
40
+ let(:date_time) { random_date_time }
41
+
42
+ subject { PigeonHole.generate(date_time: date_time) }
43
+
44
+ it "serializes hash into a string" do
45
+ result = subject
46
+ expect(result).to_not be_empty
47
+ end
48
+
49
+ it "can be deserialized to a date_time" do
50
+ result = subject
51
+ hash = PigeonHole.parse(result)
52
+ expect(hash["date_time"]).to be_a(DateTime)
53
+ expect(hash["date_time"].to_date).to eq(date_time.to_date)
54
+ expect(hash["date_time"].to_time.to_i).to eq(date_time.to_time.to_i)
55
+ end
56
+ end
57
+
58
+ describe "serializing symbols" do
59
+ let(:symbol) { :a_symbol }
60
+
61
+ subject { PigeonHole.generate(symbol: symbol) }
62
+
63
+ it "serializes hash into a string" do
64
+ result = subject
65
+ expect(result).to_not be_empty
66
+ end
67
+
68
+ it "can be deserialized to a symbol" do
69
+ result = subject
70
+ hash = PigeonHole.parse(result)
71
+ expect(hash).to eq({ "symbol" => symbol })
72
+ expect(hash["symbol"]).to be_a(Symbol)
73
+ end
74
+ end
75
+
76
+ describe "serializing arrays" do
77
+ let(:symbol) { [:a_symbol] }
78
+
79
+ subject { PigeonHole.generate(symbol: symbol) }
80
+
81
+ it "serializes hash into a string" do
82
+ result = subject
83
+ expect(result).to_not be_empty
84
+ end
85
+
86
+ it "can be deserialized to a symbol" do
87
+ result = subject
88
+ hash = PigeonHole.parse(result)
89
+ expect(hash).to eq({ [ "symbol" => symbol ] })
90
+ expect(hash["symbol"]).to
91
+ expect(hash["symbol"].first).to be_a(Symbol)
92
+ end
93
+ end
94
+
95
+ describe "serializing nested hashes" do
96
+ let(:expected) do
97
+ {
98
+ foo: {
99
+ bar: random_time,
100
+ baz: :temp
101
+ }
102
+ }
103
+ end
104
+
105
+ subject { PigeonHole.generate(expected) }
106
+
107
+ it "serializes hash into a string" do
108
+ result = subject
109
+ expect(result).to_not be_empty
110
+ end
111
+
112
+ it "can be deserialized to a symbol" do
113
+ result = subject
114
+ hash = PigeonHole.parse(result)
115
+
116
+ expect(symbolize_hash(hash)).to eq(expected)
117
+ end
118
+ end