airplay 0.2.9 → 1.0.0.beta1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (82) hide show
  1. data/Gemfile +5 -0
  2. data/Gemfile.lock +68 -0
  3. data/HUGS +15 -0
  4. data/LICENSE +20 -0
  5. data/README.md +50 -72
  6. data/Rakefile +6 -9
  7. data/SPEC.md +34 -0
  8. data/airplay.gemspec +28 -16
  9. data/bin/air +27 -0
  10. data/examples/demo.rb +35 -0
  11. data/examples/image.rb +9 -0
  12. data/examples/video.rb +24 -0
  13. data/lib/airplay.rb +38 -17
  14. data/lib/airplay/browser.rb +68 -0
  15. data/lib/airplay/cli.rb +104 -0
  16. data/lib/airplay/configuration.rb +29 -0
  17. data/lib/airplay/connection.rb +114 -0
  18. data/lib/airplay/connection/authentication.rb +37 -0
  19. data/lib/airplay/connection/persistent.rb +44 -0
  20. data/lib/airplay/device.rb +81 -0
  21. data/lib/airplay/device/features.rb +43 -0
  22. data/lib/airplay/device/info.rb +22 -0
  23. data/lib/airplay/devices.rb +46 -0
  24. data/lib/airplay/logger.rb +20 -0
  25. data/lib/airplay/playable.rb +24 -0
  26. data/lib/airplay/protocol.rb +9 -72
  27. data/lib/airplay/protocol/app.rb +52 -0
  28. data/lib/airplay/protocol/message.rb +8 -0
  29. data/lib/airplay/protocol/playback_info.rb +49 -0
  30. data/lib/airplay/protocol/player.rb +170 -0
  31. data/lib/airplay/protocol/reverse.rb +69 -0
  32. data/lib/airplay/protocol/slideshow.rb +66 -0
  33. data/lib/airplay/protocol/timers.rb +25 -0
  34. data/lib/airplay/protocol/viewer.rb +56 -0
  35. data/lib/airplay/structure.rb +7 -0
  36. data/lib/airplay/viewable.rb +16 -0
  37. data/test/fixtures/cassettes/airplay/listing_slideshow_features.yml +201 -0
  38. data/test/fixtures/cassettes/airplay/play_an_entire_video.yml +100 -0
  39. data/test/fixtures/cassettes/airplay/sending_a_video.yml +71 -0
  40. data/test/fixtures/cassettes/airplay/sending_an_image.yml +26439 -0
  41. data/test/fixtures/cassettes/airplay/stop_any_transmission.yml +8851 -0
  42. data/test/fixtures/files/logo.png +0 -0
  43. data/test/fixtures/files/transition_0.png +0 -0
  44. data/test/fixtures/files/transition_1.png +0 -0
  45. data/test/fixtures/files/transition_2.png +0 -0
  46. data/test/fixtures/files/transition_3.png +0 -0
  47. data/test/integration/discovery_test.rb +13 -0
  48. data/test/integration/features_test.rb +14 -0
  49. data/test/integration/send_media_test.rb +37 -0
  50. data/test/integration/slideshow_test.rb +26 -0
  51. data/test/test_helper.rb +42 -0
  52. data/test/unit/node_test.rb +17 -0
  53. data/test/unit/protocol_test.rb +44 -0
  54. metadata +247 -77
  55. data/.gitignore +0 -2
  56. data/.travis.yml +0 -6
  57. data/examples/jobs.jpg +0 -0
  58. data/examples/send_image.rb +0 -5
  59. data/examples/send_video.rb +0 -7
  60. data/lib/airplay/client.rb +0 -60
  61. data/lib/airplay/protocol/image.rb +0 -41
  62. data/lib/airplay/protocol/media.rb +0 -64
  63. data/lib/airplay/protocol/scrub.rb +0 -37
  64. data/lib/airplay/server.rb +0 -2
  65. data/lib/airplay/server/browser.rb +0 -35
  66. data/lib/airplay/server/node.rb +0 -7
  67. data/test/authentication.rb +0 -13
  68. data/test/discovery.rb +0 -27
  69. data/test/fixtures/cassettes/airplay/authenticate_all_the_things_.yml +0 -139
  70. data/test/fixtures/cassettes/airplay/control_a_video_being_played_in_apple_tv.yml +0 -242
  71. data/test/fixtures/cassettes/airplay/get_current_scrub_from_apple_tv.yml +0 -69
  72. data/test/fixtures/cassettes/airplay/go_to_a_given_position_in_the_video.yml +0 -157
  73. data/test/fixtures/cassettes/airplay/send_audio_to_apple_tv.yml +0 -33
  74. data/test/fixtures/cassettes/airplay/send_image_to_apple_tv.yml +0 -661
  75. data/test/fixtures/cassettes/airplay/send_image_to_apple_tv_with_effects.yml +0 -591
  76. data/test/fixtures/cassettes/airplay/send_video_to_apple_tv.yml +0 -33
  77. data/test/fixtures/image.gif +0 -0
  78. data/test/fixtures/image2.gif +0 -0
  79. data/test/helper.rb +0 -31
  80. data/test/images.rb +0 -31
  81. data/test/media.rb +0 -47
  82. data/test/scrub.rb +0 -31
@@ -1,33 +0,0 @@
1
- ---
2
- http_interactions:
3
- - request:
4
- method: post
5
- uri: http://mocktv.local:7000/play
6
- body:
7
- encoding: US-ASCII
8
- base64_string: |
9
- Q29udGVudC1Mb2NhdGlvbjogaHR0cDovL3d3dy55by15by5vcmcvbXA0L3l1
10
- Lm1wNApTdGFydC1Qb3NpdGlvbjogMAo=
11
-
12
- headers:
13
- user-agent:
14
- - MediaControl/1.0
15
- connection:
16
- - keep-alive
17
- keep-alive:
18
- - 30
19
- response:
20
- status:
21
- code: 200
22
- message: OK
23
- headers:
24
- date:
25
- - Fri, 23 Mar 2012 22:40:15 GMT
26
- content-length:
27
- - "0"
28
- body:
29
- encoding: US-ASCII
30
- base64_string: ""
31
- http_version: "1.1"
32
- recorded_at: Fri, 23 Mar 2012 22:40:16 GMT
33
- recorded_with: VCR 2.0.0
Binary file
Binary file
data/test/helper.rb DELETED
@@ -1,31 +0,0 @@
1
- $:.unshift(File.expand_path("../lib", File.dirname(__FILE__)))
2
-
3
- require "airplay"
4
- require 'vcr'
5
- require "cutest"
6
-
7
- module MockedBrowser
8
- attr_reader :servers
9
-
10
- def self.browse
11
- @servers = [Airplay::Server::Node.new("Mock TV", ".local", "mocktv.local", 7000)]
12
- end
13
-
14
- def self.find_by_name(name)
15
- if name == "Mock TV"
16
- @servers.first
17
- else
18
- raise Airplay::Client::ServerNotFoundError
19
- end
20
- end
21
- end
22
-
23
- VCR.configure do |c|
24
- c.cassette_library_dir = 'test/fixtures/cassettes/airplay'
25
- c.default_cassette_options = { :record => :once }
26
- c.hook_into :fakeweb
27
- end
28
-
29
- def with_cassette(name, &block)
30
- VCR.use_cassette(name, :preserve_exact_body_bytes => true) { block.call if block }
31
- end
data/test/images.rb DELETED
@@ -1,31 +0,0 @@
1
- require File.expand_path("helper", File.dirname(__FILE__))
2
-
3
- scope do
4
- test "check image protocol class" do
5
- image_protocol = Airplay::Protocol::Image.new("127.0.0.1")
6
- assert_equal "/photo", image_protocol.resource
7
- end
8
- end
9
-
10
- scope do
11
- setup do
12
- @airplay = Airplay::Client.new(false, MockedBrowser)
13
- end
14
-
15
- test "send an image to the server" do
16
- with_cassette("send image to apple tv") do
17
- file_path = "./test/fixtures/image2.gif"
18
- assert @airplay.send_image(file_path).kind_of?(String)
19
- assert @airplay.send_image(File.open(file_path)).kind_of?(String)
20
- assert @airplay.send_image("http://cdn.mactrast.com/wp-content/uploads/2011/04/Steve-Jobs-Apple-CEO.jpg").kind_of?(String)
21
- end
22
- end
23
-
24
- test "send an image to the server doing all the effects" do
25
- with_cassette("send image to apple tv with effects") do
26
- [:none, :slide_left, :slide_right, :dissolve].each do |effect|
27
- assert @airplay.send_image("./test/fixtures/image.gif", effect).kind_of?(String)
28
- end
29
- end
30
- end
31
- end
data/test/media.rb DELETED
@@ -1,47 +0,0 @@
1
- require File.expand_path("helper", File.dirname(__FILE__))
2
-
3
- scope do
4
- test "check media protocol class" do
5
- image_protocol = Airplay::Protocol::Media.new("127.0.0.1")
6
- assert_equal "/play", image_protocol.resource
7
- assert_equal "/stop", image_protocol.stop_resource
8
- assert_equal "/rate", image_protocol.pause_resource
9
- end
10
- end
11
-
12
- scope do
13
- setup do
14
- @airplay = Airplay::Client.new(false, MockedBrowser)
15
- end
16
-
17
- test "send a video to the server" do
18
- with_cassette("send video to apple tv") do
19
- assert @airplay.send_video("http://www.yo-yo.org/mp4/yu.mp4")
20
- end
21
- end
22
-
23
- test "player capabilities" do
24
- with_cassette("control a video being played in apple tv") do
25
- player = @airplay.send_video("http://www.yo-yo.org/mp4/yu.mp4")
26
-
27
- assert player.pause
28
- assert player.resume
29
- assert player.scrub.has_key?("position")
30
- assert player.scrub.has_key?("duration")
31
- assert player.scrub("10%")
32
- assert player.stop
33
- end
34
- end
35
-
36
- test "send audio to the server" do
37
- with_cassette("send audio to apple tv") do
38
- assert @airplay.send_audio("http://www.robtowns.com/music/blind_willie.mp3")
39
- end
40
- end
41
-
42
- test "raise an exception on invalid media url" do
43
- assert_raise Airplay::Protocol::InvalidMediaError do
44
- @airplay.send_video("Surculus Fructum!")
45
- end
46
- end
47
- end
data/test/scrub.rb DELETED
@@ -1,31 +0,0 @@
1
- require File.expand_path("helper", File.dirname(__FILE__))
2
-
3
- scope do
4
- test "check image protocol class" do
5
- scrub_protocol = Airplay::Protocol::Scrub.new("127.0.0.1")
6
- assert_equal "/scrub", scrub_protocol.resource
7
- end
8
- end
9
-
10
- scope do
11
- setup do
12
- @airplay = Airplay::Client.new(false, MockedBrowser)
13
- end
14
-
15
- test "check scrub status" do
16
- with_cassette("get current scrub from apple tv") do
17
- assert @airplay.scrub.has_key?("duration")
18
- assert @airplay.scrub.has_key?("position")
19
- end
20
- end
21
-
22
- test "move to a given position" do
23
- with_cassette("go to a given position in the video") do
24
- @airplay.send_video("http://www.yo-yo.org/mp4/yu.mp4")
25
- duration = @airplay.scrub.fetch("duration")
26
-
27
- assert @airplay.scrub(duration/2)
28
- assert @airplay.scrub("50%")
29
- end
30
- end
31
- end