device_cloud 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -1,6 +1,8 @@
1
1
  # DeviceCloud
2
2
 
3
- TODO: Write a gem description
3
+ TODO:
4
+ - remove any assumptions about Device Cloud FileData contents .. probably should only parse them if asked
5
+ - add code for maintaining monitors
4
6
 
5
7
  ## Installation
6
8
 
@@ -20,6 +22,58 @@ Or install it yourself as:
20
22
 
21
23
  TODO: Write usage instructions here
22
24
 
25
+ ## Example Push Notification
26
+
27
+ ```json
28
+ {
29
+ "Document": {
30
+ "Msg": {
31
+ "timestamp": "2013-10-21T19:34:56Z",
32
+ "topic": "4044/FileData/db/4044_MadGlory_Interactive/00000000-00000000-001395FF-FF0E6017/event/parking_lot_event_exit-0966595cdcdd11e2abf50013950e6017.json",
33
+ "FileData": {
34
+ "id": {
35
+ "fdPath": " /db/4044_MadGlory_Interactive/00000000-00000000-001395FF-FF0E6017/event/",
36
+ "fdName": "parking_lot_event_exit-0966595cdcdd11e2abf50013950e6017.json"
37
+ },
38
+ "fdLastModifiedDate": "2013-10-21T19:34:56Z",
39
+ "fdSize": 545,
40
+ "fdContentType": "application/json",
41
+ "fdData": "eyJ2YWx1ZSI6eyJwbGF0ZSI6Ijk0MUdWVCIsImNvbmZpZGVuY2UiOiI5OSIsImNvdW50cnkiOiJVUyIsInRvd2FyZHNfY2FtZXJhIjoiZmFsc2UiLCJ0aW1lc3RhbXAiOiIyMDEzLTEwLTIxVDE0OjM0OjQwWiIsIm92ZXJ2aWV3X2ltYWdlX2lkIjoibG90X292ZXJ2aWV3X2NhcF8xMF8yMV8yMDEzXzE0MzQ0MC5qcGciLCJzdGF0ZSI6Ik1OIiwicGF0Y2hfaW1hZ2VfaWQiOiJsb3RfcGF0Y2hfY2FwXzEwXzIxXzIwMTNfMTQzNDQwLmpwZyJ9LCJjbGFzcyI6ImV2ZW50IiwicXVldWVkX2R0IjoiMjAxMy0xMC0yMVQxOTozNDo1NloiLCJ0eXBlIjoicGFya2luZ19sb3RfZXZlbnRfZXhpdCIsImlkIjoiZGQ5ZDU3MzYzYTg3MTFlM2E5YmQwMDEzOTUwZTYwMTciLCJkZXZpY2VfaWQiOiJtOjAwMTM5NTBFNjAxNyJ9",
42
+ "fdArchive": false,
43
+ "cstId": 4044,
44
+ "fdType": "event",
45
+ "fdCreatedDate": "2013-06-24T14:52:55.421Z"
46
+ },
47
+ "operation": "INSERTION",
48
+ "replay": true,
49
+ "group": "*"
50
+ }
51
+ }
52
+ }
53
+ ```
54
+
55
+ That notification's unencoded fdData:
56
+
57
+ ```json
58
+ {
59
+ "value": {
60
+ "plate": "941GVT",
61
+ "confidence": "99",
62
+ "country": "US",
63
+ "towards_camera": "false",
64
+ "timestamp": "2013-10-21T14:34:40Z",
65
+ "overview_image_id": "lot_overview_cap_10_21_2013_143440.jpg",
66
+ "state": "MN",
67
+ "patch_image_id": "lot_patch_cap_10_21_2013_143440.jpg"
68
+ },
69
+ "class": "event",
70
+ "queued_dt": "2013-10-21T19:34:56Z",
71
+ "type": "parking_lot_event_exit",
72
+ "id": "dd9d57363a8711e3a9bd0013950e6017",
73
+ "device_id": "m:0013950E6017"
74
+ }
75
+ ```
76
+
23
77
  ## Contributing
24
78
 
25
79
  1. Fork it
@@ -20,16 +20,33 @@ module DeviceCloud
20
20
  # Proc will be called with the event notification object
21
21
  attr_accessor :event_notification_handler
22
22
 
23
+ # Proc that will be called for handling
24
+ # DeviceCloud::PushNotification::EventNotification objects that
25
+ # do not contain file data (data too large - over 120KB)
26
+ # Proc will be called with the event notification object
27
+ attr_accessor :empty_event_notification_handler
28
+
23
29
  # Proc that will be called for handling
24
30
  # DeviceCloud::PushNotification::AlertNotification objects
25
31
  # Proc will be called with the alert notification object
26
32
  attr_accessor :alert_notification_handler
27
33
 
34
+ # Proc that will be called for handling
35
+ # DeviceCloud::PushNotification::AlertNotification objects that
36
+ # do not contain file data (data too large - over 120KB)
37
+ # Proc will be called with the alert notification object
38
+ attr_accessor :empty_alert_notification_handler
39
+
28
40
  # Proc that will be called for handling
29
41
  # DeviceCloud::PushNotification::DataNotification objects
30
42
  # Proc will be called with the data notification object
31
43
  attr_accessor :data_notification_handler
32
44
 
45
+ # Proc that will be called for handling
46
+ # DeviceCloud::PushNotification::DataNotification objects that
47
+ # do not contain file data (data too large - over 120KB)
48
+ # Proc will be called with the data notification object
49
+ attr_accessor :empty_data_notification_handler
33
50
 
34
51
  # Yield self to be able to configure ActivityFeed with
35
52
  # block-style configuration.
@@ -3,5 +3,9 @@ module DeviceCloud
3
3
  def handle!
4
4
  DeviceCloud.alert_notification_handler.call(self)
5
5
  end
6
+
7
+ def handle_no_content!
8
+ DeviceCloud.empty_alert_notification_handler.call(self)
9
+ end
6
10
  end
7
11
  end
@@ -7,6 +7,11 @@ module DeviceCloud
7
7
  event.handle!
8
8
  end
9
9
 
10
+ def self.handle_no_content!(file_data)
11
+ event = new(file_data)
12
+ event.hanlde_no_content!
13
+ end
14
+
10
15
  def initialize(file_data)
11
16
  @file_data = file_data
12
17
  @id = data["id"]
@@ -21,6 +26,10 @@ module DeviceCloud
21
26
  raise NotImplementedError
22
27
  end
23
28
 
29
+ def handle_no_content!
30
+ DeviceCloud.logger.info "DeviceCloud::PushNotification::BaseNotification - No FileData content - NotImplemented #{@full_path}"
31
+ end
32
+
24
33
  def file_name
25
34
  @file_data.file_name
26
35
  end
@@ -3,5 +3,9 @@ module DeviceCloud
3
3
  def handle!
4
4
  DeviceCloud.data_notification_handler.call(self)
5
5
  end
6
+
7
+ def handle_no_content!
8
+ DeviceCloud.empty_data_notification_handler.call(self)
9
+ end
6
10
  end
7
11
  end
@@ -3,5 +3,9 @@ module DeviceCloud
3
3
  def handle!
4
4
  DeviceCloud.event_notification_handler.call(self)
5
5
  end
6
+
7
+ def handle_no_content!
8
+ DeviceCloud.empty_event_notification_handler.call(self)
9
+ end
6
10
  end
7
11
  end
@@ -4,14 +4,14 @@ require 'base64'
4
4
  module DeviceCloud
5
5
  class PushNotification::Message::FileData
6
6
  attr_accessor :id, :fdLastModifiedDate, :fdSize, :fdContentType, :fdData, :fdArchive, :cstId, :fdType, :fdCreatedDate
7
- attr_reader :errors
7
+ attr_reader :no_content
8
8
 
9
9
  def initialize(attributes = {})
10
- @errors = []
10
+ @no_content = false
11
11
  attributes.each do |name, value|
12
12
  send("#{name}=", value)
13
13
  end
14
- DeviceCloud.logger.warn "DeviceCloud::PushNotification::Message::FileData Invalid (#{errors.join(',')}) - #{full_path}" unless valid?
14
+ validate_content!
15
15
  end
16
16
 
17
17
  def full_path
@@ -23,8 +23,7 @@ module DeviceCloud
23
23
  end
24
24
 
25
25
  def data
26
- return false unless valid?
27
- @data ||= if json_data?
26
+ @data ||= if json_data? && content?
28
27
  JSON.parse unencoded_data
29
28
  else
30
29
  unencoded_data
@@ -32,18 +31,21 @@ module DeviceCloud
32
31
  end
33
32
 
34
33
  def file_name
35
- return '' unless id
34
+ return '' unless id && id['fdName']
36
35
  id['fdName']
37
36
  end
38
37
 
39
38
  def file_path
40
- return '' unless id
39
+ return '' unless id && id['fdPath']
41
40
  id['fdPath']
42
41
  end
43
42
 
44
- def valid?
45
- return false if @errors.any?
46
- validate_content!
43
+ def no_content?
44
+ @no_content
45
+ end
46
+
47
+ def content?
48
+ !no_content?
47
49
  end
48
50
  private
49
51
  def json_data?
@@ -51,16 +53,11 @@ module DeviceCloud
51
53
  end
52
54
 
53
55
  def unencoded_data
54
- @unencoded_data ||= Base64.decode64(fdData)
56
+ @unencoded_data ||= no_content? ? '' : Base64.decode64(fdData)
55
57
  end
56
58
 
57
59
  def validate_content!
58
- if !fdData || fdData.size == 0 || fdSize.to_i < 1
59
- @errors << 'no content'
60
- false
61
- else
62
- true
63
- end
60
+ @no_content = !fdData || fdData.size == 0 || fdSize.to_i < 1
64
61
  end
65
62
  end
66
63
  end
@@ -2,8 +2,6 @@ module DeviceCloud
2
2
  class PushNotification::Message
3
3
  attr_accessor :timestamp, :topic, :file_data, :operation, :group, :replay
4
4
 
5
- ALLOWED_TOPICS = %w{alert event data}
6
-
7
5
  def self.parse_raw_messages(raw_message_data)
8
6
  if raw_message_data.is_a? Array
9
7
  messages = raw_message_data.map {|message| new(message) }
@@ -21,7 +19,7 @@ module DeviceCloud
21
19
  send("#{name}=", value)
22
20
  end
23
21
  end
24
- DeviceCloud.logger.warn "DeviceCloud::PushNotification::Message Invalid (no content) - #{topic}" unless valid?
22
+ DeviceCloud.logger.info "DeviceCloud::PushNotification::Message Invalid (no FileData) - #{topic}" unless valid?
25
23
  end
26
24
 
27
25
  def parsed_file_data
@@ -29,26 +27,12 @@ module DeviceCloud
29
27
  @parsed_file_data ||= FileData.new file_data
30
28
  end
31
29
 
32
- def valid?
33
- !!file_data && topic_allowed?
30
+ def no_content?
31
+ parsed_file_data.no_content?
34
32
  end
35
33
 
36
- def valid_parsed_file_data?
37
- parsed_file_data.valid?
38
- end
39
-
40
- def topic_type
41
- topic_matches.first
42
- end
43
-
44
- private
45
- def topic_allowed?
46
- return false if !topic
47
- topic_matches.any?
48
- end
49
-
50
- def topic_matches
51
- topic.split('/') & ALLOWED_TOPICS
34
+ def valid?
35
+ !!file_data
52
36
  end
53
37
  end
54
38
  end
@@ -8,11 +8,11 @@ module DeviceCloud
8
8
 
9
9
  def handle_each!
10
10
  messages.each do |message|
11
- next unless message.valid? && message.valid_parsed_file_data?
11
+ next unless message.valid?
12
12
 
13
13
  klass = class_type(message.topic_type)
14
-
15
- klass.handle!(message.parsed_file_data)
14
+
15
+ message.no_content? ? klass.handle_no_content!(message.parsed_file_data) : klass.handle!(message.parsed_file_data)
16
16
  end
17
17
  end
18
18
  private
@@ -1,3 +1,3 @@
1
1
  module DeviceCloud
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -5,7 +5,7 @@ describe DeviceCloud::PushNotification::BaseNotification do
5
5
  let(:raw_file_data) do
6
6
  {
7
7
  "id" => {
8
- "fdPath" => " /db/4044_MadGlory_Interactive/00000000-00000000-001395FF-FF0E6012/alert/",
8
+ "fdPath" => "/db/4044_MadGlory_Interactive/00000000-00000000-001395FF-FF0E6012/alert/",
9
9
  "fdName" => "foo-0966595cdcdd11e2abf50013950e6012.json"
10
10
  },
11
11
  "fdLastModifiedDate" => "2013-06-24T14:52:55.421Z",
@@ -42,6 +42,22 @@ describe DeviceCloud::PushNotification::BaseNotification do
42
42
  end
43
43
  end
44
44
 
45
+ describe "#handle_no_content!" do
46
+ let(:logger) { double('logger') }
47
+ before(:each) do
48
+ DeviceCloud.logger = logger
49
+ end
50
+
51
+ after(:each) do
52
+ DeviceCloud.logger = Logger.new(STDOUT)
53
+ end
54
+
55
+ it "should raise NotImplementedError" do
56
+ logger.should_receive(:info).with("DeviceCloud::PushNotification::BaseNotification - No FileData content - NotImplemented #{raw_file_data['id']['fdPath']}#{raw_file_data['id']['fdName']}")
57
+ subject.handle_no_content!
58
+ end
59
+ end
60
+
45
61
  describe "#mac_address" do
46
62
  context "when device_id present" do
47
63
  its(:mac_address) { should eq('00:13:95:0E:60:12') }
@@ -31,31 +31,59 @@ describe DeviceCloud::PushNotification::Message::FileData do
31
31
  its(:fdData) { should eq(raw_file_data["fdData"]) }
32
32
  end
33
33
 
34
- describe '#valid?' do
35
- context 'without content' do
36
- let(:raw_file_data) do
34
+ describe '#no_content?' do
35
+ let(:raw_file_data) do
36
+ {
37
+ "id" => {
38
+ "fdPath" => " /db/4044_MadGlory_Interactive/00000000-00000000-001395FF-FF0E6012/alert/",
39
+ "fdName" => "foo-0966595cdcdd11e2abf50013950e6012.json"
40
+ },
41
+ "fdLastModifiedDate" => "2013-06-24T14:52:55.421Z",
42
+ "fdSize" => 156,
43
+ "fdContentType" => "application/octet-stream",
44
+ "fdData" => fd_data_content,
45
+ "fdArchive" => false,
46
+ "cstId" => 4044,
47
+ "fdType" => "file",
48
+ "fdCreatedDate" => "2013-06-24T14:52:55.421Z"
49
+ }
50
+ end
51
+ subject { DeviceCloud::PushNotification::Message::FileData.new raw_file_data }
52
+
53
+ context 'when fdData blank' do
54
+ let(:fd_data_content) { '' }
55
+ its(:no_content?) { should be_true }
56
+ end
57
+
58
+ context 'when fdData null' do
59
+ let(:fd_data_content) { nil }
60
+ its(:no_content?) { should be_true }
61
+ end
62
+
63
+ context 'when fdData missing' do
64
+ let(:missing_fd_data) do
37
65
  {
38
66
  "id" => {
39
67
  "fdPath" => " /db/4044_MadGlory_Interactive/00000000-00000000-001395FF-FF0E6012/alert/",
40
68
  "fdName" => "foo-0966595cdcdd11e2abf50013950e6012.json"
41
69
  },
42
70
  "fdLastModifiedDate" => "2013-06-24T14:52:55.421Z",
43
- "fdSize" => 156,
71
+ "fdSize" => 0,
44
72
  "fdContentType" => "application/octet-stream",
45
- "fdData" => "",
46
73
  "fdArchive" => false,
47
74
  "cstId" => 4044,
48
75
  "fdType" => "file",
49
76
  "fdCreatedDate" => "2013-06-24T14:52:55.421Z"
50
77
  }
51
78
  end
79
+ subject { DeviceCloud::PushNotification::Message::FileData.new missing_fd_data }
80
+ its(:no_content?) { should be_true }
81
+ end
52
82
 
53
- subject { DeviceCloud::PushNotification::Message::FileData.new raw_file_data}
54
- its(:valid?) { should be_false }
55
- it "should set a 'no content' error" do
56
- subject.valid?
57
- expect(subject.errors.include?('no content')).to be_true
58
- end
83
+ context 'when fdData present' do
84
+ let(:fd_data_content) { 'jibberish' }
85
+ subject { DeviceCloud::PushNotification::Message::FileData.new raw_file_data }
86
+ its(:no_content) { should be_false }
59
87
  end
60
88
  end
61
89
 
@@ -66,10 +94,15 @@ describe DeviceCloud::PushNotification::Message::FileData do
66
94
  its(:file_path) { should eq raw_file_data['id']['fdPath'] }
67
95
  end
68
96
 
69
- context "when id blank" do
97
+ context "when id not present" do
70
98
  subject { DeviceCloud::PushNotification::Message::FileData.new raw_file_data.merge( 'id' => nil ) }
71
99
  its(:file_path) { should eq '' }
72
100
  end
101
+
102
+ context "when id blank" do
103
+ subject { DeviceCloud::PushNotification::Message::FileData.new raw_file_data.merge( 'id' => '' ) }
104
+ its(:file_path) { should eq '' }
105
+ end
73
106
  end
74
107
 
75
108
  describe "#file_name" do
@@ -79,14 +112,19 @@ describe DeviceCloud::PushNotification::Message::FileData do
79
112
  its(:file_name) { should eq raw_file_data['id']['fdName'] }
80
113
  end
81
114
 
82
- context "when id blank" do
115
+ context "when id not present" do
83
116
  subject { DeviceCloud::PushNotification::Message::FileData.new raw_file_data.merge( 'id' => nil ) }
84
117
  its(:file_name) { should eq '' }
85
118
  end
119
+
120
+ context "when id blank" do
121
+ subject { DeviceCloud::PushNotification::Message::FileData.new raw_file_data.merge( 'id' => '' ) }
122
+ its(:file_name) { should eq '' }
123
+ end
86
124
  end
87
125
 
88
126
  describe "#data" do
89
- context 'when valid' do
127
+ context 'when content present' do
90
128
  context "json content-type" do
91
129
  subject { DeviceCloud::PushNotification::Message::FileData.new raw_file_data }
92
130
  its(:data) { should eq(JSON.parse(Base64.decode64(raw_file_data['fdData']))) }
@@ -103,12 +141,12 @@ describe DeviceCloud::PushNotification::Message::FileData do
103
141
  end
104
142
  end
105
143
 
106
- context 'when invalid' do
144
+ context 'when content not present' do
107
145
  subject { DeviceCloud::PushNotification::Message::FileData.new raw_file_data.merge('fdData' => '') }
108
- its(:data) { should be_false }
146
+ its(:data) { should eq '' }
109
147
 
110
148
  subject { DeviceCloud::PushNotification::Message::FileData.new raw_file_data.merge('fdData' => nil) }
111
- its(:data) { should be_false }
149
+ its(:data) { should eq '' }
112
150
  end
113
151
  end
114
152
 
@@ -104,31 +104,45 @@ describe DeviceCloud::PushNotification::Message do
104
104
  end
105
105
 
106
106
  describe "#valid?" do
107
- context "with file_data and allowed topic" do
108
- subject { DeviceCloud::PushNotification::Message.new 'FileData' => 'present', 'topic' => DeviceCloud::PushNotification::Message::ALLOWED_TOPICS.sample }
107
+ context "with file_data" do
108
+ subject { DeviceCloud::PushNotification::Message.new 'FileData' => 'present' }
109
109
  its(:valid?) { should be_true }
110
110
  end
111
111
 
112
112
  context "without file_data" do
113
- subject { DeviceCloud::PushNotification::Message.new 'topic' => DeviceCloud::PushNotification::Message::ALLOWED_TOPICS.sample }
114
- its(:valid?) { should_not be_true }
115
- end
113
+ let(:logger) { double('logger') }
114
+ before(:each) do
115
+ DeviceCloud.logger = logger
116
+ logger.should_receive(:info)
117
+ end
116
118
 
117
- context "without allowed topic" do
118
- subject { DeviceCloud::PushNotification::Message.new 'FileData' => 'present' }
119
+ after(:each) do
120
+ DeviceCloud.logger = Logger.new(STDOUT)
121
+ end
122
+
123
+ subject { DeviceCloud::PushNotification::Message.new }
119
124
  its(:valid?) { should_not be_true }
120
125
  end
121
126
  end
122
127
 
123
128
  describe "#parsed_file_data" do
124
129
  context "when invalid" do
130
+ let(:logger) { double('logger') }
131
+ before(:each) do
132
+ DeviceCloud.logger = logger
133
+ logger.should_receive(:info)
134
+ end
135
+
136
+ after(:each) do
137
+ DeviceCloud.logger = Logger.new(STDOUT)
138
+ end
125
139
  it "should be false" do
126
140
  expect(subject.parsed_file_data).to be_false
127
141
  end
128
142
  end
129
143
 
130
144
  context "when valid" do
131
- subject { DeviceCloud::PushNotification::Message.new 'FileData' => single_raw_message["FileData"], 'topic' => DeviceCloud::PushNotification::Message::ALLOWED_TOPICS.sample }
145
+ subject { DeviceCloud::PushNotification::Message.new 'FileData' => single_raw_message["FileData"] }
132
146
 
133
147
  it "should return a DeviceCloud::PushNotification::Message::FileData object" do
134
148
  expect(subject.parsed_file_data.class).to eq(DeviceCloud::PushNotification::Message::FileData)
@@ -12,19 +12,34 @@ describe DeviceCloud::PushNotification do
12
12
  [
13
13
  OpenStruct.new(
14
14
  valid?: true,
15
- valid_parsed_file_data?: true,
16
15
  topic_type: 'alert',
17
16
  parsed_file_data: 'the alert data'
18
17
  ),
19
18
  OpenStruct.new(
20
19
  valid?: true,
21
- valid_parsed_file_data?: true,
22
20
  topic_type: 'event',
23
21
  parsed_file_data: 'the event data'
24
22
  ),
25
23
  OpenStruct.new(
26
24
  valid?: true,
27
- valid_parsed_file_data?: true,
25
+ topic_type: 'data',
26
+ parsed_file_data: 'the data data'
27
+ ),
28
+ OpenStruct.new(
29
+ valid?: true,
30
+ no_content?: true,
31
+ topic_type: 'alert',
32
+ parsed_file_data: 'the alert data'
33
+ ),
34
+ OpenStruct.new(
35
+ valid?: true,
36
+ no_content?: true,
37
+ topic_type: 'event',
38
+ parsed_file_data: 'the event data'
39
+ ),
40
+ OpenStruct.new(
41
+ valid?: true,
42
+ no_content?: true,
28
43
  topic_type: 'data',
29
44
  parsed_file_data: 'the data data'
30
45
  )
@@ -54,6 +69,12 @@ describe DeviceCloud::PushNotification do
54
69
 
55
70
  DeviceCloud::PushNotification::DataNotification.should_receive(:handle!).with(valid_parsed_messages[2].parsed_file_data)
56
71
 
72
+ DeviceCloud::PushNotification::AlertNotification.should_receive(:handle_no_content!).with(valid_parsed_messages[3].parsed_file_data)
73
+
74
+ DeviceCloud::PushNotification::EventNotification.should_receive(:handle_no_content!).with(valid_parsed_messages[4].parsed_file_data)
75
+
76
+ DeviceCloud::PushNotification::DataNotification.should_receive(:handle_no_content!).with(valid_parsed_messages[5].parsed_file_data)
77
+
57
78
  subject.handle_each!
58
79
 
59
80
  end
@@ -63,7 +84,6 @@ describe DeviceCloud::PushNotification do
63
84
  it "should not be handled" do
64
85
  valid_parsed_messages[0] = OpenStruct.new(
65
86
  valid?: false, # test condition
66
- valid_parsed_file_data?: true,
67
87
  topic_type: 'alert',
68
88
  parsed_file_data: 'the alert data'
69
89
  )
@@ -73,23 +93,11 @@ describe DeviceCloud::PushNotification do
73
93
  DeviceCloud::PushNotification::EventNotification.should_receive(:handle!)
74
94
  DeviceCloud::PushNotification::DataNotification.should_receive(:handle!)
75
95
 
76
- subject.handle_each!
77
- end
78
- end
96
+ DeviceCloud::PushNotification::AlertNotification.should_receive(:handle_no_content!)
79
97
 
80
- context "an invalid parsed_file_data" do
81
- it "should not be handled" do
82
- valid_parsed_messages[0] = OpenStruct.new(
83
- valid?: true,
84
- valid_parsed_file_data?: false, # test condition
85
- topic_type: 'alert',
86
- parsed_file_data: 'the alert data'
87
- )
88
-
89
- DeviceCloud::PushNotification::AlertNotification.should_not_receive(:handle!)
90
-
91
- DeviceCloud::PushNotification::EventNotification.should_receive(:handle!)
92
- DeviceCloud::PushNotification::DataNotification.should_receive(:handle!)
98
+ DeviceCloud::PushNotification::EventNotification.should_receive(:handle_no_content!)
99
+
100
+ DeviceCloud::PushNotification::DataNotification.should_receive(:handle_no_content!)
93
101
 
94
102
  subject.handle_each!
95
103
  end
data/spec/version_spec.rb CHANGED
@@ -2,6 +2,6 @@ require 'spec_helper'
2
2
 
3
3
  describe 'DeviceCloud::VERSION' do
4
4
  it 'should be the correct version' do
5
- DeviceCloud::VERSION.should == '0.1.0'
5
+ DeviceCloud::VERSION.should == '0.2.0'
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: device_cloud
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-08-16 00:00:00.000000000 Z
12
+ date: 2013-10-22 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler