device_cloud 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,5 +1,9 @@
1
1
  module DeviceCloud
2
2
  class PushNotification::DataNotification < PushNotification::BaseNotification
3
+ def initialize(file_data)
4
+ @file_data = file_data
5
+ end
6
+
3
7
  def handle!
4
8
  DeviceCloud.data_notification_handler.call(self)
5
9
  end
@@ -18,9 +18,17 @@ module DeviceCloud
18
18
  file_path + file_name
19
19
  end
20
20
 
21
+ def content_type
22
+ fdContentType
23
+ end
24
+
21
25
  def data
22
26
  return false unless valid?
23
- @data ||= JSON.parse unencoded_data
27
+ @data ||= if json_data?
28
+ JSON.parse unencoded_data
29
+ else
30
+ unencoded_data
31
+ end
24
32
  end
25
33
 
26
34
  def file_name
@@ -35,25 +43,19 @@ module DeviceCloud
35
43
 
36
44
  def valid?
37
45
  return false if @errors.any?
38
- validate_content_type! && validate_content!
46
+ validate_content!
39
47
  end
40
48
  private
49
+ def json_data?
50
+ fdContentType =~ /json/ || file_name =~ /\.json\z/
51
+ end
41
52
 
42
53
  def unencoded_data
43
54
  @unencode_data ||= Base64.decode64(fdData)
44
55
  end
45
56
 
46
- def validate_content_type!
47
- if file_name =~ /\.json/
48
- true
49
- else
50
- @errors << 'wrong file type'
51
- false
52
- end
53
- end
54
-
55
57
  def validate_content!
56
- if fdData.size == 0 || fdSize.to_i < 1
58
+ if !fdData || fdData.size == 0 || fdSize.to_i < 1
57
59
  @errors << 'no content'
58
60
  false
59
61
  else
@@ -1,3 +1,3 @@
1
1
  module DeviceCloud
2
- VERSION = "0.0.6"
2
+ VERSION = "0.0.7"
3
3
  end
@@ -18,9 +18,9 @@ describe DeviceCloud::PushNotification::Message::FileData do
18
18
  }
19
19
  end
20
20
 
21
- describe "attributes" do
22
- subject { DeviceCloud::PushNotification::Message::FileData.new raw_file_data }
21
+ subject { DeviceCloud::PushNotification::Message::FileData.new raw_file_data }
23
22
 
23
+ describe "attributes" do
24
24
  its(:id) { should eq(raw_file_data['id']) }
25
25
  its(:fdLastModifiedDate) { should eq(raw_file_data['fdLastModifiedDate']) }
26
26
  its(:fdSize) { should eq(raw_file_data['fdSize']) }
@@ -32,32 +32,6 @@ describe DeviceCloud::PushNotification::Message::FileData do
32
32
  end
33
33
 
34
34
  describe '#valid?' do
35
- subject { DeviceCloud::PushNotification::Message::FileData.new }
36
- context 'wrong file type' do
37
- let(:raw_file_data) do
38
- {
39
- "id" => {
40
- "fdPath" => "/db/4044_MadGlory_Interactive/00000000-00000000-001395FF-FF0E6014/",
41
- "fdName" => "event"
42
- },
43
- "fdLastModifiedDate" => "2013-06-26T16:18:39.675Z",
44
- "fdSize" => 0,
45
- "fdContentType" => "application/octet-stream",
46
- "fdArchive" => false,
47
- "cstId" => 4044,
48
- "fdType" => "directory",
49
- "fdCreatedDate" => "2013-06-26T16:18:39.675Z"
50
- }
51
- end
52
-
53
- subject { DeviceCloud::PushNotification::Message::FileData.new raw_file_data}
54
- its(:valid?) { should be_false }
55
- it "should set a 'wrong file type' error" do
56
- subject.valid?
57
- expect(subject.errors.include?('wrong file type')).to be_true
58
- end
59
- end
60
-
61
35
  context 'without content' do
62
36
  let(:raw_file_data) do
63
37
  {
@@ -78,7 +52,7 @@ describe DeviceCloud::PushNotification::Message::FileData do
78
52
 
79
53
  subject { DeviceCloud::PushNotification::Message::FileData.new raw_file_data}
80
54
  its(:valid?) { should be_false }
81
- it "should set a 'wrong file type' error" do
55
+ it "should set a 'no content' error" do
82
56
  subject.valid?
83
57
  expect(subject.errors.include?('no content')).to be_true
84
58
  end
@@ -93,6 +67,7 @@ describe DeviceCloud::PushNotification::Message::FileData do
93
67
  end
94
68
 
95
69
  context "when id blank" do
70
+ subject { DeviceCloud::PushNotification::Message::FileData.new raw_file_data.merge( 'id' => nil ) }
96
71
  its(:file_path) { should eq '' }
97
72
  end
98
73
  end
@@ -105,18 +80,34 @@ describe DeviceCloud::PushNotification::Message::FileData do
105
80
  end
106
81
 
107
82
  context "when id blank" do
83
+ subject { DeviceCloud::PushNotification::Message::FileData.new raw_file_data.merge( 'id' => nil ) }
108
84
  its(:file_name) { should eq '' }
109
85
  end
110
86
  end
111
87
 
112
88
  describe "#data" do
113
89
  context 'when valid' do
114
- subject { DeviceCloud::PushNotification::Message::FileData.new raw_file_data }
90
+ context "json content-type" do
91
+ subject { DeviceCloud::PushNotification::Message::FileData.new raw_file_data }
92
+ its(:data) { should eq(JSON.parse(Base64.decode64(raw_file_data['fdData']))) }
93
+ end
94
+
95
+ context "non-json content-type" do
96
+ before(:each) do
97
+ raw_file_data['fdContentType'] = 'foobar'
98
+ raw_file_data['id']['fdName'] = 'not_json.jpg'
99
+ end
100
+ subject { DeviceCloud::PushNotification::Message::FileData.new raw_file_data }
115
101
 
116
- its(:data) { should eq(JSON.parse(Base64.decode64(raw_file_data['fdData']))) }
102
+ its(:data) { should eq(Base64.decode64(raw_file_data['fdData'])) }
103
+ end
117
104
  end
118
105
 
119
106
  context 'when invalid' do
107
+ subject { DeviceCloud::PushNotification::Message::FileData.new raw_file_data.merge('fdData' => '') }
108
+ its(:data) { should be_false }
109
+
110
+ subject { DeviceCloud::PushNotification::Message::FileData.new raw_file_data.merge('fdData' => nil) }
120
111
  its(:data) { should be_false }
121
112
  end
122
113
  end
@@ -126,4 +117,10 @@ describe DeviceCloud::PushNotification::Message::FileData do
126
117
 
127
118
  its(:full_path) { should eq(raw_file_data['id']['fdPath'] + raw_file_data['id']['fdName']) }
128
119
  end
120
+
121
+ describe "#content_type" do
122
+ subject { DeviceCloud::PushNotification::Message::FileData.new raw_file_data }
123
+
124
+ its(:content_type) { should eq raw_file_data['fdContentType'] }
125
+ end
129
126
  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.0.6'
5
+ DeviceCloud::VERSION.should == '0.0.7'
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.0.6
4
+ version: 0.0.7
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors: