plex-ruby 1.5.1 → 1.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 8866a7fbb96ee008c3f07d3f7fd350a03598eebd
4
+ data.tar.gz: 31c390b83a84299d6ddb8276e63bab13dae3726c
5
+ SHA512:
6
+ metadata.gz: 4e1bf2dbca860b21b65fed8f45c8900ee8473fcc9afbeb2f67ea9c63c3516c72c97c83b78a30e35257596b4c8c796d7b3f345aeb0acdf91bf71f08733a5f7b9b
7
+ data.tar.gz: 192b84c99c0c7a8fcde09ef4322fb1fbd5a8635bc3612a1581c7147eb740502a2f9b54a0a5ca5679d019eff3eaa715a6be0622f2dcdfb028309ea4d51962462d
data/.gitignore CHANGED
@@ -3,3 +3,4 @@
3
3
  Gemfile.lock
4
4
  .rake_tasks~
5
5
  pkg/*
6
+ *.swp
@@ -1,3 +1,6 @@
1
+ ## 1.5.2
2
+ * Added support for authentication token via `Plex.configure`
3
+
1
4
  ## 1.5.1
2
5
  * `Plex::Video` now supports multiple media entries (`@media` renamed to `@medias`)
3
6
 
data/README.md CHANGED
@@ -24,6 +24,17 @@ require 'plex-ruby'
24
24
  I developed this using Ruby 1.9.2 so no guaranties that it will work with
25
25
  lesser versions of Ruby.
26
26
 
27
+ ## Configuration
28
+
29
+ For external access to your Plex Media Server an auth token is required. You
30
+ can configure it with the following snippet.
31
+
32
+ ```ruby
33
+ Plex.configure do |config|
34
+ config.auth_token = "ABCDEFGH"
35
+ end
36
+ ```
37
+
27
38
  ## Usage
28
39
 
29
40
  Everything Stems from the Plex Media Server. Create a server with the host and
@@ -4,6 +4,30 @@ require 'cgi'
4
4
 
5
5
  module Plex
6
6
 
7
+ # Instantiates a Config instance once and returns it
8
+ def self.config
9
+ @config ||= Config.new
10
+ end
11
+
12
+ # Allows the configuration of some Plex-internal settings. It yields a Config
13
+ # instance so a block can be used:
14
+ #
15
+ # Plex.configure do |config|
16
+ # config.auth_token = "ABCDEF"
17
+ # end
18
+ def self.configure
19
+ yield(config)
20
+ end
21
+
22
+ # Custom open func which adds the required headers configured by
23
+ # <tt>Plex.configure</tt>
24
+ def self.open(url)
25
+ headers = {}
26
+ headers["X-Plex-Token"] = config.auth_token if config.auth_token
27
+
28
+ super(url, headers)
29
+ end
30
+
7
31
  # Converts camel case names that are commonly found in the Plex APIs into
8
32
  # ruby friendly names. I.E. <tt>playMedia</tt> -> <tt>play_media</tt>
9
33
  #
@@ -29,6 +53,7 @@ module Plex
29
53
 
30
54
  end
31
55
 
56
+ require 'plex-ruby/config'
32
57
  require 'plex-ruby/parser'
33
58
  require 'plex-ruby/server'
34
59
  require 'plex-ruby/client'
@@ -1,10 +1,10 @@
1
1
  module Plex
2
2
  class Client
3
3
 
4
- NAV_METHODS = %w(moveUp moveDown moveLeft moveRight pageUp pageDown nextLetter
5
- previousLetter select back contextMenu toggleOSD)
4
+ NAV_METHODS = %w(moveUp moveDown moveLeft moveRight pageUp pageDown nextLetter
5
+ previousLetter select back contextMenu toggleOSD)
6
6
 
7
- PLAYBACK_METHODS = %w(play pause stop rewind fastForward stepForward
7
+ PLAYBACK_METHODS = %w(play pause stop rewind fastForward stepForward
8
8
  bigStepForward stepBack bigStepBack skipNext skipPrevious)
9
9
 
10
10
  ATTRIBUTES = %w(name host address port machineIdentifier version)
@@ -64,7 +64,7 @@ module Plex
64
64
  def play_media(key, user_agent = nil, http_cookies = nil, view_offset = nil)
65
65
 
66
66
  if !key.is_a?(String) && key.respond_to?(:key)
67
- key = key.key
67
+ key = key.key
68
68
  end
69
69
 
70
70
  url = player_url+'/application/playMedia?'
@@ -137,7 +137,7 @@ module Plex
137
137
  end
138
138
 
139
139
  def ping(url)
140
- !!open(url).read
140
+ !!Plex.open(url).read
141
141
  rescue => e
142
142
  puts "Error trying to ping #{url} - #{e.message}"
143
143
  end
@@ -0,0 +1,9 @@
1
+ module Plex
2
+ class Config
3
+ attr_accessor :auth_token
4
+
5
+ def initialize
6
+ @auth_token = nil
7
+ end
8
+ end
9
+ end
@@ -14,7 +14,7 @@ module Plex
14
14
  def attribute_hash
15
15
  video.attribute_hash.merge({'key' => key})
16
16
  end
17
-
17
+
18
18
  # Delegates all method calls to the video object that represents this
19
19
  # episode, if that video object responds to the method.
20
20
  def method_missing(method, *args, &block)
@@ -55,7 +55,7 @@ module Plex
55
55
  private
56
56
 
57
57
  def xml_doc
58
- @xml_doc ||= Nokogiri::XML( open(url+key) )
58
+ @xml_doc ||= Nokogiri::XML( Plex.open(url+key) )
59
59
  end
60
60
 
61
61
  def video
@@ -73,7 +73,7 @@ module Plex
73
73
  end
74
74
 
75
75
  def base_doc
76
- Nokogiri::XML( open(url+key) )
76
+ Nokogiri::XML( Plex.open(url+key) )
77
77
  end
78
78
 
79
79
 
@@ -46,7 +46,7 @@ module Plex
46
46
  private
47
47
 
48
48
  def xml_doc
49
- @xml_doc ||= Nokogiri::XML( open(url+key) )
49
+ @xml_doc ||= Nokogiri::XML( Plex.open(url+key) )
50
50
  end
51
51
 
52
52
  def video
@@ -2,8 +2,8 @@ module Plex
2
2
  # Found at /library/metadata/:key
3
3
  class Season
4
4
 
5
- ATTRIBUTES = %w(ratingKey guid type title summary index thumb leafCount
6
- viewedLeafCount addedAt updatedAt)
5
+ ATTRIBUTES = %w(ratingKey guid type title summary index thumb leafCount
6
+ viewedLeafCount addedAt updatedAt)
7
7
 
8
8
  attr_reader :show, :key, :attribute_hash
9
9
 
@@ -79,18 +79,18 @@ module Plex
79
79
  private
80
80
 
81
81
  def base_doc
82
- Nokogiri::XML( open(url+key) )
82
+ Nokogiri::XML( Plex.open(url+key) )
83
83
  end
84
84
 
85
85
  def base_children_doc
86
- Nokogiri::XML( open(url+key+'/children') )
86
+ Nokogiri::XML( Plex.open(url+key+'/children') )
87
87
  end
88
88
 
89
89
  def xml_doc
90
90
  @xml_doc ||= base_doc
91
91
  end
92
92
 
93
- def children
93
+ def children
94
94
  @children ||= base_children_doc
95
95
  end
96
96
 
@@ -25,7 +25,7 @@ module Plex
25
25
  end
26
26
 
27
27
 
28
- # Returns a list of shows or movies that are in this Section.
28
+ # Returns a list of shows or movies that are in this Section.
29
29
  #
30
30
  # all - all videos in this Section
31
31
  # unwatched - videos unwatched in this Section
@@ -38,7 +38,7 @@ module Plex
38
38
  GROUPS.each { |method|
39
39
  class_eval %(
40
40
  def #{Plex.underscore(method)}
41
- Plex::Parser.new( self, Nokogiri::XML(open(url+key+'/#{method}')) ).parse
41
+ Plex::Parser.new( self, Nokogiri::XML(Plex.open(url+key+'/#{method}')) ).parse
42
42
  end
43
43
  )
44
44
  }
@@ -51,7 +51,7 @@ module Plex
51
51
  # by_#{category}(key) - all shows / movies by that key
52
52
  #
53
53
  # Example:
54
- #
54
+ #
55
55
  # library.section(2).by_year(2008) # List of TV Shows from 2008
56
56
  # library.section(1).by_first_character("H") # movies starting with 'H'
57
57
  # library.section(2).genres # Array of Hashes explaining all of the genres
@@ -71,7 +71,7 @@ module Plex
71
71
  @#{Plex.underscore(method)}s = grab_keys('#{method}')
72
72
  end
73
73
  def by_#{Plex.underscore(method)}(val)
74
- Plex::Parser.new( self, Nokogiri::XML(open(url+key+"/#{method}/\#{val}")) ).parse
74
+ Plex::Parser.new( self, Nokogiri::XML(Plex.open(url+key+"/#{method}/\#{val}")) ).parse
75
75
  end
76
76
  )
77
77
  }
@@ -80,7 +80,7 @@ module Plex
80
80
  def key #:nodoc:
81
81
  "/library/sections/#{@key}"
82
82
  end
83
-
83
+
84
84
  # @private
85
85
  def url #:nodoc:
86
86
  library.url
@@ -103,7 +103,7 @@ module Plex
103
103
  private
104
104
 
105
105
  def grab_keys(action)
106
- Nokogiri::XML(open(url+key+"/#{action}")).search('Directory').map do |node|
106
+ Nokogiri::XML(Plex.open(url+key+"/#{action}")).search('Directory').map do |node|
107
107
  {
108
108
  key: node.attr('key'),
109
109
  title: node.attr('title')
@@ -16,7 +16,7 @@ module Plex
16
16
  end
17
17
 
18
18
  # The Plex clients that are connected to this Server
19
- #
19
+ #
20
20
  # @return [Array] list of Clients connected to this server
21
21
  def clients
22
22
  @clients ||= search_clients clients_doc
@@ -40,7 +40,7 @@ module Plex
40
40
  private
41
41
 
42
42
  def clients_base
43
- Nokogiri::XML( open(url+'/clients') )
43
+ Nokogiri::XML( Plex.open(url+'/clients') )
44
44
  end
45
45
 
46
46
  def clients_doc
@@ -1,8 +1,8 @@
1
1
  module Plex
2
2
  class Show
3
3
 
4
- ATTRIBUTES = %w(ratingKey guid studio type title contentRating summary index
5
- rating year thumb art leafCount viewedLeafCount addedAt
4
+ ATTRIBUTES = %w(ratingKey guid studio type title contentRating summary index
5
+ rating year thumb art leafCount viewedLeafCount addedAt
6
6
  updatedAt)
7
7
 
8
8
  attr_reader :section, :key, :attribute_hash
@@ -44,7 +44,7 @@ module Plex
44
44
  end
45
45
 
46
46
  # Helper method for selecting the special Season of this show
47
- # Season 0 is where Plex stores episodes that are not part of a
47
+ # Season 0 is where Plex stores episodes that are not part of a
48
48
  # regular season. i.e. Christmas Specials
49
49
  #
50
50
  # @return [Season] season with index of 0
@@ -105,17 +105,17 @@ module Plex
105
105
  private
106
106
 
107
107
  def base_doc
108
- Nokogiri::XML( open(url+key) )
108
+ Nokogiri::XML( Plex.open(url+key) )
109
109
  end
110
110
 
111
111
  def children_base
112
- Nokogiri::XML( open(url+key+'/children') )
112
+ Nokogiri::XML( Plex.open(url+key+'/children') )
113
113
  end
114
114
 
115
115
  def xml_doc
116
116
  @xml_doc ||= base_doc
117
117
  end
118
-
118
+
119
119
  def children
120
120
  @children ||= children_base
121
121
  end
@@ -1,3 +1,3 @@
1
1
  module Plex
2
- VERSION = "1.5.1"
2
+ VERSION = "1.5.2"
3
3
  end
@@ -0,0 +1,14 @@
1
+ require 'test_helper'
2
+
3
+ describe Plex::Config do
4
+
5
+ it "should be configurable" do
6
+ Plex.config.auth_token.must_equal nil
7
+
8
+ Plex.configure do |config|
9
+ config.auth_token = "ABCD"
10
+ end
11
+
12
+ Plex.config.auth_token.must_equal "ABCD"
13
+ end
14
+ end
@@ -8,4 +8,19 @@ describe Plex do
8
8
  Plex.underscore("normal").must_equal "normal"
9
9
  end
10
10
 
11
+ before do
12
+ FakeWeb.register_uri(:get, "http://localhost:32400", :body => "")
13
+ end
14
+
15
+ after do
16
+ FakeWeb.clean_registry
17
+ Plex.config.auth_token = nil
18
+ end
19
+
20
+ it "has an open function which respects the configuration" do
21
+ Plex.configure {|config| config.auth_token = "ABCD" }
22
+
23
+ Plex.open("http://localhost:32400").read
24
+ FakeWeb.last_request["X-Plex-Token"].must_equal "ABCD"
25
+ end
11
26
  end
metadata CHANGED
@@ -1,78 +1,69 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: plex-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.1
5
- prerelease:
4
+ version: 1.5.2
6
5
  platform: ruby
7
6
  authors:
8
7
  - Eric Koslow
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-12-16 00:00:00.000000000 Z
11
+ date: 2014-12-05 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: minitest
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - ">="
20
18
  - !ruby/object:Gem::Version
21
19
  version: '0'
22
20
  type: :development
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
29
26
  version: '0'
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: rake
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - ">="
36
32
  - !ruby/object:Gem::Version
37
33
  version: '0'
38
34
  type: :development
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
45
40
  version: '0'
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: fakeweb
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ! '>='
45
+ - - ">="
52
46
  - !ruby/object:Gem::Version
53
47
  version: '0'
54
48
  type: :development
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: '0'
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: nokogiri
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
- - - ! '>='
59
+ - - ">="
68
60
  - !ruby/object:Gem::Version
69
61
  version: '0'
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
77
68
  version: '0'
78
69
  description: Extracts the Plex Media Server API into easy to write ruby code
@@ -82,8 +73,8 @@ executables: []
82
73
  extensions: []
83
74
  extra_rdoc_files: []
84
75
  files:
85
- - .gitignore
86
- - .travis.yml
76
+ - ".gitignore"
77
+ - ".travis.yml"
87
78
  - CHANGELOG.md
88
79
  - Gemfile
89
80
  - LICENSE
@@ -91,6 +82,7 @@ files:
91
82
  - Rakefile
92
83
  - lib/plex-ruby.rb
93
84
  - lib/plex-ruby/client.rb
85
+ - lib/plex-ruby/config.rb
94
86
  - lib/plex-ruby/episode.rb
95
87
  - lib/plex-ruby/library.rb
96
88
  - lib/plex-ruby/media.rb
@@ -107,6 +99,7 @@ files:
107
99
  - lib/plex-ruby/video.rb
108
100
  - plex-ruby.gemspec
109
101
  - test/test_client.rb
102
+ - test/test_config.rb
110
103
  - test/test_episode.rb
111
104
  - test/test_helper.rb
112
105
  - test/test_library.rb
@@ -122,36 +115,30 @@ files:
122
115
  - test/test_video.rb
123
116
  homepage: https://github.com/ekosz/Plex-Ruby
124
117
  licenses: []
118
+ metadata: {}
125
119
  post_install_message:
126
120
  rdoc_options: []
127
121
  require_paths:
128
122
  - lib
129
123
  required_ruby_version: !ruby/object:Gem::Requirement
130
- none: false
131
124
  requirements:
132
- - - ! '>='
125
+ - - ">="
133
126
  - !ruby/object:Gem::Version
134
127
  version: '0'
135
- segments:
136
- - 0
137
- hash: 1533681294103733520
138
128
  required_rubygems_version: !ruby/object:Gem::Requirement
139
- none: false
140
129
  requirements:
141
- - - ! '>='
130
+ - - ">="
142
131
  - !ruby/object:Gem::Version
143
132
  version: '0'
144
- segments:
145
- - 0
146
- hash: 1533681294103733520
147
133
  requirements: []
148
134
  rubyforge_project: plex-ruby
149
- rubygems_version: 1.8.23
135
+ rubygems_version: 2.2.0
150
136
  signing_key:
151
- specification_version: 3
137
+ specification_version: 4
152
138
  summary: Plex Media Server APIs in easy ruby code
153
139
  test_files:
154
140
  - test/test_client.rb
141
+ - test/test_config.rb
155
142
  - test/test_episode.rb
156
143
  - test/test_helper.rb
157
144
  - test/test_library.rb