plex-ruby 1.2.0 → 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +1 -1
- data/lib/plex-ruby.rb +11 -1
- data/lib/plex-ruby/client.rb +4 -4
- data/lib/plex-ruby/media.rb +5 -4
- data/lib/plex-ruby/part.rb +5 -4
- data/lib/plex-ruby/season.rb +16 -28
- data/lib/plex-ruby/section.rb +8 -8
- data/lib/plex-ruby/show.rb +24 -29
- data/lib/plex-ruby/stream.rb +5 -5
- data/lib/plex-ruby/version.rb +1 -1
- data/lib/plex-ruby/video.rb +5 -4
- data/test/test_client.rb +4 -4
- data/test/test_episode.rb +1 -1
- data/test/test_helper.rb +51 -31
- data/test/test_media.rb +1 -1
- data/test/test_movie.rb +1 -1
- data/test/test_part.rb +1 -1
- data/test/test_plex.rb +4 -4
- data/test/test_season.rb +9 -3
- data/test/test_section.rb +1 -1
- data/test/test_show.rb +13 -5
- data/test/test_stream.rb +1 -1
- data/test/test_video.rb +2 -2
- metadata +6 -12
data/README.md
CHANGED
@@ -50,7 +50,7 @@ shows = section.all # Returns a list of shows/movies
|
|
50
50
|
bsg = shows.select { |s| s.title =~ /Battlestar/ }.first # Pick a great show
|
51
51
|
bsg.seasons # array of its seasons
|
52
52
|
episodes = bsg.seasons.last.episodes # Array the last seasons episodes
|
53
|
-
episode = episodes[4] # The
|
53
|
+
episode = episodes[4] # The fifth episode in the season
|
54
54
|
puts "#{episode.title} - #{episode.summary}" # Looks good
|
55
55
|
client.play_media(episode) # Play it!
|
56
56
|
```
|
data/lib/plex-ruby.rb
CHANGED
@@ -9,7 +9,7 @@ module Plex
|
|
9
9
|
#
|
10
10
|
# @param [String] camel case name to be converted
|
11
11
|
# @return [String] snake case form
|
12
|
-
def self.
|
12
|
+
def self.underscore(string)
|
13
13
|
string.gsub(/::/, '/').
|
14
14
|
gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
|
15
15
|
gsub(/([a-z\d])([A-Z])/,'\1_\2').
|
@@ -17,6 +17,16 @@ module Plex
|
|
17
17
|
downcase
|
18
18
|
end
|
19
19
|
|
20
|
+
# Converts ruby style snake case names into the cammel case names that are
|
21
|
+
# used in the Plex APIs. I.E. <tt>play_media</tt> -> <tt>playMedia</tt>
|
22
|
+
def self.camelize(string, first_letter_uppercase = false)
|
23
|
+
if first_letter_uppercase
|
24
|
+
string.to_s.gsub(/\/(.?)/) { "::#{$1.upcase}" }.gsub(/(?:^|_)(.)/) { $1.upcase }
|
25
|
+
else
|
26
|
+
string.to_s[0].chr.downcase + camelize(string, true)[1..-1]
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
20
30
|
end
|
21
31
|
|
22
32
|
require 'plex-ruby/parser'
|
data/lib/plex-ruby/client.rb
CHANGED
@@ -9,7 +9,7 @@ module Plex
|
|
9
9
|
|
10
10
|
ATTRIBUTES = %w(name host address port machineIdentifier version)
|
11
11
|
|
12
|
-
attr_reader *ATTRIBUTES.map {|m| Plex.
|
12
|
+
attr_reader *ATTRIBUTES.map {|m| Plex.underscore(m) }
|
13
13
|
attr_reader :server
|
14
14
|
|
15
15
|
|
@@ -18,7 +18,7 @@ module Plex
|
|
18
18
|
def initialize(server, node)
|
19
19
|
@server = server
|
20
20
|
ATTRIBUTES.each { |e|
|
21
|
-
instance_variable_set("@#{Plex.
|
21
|
+
instance_variable_set("@#{Plex.underscore(e)}", node.attr(e))
|
22
22
|
}
|
23
23
|
end
|
24
24
|
|
@@ -29,7 +29,7 @@ module Plex
|
|
29
29
|
# the console for the error message
|
30
30
|
NAV_METHODS.each { |nav|
|
31
31
|
class_eval %(
|
32
|
-
def #{Plex.
|
32
|
+
def #{Plex.underscore(nav)}
|
33
33
|
ping player_url+'/navigation/#{nav}'
|
34
34
|
end
|
35
35
|
)
|
@@ -42,7 +42,7 @@ module Plex
|
|
42
42
|
# the console for the error message
|
43
43
|
PLAYBACK_METHODS.each { |playback|
|
44
44
|
class_eval %(
|
45
|
-
def #{Plex.
|
45
|
+
def #{Plex.underscore(playback)}
|
46
46
|
ping player_url+'/playback/#{playback}'
|
47
47
|
end
|
48
48
|
)
|
data/lib/plex-ruby/media.rb
CHANGED
@@ -4,15 +4,16 @@ module Plex
|
|
4
4
|
ATTRIBUTES = %w(id durration bitrate aspectRatio audioChannels
|
5
5
|
audioCodec videoCodec videoResolution container videoFrameRate)
|
6
6
|
|
7
|
-
attr_reader *ATTRIBUTES.map {|m| Plex.snake_case(m) }
|
8
7
|
attr_reader :parts
|
9
8
|
|
10
9
|
# @param [Nokogiri::XML::Element] nokogiri element that represents this
|
11
10
|
# Media
|
12
11
|
def initialize(node)
|
13
|
-
|
14
|
-
|
15
|
-
|
12
|
+
node.attributes.each do |method, val|
|
13
|
+
define_singleton_method(Plex.underscore(method).to_sym) do
|
14
|
+
val.value
|
15
|
+
end
|
16
|
+
end
|
16
17
|
|
17
18
|
@parts = node.search("Part").map { |m| Plex::Part.new(m) }
|
18
19
|
end
|
data/lib/plex-ruby/part.rb
CHANGED
@@ -3,15 +3,16 @@ module Plex
|
|
3
3
|
|
4
4
|
ATTRIBUTES = %w(id key duration file size)
|
5
5
|
|
6
|
-
attr_reader *ATTRIBUTES.map {|m| Plex.snake_case(m) }
|
7
6
|
attr_reader :streams
|
8
7
|
|
9
8
|
# @param [Nokogiri::XML::Element] nokogiri element that represents this
|
10
9
|
# part
|
11
10
|
def initialize(node)
|
12
|
-
|
13
|
-
|
14
|
-
|
11
|
+
node.attributes.each do |method, val|
|
12
|
+
define_singleton_method(Plex.underscore(method).to_sym) do
|
13
|
+
val.value
|
14
|
+
end
|
15
|
+
end
|
15
16
|
|
16
17
|
@streams = node.search('Stream').map { |m| Plex::Stream.new(m) }
|
17
18
|
end
|
data/lib/plex-ruby/season.rb
CHANGED
@@ -12,20 +12,17 @@ module Plex
|
|
12
12
|
def initialize(show, key)
|
13
13
|
@show = show
|
14
14
|
@key = key
|
15
|
-
end
|
16
15
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
)
|
28
|
-
}
|
16
|
+
directory.attributes.each do |method, val|
|
17
|
+
define_singleton_method(Plex.underscore(method).to_sym) do
|
18
|
+
val.value
|
19
|
+
end
|
20
|
+
define_singleton_method(Plex.underscore(method+'!').to_sym) do
|
21
|
+
puts "Plex::Season##{Plex.underscore(method+'!')} IS DEPRECATED! Use Plex::Season##{Plex.underscore(method)} instead."
|
22
|
+
self.send(Plex.underscore(method))
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
29
26
|
|
30
27
|
# Returns the list of episodes in the library that are a part of this Season
|
31
28
|
#
|
@@ -34,9 +31,12 @@ module Plex
|
|
34
31
|
@episodes ||= episodes_from_video(children)
|
35
32
|
end
|
36
33
|
|
37
|
-
#
|
38
|
-
|
39
|
-
|
34
|
+
# Select a particular episode
|
35
|
+
#
|
36
|
+
# @param [Fixnum, String] episode index number
|
37
|
+
# @return [Episode] episode with the index of number
|
38
|
+
def episode(number)
|
39
|
+
episodes.select { |epi| epi.index.to_i == number.to_i }.first
|
40
40
|
end
|
41
41
|
|
42
42
|
def url
|
@@ -65,18 +65,10 @@ module Plex
|
|
65
65
|
@xml_doc ||= base_doc
|
66
66
|
end
|
67
67
|
|
68
|
-
def xml_doc!
|
69
|
-
@xml_doc = base_doc
|
70
|
-
end
|
71
|
-
|
72
68
|
def children
|
73
69
|
@children ||= base_children_doc
|
74
70
|
end
|
75
71
|
|
76
|
-
def children!
|
77
|
-
@children = base_children_doc
|
78
|
-
end
|
79
|
-
|
80
72
|
def episodes_from_video(node)
|
81
73
|
node.search("Video").map { |m| Plex::Episode.new(self, m.attr('key')) }
|
82
74
|
end
|
@@ -85,9 +77,5 @@ module Plex
|
|
85
77
|
@directory ||= xml_doc.search("Directory").first
|
86
78
|
end
|
87
79
|
|
88
|
-
def directory!
|
89
|
-
@directory = xml_doc!.search("Directory").first
|
90
|
-
end
|
91
|
-
|
92
80
|
end
|
93
81
|
end
|
data/lib/plex-ruby/section.rb
CHANGED
@@ -7,7 +7,7 @@ module Plex
|
|
7
7
|
|
8
8
|
CATEGORIES = %w(collection firstCharacter genre year contentRating folder)
|
9
9
|
|
10
|
-
attr_reader *ATTRIBUTES.map {|m| Plex.
|
10
|
+
attr_reader *ATTRIBUTES.map {|m| Plex.underscore(m) }
|
11
11
|
attr_reader :library
|
12
12
|
|
13
13
|
# @param [Library] library this Section belongs to
|
@@ -16,7 +16,7 @@ module Plex
|
|
16
16
|
def initialize(library, node)
|
17
17
|
@library = library
|
18
18
|
ATTRIBUTES.each { |e|
|
19
|
-
instance_variable_set("@#{Plex.
|
19
|
+
instance_variable_set("@#{Plex.underscore(e)}", node.attr(e))
|
20
20
|
}
|
21
21
|
end
|
22
22
|
|
@@ -37,7 +37,7 @@ module Plex
|
|
37
37
|
# @return [Array] list of Shows or Movies in that group
|
38
38
|
GROUPS.each { |method|
|
39
39
|
class_eval %(
|
40
|
-
def #{Plex.
|
40
|
+
def #{Plex.underscore(method)}
|
41
41
|
Plex::Parser.new( self, Nokogiri::XML(open(url+key+'/#{method}')) ).parse
|
42
42
|
end
|
43
43
|
)
|
@@ -64,13 +64,13 @@ module Plex
|
|
64
64
|
# folder - where the video is stored
|
65
65
|
CATEGORIES.each { |method|
|
66
66
|
class_eval %(
|
67
|
-
def #{Plex.
|
68
|
-
@#{Plex.
|
67
|
+
def #{Plex.underscore(method)}s
|
68
|
+
@#{Plex.underscore(method)}s ||= grab_keys('#{method}')
|
69
69
|
end
|
70
|
-
def #{Plex.
|
71
|
-
@#{Plex.
|
70
|
+
def #{Plex.underscore(method)}s!
|
71
|
+
@#{Plex.underscore(method)}s = grab_keys('#{method}')
|
72
72
|
end
|
73
|
-
def by_#{Plex.
|
73
|
+
def by_#{Plex.underscore(method)}(val)
|
74
74
|
Plex::Parser.new( self, Nokogiri::XML(open(url+key+"/#{method}/\#{val}")) ).parse
|
75
75
|
end
|
76
76
|
)
|
data/lib/plex-ruby/show.rb
CHANGED
@@ -1,10 +1,9 @@
|
|
1
1
|
module Plex
|
2
|
-
# Found at /library/metadata/:key
|
3
2
|
class Show
|
4
3
|
|
5
|
-
ATTRIBUTES = %w(guid studio title contentRating summary index
|
6
|
-
|
7
|
-
|
4
|
+
ATTRIBUTES = %w(ratingKey guid studio type title contentRating summary index
|
5
|
+
rating year thumb art leafCount viewedLeafCount addedAt
|
6
|
+
updatedAt)
|
8
7
|
|
9
8
|
attr_reader :section, :key
|
10
9
|
|
@@ -13,17 +12,17 @@ module Plex
|
|
13
12
|
def initialize(section, key)
|
14
13
|
@section = section
|
15
14
|
@key = key
|
16
|
-
end
|
17
15
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
16
|
+
directory.attributes.each do |method, val|
|
17
|
+
define_singleton_method(Plex.underscore(method).to_sym) do
|
18
|
+
val.value
|
19
|
+
end
|
20
|
+
define_singleton_method(Plex.underscore(method+'!').to_sym) do
|
21
|
+
puts "Plex::Show##{Plex.underscore(method+'!')} IS DEPRECATED! Use Plex::Show##{Plex.underscore(method)} instead."
|
22
|
+
self.send(Plex.underscore(method))
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
27
26
|
|
28
27
|
# The list of seasons in the library that belong to this Show
|
29
28
|
#
|
@@ -32,8 +31,12 @@ module Plex
|
|
32
31
|
@seasons ||= search_children children
|
33
32
|
end
|
34
33
|
|
35
|
-
|
36
|
-
|
34
|
+
# Select a particular season
|
35
|
+
#
|
36
|
+
# @param [Fixnum, String] season index number
|
37
|
+
# @return [Season] season with the index of number
|
38
|
+
def season(number)
|
39
|
+
seasons.select { |sea| sea.index.to_i == sea.to_i }.first
|
37
40
|
end
|
38
41
|
|
39
42
|
def url
|
@@ -62,32 +65,24 @@ module Plex
|
|
62
65
|
@xml_doc ||= base_doc
|
63
66
|
end
|
64
67
|
|
65
|
-
def xml_doc!
|
66
|
-
@xml_doc = base_doc
|
67
|
-
end
|
68
|
-
|
69
68
|
def children
|
70
69
|
@children ||= children_base
|
71
70
|
end
|
72
71
|
|
73
|
-
def children!
|
74
|
-
@children = children_base
|
75
|
-
end
|
76
|
-
|
77
72
|
def directory
|
78
73
|
@directory ||= xml_doc.search('Directory').first
|
79
74
|
end
|
80
75
|
|
81
|
-
def directory!
|
82
|
-
@directory = xml_doc!.search('Directory').first
|
83
|
-
end
|
84
|
-
|
85
76
|
def search_children(node)
|
86
77
|
node.search('Directory').map do |season|
|
87
|
-
|
78
|
+
plex_season.new(self, season.attr('key')[0..-10]) # Remove /children
|
88
79
|
end
|
89
80
|
end
|
90
81
|
|
82
|
+
def plex_season
|
83
|
+
@plex_season ||= Plex::Season
|
84
|
+
end
|
85
|
+
|
91
86
|
end
|
92
87
|
|
93
88
|
end
|
data/lib/plex-ruby/stream.rb
CHANGED
@@ -3,14 +3,14 @@ module Plex
|
|
3
3
|
|
4
4
|
ATTRIBUTES = %w(id streamType codec index language languageCode)
|
5
5
|
|
6
|
-
attr_reader *ATTRIBUTES.map {|m| Plex.snake_case(m) }
|
7
|
-
|
8
6
|
# @param [Nokogiri::XML::Element] nokogiri element that represents this
|
9
7
|
# Stream
|
10
8
|
def initialize(node)
|
11
|
-
|
12
|
-
|
13
|
-
|
9
|
+
node.attributes.each do |method, val|
|
10
|
+
define_singleton_method(Plex.underscore(method).to_sym) do
|
11
|
+
val.value
|
12
|
+
end
|
13
|
+
end
|
14
14
|
end
|
15
15
|
|
16
16
|
def ==(other)
|
data/lib/plex-ruby/version.rb
CHANGED
data/lib/plex-ruby/video.rb
CHANGED
@@ -5,15 +5,16 @@ module Plex
|
|
5
5
|
rating viewCount year tagline thumb art duration
|
6
6
|
originallyAvailableAt updatedAt)
|
7
7
|
|
8
|
-
attr_reader *ATTRIBUTES.map {|m| Plex.snake_case(m) }
|
9
8
|
attr_reader :media, :genres, :writers, :directors, :roles
|
10
9
|
|
11
10
|
# @param [Nokogiri::XML::Element] nokogiri element that represents this
|
12
11
|
# Video
|
13
12
|
def initialize(node)
|
14
|
-
|
15
|
-
|
16
|
-
|
13
|
+
node.attributes.each do |method, val|
|
14
|
+
define_singleton_method(Plex.underscore(method).to_sym) do
|
15
|
+
val.value
|
16
|
+
end
|
17
|
+
end
|
17
18
|
|
18
19
|
@media = Plex::Media.new(node.search('Media').first)
|
19
20
|
@genres = node.search('Genre').map { |m| Plex::Genre.new(m) }
|
data/test/test_client.rb
CHANGED
@@ -13,15 +13,15 @@ describe Plex::Client do
|
|
13
13
|
end
|
14
14
|
|
15
15
|
Plex::Client::NAV_METHODS.each { |method|
|
16
|
-
it "should properly communicate its ##{Plex.
|
17
|
-
assert @client.send(Plex.
|
16
|
+
it "should properly communicate its ##{Plex.underscore(method)} method" do
|
17
|
+
assert @client.send(Plex.underscore(method).to_sym)
|
18
18
|
FakeWeb.last_request.path.must_equal "/system/players/#{@client.name}/navigation/#{method}"
|
19
19
|
end
|
20
20
|
}
|
21
21
|
|
22
22
|
Plex::Client::PLAYBACK_METHODS.each { |method|
|
23
|
-
it "should properly communicate its ##{Plex.
|
24
|
-
assert @client.send(Plex.
|
23
|
+
it "should properly communicate its ##{Plex.underscore(method)} method" do
|
24
|
+
assert @client.send(Plex.underscore(method).to_sym)
|
25
25
|
FakeWeb.last_request.path.must_equal "/system/players/#{@client.name}/playback/#{method}"
|
26
26
|
end
|
27
27
|
}
|
data/test/test_episode.rb
CHANGED
@@ -13,7 +13,7 @@ describe Plex::Episode do
|
|
13
13
|
"@video", fake_video
|
14
14
|
)
|
15
15
|
|
16
|
-
(Plex::Video::ATTRIBUTES - %w(key)).map {|m| Plex.
|
16
|
+
(Plex::Video::ATTRIBUTES - %w(key)).map {|m| Plex.underscore(m) }.each { |method|
|
17
17
|
@episode.send(method.to_sym).must_equal fake_video.send(method.to_sym)
|
18
18
|
}
|
19
19
|
|
data/test/test_helper.rb
CHANGED
@@ -1,6 +1,18 @@
|
|
1
1
|
require 'plex-ruby'
|
2
2
|
require 'minitest/autorun'
|
3
3
|
|
4
|
+
class FakeAttr
|
5
|
+
|
6
|
+
def initialize(val)
|
7
|
+
@val = val
|
8
|
+
end
|
9
|
+
|
10
|
+
def value
|
11
|
+
@val
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
|
4
16
|
|
5
17
|
class FakeNode
|
6
18
|
|
@@ -9,7 +21,13 @@ class FakeNode
|
|
9
21
|
end
|
10
22
|
|
11
23
|
def attr(value)
|
12
|
-
@hash[Plex.
|
24
|
+
@hash[Plex.underscore(value).to_sym]
|
25
|
+
end
|
26
|
+
|
27
|
+
def attributes
|
28
|
+
@hash.each_with_object({}) do |(key, val), obj|
|
29
|
+
obj[Plex.camelize(key)] = FakeAttr.new(val)
|
30
|
+
end
|
13
31
|
end
|
14
32
|
|
15
33
|
def search(value)
|
@@ -37,41 +55,43 @@ FAKE_CLIENT_NODE_HASH = {
|
|
37
55
|
|
38
56
|
FAKE_SHOW_NODE_HASH = {
|
39
57
|
Directory: FakeNode.new({
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
+
rating_key: "9",
|
59
|
+
guid: "com.plexapp.agents.thetvdb://73545?lang=en",
|
60
|
+
studio: "SciFi",
|
61
|
+
type: "show",
|
62
|
+
title: "Battlestar Galactica (2003)",
|
63
|
+
content_rating: "TV-14",
|
64
|
+
summary: "In a distant part of the universe, a civilization of humans live on planets known as the Twelve Colonies. In the past, the Colonies have been at war with a cybernetic race known as the Cylons. 40 years after the first war the Cylons launch a devastating attack on the Colonies. The only military ship that survived the attack takes up the task of leading a small fugitive fleet of survivors into space in search of a fabled refuge known as Earth.",
|
65
|
+
index: "1",
|
66
|
+
rating: "9.3",
|
67
|
+
year: "2003",
|
68
|
+
thumb: "/library/metadata/9/thumb?t=1323220437",
|
69
|
+
art: "/library/metadata/9/art?t=1323220437",
|
70
|
+
banner: "/library/metadata/9/banner?t=1323220437",
|
71
|
+
theme: "/library/metadata/9/theme?t=1323220437",
|
72
|
+
duration: "3600000",
|
73
|
+
originally_available_at: "2003-12-08",
|
74
|
+
leaf_count: "13",
|
75
|
+
viewed_leaf_count: "0",
|
76
|
+
added_at: "1323213639",
|
77
|
+
updated_at: "1323220437"
|
58
78
|
})
|
59
79
|
}
|
60
80
|
|
61
81
|
FAKE_SEASON_NODE_HASH = {
|
62
82
|
Directory: FakeNode.new({
|
63
|
-
|
64
|
-
|
65
|
-
guid:
|
66
|
-
type:
|
67
|
-
title:
|
68
|
-
summary:
|
69
|
-
index:
|
70
|
-
thumb:
|
71
|
-
leaf_count:
|
72
|
-
viewed_leaf_count:
|
73
|
-
added_at:
|
74
|
-
updated_at:
|
83
|
+
rating_key: "10",
|
84
|
+
key: "/library/metadata/10/children",
|
85
|
+
guid: "com.plexapp.agents.thetvdb://73545/1?lang=en",
|
86
|
+
type: "season",
|
87
|
+
title: "Season 1",
|
88
|
+
summary: "",
|
89
|
+
index: "1",
|
90
|
+
thumb: "/library/metadata/10/thumb?t=1323220437",
|
91
|
+
leaf_count: "13",
|
92
|
+
viewed_leaf_count: "0",
|
93
|
+
added_at: "1323213639",
|
94
|
+
updated_at: "1323220437"
|
75
95
|
})
|
76
96
|
}
|
77
97
|
|
data/test/test_media.rb
CHANGED
@@ -5,7 +5,7 @@ describe Plex::Media do
|
|
5
5
|
@media = Plex::Media.new( FakeNode.new(FAKE_MEDIA_NODE_HASH) )
|
6
6
|
end
|
7
7
|
|
8
|
-
Plex::Media::ATTRIBUTES.map {|m| Plex.
|
8
|
+
Plex::Media::ATTRIBUTES.map {|m| Plex.underscore(m) }.each { |method|
|
9
9
|
it "should properly respond to ##{method}" do
|
10
10
|
@media.send(method.to_sym).must_equal FAKE_MEDIA_NODE_HASH[method.to_sym]
|
11
11
|
end
|
data/test/test_movie.rb
CHANGED
@@ -13,7 +13,7 @@ describe Plex::Movie do
|
|
13
13
|
"@video", fake_video
|
14
14
|
)
|
15
15
|
|
16
|
-
(Plex::Video::ATTRIBUTES - %w(key)).map {|m| Plex.
|
16
|
+
(Plex::Video::ATTRIBUTES - %w(key)).map {|m| Plex.underscore(m) }.each { |method|
|
17
17
|
@movie.send(method.to_sym).must_equal fake_video.send(method.to_sym)
|
18
18
|
}
|
19
19
|
|
data/test/test_part.rb
CHANGED
@@ -5,7 +5,7 @@ describe Plex::Part do
|
|
5
5
|
@part = Plex::Part.new( FakeNode.new(FAKE_PART_NODE_HASH) )
|
6
6
|
end
|
7
7
|
|
8
|
-
Plex::Part::ATTRIBUTES.map {|m| Plex.
|
8
|
+
Plex::Part::ATTRIBUTES.map {|m| Plex.underscore(m) }.each { |method|
|
9
9
|
it "should properly respond to ##{method}" do
|
10
10
|
@part.send(method.to_sym).must_equal FAKE_PART_NODE_HASH[method.to_sym]
|
11
11
|
end
|
data/test/test_plex.rb
CHANGED
@@ -2,10 +2,10 @@ require 'test_helper'
|
|
2
2
|
|
3
3
|
describe Plex do
|
4
4
|
|
5
|
-
it "converts words from camelCase to
|
6
|
-
Plex.
|
7
|
-
Plex.
|
8
|
-
Plex.
|
5
|
+
it "converts words from camelCase to underscore" do
|
6
|
+
Plex.underscore("camelCase").must_equal "camel_case"
|
7
|
+
Plex.underscore("snake_case").must_equal "snake_case"
|
8
|
+
Plex.underscore("normal").must_equal "normal"
|
9
9
|
end
|
10
10
|
|
11
11
|
end
|
data/test/test_season.rb
CHANGED
@@ -1,13 +1,19 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
|
+
class TestSeason < Plex::Season
|
4
|
+
def initialize(parent, key)
|
5
|
+
@xml_doc = FakeNode.new(FAKE_SEASON_NODE_HASH)
|
6
|
+
super(parent, key)
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
3
10
|
describe Plex::Season do
|
4
11
|
before do
|
5
12
|
@show = FakeParent.new
|
6
|
-
@season =
|
7
|
-
@season.instance_variable_set("@xml_doc", FakeNode.new(FAKE_SEASON_NODE_HASH))
|
13
|
+
@season = TestSeason.new(@show, '/library/metadata/10')
|
8
14
|
end
|
9
15
|
|
10
|
-
Plex::Season::ATTRIBUTES.map{|m| Plex.
|
16
|
+
Plex::Season::ATTRIBUTES.map{|m| Plex.underscore(m)}.each { |method|
|
11
17
|
it "should properly respond to ##{method}" do
|
12
18
|
@season.send(method.to_sym).must_equal FAKE_SEASON_NODE_HASH[:Directory].attr(method)
|
13
19
|
end
|
data/test/test_section.rb
CHANGED
@@ -6,7 +6,7 @@ describe Plex::Section do
|
|
6
6
|
@section = Plex::Section.new(@library, FakeNode.new(FAKE_SECTION_NODE_HASH))
|
7
7
|
end
|
8
8
|
|
9
|
-
(Plex::Section::ATTRIBUTES - %w(key)).map{|m| Plex.
|
9
|
+
(Plex::Section::ATTRIBUTES - %w(key)).map{|m| Plex.underscore(m)}.each { |method|
|
10
10
|
it "should respond to ##{method}" do
|
11
11
|
@section.send(method.to_sym).must_equal FAKE_SECTION_NODE_HASH[method.to_sym]
|
12
12
|
end
|
data/test/test_show.rb
CHANGED
@@ -1,24 +1,32 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
|
+
class TestShow < Plex::Show
|
4
|
+
def initialize(parent, key)
|
5
|
+
@xml_doc = FakeNode.new(FAKE_SHOW_NODE_HASH)
|
6
|
+
super(parent, key)
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
|
3
11
|
describe Plex::Show do
|
4
12
|
before do
|
5
13
|
@section = FakeParent.new
|
6
|
-
@show =
|
7
|
-
@show.instance_variable_set("@xml_doc", FakeNode.new(FAKE_SHOW_NODE_HASH))
|
14
|
+
@show = TestShow.new(@section, '/library/metadata/10')
|
8
15
|
end
|
9
16
|
|
10
|
-
Plex::Show::ATTRIBUTES.map{|m| Plex.
|
17
|
+
Plex::Show::ATTRIBUTES.map{|m| Plex.underscore(m)}.each { |method|
|
11
18
|
it "should properly respond to ##{method}" do
|
12
19
|
@show.send(method.to_sym).must_equal FAKE_SHOW_NODE_HASH[:Directory].attr(method)
|
13
20
|
end
|
14
21
|
}
|
15
22
|
|
16
|
-
it "should return a list of
|
23
|
+
it "should return a list of seasons" do
|
17
24
|
@show.instance_variable_set(
|
18
25
|
"@children", FakeNode.new(FAKE_SEASON_NODE_HASH)
|
19
26
|
)
|
27
|
+
@show.instance_variable_set( "@plex_season", TestSeason )
|
20
28
|
@show.seasons.must_equal(
|
21
|
-
[
|
29
|
+
[ TestSeason.new(FakeParent.new, FAKE_SEASON_NODE_HASH[:Directory].attr('key')[0..-10]) ]
|
22
30
|
)
|
23
31
|
end
|
24
32
|
|
data/test/test_stream.rb
CHANGED
@@ -5,7 +5,7 @@ describe Plex::Stream do
|
|
5
5
|
@stream = Plex::Stream.new( FakeNode.new(FAKE_STREAM_NODE_HASH) )
|
6
6
|
end
|
7
7
|
|
8
|
-
Plex::Stream::ATTRIBUTES.map{|m| Plex.
|
8
|
+
Plex::Stream::ATTRIBUTES.map{|m| Plex.underscore(m)}.each { |method|
|
9
9
|
it "should properly respond to ##{method}" do
|
10
10
|
@stream.send(method.to_sym).must_equal FAKE_STREAM_NODE_HASH[method.to_sym]
|
11
11
|
end
|
data/test/test_video.rb
CHANGED
@@ -6,14 +6,14 @@ describe Plex::Video do
|
|
6
6
|
@video = Plex::Video.new( FakeNode.new(FAKE_VIDEO_NODE_HASH) )
|
7
7
|
end
|
8
8
|
|
9
|
-
Plex::Video::ATTRIBUTES.map {|m| Plex.
|
9
|
+
Plex::Video::ATTRIBUTES.map {|m| Plex.underscore(m) }.each { |method|
|
10
10
|
it "should correctly respond to ##{method}" do
|
11
11
|
@video.send(method.to_sym).must_equal FAKE_VIDEO_NODE_HASH[method.to_sym]
|
12
12
|
end
|
13
13
|
}
|
14
14
|
|
15
15
|
it "should correctly referance its media object" do
|
16
|
-
@video.media.must_equal Plex::Media.new(FAKE_VIDEO_NODE_HASH[:Media])
|
16
|
+
@video.instance_variable_get("@media").must_equal Plex::Media.new(FAKE_VIDEO_NODE_HASH[:Media])
|
17
17
|
end
|
18
18
|
|
19
19
|
it "should correctly referance its genre objects" do
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: plex-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 1.
|
5
|
+
version: 1.3.0
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Eric Koslow
|
@@ -10,11 +10,12 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-12-
|
13
|
+
date: 2011-12-21 00:00:00 -05:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: minitest
|
18
|
+
prerelease: false
|
18
19
|
requirement: &id001 !ruby/object:Gem::Requirement
|
19
20
|
none: false
|
20
21
|
requirements:
|
@@ -22,10 +23,10 @@ dependencies:
|
|
22
23
|
- !ruby/object:Gem::Version
|
23
24
|
version: "0"
|
24
25
|
type: :development
|
25
|
-
prerelease: false
|
26
26
|
version_requirements: *id001
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
|
+
prerelease: false
|
29
30
|
requirement: &id002 !ruby/object:Gem::Requirement
|
30
31
|
none: false
|
31
32
|
requirements:
|
@@ -33,10 +34,10 @@ dependencies:
|
|
33
34
|
- !ruby/object:Gem::Version
|
34
35
|
version: "0"
|
35
36
|
type: :development
|
36
|
-
prerelease: false
|
37
37
|
version_requirements: *id002
|
38
38
|
- !ruby/object:Gem::Dependency
|
39
39
|
name: fakeweb
|
40
|
+
prerelease: false
|
40
41
|
requirement: &id003 !ruby/object:Gem::Requirement
|
41
42
|
none: false
|
42
43
|
requirements:
|
@@ -44,10 +45,10 @@ dependencies:
|
|
44
45
|
- !ruby/object:Gem::Version
|
45
46
|
version: "0"
|
46
47
|
type: :development
|
47
|
-
prerelease: false
|
48
48
|
version_requirements: *id003
|
49
49
|
- !ruby/object:Gem::Dependency
|
50
50
|
name: nokogiri
|
51
|
+
prerelease: false
|
51
52
|
requirement: &id004 !ruby/object:Gem::Requirement
|
52
53
|
none: false
|
53
54
|
requirements:
|
@@ -55,7 +56,6 @@ dependencies:
|
|
55
56
|
- !ruby/object:Gem::Version
|
56
57
|
version: "0"
|
57
58
|
type: :runtime
|
58
|
-
prerelease: false
|
59
59
|
version_requirements: *id004
|
60
60
|
description: Extracts the Plex API into easy to write ruby code
|
61
61
|
email:
|
@@ -119,18 +119,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
119
119
|
requirements:
|
120
120
|
- - ">="
|
121
121
|
- !ruby/object:Gem::Version
|
122
|
-
hash: -4420716880571956707
|
123
|
-
segments:
|
124
|
-
- 0
|
125
122
|
version: "0"
|
126
123
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
127
124
|
none: false
|
128
125
|
requirements:
|
129
126
|
- - ">="
|
130
127
|
- !ruby/object:Gem::Version
|
131
|
-
hash: -4420716880571956707
|
132
|
-
segments:
|
133
|
-
- 0
|
134
128
|
version: "0"
|
135
129
|
requirements: []
|
136
130
|
|