airplay 1.0.2 → 1.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -4,6 +4,8 @@ module Airplay
4
4
  # Public: The class to handle image broadcast to a device
5
5
  #
6
6
  class Viewer
7
+ UnsupportedType = Class.new(TypeError)
8
+
7
9
  TRANSITIONS = %w(None Dissolve SlideLeft SlideRight)
8
10
 
9
11
  def initialize(device)
@@ -58,15 +60,70 @@ module Airplay
58
60
  #
59
61
  def get_content(media_or_io)
60
62
  case true
61
- when File.exists?(File.expand_path(media_or_io))
62
- File.read(media_or_io)
63
- when !!(media_or_io =~ URI::regexp)
64
- open(media_or_io).read
65
- when media_or_io.is_a?(String)
66
- media_or_io
67
- when media_or_io.respond_to?(:read)
68
- media_or_io.read
63
+ when is_binary?(media_or_io) then media_or_io
64
+ when is_file?(media_or_io) then File.read(media_or_io)
65
+ when is_url?(media_or_io) then open(media_or_io).read
66
+ when is_string?(media_or_io) then media_or_io
67
+ when is_io?(media_or_io) then media_or_io.read
68
+ else raise UnsupportedType.new("That media type is unsupported")
69
69
  end
70
70
  end
71
+
72
+ # Private: Check if the string is binary
73
+ #
74
+ # string - The string to be checked
75
+ #
76
+ # Returns true/false
77
+ #
78
+ def is_binary?(string)
79
+ string.encoding.names.include?("BINARY")
80
+ rescue
81
+ false
82
+ end
83
+
84
+ # Private: Check if the string is in the filesystem
85
+ #
86
+ # string - The string to be checked
87
+ #
88
+ # Returns true/false
89
+ #
90
+ def is_file?(string)
91
+ return false if string.is_a?(StringIO)
92
+ File.exists?(File.expand_path(string))
93
+ rescue
94
+ false
95
+ end
96
+
97
+ # Private: Check if the string is a URL
98
+ #
99
+ # string - The string to be checked
100
+ #
101
+ # Returns true/false
102
+ #
103
+ def is_url?(string)
104
+ !!(string =~ URI::regexp)
105
+ rescue
106
+ false
107
+ end
108
+
109
+ # Private: Check if the string is actually a string
110
+ #
111
+ # string - The string to be checked
112
+ #
113
+ # Returns true/false
114
+ #
115
+ def is_string?(string)
116
+ string.is_a?(String)
117
+ end
118
+
119
+ # Private: Check if the string can be read
120
+ #
121
+ # string - The string to be checked
122
+ #
123
+ # Returns true/false
124
+ #
125
+ def is_io?(string)
126
+ string.respond_to?(:read)
127
+ end
71
128
  end
72
129
  end
@@ -0,0 +1,22 @@
1
+ require "integration_helper"
2
+
3
+ describe "Getting information from a device" do
4
+ Given(:device) { test_device }
5
+
6
+ context "getting the id" do
7
+ When(:id) { device.id }
8
+ Then { id == "58:55:CA:1F:3E:80" }
9
+ end
10
+
11
+ context "getting some minimun info" do
12
+ When(:min_info) { device.info }
13
+ Then { min_info.model == "AppleTV2,1" }
14
+ And { min_info.respond_to?(:os_version) }
15
+ And { min_info.respond_to?(:mac_address) }
16
+ end
17
+
18
+ context "getting server information" do
19
+ When(:full_info) { device.server_info }
20
+ Then { full_info.keys.size >= 15 }
21
+ end
22
+ end
@@ -0,0 +1,39 @@
1
+ require "integration_helper"
2
+
3
+ describe "Sending images to a device" do
4
+ Given(:device) { test_device }
5
+
6
+ context "being a file path" do
7
+ When(:view) { device.view(sample_images[0]) }
8
+ Then { view == true }
9
+ end
10
+
11
+ context "being a raw image" do
12
+ Given(:image) { File.read(sample_images[1]) }
13
+ When(:view) { device.view(image) }
14
+ Then { view == true }
15
+ end
16
+
17
+ context "being a raw binary image" do
18
+ Given(:image) { File.open(sample_images[1], "rb").read }
19
+ When(:view) { device.view(image) }
20
+ Then { view == true }
21
+ end
22
+
23
+ context "being a IO stream" do
24
+ Given(:image) { StringIO.new(File.read(sample_images[2])) }
25
+ When(:view) { device.view(image) }
26
+ Then { view == true }
27
+ end
28
+
29
+ context "being a URL" do
30
+ Given(:image) { "https://github.com/elcuervo/airplay/raw/master/doc/img/logo.png" }
31
+ When(:view) { device.view(image) }
32
+ Then { view == true }
33
+ end
34
+
35
+ context "sending an unsupported type" do
36
+ When(:view) { device.view(42) }
37
+ Then { view == Failure(Airplay::Viewer::UnsupportedType) }
38
+ end
39
+ end
@@ -0,0 +1,23 @@
1
+ require "test_helper"
2
+ require "airplay"
3
+ require "celluloid/autostart"
4
+
5
+ device = ENV.fetch("TEST_TV_URL", "blocktv.airplay.io:7000")
6
+ Airplay.configure { |c| c.autodiscover = false }
7
+ Airplay.devices.add("Block TV", device)
8
+
9
+ def test_device
10
+ @_device ||= begin
11
+ device = Airplay["Block TV"]
12
+ device.password = ENV["TEST_TV_PASSWORD"]
13
+ device
14
+ end
15
+ end
16
+
17
+ def sample_images
18
+ @_images ||= Dir.glob("test/fixtures/files/*.png")
19
+ end
20
+
21
+ def sample_video
22
+ @_video ||= "http://movietrailers.apple.com/movies/universal/rush/rush-tlr3_480p.mov"
23
+ end
@@ -8,7 +8,7 @@ describe Airplay::Configuration do
8
8
  Then { configuration.log_level == 4 }
9
9
  Then { configuration.autodiscover == true }
10
10
  Then { configuration.host == "0.0.0.0" }
11
- Then { configuration.port == "1337" }
11
+ Then { configuration.port == nil }
12
12
  Then { configuration.output.respond_to?(:info) }
13
13
  end
14
14
 
metadata CHANGED
@@ -1,20 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: airplay
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
5
- prerelease:
4
+ version: 1.0.3
6
5
  platform: ruby
7
6
  authors:
8
7
  - elcuervo
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-11-07 00:00:00.000000000 Z
11
+ date: 2014-05-01 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: dnssd
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
17
  - - ~>
20
18
  - !ruby/object:Gem::Version
@@ -22,7 +20,6 @@ dependencies:
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
24
  - - ~>
28
25
  - !ruby/object:Gem::Version
@@ -30,7 +27,6 @@ dependencies:
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: CFPropertyList
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
31
  - - ~>
36
32
  - !ruby/object:Gem::Version
@@ -38,7 +34,6 @@ dependencies:
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
38
  - - ~>
44
39
  - !ruby/object:Gem::Version
@@ -46,23 +41,20 @@ dependencies:
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: mime-types
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ! '>='
45
+ - - '>='
52
46
  - !ruby/object:Gem::Version
53
47
  version: '1.16'
54
48
  type: :runtime
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ! '>='
52
+ - - '>='
60
53
  - !ruby/object:Gem::Version
61
54
  version: '1.16'
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: log4r
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
59
  - - ~>
68
60
  - !ruby/object:Gem::Version
@@ -70,7 +62,6 @@ dependencies:
70
62
  type: :runtime
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
66
  - - ~>
76
67
  - !ruby/object:Gem::Version
@@ -78,7 +69,6 @@ dependencies:
78
69
  - !ruby/object:Gem::Dependency
79
70
  name: cuba
80
71
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
72
  requirements:
83
73
  - - ~>
84
74
  - !ruby/object:Gem::Version
@@ -86,7 +76,6 @@ dependencies:
86
76
  type: :runtime
87
77
  prerelease: false
88
78
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
79
  requirements:
91
80
  - - ~>
92
81
  - !ruby/object:Gem::Version
@@ -94,7 +83,6 @@ dependencies:
94
83
  - !ruby/object:Gem::Dependency
95
84
  name: micromachine
96
85
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
86
  requirements:
99
87
  - - ~>
100
88
  - !ruby/object:Gem::Version
@@ -102,7 +90,6 @@ dependencies:
102
90
  type: :runtime
103
91
  prerelease: false
104
92
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
93
  requirements:
107
94
  - - ~>
108
95
  - !ruby/object:Gem::Version
@@ -110,23 +97,20 @@ dependencies:
110
97
  - !ruby/object:Gem::Dependency
111
98
  name: celluloid
112
99
  requirement: !ruby/object:Gem::Requirement
113
- none: false
114
100
  requirements:
115
- - - ! '>='
101
+ - - '>='
116
102
  - !ruby/object:Gem::Version
117
103
  version: 0.15.0
118
104
  type: :runtime
119
105
  prerelease: false
120
106
  version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
107
  requirements:
123
- - - ! '>='
108
+ - - '>='
124
109
  - !ruby/object:Gem::Version
125
110
  version: 0.15.0
126
111
  - !ruby/object:Gem::Dependency
127
112
  name: reel-rack
128
113
  requirement: !ruby/object:Gem::Requirement
129
- none: false
130
114
  requirements:
131
115
  - - ~>
132
116
  - !ruby/object:Gem::Version
@@ -134,7 +118,6 @@ dependencies:
134
118
  type: :runtime
135
119
  prerelease: false
136
120
  version_requirements: !ruby/object:Gem::Requirement
137
- none: false
138
121
  requirements:
139
122
  - - ~>
140
123
  - !ruby/object:Gem::Version
@@ -142,7 +125,6 @@ dependencies:
142
125
  - !ruby/object:Gem::Dependency
143
126
  name: net-ptth
144
127
  requirement: !ruby/object:Gem::Requirement
145
- none: false
146
128
  requirements:
147
129
  - - '='
148
130
  - !ruby/object:Gem::Version
@@ -150,7 +132,6 @@ dependencies:
150
132
  type: :runtime
151
133
  prerelease: false
152
134
  version_requirements: !ruby/object:Gem::Requirement
153
- none: false
154
135
  requirements:
155
136
  - - '='
156
137
  - !ruby/object:Gem::Version
@@ -158,7 +139,6 @@ dependencies:
158
139
  - !ruby/object:Gem::Dependency
159
140
  name: net-http-digest_auth
160
141
  requirement: !ruby/object:Gem::Requirement
161
- none: false
162
142
  requirements:
163
143
  - - ~>
164
144
  - !ruby/object:Gem::Version
@@ -166,7 +146,6 @@ dependencies:
166
146
  type: :runtime
167
147
  prerelease: false
168
148
  version_requirements: !ruby/object:Gem::Requirement
169
- none: false
170
149
  requirements:
171
150
  - - ~>
172
151
  - !ruby/object:Gem::Version
@@ -174,7 +153,6 @@ dependencies:
174
153
  - !ruby/object:Gem::Dependency
175
154
  name: minitest
176
155
  requirement: !ruby/object:Gem::Requirement
177
- none: false
178
156
  requirements:
179
157
  - - ~>
180
158
  - !ruby/object:Gem::Version
@@ -182,7 +160,6 @@ dependencies:
182
160
  type: :development
183
161
  prerelease: false
184
162
  version_requirements: !ruby/object:Gem::Requirement
185
- none: false
186
163
  requirements:
187
164
  - - ~>
188
165
  - !ruby/object:Gem::Version
@@ -190,7 +167,6 @@ dependencies:
190
167
  - !ruby/object:Gem::Dependency
191
168
  name: minitest-given
192
169
  requirement: !ruby/object:Gem::Requirement
193
- none: false
194
170
  requirements:
195
171
  - - ~>
196
172
  - !ruby/object:Gem::Version
@@ -198,7 +174,6 @@ dependencies:
198
174
  type: :development
199
175
  prerelease: false
200
176
  version_requirements: !ruby/object:Gem::Requirement
201
- none: false
202
177
  requirements:
203
178
  - - ~>
204
179
  - !ruby/object:Gem::Version
@@ -206,7 +181,6 @@ dependencies:
206
181
  - !ruby/object:Gem::Dependency
207
182
  name: fakeweb
208
183
  requirement: !ruby/object:Gem::Requirement
209
- none: false
210
184
  requirements:
211
185
  - - ~>
212
186
  - !ruby/object:Gem::Version
@@ -214,7 +188,6 @@ dependencies:
214
188
  type: :development
215
189
  prerelease: false
216
190
  version_requirements: !ruby/object:Gem::Requirement
217
- none: false
218
191
  requirements:
219
192
  - - ~>
220
193
  - !ruby/object:Gem::Version
@@ -222,7 +195,6 @@ dependencies:
222
195
  - !ruby/object:Gem::Dependency
223
196
  name: vcr
224
197
  requirement: !ruby/object:Gem::Requirement
225
- none: false
226
198
  requirements:
227
199
  - - ~>
228
200
  - !ruby/object:Gem::Version
@@ -230,7 +202,6 @@ dependencies:
230
202
  type: :development
231
203
  prerelease: false
232
204
  version_requirements: !ruby/object:Gem::Requirement
233
- none: false
234
205
  requirements:
235
206
  - - ~>
236
207
  - !ruby/object:Gem::Version
@@ -253,17 +224,22 @@ files:
253
224
  - airplay-cli.gemspec
254
225
  - airplay.gemspec
255
226
  - bin/air
227
+ - doc/bitdeli.md
256
228
  - doc/contributors.md
257
229
  - doc/documentation.md
258
230
  - doc/header.md
231
+ - doc/img/block_tv.jpg
259
232
  - doc/img/cli_list.png
260
233
  - doc/img/cli_play.png
261
234
  - doc/img/logo.png
262
235
  - doc/installation.md
236
+ - doc/testing.md
237
+ - doc/toc.md
263
238
  - doc/usage.md
264
239
  - lib/airplay.rb
265
240
  - lib/airplay/browser.rb
266
241
  - lib/airplay/cli.rb
242
+ - lib/airplay/cli/doctor.rb
267
243
  - lib/airplay/cli/image_viewer.rb
268
244
  - lib/airplay/cli/version.rb
269
245
  - lib/airplay/configuration.rb
@@ -293,6 +269,9 @@ files:
293
269
  - test/fixtures/files/transition_1.png
294
270
  - test/fixtures/files/transition_2.png
295
271
  - test/fixtures/files/transition_3.png
272
+ - test/integration/fetching_device_information_test.rb
273
+ - test/integration/view_images_test.rb
274
+ - test/integration_helper.rb
296
275
  - test/test_helper.rb
297
276
  - test/unit/configuration_test.rb
298
277
  - test/unit/device_test.rb
@@ -301,27 +280,26 @@ homepage: http://github.com/elcuervo/airplay
301
280
  licenses:
302
281
  - MIT
303
282
  - HUGWARE
283
+ metadata: {}
304
284
  post_install_message:
305
285
  rdoc_options: []
306
286
  require_paths:
307
287
  - lib
308
288
  required_ruby_version: !ruby/object:Gem::Requirement
309
- none: false
310
289
  requirements:
311
- - - ! '>='
290
+ - - '>='
312
291
  - !ruby/object:Gem::Version
313
292
  version: '0'
314
293
  required_rubygems_version: !ruby/object:Gem::Requirement
315
- none: false
316
294
  requirements:
317
- - - ! '>='
295
+ - - '>='
318
296
  - !ruby/object:Gem::Version
319
297
  version: '0'
320
298
  requirements: []
321
299
  rubyforge_project:
322
- rubygems_version: 1.8.23
300
+ rubygems_version: 2.0.14
323
301
  signing_key:
324
- specification_version: 3
302
+ specification_version: 4
325
303
  summary: Airplay client
326
304
  test_files:
327
305
  - test/fixtures/files/logo.png
@@ -329,6 +307,9 @@ test_files:
329
307
  - test/fixtures/files/transition_1.png
330
308
  - test/fixtures/files/transition_2.png
331
309
  - test/fixtures/files/transition_3.png
310
+ - test/integration/fetching_device_information_test.rb
311
+ - test/integration/view_images_test.rb
312
+ - test/integration_helper.rb
332
313
  - test/test_helper.rb
333
314
  - test/unit/configuration_test.rb
334
315
  - test/unit/device_test.rb