plex-ruby 0.3.1 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.md CHANGED
@@ -19,3 +19,13 @@
19
19
 
20
20
  * Now allows for multiple servers
21
21
  * Fix a misspelling of 'library' that broke the gem (Sorry!)
22
+
23
+ ## 0.3.1
24
+
25
+ * Fix `gem install plex-ruby`, require `open-uri` as a runtime dependecy
26
+ wasn't a good idea
27
+
28
+ ## 1.0.0
29
+
30
+ * Added a test suite that can be run with `rake`
31
+ * I feel this a production ready, will continue to add features
data/Rakefile CHANGED
@@ -1,2 +1,11 @@
1
1
  require 'bundler'
2
2
  Bundler::GemHelper.install_tasks
3
+
4
+ require 'rake/testtask'
5
+ Rake::TestTask.new do |i|
6
+ i.libs << 'test'
7
+ i.test_files = FileList['test/test_*.rb']
8
+ end
9
+
10
+ task default: :test
11
+
@@ -24,6 +24,14 @@ module Plex
24
24
  season.url
25
25
  end
26
26
 
27
+ def ==(other)
28
+ if other.is_a? Plex::Episode
29
+ key == other.key
30
+ else
31
+ super
32
+ end
33
+ end
34
+
27
35
  private
28
36
 
29
37
  def xml_doc
@@ -41,6 +41,14 @@ module Plex
41
41
  server.url
42
42
  end
43
43
 
44
+ def ==(other)
45
+ if other.is_a? Library
46
+ server == other.server
47
+ else
48
+ super
49
+ end
50
+ end
51
+
44
52
  private
45
53
 
46
54
  def search_sections(doc, key = nil)
@@ -21,5 +21,13 @@ module Plex
21
21
  @parts = node.search("Part").map { |m| Plex::Part.new(m) }
22
22
  end
23
23
 
24
+ def ==(other)
25
+ if other.is_a? Media
26
+ id == other.id
27
+ else
28
+ super
29
+ end
30
+ end
31
+
24
32
  end
25
33
  end
@@ -12,7 +12,15 @@ module Plex
12
12
  @file = node.attr('file')
13
13
  @size = node.attr('size')
14
14
 
15
- @streams = node.search('Stream').map { |m| Stream.new(m) }
15
+ @streams = node.search('Stream').map { |m| Plex::Stream.new(m) }
16
+ end
17
+
18
+ def ==(other)
19
+ if other.is_a? Plex::Part
20
+ id == other.id
21
+ else
22
+ super
23
+ end
16
24
  end
17
25
 
18
26
  end
@@ -43,6 +43,14 @@ module Plex
43
43
  show.url
44
44
  end
45
45
 
46
+ def ==(other)
47
+ if other.is_a? Plex::Season
48
+ key == other.key
49
+ else
50
+ super
51
+ end
52
+ end
53
+
46
54
  private
47
55
 
48
56
  def base_doc
@@ -3,7 +3,7 @@ module Plex
3
3
 
4
4
  GROUPS = %w(all unwatched newest recentlyAdded recentlyViewed onDeck)
5
5
 
6
- attr_reader :library, :refreshing, :type, :title, :art, :agent, :scanner,
6
+ attr_reader :library, :refreshing, :key, :type, :title, :art, :agent, :scanner,
7
7
  :language, :updated_at
8
8
 
9
9
  # @param [Library] library this Section belongs to
@@ -53,5 +53,13 @@ module Plex
53
53
  library.url
54
54
  end
55
55
 
56
+ def ==(other)
57
+ if other.is_a? Plex::Section
58
+ key == other.key
59
+ else
60
+ super
61
+ end
62
+ end
63
+
56
64
  end
57
65
  end
@@ -40,6 +40,14 @@ module Plex
40
40
  section.url
41
41
  end
42
42
 
43
+ def ==(other)
44
+ if other.is_a? Plex::Show
45
+ key == other.key
46
+ else
47
+ super
48
+ end
49
+ end
50
+
43
51
  private
44
52
 
45
53
  def base_doc
@@ -14,5 +14,13 @@ module Plex
14
14
  @language_code = node.attr('language_code')
15
15
  end
16
16
 
17
+ def ==(other)
18
+ if other.is_a? Plex::Stream
19
+ id == other.id
20
+ else
21
+ super
22
+ end
23
+ end
24
+
17
25
  end
18
26
  end
@@ -10,6 +10,14 @@ module Plex
10
10
  @tag = node.attr('tag')
11
11
  end
12
12
 
13
+ def ==(other)
14
+ if other.is_a? #{type}
15
+ id == other.id
16
+ else
17
+ super
18
+ end
19
+ end
20
+
13
21
  end
14
22
  end
15
23
  CLASS
@@ -26,5 +34,13 @@ module Plex
26
34
  @role = node.attr('role')
27
35
  end
28
36
 
37
+ def ==(other)
38
+ if other.is_a? Role
39
+ id == other.id
40
+ else
41
+ super
42
+ end
43
+ end
44
+
29
45
  end
30
46
  end
@@ -1,3 +1,3 @@
1
1
  module Plex
2
- VERSION = "0.3.1"
2
+ VERSION = "1.0.0"
3
3
  end
@@ -18,14 +18,14 @@ module Plex
18
18
  @content_rating = node.attr('contentRating')
19
19
  @summary = node.attr('summary')
20
20
  @rating = node.attr('rating')
21
- @viewCount = node.attr('viewCount')
21
+ @view_count = node.attr('viewCount')
22
22
  @year = node.attr('year')
23
23
  @tagline = node.attr('tagline')
24
24
  @thumb = node.attr('thumb')
25
25
  @art = node.attr('art')
26
26
  @duration = node.attr('duration')
27
27
  @originally_available_at = node.attr('originallyAvailableAt')
28
- @updatedAt = node.attr('updatedAt')
28
+ @updated_at = node.attr('updatedAt')
29
29
 
30
30
  @media = Plex::Media.new(node.search('Media').first)
31
31
  @genres = node.search('Genre').map { |m| Plex::Genre.new(m) }
@@ -34,5 +34,14 @@ module Plex
34
34
  @roles = node.search('Role').map { |m| Plex::Role.new(m) }
35
35
  end
36
36
 
37
+
38
+ def ==(other)
39
+ if other.is_a? Video
40
+ key == other.key
41
+ else
42
+ super
43
+ end
44
+ end
45
+
37
46
  end
38
47
  end
data/plex-ruby.gemspec CHANGED
@@ -8,7 +8,7 @@ Gem::Specification.new do |s|
8
8
  s.platform = Gem::Platform::RUBY
9
9
  s.authors = ["Eric Koslow"]
10
10
  s.email = ["ekoslow@gmail.com"]
11
- s.homepage = ""
11
+ s.homepage = "https://github.com/ekosz/Plex-Ruby"
12
12
  s.summary = %q{Plex APIs in easy ruby code}
13
13
  s.description = %q{Extracts the Plex API into easy to write ruby code}
14
14
 
File without changes
@@ -0,0 +1,32 @@
1
+ require 'test_helper'
2
+
3
+ describe Plex::Episode do
4
+
5
+ before do
6
+ @episode = Plex::Episode.new(FakeParent.new, '/libary/metadata/6')
7
+ end
8
+
9
+ it "should pass the proper method calls to its video object" do
10
+ fake_video = Plex::Video.new( FakeNode.new(FAKE_VIDEO_NODE_HASH) )
11
+ @episode.instance_variable_set(
12
+ "@video", fake_video
13
+ )
14
+
15
+ %w(studio type title title_sort content_rating summary rating view_count year
16
+ tagline thumb art duration originally_available_at updated_at).each { |method|
17
+ @episode.send(method.to_sym).must_equal fake_video.send(method.to_sym)
18
+ }
19
+
20
+ @episode.media.must_equal fake_video.media
21
+
22
+ @episode.genres.must_equal fake_video.genres
23
+
24
+ @episode.writers.must_equal fake_video.writers
25
+
26
+ @episode.directors.must_equal fake_video.directors
27
+
28
+ @episode.roles.must_equal fake_video.roles
29
+
30
+ end
31
+
32
+ end
data/test/test_helper.rb CHANGED
@@ -0,0 +1,166 @@
1
+ require 'plex-ruby'
2
+ require 'minitest/autorun'
3
+
4
+
5
+ class FakeNode
6
+
7
+ def initialize(hash)
8
+ @hash = hash
9
+ end
10
+
11
+ def attr(value)
12
+ @hash[Plex.snake_case(value).to_sym]
13
+ end
14
+
15
+ def search(value)
16
+ Array( @hash[value.to_sym] )
17
+ end
18
+
19
+ end
20
+
21
+ class FakeParent
22
+
23
+ def url
24
+ 'http://localhost:32400'
25
+ end
26
+
27
+ end
28
+
29
+ FAKE_SHOW_NODE_HASH = {
30
+ Directory: FakeNode.new({
31
+ guid: 'com.plexapp.agents.thetvdb://73545/1?lang=en',
32
+ studio: 'Big Dog',
33
+ title: 'Friends',
34
+ content_rating: 'MV-14',
35
+ summary: '3 friends go on an adventure',
36
+ index: '1',
37
+ rating: '10',
38
+ year: '3033',
39
+ thumb: '/file/path.jpg',
40
+ art: '/other/file/path.png',
41
+ banner: '/yet/another/file/path.jpg2000',
42
+ theme: 'Chrismasy?',
43
+ duration: '2345234',
44
+ originally_available_at: '1323213639',
45
+ leaf_count: '1',
46
+ viewed_leaf_count: '0',
47
+ added_at: '1323213639',
48
+ updated_at: '1323220437',
49
+ })
50
+ }
51
+
52
+ FAKE_SEASON_NODE_HASH = {
53
+ Directory: FakeNode.new({
54
+ key: '/library/metadata/10/children',
55
+ rating_key: '10',
56
+ guid: 'com.plexapp.agents.thetvdb://73545/1?lang=en',
57
+ type: 'season',
58
+ title: 'Season 1',
59
+ summary: '',
60
+ index: '1',
61
+ thumb: '/library/metadata/10/thumb?t=1323220437',
62
+ leaf_count: '13',
63
+ viewed_leaf_count: '0',
64
+ added_at: '1323213639',
65
+ updated_at: '1323220437'
66
+ })
67
+ }
68
+
69
+ FAKE_SECTION_NODE_HASH = {
70
+ refreshing: '0',
71
+ key: '1',
72
+ type: 'movie',
73
+ title: 'Movies',
74
+ art: '/:/resources/movie-fanart.jpg',
75
+ agent: 'com.plexapp.agents.imdb',
76
+ scanner: 'Plex Movie Scanner',
77
+ language: 'en',
78
+ updated_at: '1323213684'
79
+ }
80
+
81
+ FAKE_LIBRARY_NODE_HASH = {
82
+ :Directory => FakeNode.new(FAKE_SECTION_NODE_HASH),
83
+ :"Directory[@key='#{FAKE_SECTION_NODE_HASH[:key]}']" => FakeNode.new(FAKE_SECTION_NODE_HASH)
84
+ }
85
+
86
+ FAKE_STREAM_NODE_HASH = {
87
+ id: '100',
88
+ stream_type: 'fast',
89
+ codec: 'aac',
90
+ index: '5',
91
+ language: 'English',
92
+ language_code: 'en'
93
+ }
94
+
95
+ FAKE_PART_NODE_HASH = {
96
+ id: '45',
97
+ key: '1',
98
+ duration: '1600',
99
+ file: '/some/file/path/blah.mkv',
100
+ size: '6500',
101
+ Stream: FakeNode.new( FAKE_STREAM_NODE_HASH )
102
+ }
103
+
104
+ FAKE_MEDIA_NODE_HASH = {
105
+ id: '63',
106
+ durration: '3200',
107
+ bitrate: '24p',
108
+ aspect_ratio: '4:3',
109
+ audio_channels: '2',
110
+ audio_codec: 'mp3',
111
+ video_codec: 'mp4',
112
+ video_resolution: '720p',
113
+ container: 'mkv',
114
+ video_frame_rate: '32/2',
115
+ Part: FakeNode.new( FAKE_PART_NODE_HASH )
116
+ }
117
+
118
+ FAKE_GENRE_NODE_HASH = {
119
+ id: '13',
120
+ tag: 'Action'
121
+ }
122
+
123
+ FAKE_WRITER_NODE_HASH = {
124
+ id: '14',
125
+ tag: 'Poe'
126
+ }
127
+
128
+ FAKE_DIRECTOR_NODE_HASH = {
129
+ id: '15',
130
+ tag: 'King'
131
+ }
132
+
133
+ FAKE_ROLE_NODE_HASH = {
134
+ id: '16',
135
+ tag: 'Red Haired Person',
136
+ role: "Ron"
137
+ }
138
+
139
+ FAKE_VIDEO_NODE_HASH = {
140
+ rating_key: '7',
141
+ key: '/library/7',
142
+ studio: 'Six',
143
+ type: 'movie',
144
+ title: 'Men in Black (2011)',
145
+ title_sort: 'Men in Black',
146
+ content_rating: 'MA',
147
+ summary: 'Two men fight the entire world!',
148
+ rating: '9.9',
149
+ view_count: '0',
150
+ year: '2011',
151
+ tagline: 'Fight the Power!',
152
+ thumb: '/some/long/filename.jpg',
153
+ art: '/some/other/long/filename.jpg',
154
+ duration: '3400',
155
+ originally_available_at: '324124',
156
+ updated_at: '342214',
157
+ Media: FakeNode.new( FAKE_MEDIA_NODE_HASH ),
158
+ Genre: FakeNode.new( FAKE_GENRE_NODE_HASH ),
159
+ Writer: FakeNode.new( FAKE_WRITER_NODE_HASH ),
160
+ Director: FakeNode.new( FAKE_DIRECTOR_NODE_HASH ),
161
+ Role: FakeNode.new( FAKE_ROLE_NODE_HASH )
162
+ }
163
+
164
+ FAKE_PARSER_NODE_HASH = {
165
+ MediaContainer: FakeNode.new(FAKE_VIDEO_NODE_HASH)
166
+ }
@@ -0,0 +1,21 @@
1
+ require 'test_helper'
2
+
3
+ describe Plex::Library do
4
+ before do
5
+ @library = Plex::Library.new(FakeParent.new)
6
+ @library.instance_variable_set("@xml_doc", FakeNode.new(FAKE_LIBRARY_NODE_HASH))
7
+ end
8
+
9
+
10
+ it "should return a list of sections" do
11
+ @library.sections.must_equal(
12
+ Array( Plex::Section.new(nil, FakeNode.new(FAKE_SECTION_NODE_HASH)) )
13
+ )
14
+ end
15
+
16
+ it "should return the proper section when specisfied" do
17
+ @library.section(FAKE_SECTION_NODE_HASH[:key]).must_equal(
18
+ Plex::Section.new(nil, FakeNode.new(FAKE_SECTION_NODE_HASH))
19
+ )
20
+ end
21
+ end
@@ -0,0 +1,19 @@
1
+ require 'test_helper'
2
+
3
+ describe Plex::Media do
4
+ before do
5
+ @media = Plex::Media.new( FakeNode.new(FAKE_MEDIA_NODE_HASH) )
6
+ end
7
+
8
+ %w(id durration bitrate aspect_ratio audio_channels audio_codec video_codec
9
+ video_resolution container video_frame_rate).each { |method|
10
+ it "should properly respond to ##{method}" do
11
+ @media.send(method.to_sym).must_equal FAKE_MEDIA_NODE_HASH[method.to_sym]
12
+ end
13
+ }
14
+
15
+ it "should properly respond to #parts" do
16
+ @media.parts.must_equal Array( Plex::Part.new(FakeNode.new(FAKE_PART_NODE_HASH)) )
17
+ end
18
+
19
+ end
@@ -0,0 +1,32 @@
1
+ require 'test_helper'
2
+
3
+ describe Plex::Movie do
4
+
5
+ before do
6
+ @movie = Plex::Movie.new(FakeParent.new, '/libary/metadata/6')
7
+ end
8
+
9
+ it "should pass the proper method calls to its video object" do
10
+ fake_video = Plex::Video.new( FakeNode.new(FAKE_VIDEO_NODE_HASH) )
11
+ @movie.instance_variable_set(
12
+ "@video", fake_video
13
+ )
14
+
15
+ %w(studio type title title_sort content_rating summary rating view_count year
16
+ tagline thumb art duration originally_available_at updated_at).each { |method|
17
+ @movie.send(method.to_sym).must_equal fake_video.send(method.to_sym)
18
+ }
19
+
20
+ @movie.media.must_equal fake_video.media
21
+
22
+ @movie.genres.must_equal fake_video.genres
23
+
24
+ @movie.writers.must_equal fake_video.writers
25
+
26
+ @movie.directors.must_equal fake_video.directors
27
+
28
+ @movie.roles.must_equal fake_video.roles
29
+
30
+ end
31
+
32
+ end
data/test/test_part.rb ADDED
@@ -0,0 +1,19 @@
1
+ require 'test_helper'
2
+
3
+ describe Plex::Part do
4
+ before do
5
+ @part = Plex::Part.new( FakeNode.new(FAKE_PART_NODE_HASH) )
6
+ end
7
+
8
+ %w(id key duration file size).each { |method|
9
+ it "should properly respond to ##{method}" do
10
+ @part.send(method.to_sym).must_equal FAKE_PART_NODE_HASH[method.to_sym]
11
+ end
12
+ }
13
+
14
+ it "should properly respond to #streams" do
15
+ @part.streams.must_equal Array( Plex::Stream.new(FakeNode.new(FAKE_STREAM_NODE_HASH)) )
16
+ end
17
+
18
+ end
19
+
data/test/test_plex.rb ADDED
@@ -0,0 +1,11 @@
1
+ require 'test_helper'
2
+
3
+ describe Plex do
4
+
5
+ it "converts words from camelCase to snake_case" do
6
+ Plex.snake_case("camelCase").must_equal "camel_case"
7
+ Plex.snake_case("snake_case").must_equal "snake_case"
8
+ Plex.snake_case("normal").must_equal "normal"
9
+ end
10
+
11
+ end
@@ -0,0 +1,24 @@
1
+ require 'test_helper'
2
+
3
+ describe Plex::Season do
4
+ before do
5
+ @season = Plex::Season.new(FakeParent.new, '/library/metadata/10')
6
+ @season.instance_variable_set("@xml_doc", FakeNode.new(FAKE_SEASON_NODE_HASH))
7
+ end
8
+
9
+ Plex::Season::ATTRIBUTES.map{|m| Plex.snake_case(m)}.each { |method|
10
+ it "should properly respond to ##{method}" do
11
+ @season.send(method.to_sym).must_equal FAKE_SEASON_NODE_HASH[:Directory].attr(method)
12
+ end
13
+ }
14
+
15
+ it "should return a list of episodes" do
16
+ @season.instance_variable_set(
17
+ "@children", FakeNode.new({Video: FakeNode.new(FAKE_VIDEO_NODE_HASH)})
18
+ )
19
+ @season.episodes.must_equal(
20
+ [ Plex::Episode.new(FakeParent.new, FAKE_VIDEO_NODE_HASH[:key]) ]
21
+ )
22
+ end
23
+
24
+ end
@@ -0,0 +1,13 @@
1
+ require 'test_helper'
2
+
3
+ describe Plex::Section do
4
+ before do
5
+ @section = Plex::Section.new(FakeParent.new, FakeNode.new(FAKE_SECTION_NODE_HASH))
6
+ end
7
+
8
+ %w(refreshing type title art agent scanner language updated_at).each { |method|
9
+ it "should respond to ##{method}" do
10
+ @section.send(method.to_sym).must_equal FAKE_SECTION_NODE_HASH[method.to_sym]
11
+ end
12
+ }
13
+ end
@@ -0,0 +1,24 @@
1
+ require 'test_helper'
2
+
3
+ describe Plex::Server do
4
+ before do
5
+ @server = Plex::Server.new('localhost', 3000)
6
+ end
7
+
8
+ it "has a host" do
9
+ @server.host.must_equal 'localhost'
10
+ end
11
+
12
+ it "has a port" do
13
+ @server.port.must_equal 3000
14
+ end
15
+
16
+ it "properly formats its url" do
17
+ @server.url.must_equal "http://localhost:3000"
18
+ end
19
+
20
+ it "has a libary" do
21
+ @server.library.must_equal Plex::Library.new(@server)
22
+ end
23
+
24
+ end
data/test/test_show.rb ADDED
@@ -0,0 +1,24 @@
1
+ require 'test_helper'
2
+
3
+ describe Plex::Show do
4
+ before do
5
+ @show = Plex::Show.new(FakeParent.new, '/library/metadata/10')
6
+ @show.instance_variable_set("@xml_doc", FakeNode.new(FAKE_SHOW_NODE_HASH))
7
+ end
8
+
9
+ Plex::Show::ATTRIBUTES.map{|m| Plex.snake_case(m)}.each { |method|
10
+ it "should properly respond to ##{method}" do
11
+ @show.send(method.to_sym).must_equal FAKE_SHOW_NODE_HASH[:Directory].attr(method)
12
+ end
13
+ }
14
+
15
+ it "should return a list of episodes" do
16
+ @show.instance_variable_set(
17
+ "@children", FakeNode.new(FAKE_SEASON_NODE_HASH)
18
+ )
19
+ @show.seasons.must_equal(
20
+ [ Plex::Season.new(FakeParent.new, FAKE_SEASON_NODE_HASH[:Directory].attr('key')[0..-10]) ]
21
+ )
22
+ end
23
+
24
+ end
@@ -0,0 +1,16 @@
1
+ require 'test_helper'
2
+
3
+ describe Plex::Stream do
4
+ before do
5
+ @stream = Plex::Stream.new( FakeNode.new(FAKE_STREAM_NODE_HASH) )
6
+ end
7
+
8
+ %w(id stream_type codec index language language_code).each { |method|
9
+ it "should properly respond to ##{method}" do
10
+ @stream.send(method.to_sym).must_equal FAKE_STREAM_NODE_HASH[method.to_sym]
11
+ end
12
+ }
13
+
14
+ end
15
+
16
+
@@ -0,0 +1,36 @@
1
+ require 'test_helper'
2
+
3
+ describe Plex::Video do
4
+
5
+ before do
6
+ @video = Plex::Video.new( FakeNode.new(FAKE_VIDEO_NODE_HASH) )
7
+ end
8
+
9
+ %w(key studio type title title_sort content_rating summary rating view_count year
10
+ tagline thumb art duration originally_available_at updated_at).each { |method|
11
+ it "should correctly respond to ##{method}" do
12
+ @video.send(method.to_sym).must_equal FAKE_VIDEO_NODE_HASH[method.to_sym]
13
+ end
14
+ }
15
+
16
+ it "should correctly referance its media object" do
17
+ @video.media.must_equal Plex::Media.new(FAKE_VIDEO_NODE_HASH[:Media])
18
+ end
19
+
20
+ it "should correctly referance its genre objects" do
21
+ @video.genres.must_equal Array( Plex::Genre.new(FAKE_VIDEO_NODE_HASH[:Genre]) )
22
+ end
23
+
24
+ it "should correctly referance its writer objects" do
25
+ @video.writers.must_equal Array( Plex::Writer.new(FAKE_VIDEO_NODE_HASH[:Writer]) )
26
+ end
27
+
28
+ it "should correctly referance its director objects" do
29
+ @video.directors.must_equal Array( Plex::Director.new(FAKE_VIDEO_NODE_HASH[:Director]) )
30
+ end
31
+
32
+ it "should correctly referance its role objects" do
33
+ @video.roles.must_equal Array( Plex::Role.new(FAKE_VIDEO_NODE_HASH[:Role]) )
34
+ end
35
+
36
+ end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: plex-ruby
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.3.1
5
+ version: 1.0.0
6
6
  platform: ruby
7
7
  authors:
8
8
  - Eric Koslow
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-12-08 00:00:00 -05:00
13
+ date: 2011-12-09 00:00:00 -05:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -69,9 +69,22 @@ files:
69
69
  - lib/plex-ruby/version.rb
70
70
  - lib/plex-ruby/video.rb
71
71
  - plex-ruby.gemspec
72
+ - test/test_client.rb
73
+ - test/test_episode.rb
72
74
  - test/test_helper.rb
75
+ - test/test_library.rb
76
+ - test/test_media.rb
77
+ - test/test_movie.rb
78
+ - test/test_part.rb
79
+ - test/test_plex.rb
80
+ - test/test_season.rb
81
+ - test/test_section.rb
82
+ - test/test_server.rb
83
+ - test/test_show.rb
84
+ - test/test_stream.rb
85
+ - test/test_video.rb
73
86
  has_rdoc: true
74
- homepage: ""
87
+ homepage: https://github.com/ekosz/Plex-Ruby
75
88
  licenses: []
76
89
 
77
90
  post_install_message:
@@ -99,4 +112,17 @@ signing_key:
99
112
  specification_version: 3
100
113
  summary: Plex APIs in easy ruby code
101
114
  test_files:
115
+ - test/test_client.rb
116
+ - test/test_episode.rb
102
117
  - test/test_helper.rb
118
+ - test/test_library.rb
119
+ - test/test_media.rb
120
+ - test/test_movie.rb
121
+ - test/test_part.rb
122
+ - test/test_plex.rb
123
+ - test/test_season.rb
124
+ - test/test_section.rb
125
+ - test/test_server.rb
126
+ - test/test_show.rb
127
+ - test/test_stream.rb
128
+ - test/test_video.rb