turntabler 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.md CHANGED
@@ -1,5 +1,10 @@
1
1
  # master
2
2
 
3
+ ## 0.1.2 / 2012-12-01
4
+
5
+ * Fix song searches being allowed when the user isn't in a room
6
+ * Allow title / artist / duration to be explicitly specified in song searches
7
+
3
8
  ## 0.1.1 / 2012-11-27
4
9
 
5
10
  * Fix gemspec filename
data/README.md CHANGED
@@ -36,9 +36,9 @@ This project was built from the ground-up by Rubyists for Rubyists. While prior
36
36
  projects in other languages were used for guidance on some of the implementation,
37
37
  the design is meant to take advantage of the various features offered by Ruby 1.9+.
38
38
 
39
- Some brief, high-level features include:
39
+ At a high level, this project features:
40
40
 
41
- * Evented, non-blocking IO
41
+ * Evented, non-blocking I/O
42
42
  * Fiber-aware, untangled callbacks
43
43
  * Interactive console support
44
44
  * Clean, object-oriented APIs
@@ -177,25 +177,17 @@ directory in the repository.
177
177
 
178
178
  So you may be asking "Why another Turntable.FM API library?" or "Why re-build
179
179
  this in Ruby when you have a stable Javascript project?" Simply put, I felt that
180
- all of the high-level features highlighted in the Description section of this
181
- document were missing in each of those existing libraries.
180
+ many of the high-level details highlighted in the Description section of this
181
+ document were missing in existing libraries.
182
182
 
183
- Existing implementations include:
183
+ Some of those details include evented I/O, untangled callbacks, object-oriented
184
+ APIs, external API consistency, internal state management, auto lazy-loading, etc.
185
+ This library also strives to be a complete implementation, easy to use / play
186
+ around with, and generally just put together a more organized fashion.
184
187
 
185
- * [turntable-api-rb](https://github.com/lmcalpin/turntable-api-rb)
186
- * [ruby_ttapi](https://github.com/alaingilbert/Turntable-API)
187
- * [TurntableBot](https://github.com/mrhazel/TurntableBot)
188
-
189
- My personal belief is that none of these libraries reflect the simplicity that
190
- you can build libraries with in Ruby. Those include evented I/O, untangled
191
- callbacks, object-oriented APIs, external API consistency, internal state
192
- management, auto lazy-loading, etc. Some of these libraries are also either
193
- incomplete implementations, difficult to use / play around with, or generally
194
- just put together as a script instead of an organized library.
195
-
196
- However, by no means does that mean I'm attempting to belittle the efforts put
197
- forth by these authors -- all of their work provided the foundation necessary to
198
- build out this project.
188
+ By no means does this discredit the significance of the efforts put forth by the
189
+ authors of these existing libraries -- all of their work provided the foundation
190
+ necessary to build out this project.
199
191
 
200
192
  ### Authentication
201
193
 
@@ -17,7 +17,7 @@ GEM
17
17
  faye-websocket (0.4.6)
18
18
  eventmachine (>= 0.12.0)
19
19
  http_parser.rb (0.5.3)
20
- turntabler (0.1.1)
20
+ turntabler (0.1.2)
21
21
  em-http-request
22
22
  em-synchrony
23
23
  faye-websocket
@@ -401,18 +401,33 @@ module Turntabler
401
401
 
402
402
  # Finds songs that match the given query.
403
403
  #
404
- # @param [String] query The query string to search for
404
+ # @note The user must be entered in a room to search for songs
405
+ # @param [String] query The query string to search for. This should just be the title of the song if :artist is specified.
405
406
  # @param [Hash] options The configuration options for the search
407
+ # @option options [String] :artist The name of the artist for the song
408
+ # @option options [Fixnum] :duration The length, in minutes, of the song
406
409
  # @option options [Fixnum] :page The page number to get from the results
407
410
  # @return [Array<Turntabler::Song>]
408
411
  # @raise [ArgumentError] if an invalid option is specified
409
- # @raise [Turntabler::Error] if the command fails
412
+ # @raise [Turntabler::Error] if the user is not in a room or the command fails
410
413
  # @example
411
- # client.search_song('Like a Rolling Stone') # => [#<Turntabler::Sticker ...>, ...]
414
+ # # Less accurate, general query search
415
+ # client.search_song('Like a Rolling Stone by Bob Dylan') # => [#<Turntabler::Song ...>, ...]
416
+ #
417
+ # # More accurate, explicit title / artist search
418
+ # client.search_song('Like a Rolling Stone', :artist => 'Bob Dylan') # => [#<Turntabler::Song ...>, ...]
412
419
  def search_song(query, options = {})
413
- assert_valid_keys(options, :page)
420
+ assert_valid_keys(options, :artist, :duration, :page)
414
421
  options = {:page => 1}.merge(options)
415
422
 
423
+ raise(Turntabler::Error, 'User must be in a room to search for songs') unless room
424
+
425
+ if artist = options[:artist]
426
+ query = "title: #{query}"
427
+ query << " artist: #{artist}"
428
+ end
429
+ query << " duration: #{options[:duration]}" if options[:duration]
430
+
416
431
  api('file.search', :query => query, :page => options[:page])
417
432
 
418
433
  # Wait for the async callback
@@ -3,7 +3,7 @@ module Turntabler
3
3
  module Version
4
4
  MAJOR = 0
5
5
  MINOR = 1
6
- PATCH = 1
6
+ PATCH = 2
7
7
  STRING = [MAJOR, MINOR, PATCH].join(".")
8
8
  end
9
9
  end
metadata CHANGED
@@ -1,8 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: turntabler
3
3
  version: !ruby/object:Gem::Version
4
+ hash: 31
4
5
  prerelease:
5
- version: 0.1.1
6
+ segments:
7
+ - 0
8
+ - 1
9
+ - 2
10
+ version: 0.1.2
6
11
  platform: ruby
7
12
  authors:
8
13
  - Aaron Pfeifer
@@ -10,7 +15,7 @@ autorequire:
10
15
  bindir: bin
11
16
  cert_chain: []
12
17
 
13
- date: 2012-11-28 00:00:00 Z
18
+ date: 2012-12-01 00:00:00 Z
14
19
  dependencies:
15
20
  - !ruby/object:Gem::Dependency
16
21
  name: em-synchrony
@@ -20,6 +25,9 @@ dependencies:
20
25
  requirements:
21
26
  - - ">="
22
27
  - !ruby/object:Gem::Version
28
+ hash: 3
29
+ segments:
30
+ - 0
23
31
  version: "0"
24
32
  type: :runtime
25
33
  version_requirements: *id001
@@ -31,6 +39,9 @@ dependencies:
31
39
  requirements:
32
40
  - - ">="
33
41
  - !ruby/object:Gem::Version
42
+ hash: 3
43
+ segments:
44
+ - 0
34
45
  version: "0"
35
46
  type: :runtime
36
47
  version_requirements: *id002
@@ -42,6 +53,9 @@ dependencies:
42
53
  requirements:
43
54
  - - ">="
44
55
  - !ruby/object:Gem::Version
56
+ hash: 3
57
+ segments:
58
+ - 0
45
59
  version: "0"
46
60
  type: :runtime
47
61
  version_requirements: *id003
@@ -53,6 +67,9 @@ dependencies:
53
67
  requirements:
54
68
  - - ">="
55
69
  - !ruby/object:Gem::Version
70
+ hash: 3
71
+ segments:
72
+ - 0
56
73
  version: "0"
57
74
  type: :development
58
75
  version_requirements: *id004
@@ -64,6 +81,10 @@ dependencies:
64
81
  requirements:
65
82
  - - ~>
66
83
  - !ruby/object:Gem::Version
84
+ hash: 21
85
+ segments:
86
+ - 2
87
+ - 11
67
88
  version: "2.11"
68
89
  type: :development
69
90
  version_requirements: *id005
@@ -75,6 +96,9 @@ dependencies:
75
96
  requirements:
76
97
  - - ">="
77
98
  - !ruby/object:Gem::Version
99
+ hash: 3
100
+ segments:
101
+ - 0
78
102
  version: "0"
79
103
  type: :development
80
104
  version_requirements: *id006
@@ -154,17 +178,23 @@ required_ruby_version: !ruby/object:Gem::Requirement
154
178
  requirements:
155
179
  - - ">="
156
180
  - !ruby/object:Gem::Version
181
+ hash: 3
182
+ segments:
183
+ - 0
157
184
  version: "0"
158
185
  required_rubygems_version: !ruby/object:Gem::Requirement
159
186
  none: false
160
187
  requirements:
161
188
  - - ">="
162
189
  - !ruby/object:Gem::Version
190
+ hash: 3
191
+ segments:
192
+ - 0
163
193
  version: "0"
164
194
  requirements: []
165
195
 
166
196
  rubyforge_project:
167
- rubygems_version: 1.8.24
197
+ rubygems_version: 1.7.2
168
198
  signing_key:
169
199
  specification_version: 3
170
200
  summary: Turntable.FM API for Ruby