ruby-mpd 0.3.0 → 0.3.1

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: abe8c832ca9a5b9254a92bfe8927b132c3bbe498
4
- data.tar.gz: dbb36caae0622e63cc70149924911dec0d1abde1
3
+ metadata.gz: d97d6dfaa6b5323b36dcd22fba6c4bcd43bf562c
4
+ data.tar.gz: 5b006f249e407ff97378887b8bf60ad94035c97c
5
5
  SHA512:
6
- metadata.gz: 861e3e63f0a6faeff4794b226e38475ea404c20d1f9a3fcb2b9eb37b0394f090aa6a933c134f2e2d389b8134107a859df94e26f86ab56e93e352e30bd416b12c
7
- data.tar.gz: 35d40fc9e2b6ee08d6b564c7ec1f7b301699bec390248fc0bc270a1a1b68d56b3906a2010c9734efeb31363c5b64b5f4b8ea566c6a08da0c594b6fd967c5b873
6
+ metadata.gz: e7c25979f1d9af125916c1f3072d0f5678bbe8afdb4b7c7b2c7804062cd5e154658097958418fbca579801ec441ab86e08a2b5202403fd440b6bc73cc42cd3c0
7
+ data.tar.gz: dda3e10e3c3a74433a48832178c78a25188c947ee407fb7897e0944a49f5b0d8557691bf1fd8515a2d4ff4e1487e83ec2f2fb37c581de608cb722c4da4b2582b
@@ -45,14 +45,14 @@ via a reconnect mechanism.
45
45
 
46
46
  Once connected, you can issue commands to talk to the server.
47
47
 
48
- mpd.connect
48
+ mpd.connect
49
49
 
50
- mpd.play if mpd.stopped?
50
+ mpd.play if mpd.stopped?
51
51
 
52
- song = mpd.current_song
53
- puts "Current Song: #{song.artist} - #{song.title}"
52
+ song = mpd.current_song
53
+ puts "Current Song: #{song.artist} - #{song.title}"
54
54
 
55
- You can find command documentation can be found {here}[http://www.rubydoc.info/github/archSeer/ruby-mpd/master/MPD].
55
+ Command documentation can be found {here}[http://www.rubydoc.info/github/archSeer/ruby-mpd/master/MPD].
56
56
 
57
57
  == Commands
58
58
 
@@ -98,16 +98,45 @@ Commands that support ranges: +#delete+, +#move+, +#queue+, +#song_priority+, +#
98
98
 
99
99
  == Searching
100
100
 
101
- Searching is case insensitive by default. To enable case sensitivity, pass a third
102
- argument with the key +:case_sensitive+. This does not work for Playlist#searchadd.
101
+ The MPD protocol supports two commands +find+ and +search+, where +find+ is strict
102
+ and will be case sensitive, as well as return only full matches, while +search+ is
103
+ "loose" -- case insensitive and allow partial matches.
104
+
105
+ For ease of use, ruby-mpd encapsulates both +find+ and +search+ in one method,
106
+ +MPD#where+.
107
+
108
+ Searching is case *loose* by default, meaning it is case insensitive, and will do
109
+ partial matching. To enable *strict* matching, enable the +strict+ option.
110
+
111
+ This does not work for Playlist#searchadd.
112
+
113
+ mpd.where({artist: 'MyArtiSt'}, {strict: true})
114
+
115
+ Multiple query parameters can also be used:
116
+
117
+ mpd.where(artist: 'Bonobo', album: 'Black Sands')
103
118
 
104
- mpd.search(:artist, 'MyArtiSt', :case_sensitive => true)
119
+ Query keys can be any of of the tags supported by MPD (a list can be fetched via
120
+ MPD#tags), or one of the two special parameters: +:file+ to search by full path
121
+ (relative to database root), and +:any+ to match against all available tags.
105
122
 
106
123
  While searching, one can also enable the +add+ option, which will automatically add
107
124
  the songs the query returned to the queue. In that case, the response will only return
108
125
  +true+, stating that the operation was successful (instead of returning an array).
109
126
 
110
- mpd.search(:artist, 'MyArtiSt', {:case_sensitive => true, :add => true})
127
+ mpd.where({artist: 'MyArtiSt'}, {strict: true, add: true})
128
+
129
+ === Queue searching
130
+
131
+ Queue searching works the same way (except by using +MPD#queue_where+), and it also
132
+ accepts multiple search parameters (which seems to be undocumented in the MPD protocol
133
+ specification).
134
+
135
+ Same as +#where+, it is "loose" by default, and it supports a +:strict+ option.
136
+
137
+ mpd.queue_where(artist: 'James Brown', genre: 'Funk')
138
+
139
+ mpd.queue_where({artist: 'James Brown', genre: 'Funk'}, {strict: true})
111
140
 
112
141
  == Playlists
113
142
 
@@ -129,7 +158,7 @@ get your results, you simply use the object in an object-oriented way:
129
158
  playlist.add('awesome_track.mp3')
130
159
 
131
160
  To create a new playlist, simply create a new object. The playlist will be created
132
- in the daemon's library automatically as soon as you use +#add+ or +#findadd+. There
161
+ in the daemon's library automatically as soon as you use +#add+ or +#searchadd+. There
133
162
  is also no save method, as playlists get 'saved' by the daemon any time you do an
134
163
  action on them (add, delete, rename).
135
164
 
@@ -262,4 +291,6 @@ for a controlled environment needs to be written.
262
291
 
263
292
  * MPD::Song, MPD::Directory.
264
293
  * Make stickers a mixin for Playlist, Song, Directory...
265
- * Namespace queue
294
+ * Namespace queue
295
+
296
+ * Merge +where+ and +queue_where+, by doing +where(..., {in_queue: true})+?
data/Rakefile CHANGED
@@ -1,6 +1,16 @@
1
1
  require 'rake/testtask'
2
+
2
3
  Rake::TestTask.new(:test) do |test|
3
4
  test.verbose = true
4
5
  end
5
6
 
6
- task :default => :test
7
+ desc "Open an irb session preloaded with this API"
8
+ task :console do
9
+ $:.unshift(File.expand_path('../lib', __FILE__))
10
+ require 'ruby-mpd'
11
+ require 'irb'
12
+ ARGV.clear
13
+ IRB.start
14
+ end
15
+
16
+ task :default => :test
@@ -39,8 +39,7 @@ class MPD
39
39
  include Plugins::Reflection
40
40
  include Plugins::Channels
41
41
 
42
- # The version of the MPD protocol the server is using.
43
- attr_reader :version
42
+ attr_reader :version, :hostname, :port
44
43
 
45
44
  # Initialize an MPD object with the specified hostname and port.
46
45
  # When called without arguments, 'localhost' and 6600 are used.
@@ -86,8 +85,7 @@ class MPD
86
85
  # @param [Proc, Method] block The actual callback.
87
86
  # @return [void]
88
87
  def on(event, &block)
89
- @callbacks[event] ||= []
90
- @callbacks[event].push block
88
+ (@callbacks[event] ||= []).push block
91
89
  end
92
90
 
93
91
  # Triggers an event, running it's callbacks.
@@ -95,9 +93,7 @@ class MPD
95
93
  # @return [void]
96
94
  def emit(event, *args)
97
95
  return unless @callbacks[event]
98
- @callbacks[event].each do |handle|
99
- handle.call *args
100
- end
96
+ @callbacks[event].each { |handle| handle.call *args }
101
97
  end
102
98
 
103
99
  # Constructs a callback loop thread and/or resumes it.
@@ -110,21 +106,19 @@ class MPD
110
106
 
111
107
  status[:connection] = mpd.connected?
112
108
 
113
- status[:time] = [nil, nil] if !status[:time] # elapsed, total
114
- status[:audio] = [nil, nil, nil] if !status[:audio] # samp, bits, chans
115
-
109
+ status[:time] ||= [nil, nil] # elapsed, total
110
+ status[:audio] ||= [nil, nil, nil] # samp, bits, chans
116
111
  status[:song] = mpd.current_song
117
112
 
118
113
  status.each do |key, val|
119
114
  next if val == old_status[key] # skip unchanged keys
120
- # convert arrays to splat arguments
121
- val.is_a?(Array) ? emit(key, *val) : emit(key, val)
115
+ emit key, *val # splat arrays
122
116
  end
123
117
 
124
118
  old_status = status
125
119
  sleep 0.1
126
120
 
127
- if !status[:connection] && !Thread.current[:stop]
121
+ unless status[:connection] || Thread.current[:stop]
128
122
  sleep 2
129
123
  mpd.connect rescue nil
130
124
  end
@@ -151,12 +145,11 @@ class MPD
151
145
 
152
146
  # by protocol, we need to get a 'OK MPD <version>' reply
153
147
  # should we fail to do so, the connection was unsuccessful
154
- if response = @socket.gets
155
- @version = response.chomp.gsub('OK MPD ', '') # Read the version
156
- else
148
+ unless response = @socket.gets
157
149
  reset_vars
158
150
  raise ConnectionError, 'Unable to connect (possibly too many connections open)'
159
151
  end
152
+ @version = response.chomp.gsub('OK MPD ', '') # Read the version
160
153
 
161
154
  if callbacks
162
155
  warn "Using 'true' or 'false' as an argument to MPD#connect has been deprecated, and will be removed in the future!"
@@ -171,10 +164,8 @@ class MPD
171
164
  #
172
165
  # @return [Boolean] True only if the server responds otherwise false.
173
166
  def connected?
174
- return false if !@socket
175
-
176
- ret = send_command(:ping) rescue false
177
- return ret
167
+ return false unless @socket
168
+ send_command(:ping) rescue false
178
169
  end
179
170
 
180
171
  # Disconnect from the MPD daemon. This has no effect if the client is not
@@ -184,7 +175,7 @@ class MPD
184
175
  def disconnect
185
176
  @cb_thread[:stop] = true if @cb_thread
186
177
 
187
- return false if !@socket
178
+ return false unless @socket
188
179
 
189
180
  begin
190
181
  @socket.puts 'close'
@@ -269,12 +260,9 @@ class MPD
269
260
  end
270
261
  end
271
262
 
272
- if !error
273
- return msg
274
- else
275
- err = error.match(/^ACK \[(?<code>\d+)\@(?<pos>\d+)\] \{(?<command>.*)\} (?<message>.+)$/)
276
- raise SERVER_ERRORS[err[:code].to_i], "[#{err[:command]}] #{err[:message]}"
277
- end
263
+ return msg unless error
264
+ err = error.match(/^ACK \[(?<code>\d+)\@(?<pos>\d+)\] \{(?<command>.*)\} (?<message>.+)$/)
265
+ raise SERVER_ERRORS[err[:code].to_i], "[#{err[:command]}] #{err[:message]}"
278
266
  end
279
267
 
280
268
  SERVER_ERRORS = {
@@ -12,25 +12,30 @@ class MPD
12
12
  private
13
13
 
14
14
  # Parses the command into MPD format.
15
- def convert_command(command, *args)
16
- args.map! do |word|
17
- if word.is_a?(TrueClass) || word.is_a?(FalseClass)
18
- word ? '1' : '0' # convert bool to 1 or 0
19
- elsif word.is_a?(Range)
20
- if word.end == -1 # negative means to end of range
21
- "#{word.begin}:"
15
+ def convert_command(command, *params)
16
+ params.map! do |param|
17
+ case param
18
+ when true, false
19
+ param ? '1' : '0' # convert bool to 1 or 0
20
+ when Range
21
+ if param.end == -1 # negative means to end of range
22
+ "#{param.begin}:"
22
23
  else
23
- "#{word.begin}:#{word.end + (word.exclude_end? ? 0 : 1)}"
24
+ "#{param.begin}:#{param.end + (param.exclude_end? ? 0 : 1)}"
24
25
  end
25
- elsif word.is_a?(MPD::Song)
26
- %Q["#{word.file}"] # escape filename
26
+ when MPD::Song
27
+ %Q["#{param.file}"] # escape filename
28
+ when Hash # normally a search query
29
+ param.each_with_object("") do |(type, what), query|
30
+ query << %Q[#{type} "#{what}" ]
31
+ end.strip
27
32
  else
28
33
  # escape any strings with space (wrap in double quotes)
29
- word = word.to_s
30
- word.match(/\s|'/) ? %Q["#{word}"] : word
34
+ param = param.to_s
35
+ param.match(/\s|'/) ? %Q["#{param}"] : param
31
36
  end
32
37
  end
33
- return [command, args].join(' ').strip
38
+ return [command, params].join(' ').strip
34
39
  end
35
40
 
36
41
  INT_KEYS = [
@@ -77,7 +82,6 @@ class MPD
77
82
 
78
83
  # Parses a single response line into a key-object (value) pair.
79
84
  def parse_line(line)
80
- return nil if line.nil?
81
85
  key, value = line.split(/:\s?/, 2)
82
86
  key = key.downcase.to_sym
83
87
  return key, parse_key(key, value.chomp)
@@ -95,8 +99,7 @@ class MPD
95
99
 
96
100
  # if val appears more than once, make an array of vals.
97
101
  if hash.include? key
98
- hash[key] = Array(hash[key]) # convert to array (http://rubyquicktips.com/post/9618833891/convert-object-to-array)
99
- hash[key] << object # add new obj to array
102
+ hash[key] = Array(hash[key]) << object
100
103
  else # val hasn't appeared yet, map it.
101
104
  hash[key] = object # map obj to key
102
105
  end
@@ -106,7 +109,7 @@ class MPD
106
109
  # Converts the response to MPD::Song objects.
107
110
  # @return [Array<MPD::Song>] An array of songs.
108
111
  def build_songs_list(array)
109
- return array.map {|hash| Song.new(hash) }
112
+ return array.map { |hash| Song.new(hash) }
110
113
  end
111
114
 
112
115
  # Remove lines which we don't want.
@@ -118,11 +121,7 @@ class MPD
118
121
  # @return [Array<String>]
119
122
  def make_chunks(string)
120
123
  first_key = string.match(/\A(.+?):\s?/)[1]
121
-
122
- chunks = string.split(/\n(?=#{first_key})/)
123
- chunks.inject([]) do |result, chunk|
124
- result << chunk.strip
125
- end
124
+ chunks = string.split(/\n(?=#{first_key})/).map(&:strip)
126
125
  end
127
126
 
128
127
  # Parses the response, determining per-command on what parsing logic
@@ -149,16 +148,14 @@ class MPD
149
148
  def build_response(command, string)
150
149
  chunks = make_chunks(string)
151
150
  # if there are any new lines (more than one data piece), it's a hash, else an object.
152
- is_hash = chunks.any? {|chunk| chunk.include? "\n"}
151
+ is_hash = chunks.any? { |chunk| chunk.include? "\n" }
153
152
 
154
153
  list = chunks.inject([]) do |result, chunk|
155
154
  result << (is_hash ? build_hash(chunk) : parse_line(chunk)[1]) # parse_line(chunk)[1] is object
156
155
  end
157
156
 
158
157
  # if list has only one element and not set to explicit array, return it, else return array
159
- result = (list.length == 1 && !RETURN_ARRAY.include?(command)) ? list.first : list
160
- return result
158
+ (list.length == 1 && !RETURN_ARRAY.include?(command)) ? list.first : list
161
159
  end
162
-
163
160
  end
164
161
  end
@@ -45,6 +45,8 @@ class MPD
45
45
  # Searches are case insensitive by default, however you can enable
46
46
  # it using the third argument.
47
47
  #
48
+ # @deprecated Use {#where} instead.
49
+ #
48
50
  # Options:
49
51
  # * *add*: Add the search results to the queue.
50
52
  # * *case_sensitive*: Make the query case sensitive.
@@ -56,13 +58,41 @@ class MPD
56
58
  # @return [Array<MPD::Song>] Songs that matched.
57
59
  # @return [true] if +:add+ is enabled.
58
60
  def search(type, what, options = {})
61
+ warn "MPD#search is deprecated! Use MPD#where instead."
62
+ options[:strict] = options[:case_sensitive] # transparently upgrade renamed option
63
+ where({type => what}, options)
64
+ end
65
+
66
+ # Searches the database for any songs that match the specified parameters.
67
+ # Searching is *loose* (case insensitive and allow partial matching) by
68
+ # default.
69
+ #
70
+ # The search keys can be any of the tags supported by MPD, or one of the
71
+ # two special parameters: +:file+ to search by full path (relative to
72
+ # database root), and +:any+ to match against all available tags.
73
+ #
74
+ # mpd.where(artist: "DJ Shadow", album: "Endtroducing.....")
75
+ #
76
+ # A hash of options can be passed as a last parameter:
77
+ #
78
+ # mpd.where({artist: "Nujabes", album: "Modal Soul"}, {add: true})
79
+ #
80
+ # Options:
81
+ # * *add*: Add search results to the queue.
82
+ # * *strict*: Search will be *case sensitive* and allow only *full matches*.
83
+ #
84
+ # @param [Hash] params A hash of search parameters.
85
+ # @param [Hash] options A hash of options.
86
+ # @return [Array<MPD::Song>] Songs that matched.
87
+ # @return [true] if +:add+ is enabled.
88
+ def where(params, options = {})
59
89
  if options[:add]
60
- command = options[:case_sensitive] ? :findadd : :searchadd
90
+ command = options[:strict] ? :findadd : :searchadd
61
91
  else
62
- command = options[:case_sensitive] ? :find : :search
92
+ command = options[:strict] ? :find : :search
63
93
  end
64
94
 
65
- build_songs_list send_command(command, type, what)
95
+ build_songs_list send_command(command, params)
66
96
  end
67
97
 
68
98
  # Tell the server to update the database. Optionally,
@@ -110,7 +140,7 @@ class MPD
110
140
  #
111
141
  # @return [Array<MPD::Song>]
112
142
  def songs_by_artist(artist)
113
- search :artist, artist
143
+ where(artist: artist)
114
144
  end
115
145
 
116
146
  end
@@ -95,54 +95,54 @@ class MPD
95
95
  # Is MPD paused?
96
96
  # @return [Boolean]
97
97
  def paused?
98
- return status[:state] == :pause
98
+ status[:state] == :pause
99
99
  end
100
100
 
101
101
  # Is MPD playing?
102
102
  # @return [Boolean]
103
103
  def playing?
104
- return status[:state] == :play
104
+ status[:state] == :play
105
105
  end
106
106
 
107
107
  # @return [Boolean] Is MPD stopped?
108
108
  def stopped?
109
- return status[:state] == :stop
109
+ status[:state] == :stop
110
110
  end
111
111
 
112
112
  # Gets the volume level.
113
113
  # @return [Integer]
114
114
  def volume
115
- return status[:volume]
115
+ status[:volume]
116
116
  end
117
117
 
118
118
  # @return [Integer] Crossfade in seconds.
119
119
  def crossfade
120
- return status[:xfade]
120
+ status[:xfade]
121
121
  end
122
122
 
123
123
  # @return [Integer] Current playlist version number.
124
124
  def playlist_version
125
- return status[:playlist]
125
+ status[:playlist]
126
126
  end
127
127
 
128
128
  # Returns true if consume is enabled.
129
129
  def consume?
130
- return status[:consume]
130
+ status[:consume]
131
131
  end
132
132
 
133
133
  # Returns true if single is enabled.
134
134
  def single?
135
- return status[:single]
135
+ status[:single]
136
136
  end
137
137
 
138
138
  # Returns true if random playback is currently enabled,
139
139
  def random?
140
- return status[:random]
140
+ status[:random]
141
141
  end
142
142
 
143
143
  # Returns true if repeat is enabled,
144
144
  def repeat?
145
- return status[:repeat]
145
+ status[:repeat]
146
146
  end
147
147
  end
148
148
  end
@@ -7,7 +7,7 @@ class MPD
7
7
  #
8
8
  # @return [Array<MPD::Playlist>] Array of playlists
9
9
  def playlists
10
- send_command(:listplaylists).map {|opt| MPD::Playlist.new(self, opt)}
10
+ send_command(:listplaylists).map { |opt| MPD::Playlist.new(self, opt) }
11
11
  end
12
12
 
13
13
  end
@@ -84,6 +84,8 @@ class MPD
84
84
  # Searches for songs in the queue matched by the what
85
85
  # argument. Case insensitive by default.
86
86
  #
87
+ # @deprecated Use {#queue_where} instead.
88
+ #
87
89
  # @param [Symbol] type Can be any tag supported by MPD, or one of the two special
88
90
  # parameters: +:file+ to search by full path (relative to database root),
89
91
  # and +:any+ to match against all available tags.
@@ -91,8 +93,34 @@ class MPD
91
93
  # @param [Hash] options Use +:case_sensitive+ to make the query case sensitive.
92
94
  # @return [Array<MPD::Song>] Songs that matched.
93
95
  def queue_search(type, what, options = {})
94
- command = options[:case_sensitive] ? :playlistfind : :playlistsearch
95
- build_songs_list send_command(command, type, what)
96
+ warn "MPD#queue_search is deprecated! Use MPD#where instead."
97
+ options[:strict] = options[:case_sensitive] # transparently upgrade renamed option
98
+ queue_where({type => what}, options)
99
+ end
100
+
101
+ # Searches the queue for any songs that match the specified parameters.
102
+ # Searching is *loose* (case insensitive and allow partial matching) by
103
+ # default.
104
+ #
105
+ # The search keys can be any of the tags supported by MPD, or one of the
106
+ # two special parameters: +:file+ to search by full path (relative to
107
+ # database root), and +:any+ to match against all available tags.
108
+ #
109
+ # mpd.queue_where(artist: "DJ Shadow", album: "Endtroducing.....")
110
+ #
111
+ # A hash of options can be passed as a last parameter:
112
+ #
113
+ # mpd.queue_where({artist: "Nujabes", album: "Modal Soul"}, {add: true})
114
+ #
115
+ # Options:
116
+ # * *strict*: Search will be *case sensitive* and allow only *full matches*.
117
+ #
118
+ # @param [Hash] params A hash of search parameters.
119
+ # @param [Hash] options A hash of options.
120
+ # @return [Array<MPD::Song>] Songs that matched.
121
+ def queue_where(params, options = {})
122
+ command = options[:strict] ? :playlistfind : :playlistsearch
123
+ build_songs_list send_command(command, params)
96
124
  end
97
125
 
98
126
  # List the changes since the specified version in the queue.
@@ -105,6 +133,13 @@ class MPD
105
133
 
106
134
  # Set the priority of the specified songs. A higher priority means that it will be played
107
135
  # first when "random" mode is enabled.
136
+ #
137
+ # Several ranges or ID's can be specified at once:
138
+ #
139
+ # mpd.song_priority(10, [5..7, 9..10]) # songs 5 to 10, excluding 8
140
+ #
141
+ # mpd.song_priority(10, {id: [5, 8, 12]}) # songs with ID's 5, 8 and 12
142
+ #
108
143
  # @param [Integer] priority An integer between 0 and 255. The default priority of new songs is 0.
109
144
  # @param [Integer] pos A specific position.
110
145
  # @param [Range] pos A range of positions.
@@ -112,12 +147,12 @@ class MPD
112
147
  def song_priority(priority, pos)
113
148
  if pos.is_a?(Hash)
114
149
  if pos[:id]
115
- send_command :prioid, priority, pos[:id]
150
+ send_command :prioid, priority, *pos[:id]
116
151
  else
117
152
  raise ArgumentError, 'Only :id key is allowed!'
118
153
  end
119
154
  else
120
- send_command :prio, priority, pos
155
+ send_command :prio, priority, *pos
121
156
  end
122
157
  end
123
158
 
@@ -9,7 +9,7 @@ class MPD::Song
9
9
 
10
10
  def initialize(options)
11
11
  @data = {} # allowed fields are @types + :file
12
- @time = options.delete(:time) { [nil] }.first #HAXX for array return
12
+ @time = options.delete(:time) { [nil] }.first # HAXX for array return
13
13
  @file = options.delete(:file)
14
14
  @title = options.delete(:title)
15
15
  @artist = options.delete(:artist)
@@ -25,11 +25,8 @@ class MPD::Song
25
25
 
26
26
  # @return [String] A formatted representation of the song length ("1:02")
27
27
  def length
28
- if @time.nil?
29
- '--:--'
30
- else
31
- "#{(@time / 60)}:#{"%02d" % (@time % 60)}"
32
- end
28
+ return '--:--' if @time.nil?
29
+ "#{@time / 60}:#{"%02d" % (@time % 60)}"
33
30
  end
34
31
 
35
32
  # Pass any unknown calls over to the data hash.
@@ -1,3 +1,3 @@
1
1
  class MPD
2
- VERSION = '0.3.0'
2
+ VERSION = '0.3.1'
3
3
  end
@@ -7,6 +7,7 @@ Gem::Specification.new do |s|
7
7
  s.name = 'ruby-mpd'
8
8
  s.version = MPD::VERSION
9
9
  s.homepage = 'https://github.com/archSeer/ruby-mpd'
10
+ s.license = 'GPL-2'
10
11
  s.authors = ["Blaž Hrastnik"]
11
12
  s.email = ['speed.the.bboy@gmail.com']
12
13
  s.summary = "Modern client library for MPD"
@@ -16,4 +17,4 @@ Gem::Specification.new do |s|
16
17
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
17
18
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
18
19
  s.require_paths = ["lib"]
19
- end
20
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-mpd
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Blaž Hrastnik
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-09-24 00:00:00.000000000 Z
11
+ date: 2014-01-27 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: A powerful, modern and feature complete library for the Music Player
14
14
  Daemon.
@@ -18,7 +18,7 @@ executables: []
18
18
  extensions: []
19
19
  extra_rdoc_files: []
20
20
  files:
21
- - .gitignore
21
+ - ".gitignore"
22
22
  - COPYING
23
23
  - README.rdoc
24
24
  - Rakefile
@@ -41,7 +41,8 @@ files:
41
41
  - ruby-mpd.gemspec
42
42
  - test/test_parser.rb
43
43
  homepage: https://github.com/archSeer/ruby-mpd
44
- licenses: []
44
+ licenses:
45
+ - GPL-2
45
46
  metadata: {}
46
47
  post_install_message:
47
48
  rdoc_options: []
@@ -49,20 +50,19 @@ require_paths:
49
50
  - lib
50
51
  required_ruby_version: !ruby/object:Gem::Requirement
51
52
  requirements:
52
- - - '>='
53
+ - - ">="
53
54
  - !ruby/object:Gem::Version
54
55
  version: '0'
55
56
  required_rubygems_version: !ruby/object:Gem::Requirement
56
57
  requirements:
57
- - - '>='
58
+ - - ">="
58
59
  - !ruby/object:Gem::Version
59
60
  version: '0'
60
61
  requirements: []
61
62
  rubyforge_project:
62
- rubygems_version: 2.0.3
63
+ rubygems_version: 2.2.0
63
64
  signing_key:
64
65
  specification_version: 4
65
66
  summary: Modern client library for MPD
66
67
  test_files:
67
68
  - test/test_parser.rb
68
- has_rdoc: