higcm 0.0.3 → 0.0.4

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.
data/higcm.gemspec CHANGED
@@ -4,9 +4,9 @@ $:.unshift File.expand_path('../lib', __FILE__)
4
4
 
5
5
  Gem::Specification.new do |s|
6
6
  s.name = "higcm"
7
- s.version = "0.0.3"
7
+ s.version = "0.0.4"
8
8
  s.authors = ["hifrank"]
9
- s.email = "frank_chen@htc.com"
9
+ s.email = "r7692118@gmail.com"
10
10
  s.homepage = "https://github.com/hifrank/higcm"
11
11
  s.summary = "ruby wrapper for GCM google cloud messaging."
12
12
  s.description = %q{ruby wrapper for GCM google cloud messaging.}
data/lib/higcm/sender.rb CHANGED
@@ -8,9 +8,9 @@ module HiGCM
8
8
  attr_accessor :api_key, :api_status, :hydra, :requests
9
9
 
10
10
  OPTIONAL_OPTIONS = {
11
- :collapse_key => String,
12
- :data => Hash,
13
- :delay_while_idle => Fixnum,
11
+ :collapse_key => String,
12
+ :data => Hash,
13
+ :delay_while_idle => [true, false],
14
14
  :time_to_live => Fixnum
15
15
  }
16
16
 
@@ -41,7 +41,23 @@ module HiGCM
41
41
  #fill up option
42
42
  OPTIONAL_OPTIONS.each do | key, type |
43
43
  if opts.key?(key)
44
- raise SenderError.new("#{key} should be Type #{type}") unless opts[key].is_a?(type)
44
+ if type.is_a?(Array)
45
+ @valid_value = false
46
+ type.each do | v |
47
+ if opts[key] == v
48
+ @valid_value = true
49
+ break
50
+ end
51
+ end
52
+ raise SenderError.new("#{key} should be Type #{type}") unless @valid_value
53
+ else
54
+ raise SenderError.new("#{key} should be Type #{type}") unless opts[key].is_a?(type)
55
+ end
56
+ # convert payload data to String for issue #3
57
+ case key
58
+ when :data
59
+ opts[key] = convert_hash(opts[key])
60
+ end
45
61
  body[key] = opts[key]
46
62
  end
47
63
  end
@@ -70,5 +86,19 @@ module HiGCM
70
86
  @hydra.run
71
87
  end
72
88
 
89
+ def convert_hash(hash)
90
+ hash.each do | k, v |
91
+ if v.is_a?(Hash)
92
+ hash[k] = convert_hash(v)
93
+ else
94
+ if v.respond_to?(:to_s)
95
+ hash[k] = v.to_s
96
+ else
97
+ raise SenderError "data value must respond to to_s function for converting to String"
98
+ end
99
+ end
100
+ end
101
+ end
102
+
73
103
  end
74
104
  end
@@ -67,14 +67,46 @@ describe HiGCM::Sender do
67
67
  expect { @sender.send_async(@registration_ids, {:data => {} }, HiGCM::Handler.new) }.not_to raise_error(HiGCM::SenderError)
68
68
  end
69
69
 
70
+ it "should convert all opts[:data] to String" do
71
+ test_value = 1
72
+ rs = JSON.parse(@sender.send_async(@registration_ids, {:data => {:name => test_value} }, HiGCM::Handler.new).body)
73
+ rs["data"]["name"].should == "1"
74
+ end
75
+
70
76
  it "should raise exception if opts[:delay_while_idle] && opts[:time_to_live] is not Fixnum" do
71
77
  expect { @sender.send_async(@registration_ids, {:delay_while_idle => [] }, HiGCM::Handler.new) }.to raise_error(HiGCM::SenderError)
72
- expect { @sender.send_async(@registration_ids, {:delay_while_idle => 1 }, HiGCM::Handler.new) }.not_to raise_error(HiGCM::SenderError)
78
+ expect { @sender.send_async(@registration_ids, {:delay_while_idle => true }, HiGCM::Handler.new) }.not_to raise_error(HiGCM::SenderError)
73
79
  expect { @sender.send_async(@registration_ids, {:time_to_live => [] }, HiGCM::Handler.new) }.to raise_error(HiGCM::SenderError)
74
80
  expect { @sender.send_async(@registration_ids, {:time_to_live => 1 }, HiGCM::Handler.new) }.not_to raise_error(HiGCM::SenderError)
75
81
  end
76
82
  end
77
83
 
84
+ describe "#convert_hash" do
85
+ it "should convert all the Hash value to String according to to_s function" do
86
+ sample = {
87
+ :name => 'frank',
88
+ :age => 32,
89
+ :setting => {
90
+ 'gundam' => true,
91
+ 'style' => {
92
+ :color => 1
93
+ }
94
+ }
95
+ }
96
+ expected_sample = {
97
+ :name => 'frank',
98
+ :age => 32.to_s,
99
+ :setting => {
100
+ 'gundam' => true.to_s,
101
+ 'style' => {
102
+ :color => 1.to_s
103
+ }
104
+ }
105
+ }
106
+ @sender.convert_hash(sample).should == expected_sample
107
+ end
108
+ end
109
+
78
110
  describe "#send_async_run" do
79
111
  it "should run Typhoeus::Hydra when send requests" do
80
112
  hydra = double(Typhoeus::Hydra)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: higcm
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-07-31 00:00:00.000000000Z
12
+ date: 2012-08-10 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: typhoeus
16
- requirement: &2160619160 !ruby/object:Gem::Requirement
16
+ requirement: &2152835700 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 0.3.3
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *2160619160
24
+ version_requirements: *2152835700
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rspec
27
- requirement: &2160618400 !ruby/object:Gem::Requirement
27
+ requirement: &2152835200 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '2.6'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *2160618400
35
+ version_requirements: *2152835200
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: json
38
- requirement: &2160617000 !ruby/object:Gem::Requirement
38
+ requirement: &2152834720 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *2160617000
46
+ version_requirements: *2152834720
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rake
49
- requirement: &2160616060 !ruby/object:Gem::Requirement
49
+ requirement: &2152834240 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,9 +54,9 @@ dependencies:
54
54
  version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *2160616060
57
+ version_requirements: *2152834240
58
58
  description: ruby wrapper for GCM google cloud messaging.
59
- email: frank_chen@htc.com
59
+ email: r7692118@gmail.com
60
60
  executables: []
61
61
  extensions: []
62
62
  extra_rdoc_files: []