hallon 0.18.0 → 0.18.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.
- data/.rspec +1 -1
- data/CHANGELOG.md +12 -1
- data/README.markdown +13 -5
- data/Rakefile +23 -74
- data/examples/example_support.rb +2 -0
- data/hallon.gemspec +1 -1
- data/lib/hallon.rb +1 -6
- data/lib/hallon/album.rb +4 -4
- data/lib/hallon/album_browse.rb +6 -6
- data/lib/hallon/artist.rb +3 -3
- data/lib/hallon/artist_browse.rb +9 -9
- data/lib/hallon/audio_queue.rb +2 -1
- data/lib/hallon/base.rb +10 -10
- data/lib/hallon/enumerator.rb +3 -3
- data/lib/hallon/ext/spotify.rb +1 -47
- data/lib/hallon/image.rb +4 -4
- data/lib/hallon/link.rb +4 -4
- data/lib/hallon/linkable.rb +10 -10
- data/lib/hallon/observable/playlist.rb +2 -3
- data/lib/hallon/observable/playlist_container.rb +3 -12
- data/lib/hallon/player.rb +2 -2
- data/lib/hallon/playlist.rb +6 -6
- data/lib/hallon/playlist_container.rb +8 -8
- data/lib/hallon/scrobbler.rb +4 -4
- data/lib/hallon/search.rb +20 -5
- data/lib/hallon/session.rb +18 -17
- data/lib/hallon/toplist.rb +4 -4
- data/lib/hallon/track.rb +5 -5
- data/lib/hallon/user.rb +7 -7
- data/lib/hallon/version.rb +1 -1
- data/spec/hallon/album_browse_spec.rb +1 -1
- data/spec/hallon/artist_browse_spec.rb +1 -1
- data/spec/hallon/base_spec.rb +6 -3
- data/spec/hallon/enumerator_spec.rb +2 -2
- data/spec/hallon/hallon_spec.rb +0 -4
- data/spec/hallon/link_spec.rb +1 -1
- data/spec/hallon/linkable_spec.rb +4 -4
- data/spec/hallon/observable/playlist_container_spec.rb +3 -3
- data/spec/hallon/observable/playlist_spec.rb +1 -1
- data/spec/hallon/player_spec.rb +9 -9
- data/spec/hallon/playlist_container_spec.rb +2 -2
- data/spec/hallon/playlist_spec.rb +8 -8
- data/spec/hallon/scrobbler_spec.rb +8 -7
- data/spec/hallon/search_spec.rb +3 -3
- data/spec/hallon/session_spec.rb +10 -10
- data/spec/hallon/toplist_spec.rb +4 -4
- data/spec/hallon/track_spec.rb +6 -6
- data/spec/hallon/user_post_spec.rb +1 -1
- data/spec/hallon/user_spec.rb +1 -1
- data/spec/mockspotify.rb +36 -42
- data/spec/mockspotify/mockspotify_spec.rb +15 -15
- data/spec/spec_helper.rb +25 -21
- data/spec/support/album_mocks.rb +4 -4
- data/spec/support/artist_mocks.rb +5 -5
- data/spec/support/image_mocks.rb +4 -4
- data/spec/support/playlist_container_mocks.rb +4 -4
- data/spec/support/playlist_mocks.rb +6 -6
- data/spec/support/search_mocks.rb +2 -2
- data/spec/support/session_mocks.rb +1 -1
- data/spec/support/shared_for_callbacks.rb +1 -1
- data/spec/support/shared_for_linkable_objects.rb +3 -2
- data/spec/support/toplist_mocks.rb +2 -2
- data/spec/support/track_mocks.rb +4 -4
- data/spec/support/user_mocks.rb +2 -2
- metadata +5 -5
    
        data/lib/hallon/session.rb
    CHANGED
    
    | @@ -82,8 +82,8 @@ module Hallon | |
| 82 82 | 
             
                # @param [#to_s] appkey
         | 
| 83 83 | 
             
                # @param [Hash] options
         | 
| 84 84 | 
             
                # @option options [String] :user_agent ("Hallon") User-Agent to use (length < `256`)
         | 
| 85 | 
            -
                # @option options [String] : | 
| 86 | 
            -
                # @option options [String] : | 
| 85 | 
            +
                # @option options [String] :settings_location ("tmp") where to save settings and user-specific cache
         | 
| 86 | 
            +
                # @option options [String] :cache_location ("") where to save cache files (`""` to disable)
         | 
| 87 87 | 
             
                # @option options [String] :tracefile (nil) path to libspotify API tracefile (`nil` to disable)
         | 
| 88 88 | 
             
                # @option options [String] :device_id (nil) device ID for offline synchronization (`nil` to disable)
         | 
| 89 89 | 
             
                # @option options [String] :proxy (nil) proxy URI (supports http, https, socks4, socks5)
         | 
| @@ -105,8 +105,8 @@ module Hallon | |
| 105 105 |  | 
| 106 106 | 
             
                  @options = {
         | 
| 107 107 | 
             
                    :user_agent => "Hallon",
         | 
| 108 | 
            -
                    : | 
| 109 | 
            -
                    : | 
| 108 | 
            +
                    :settings_location => "tmp/hallon/",
         | 
| 109 | 
            +
                    :cache_location => "tmp/hallon/",
         | 
| 110 110 | 
             
                    :load_playlists => true,
         | 
| 111 111 | 
             
                    :compress_playlists => true,
         | 
| 112 112 | 
             
                    :cache_playlist_metadata => true,
         | 
| @@ -125,18 +125,19 @@ module Hallon | |
| 125 125 | 
             
                  @cache_size = 0
         | 
| 126 126 |  | 
| 127 127 | 
             
                  subscribe_for_callbacks do |callbacks|
         | 
| 128 | 
            -
                     | 
| 129 | 
            -
                     | 
| 130 | 
            -
                     | 
| 131 | 
            -
                    @options | 
| 132 | 
            -
             | 
| 128 | 
            +
                    # not overridable
         | 
| 129 | 
            +
                    @options[:api_version] = Hallon::API_VERSION
         | 
| 130 | 
            +
                    @options[:initially_unload_playlists] = ! @options.delete(:load_playlists)
         | 
| 131 | 
            +
                    @options[:dont_save_metadata_for_playlists] = ! @options.delete(:cache_playlist_metadata)
         | 
| 132 | 
            +
             | 
| 133 | 
            +
                    config = Spotify::SessionConfig.new(@options.merge(application_key: appkey, callbacks: callbacks))
         | 
| 133 134 |  | 
| 134 135 | 
             
                    instance_eval(&block) if block_given?
         | 
| 135 136 |  | 
| 136 137 | 
             
                    # You pass a pointer to the session pointer to libspotify >:)
         | 
| 137 138 | 
             
                    FFI::MemoryPointer.new(:pointer) do |p|
         | 
| 138 139 | 
             
                      Error::maybe_raise Spotify.session_create(config, p)
         | 
| 139 | 
            -
                      @pointer = p.read_pointer
         | 
| 140 | 
            +
                      @pointer = Spotify::Session.new(p.read_pointer)
         | 
| 140 141 | 
             
                    end
         | 
| 141 142 | 
             
                  end
         | 
| 142 143 | 
             
                end
         | 
| @@ -155,7 +156,7 @@ module Hallon | |
| 155 156 | 
             
                # @note returns nil if the session is not logged in.
         | 
| 156 157 | 
             
                # @return [PlaylistContainer, nil]
         | 
| 157 158 | 
             
                def container
         | 
| 158 | 
            -
                  container = Spotify.session_playlistcontainer | 
| 159 | 
            +
                  container = Spotify.session_playlistcontainer(pointer)
         | 
| 159 160 | 
             
                  PlaylistContainer.from(container)
         | 
| 160 161 | 
             
                end
         | 
| 161 162 |  | 
| @@ -198,7 +199,7 @@ module Hallon | |
| 198 199 | 
             
                # @raise [Spotify::Error] if no credentials are stored in libspotify
         | 
| 199 200 | 
             
                # @see #relogin!
         | 
| 200 201 | 
             
                def relogin
         | 
| 201 | 
            -
                  Spotify.session_relogin | 
| 202 | 
            +
                  Spotify.try(:session_relogin, pointer)
         | 
| 202 203 | 
             
                end
         | 
| 203 204 |  | 
| 204 205 | 
             
                # Log in to Spotify using the given credentials.
         | 
| @@ -267,7 +268,7 @@ module Hallon | |
| 267 268 |  | 
| 268 269 | 
             
                # @return [User] the User currently logged in.
         | 
| 269 270 | 
             
                def user
         | 
| 270 | 
            -
                  user = Spotify.session_user | 
| 271 | 
            +
                  user = Spotify.session_user(pointer)
         | 
| 271 272 | 
             
                  User.from(user)
         | 
| 272 273 | 
             
                end
         | 
| 273 274 |  | 
| @@ -411,20 +412,20 @@ module Hallon | |
| 411 412 | 
             
                # @see Player.bitrates
         | 
| 412 413 | 
             
                def offline_bitrate=(bitrate)
         | 
| 413 414 | 
             
                  bitrate, resync = Array(bitrate)
         | 
| 414 | 
            -
                  Spotify.session_preferred_offline_bitrate | 
| 415 | 
            +
                  Spotify.try(:session_preferred_offline_bitrate, pointer, bitrate, !! resync)
         | 
| 415 416 | 
             
                end
         | 
| 416 417 |  | 
| 417 418 | 
             
                # @note Returns nil when no user is logged in.
         | 
| 418 419 | 
             
                # @return [Playlist, nil] currently logged in user’s starred playlist.
         | 
| 419 420 | 
             
                def starred
         | 
| 420 | 
            -
                  playlist = Spotify.session_starred_create | 
| 421 | 
            +
                  playlist = Spotify.session_starred_create(pointer)
         | 
| 421 422 | 
             
                  Playlist.from(playlist)
         | 
| 422 423 | 
             
                end
         | 
| 423 424 |  | 
| 424 425 | 
             
                # @note Returns nil when no user is logged in.
         | 
| 425 426 | 
             
                # @return [Playlist, nil] currently logged in user’s inbox playlist.
         | 
| 426 427 | 
             
                def inbox
         | 
| 427 | 
            -
                  playlist = Spotify.session_inbox_create | 
| 428 | 
            +
                  playlist = Spotify.session_inbox_create(pointer)
         | 
| 428 429 | 
             
                  Playlist.from(playlist)
         | 
| 429 430 | 
             
                end
         | 
| 430 431 |  | 
| @@ -461,7 +462,7 @@ module Hallon | |
| 461 462 | 
             
                  def tracks_starred(tracks, starred)
         | 
| 462 463 | 
             
                    FFI::MemoryPointer.new(:pointer, tracks.size) do |ptr|
         | 
| 463 464 | 
             
                      ptr.write_array_of_pointer tracks.map(&:pointer)
         | 
| 464 | 
            -
                      Spotify.track_set_starred | 
| 465 | 
            +
                      Spotify.try(:track_set_starred, pointer, ptr, tracks.size, starred)
         | 
| 465 466 | 
             
                    end
         | 
| 466 467 | 
             
                  end
         | 
| 467 468 |  | 
    
        data/lib/hallon/toplist.rb
    CHANGED
    
    | @@ -11,7 +11,7 @@ module Hallon | |
| 11 11 | 
             
                  size :toplistbrowse_num_tracks
         | 
| 12 12 |  | 
| 13 13 | 
             
                  # @return [Track, nil]
         | 
| 14 | 
            -
                  item :toplistbrowse_track | 
| 14 | 
            +
                  item :toplistbrowse_track do |track|
         | 
| 15 15 | 
             
                    Track.from(track)
         | 
| 16 16 | 
             
                  end
         | 
| 17 17 | 
             
                end
         | 
| @@ -21,7 +21,7 @@ module Hallon | |
| 21 21 | 
             
                  size :toplistbrowse_num_albums
         | 
| 22 22 |  | 
| 23 23 | 
             
                  # @return [Album, nil]
         | 
| 24 | 
            -
                  item :toplistbrowse_album | 
| 24 | 
            +
                  item :toplistbrowse_album do |album|
         | 
| 25 25 | 
             
                    Album.from(album)
         | 
| 26 26 | 
             
                  end
         | 
| 27 27 | 
             
                end
         | 
| @@ -31,7 +31,7 @@ module Hallon | |
| 31 31 | 
             
                  size :toplistbrowse_num_artists
         | 
| 32 32 |  | 
| 33 33 | 
             
                  # @return [Artist, nil]
         | 
| 34 | 
            -
                  item :toplistbrowse_artist | 
| 34 | 
            +
                  item :toplistbrowse_artist do |artist|
         | 
| 35 35 | 
             
                    Artist.from(artist)
         | 
| 36 36 | 
             
                  end
         | 
| 37 37 | 
             
                end
         | 
| @@ -72,7 +72,7 @@ module Hallon | |
| 72 72 |  | 
| 73 73 | 
             
                  subscribe_for_callbacks do |callback|
         | 
| 74 74 | 
             
                    @type    = type
         | 
| 75 | 
            -
                    @pointer = Spotify.toplistbrowse_create | 
| 75 | 
            +
                    @pointer = Spotify.toplistbrowse_create(session.pointer, type, region, user, callback, nil)
         | 
| 76 76 | 
             
                  end
         | 
| 77 77 | 
             
                end
         | 
| 78 78 |  | 
    
        data/lib/hallon/track.rb
    CHANGED
    
    | @@ -10,7 +10,7 @@ module Hallon | |
| 10 10 | 
             
                  size :track_num_artists
         | 
| 11 11 |  | 
| 12 12 | 
             
                  # @return [Artist, nil]
         | 
| 13 | 
            -
                  item :track_artist | 
| 13 | 
            +
                  item :track_artist do |artist|
         | 
| 14 14 | 
             
                    Artist.from(artist)
         | 
| 15 15 | 
             
                  end
         | 
| 16 16 | 
             
                end
         | 
| @@ -43,7 +43,7 @@ module Hallon | |
| 43 43 | 
             
                # @param [String, Link, FFI::Pointer] link
         | 
| 44 44 | 
             
                def initialize(link)
         | 
| 45 45 | 
             
                  FFI::MemoryPointer.new(:int) do |ptr|
         | 
| 46 | 
            -
                    @pointer = to_pointer(link,  | 
| 46 | 
            +
                    @pointer = to_pointer(link, Spotify::Track, ptr)
         | 
| 47 47 | 
             
                    @offset  = Rational(ptr.read_int, 1000)
         | 
| 48 48 | 
             
                  end
         | 
| 49 49 | 
             
                end
         | 
| @@ -74,7 +74,7 @@ module Hallon | |
| 74 74 | 
             
                # @param [Integer] length
         | 
| 75 75 | 
             
                # @return [Track]
         | 
| 76 76 | 
             
                def self.local(title, artist, album = nil, length = nil)
         | 
| 77 | 
            -
                  track = Spotify.localtrack_create | 
| 77 | 
            +
                  track = Spotify.localtrack_create(artist, title, album || "", length || -1)
         | 
| 78 78 | 
             
                  new(track)
         | 
| 79 79 | 
             
                end
         | 
| 80 80 |  | 
| @@ -157,7 +157,7 @@ module Hallon | |
| 157 157 |  | 
| 158 158 | 
             
                # @return [Hallon::Album] album this track belongs to.
         | 
| 159 159 | 
             
                def album
         | 
| 160 | 
            -
                  album = Spotify.track_album | 
| 160 | 
            +
                  album = Spotify.track_album(pointer)
         | 
| 161 161 | 
             
                  Album.from(album)
         | 
| 162 162 | 
             
                end
         | 
| 163 163 |  | 
| @@ -188,7 +188,7 @@ module Hallon | |
| 188 188 | 
             
                # @see autolinked?
         | 
| 189 189 | 
             
                # @return [Track] the track this track is autolinked to for audio playback.
         | 
| 190 190 | 
             
                def playable_track
         | 
| 191 | 
            -
                  track = Spotify.track_get_playable | 
| 191 | 
            +
                  track = Spotify.track_get_playable(session.pointer, pointer)
         | 
| 192 192 | 
             
                  Track.from(track)
         | 
| 193 193 | 
             
                end
         | 
| 194 194 |  | 
    
        data/lib/hallon/user.rb
    CHANGED
    
    | @@ -47,7 +47,7 @@ module Hallon | |
| 47 47 | 
             
                      @tracks  = tracks
         | 
| 48 48 | 
             
                      @message = message
         | 
| 49 49 | 
             
                      @recipient_name = recipient_name
         | 
| 50 | 
            -
                      @pointer = Spotify.inbox_post_tracks | 
| 50 | 
            +
                      @pointer = Spotify.inbox_post_tracks(session.pointer, @recipient_name, ary, tracks.length, @message, callback, nil)
         | 
| 51 51 | 
             
                    end
         | 
| 52 52 | 
             
                  end
         | 
| 53 53 |  | 
| @@ -72,7 +72,7 @@ module Hallon | |
| 72 72 | 
             
                include Loadable
         | 
| 73 73 |  | 
| 74 74 | 
             
                from_link :profile do |link|
         | 
| 75 | 
            -
                  Spotify.link_as_user | 
| 75 | 
            +
                  Spotify.link_as_user(link)
         | 
| 76 76 | 
             
                end
         | 
| 77 77 |  | 
| 78 78 | 
             
                to_link :from_user
         | 
| @@ -86,11 +86,11 @@ module Hallon | |
| 86 86 | 
             
                #   Hallon::User.new("spotify:user:burgestrand")
         | 
| 87 87 | 
             
                #
         | 
| 88 88 | 
             
                # @note You can also instantiate User with a canonical username
         | 
| 89 | 
            -
                # @param [String, Link, Spotify:: | 
| 89 | 
            +
                # @param [String, Link, Spotify::User] link
         | 
| 90 90 | 
             
                def initialize(link)
         | 
| 91 | 
            -
                  @pointer = to_pointer(link,  | 
| 91 | 
            +
                  @pointer = to_pointer(link, Spotify::User) do
         | 
| 92 92 | 
             
                    if link.is_a?(String) and link !~ /\Aspotify:user:/
         | 
| 93 | 
            -
                      to_pointer("spotify:user:#{link}",  | 
| 93 | 
            +
                      to_pointer("spotify:user:#{link}", Spotify::User)
         | 
| 94 94 | 
             
                    end
         | 
| 95 95 | 
             
                  end
         | 
| 96 96 | 
             
                end
         | 
| @@ -114,14 +114,14 @@ module Hallon | |
| 114 114 | 
             
                # @note Returns nil unless {User#loaded?}
         | 
| 115 115 | 
             
                # @return [Playlist, nil] starred playlist of the User.
         | 
| 116 116 | 
             
                def starred
         | 
| 117 | 
            -
                  playlist = Spotify.session_starred_for_user_create | 
| 117 | 
            +
                  playlist = Spotify.session_starred_for_user_create(session.pointer, name)
         | 
| 118 118 | 
             
                  Playlist.from(playlist)
         | 
| 119 119 | 
             
                end
         | 
| 120 120 |  | 
| 121 121 | 
             
                # @note Returns nil unless {#loaded?}
         | 
| 122 122 | 
             
                # @return [PlaylistContainer, nil] published playlists of the User.
         | 
| 123 123 | 
             
                def published
         | 
| 124 | 
            -
                  container = Spotify.session_publishedcontainer_for_user_create | 
| 124 | 
            +
                  container = Spotify.session_publishedcontainer_for_user_create(session.pointer, name)
         | 
| 125 125 | 
             
                  PlaylistContainer.from(container)
         | 
| 126 126 | 
             
                end
         | 
| 127 127 |  | 
    
        data/lib/hallon/version.rb
    CHANGED
    
    
| @@ -14,7 +14,7 @@ describe Hallon::AlbumBrowse do | |
| 14 14 |  | 
| 15 15 | 
             
              describe ".new" do
         | 
| 16 16 | 
             
                it "should raise an error if the browse request failed" do
         | 
| 17 | 
            -
                   | 
| 17 | 
            +
                  spotify_api.should_receive(:albumbrowse_create).and_return(null_pointer)
         | 
| 18 18 | 
             
                  expect { Hallon::AlbumBrowse.new(mock_album) }.to raise_error(FFI::NullPointerError)
         | 
| 19 19 | 
             
                end
         | 
| 20 20 |  | 
| @@ -15,7 +15,7 @@ describe Hallon::ArtistBrowse do | |
| 15 15 |  | 
| 16 16 | 
             
              describe ".new" do
         | 
| 17 17 | 
             
                it "should raise an error if the browse request failed" do
         | 
| 18 | 
            -
                   | 
| 18 | 
            +
                  spotify_api.should_receive(:artistbrowse_create).and_return(null_pointer)
         | 
| 19 19 | 
             
                  expect { Hallon::ArtistBrowse.new(mock_artist) }.to raise_error(FFI::NullPointerError)
         | 
| 20 20 | 
             
                end
         | 
| 21 21 |  | 
    
        data/spec/hallon/base_spec.rb
    CHANGED
    
    | @@ -1,15 +1,18 @@ | |
| 1 | 
            +
            class Spotify::BasePointer < Spotify::ManagedPointer
         | 
| 2 | 
            +
            end
         | 
| 3 | 
            +
             | 
| 1 4 | 
             
            describe Hallon::Base do
         | 
| 2 5 | 
             
              let(:klass) do
         | 
| 3 6 | 
             
                Class.new(Hallon::Base) do
         | 
| 4 7 | 
             
                  def initialize(pointer)
         | 
| 5 | 
            -
                    @pointer = to_pointer(pointer,  | 
| 8 | 
            +
                    @pointer = to_pointer(pointer, Spotify::BasePointer) { |x| x }
         | 
| 6 9 | 
             
                  end
         | 
| 7 10 | 
             
                end
         | 
| 8 11 | 
             
              end
         | 
| 9 12 |  | 
| 10 13 | 
             
              let(:base_pointer) do
         | 
| 11 | 
            -
                 | 
| 12 | 
            -
                Spotify:: | 
| 14 | 
            +
                spotify_api.stub(:base_pointer_release => nil)
         | 
| 15 | 
            +
                Spotify::BasePointer.new(a_pointer)
         | 
| 13 16 | 
             
              end
         | 
| 14 17 |  | 
| 15 18 | 
             
              describe "#to_pointer" do
         | 
| @@ -1,8 +1,8 @@ | |
| 1 1 | 
             
            # coding: utf-8
         | 
| 2 2 | 
             
            describe Hallon::Enumerator do
         | 
| 3 3 | 
             
              def enumerator(items)
         | 
| 4 | 
            -
                 | 
| 5 | 
            -
                 | 
| 4 | 
            +
                spotify_api.stub(:enumerator_size => items)
         | 
| 5 | 
            +
                spotify_api.stub(:enumerator_item).and_return { |_, i| alphabet[i] }
         | 
| 6 6 |  | 
| 7 7 | 
             
                klass = Class.new(Hallon::Enumerator) do
         | 
| 8 8 | 
             
                  size :enumerator_size
         | 
    
        data/spec/hallon/hallon_spec.rb
    CHANGED
    
    | @@ -8,10 +8,6 @@ describe Hallon do | |
| 8 8 | 
             
                specify { Hallon::API_VERSION.should == 12 }
         | 
| 9 9 | 
             
              end
         | 
| 10 10 |  | 
| 11 | 
            -
              describe "API_BUILD" do
         | 
| 12 | 
            -
                specify { Hallon::API_BUILD.should be_a String }
         | 
| 13 | 
            -
              end
         | 
| 14 | 
            -
             | 
| 15 11 | 
             
              describe "URI" do
         | 
| 16 12 | 
             
                example_uris.keys.each do |uri|
         | 
| 17 13 | 
             
                  specify(uri) { Hallon::URI.match(uri)[0].should eq uri }
         | 
    
        data/spec/hallon/link_spec.rb
    CHANGED
    
    | @@ -13,7 +13,7 @@ describe Hallon::Link do | |
| 13 13 | 
             
                end
         | 
| 14 14 |  | 
| 15 15 | 
             
                it "should raise an error given a null pointer" do
         | 
| 16 | 
            -
                  expect { Hallon::Link.new(Spotify:: | 
| 16 | 
            +
                  expect { Hallon::Link.new(Spotify::Link.new(null_pointer)) }.to raise_error(ArgumentError)
         | 
| 17 17 | 
             
                end
         | 
| 18 18 |  | 
| 19 19 | 
             
                it "should raise an error when no session instance is about" do
         | 
| @@ -10,7 +10,7 @@ describe Hallon::Linkable do | |
| 10 10 | 
             
              let(:object) { klass.new }
         | 
| 11 11 | 
             
              let(:pointer) { FFI::Pointer.new(1) }
         | 
| 12 12 |  | 
| 13 | 
            -
              before(:each) {  | 
| 13 | 
            +
              before(:each) { spotify_api.stub(:link_as_search) }
         | 
| 14 14 |  | 
| 15 15 | 
             
              it "should define the #from_link method" do
         | 
| 16 16 | 
             
                object.respond_to?(:from_link, true).should be_false
         | 
| @@ -24,7 +24,7 @@ describe Hallon::Linkable do | |
| 24 24 |  | 
| 25 25 | 
             
              describe "#to_link" do
         | 
| 26 26 | 
             
                it "should return nil if link creation failed" do
         | 
| 27 | 
            -
                   | 
| 27 | 
            +
                  spotify_api.should_receive(:link_create_from_user).and_return(null_pointer)
         | 
| 28 28 |  | 
| 29 29 | 
             
                  klass.instance_eval do
         | 
| 30 30 | 
             
                    to_link(:from_user)
         | 
| @@ -48,7 +48,7 @@ describe Hallon::Linkable do | |
| 48 48 |  | 
| 49 49 | 
             
              describe "#from_link" do
         | 
| 50 50 | 
             
                it "should call the appropriate Spotify function" do
         | 
| 51 | 
            -
                   | 
| 51 | 
            +
                  spotify_api.should_receive(:link_as_search).and_return(pointer)
         | 
| 52 52 |  | 
| 53 53 | 
             
                  klass.instance_eval do
         | 
| 54 54 | 
             
                    from_link(:as_search)
         | 
| @@ -58,7 +58,7 @@ describe Hallon::Linkable do | |
| 58 58 | 
             
                end
         | 
| 59 59 |  | 
| 60 60 | 
             
                it "should call the given block if necessary" do
         | 
| 61 | 
            -
                   | 
| 61 | 
            +
                  spotify_api.should_not_receive(:link_as_search)
         | 
| 62 62 |  | 
| 63 63 | 
             
                  called  = false
         | 
| 64 64 | 
             
                  pointer = double(:null? => false)
         | 
| @@ -1,16 +1,16 @@ | |
| 1 1 | 
             
            describe Hallon::Observable::PlaylistContainer do
         | 
| 2 2 | 
             
              specification_for_callback "playlist_added" do
         | 
| 3 | 
            -
                let(:input)  { [a_pointer,  | 
| 3 | 
            +
                let(:input)  { [a_pointer, mock_playlist, 3, :userdata] }
         | 
| 4 4 | 
             
                let(:output) { [Hallon::Playlist.new(mock_playlist), 3] }
         | 
| 5 5 | 
             
              end
         | 
| 6 6 |  | 
| 7 7 | 
             
              specification_for_callback "playlist_removed" do
         | 
| 8 | 
            -
                let(:input)  { [a_pointer,  | 
| 8 | 
            +
                let(:input)  { [a_pointer, mock_playlist, 3, :userdata] }
         | 
| 9 9 | 
             
                let(:output) { [Hallon::Playlist.new(mock_playlist), 3] }
         | 
| 10 10 | 
             
              end
         | 
| 11 11 |  | 
| 12 12 | 
             
              specification_for_callback "playlist_moved" do
         | 
| 13 | 
            -
                let(:input)  { [a_pointer,  | 
| 13 | 
            +
                let(:input)  { [a_pointer, mock_playlist, 3, 8, :userdata] }
         | 
| 14 14 | 
             
                let(:output) { [Hallon::Playlist.new(mock_playlist), 3, 8] }
         | 
| 15 15 | 
             
              end
         | 
| 16 16 |  | 
| @@ -52,7 +52,7 @@ describe Hallon::Observable::Playlist do | |
| 52 52 | 
             
              end
         | 
| 53 53 |  | 
| 54 54 | 
             
              specification_for_callback "track_created_changed" do
         | 
| 55 | 
            -
                let(:input)  { [a_pointer, 7,  | 
| 55 | 
            +
                let(:input)  { [a_pointer, 7, mock_user, 15, :userdata] }
         | 
| 56 56 | 
             
                let(:output) { [7, Hallon::User.new(mock_user), Time.at(15)] }
         | 
| 57 57 | 
             
              end
         | 
| 58 58 |  | 
    
        data/spec/hallon/player_spec.rb
    CHANGED
    
    | @@ -31,43 +31,43 @@ describe Hallon::Player do | |
| 31 31 |  | 
| 32 32 | 
             
              describe "#load" do
         | 
| 33 33 | 
             
                it "should load the given track" do
         | 
| 34 | 
            -
                   | 
| 34 | 
            +
                  spotify_api.should_receive(:session_player_load).with(session.pointer, track.pointer)
         | 
| 35 35 | 
             
                  player.load(track)
         | 
| 36 36 | 
             
                end
         | 
| 37 37 |  | 
| 38 38 | 
             
                it "should try to instantiate the track if it’s not a track" do
         | 
| 39 | 
            -
                   | 
| 39 | 
            +
                  spotify_api.should_receive(:session_player_load).with(session.pointer, track.pointer)
         | 
| 40 40 | 
             
                  player.load(track.to_str)
         | 
| 41 41 | 
             
                end
         | 
| 42 42 |  | 
| 43 43 | 
             
                it "should raise an error if load was unsuccessful" do
         | 
| 44 | 
            -
                   | 
| 44 | 
            +
                  spotify_api.should_receive(:session_player_load).and_return(:is_loading)
         | 
| 45 45 | 
             
                  expect { player.load(track) }.to raise_error(Hallon::Error, /IS_LOADING/)
         | 
| 46 46 | 
             
                end
         | 
| 47 47 | 
             
              end
         | 
| 48 48 |  | 
| 49 49 | 
             
              describe "#stop" do
         | 
| 50 50 | 
             
                it "should unload the currently loaded track" do
         | 
| 51 | 
            -
                   | 
| 51 | 
            +
                  spotify_api.should_receive(:session_player_unload).with(session.pointer)
         | 
| 52 52 | 
             
                  player.stop
         | 
| 53 53 | 
             
                end
         | 
| 54 54 | 
             
              end
         | 
| 55 55 |  | 
| 56 56 | 
             
              describe "#prefetch" do
         | 
| 57 57 | 
             
                it "should set up given track for prefetching" do
         | 
| 58 | 
            -
                   | 
| 58 | 
            +
                  spotify_api.should_receive(:session_player_prefetch).with(session.pointer, track.pointer)
         | 
| 59 59 | 
             
                  player.prefetch(track)
         | 
| 60 60 | 
             
                end
         | 
| 61 61 | 
             
              end
         | 
| 62 62 |  | 
| 63 63 | 
             
              describe "#play" do
         | 
| 64 64 | 
             
                it "should start playback of given track" do
         | 
| 65 | 
            -
                   | 
| 65 | 
            +
                  spotify_api.should_receive(:session_player_play).with(session.pointer, true)
         | 
| 66 66 | 
             
                  player.play
         | 
| 67 67 | 
             
                end
         | 
| 68 68 |  | 
| 69 69 | 
             
                it "should load and play given track if one was given" do
         | 
| 70 | 
            -
                   | 
| 70 | 
            +
                  spotify_api.should_receive(:session_player_play).with(session.pointer, true)
         | 
| 71 71 | 
             
                  player.should_receive(:load).with(track)
         | 
| 72 72 | 
             
                  player.play(track)
         | 
| 73 73 | 
             
                end
         | 
| @@ -75,14 +75,14 @@ describe Hallon::Player do | |
| 75 75 |  | 
| 76 76 | 
             
              describe "#pause" do
         | 
| 77 77 | 
             
                it "should stop playback of given track" do
         | 
| 78 | 
            -
                   | 
| 78 | 
            +
                  spotify_api.should_receive(:session_player_play).with(session.pointer, false)
         | 
| 79 79 | 
             
                  player.pause
         | 
| 80 80 | 
             
                end
         | 
| 81 81 | 
             
              end
         | 
| 82 82 |  | 
| 83 83 | 
             
              describe "#seek" do
         | 
| 84 84 | 
             
                it "should set up the currently loaded track at given position" do
         | 
| 85 | 
            -
                   | 
| 85 | 
            +
                  spotify_api.should_receive(:session_player_seek).with(session.pointer, 1000)
         | 
| 86 86 | 
             
                  player.seek(1)
         | 
| 87 87 | 
             
                end
         | 
| 88 88 | 
             
              end
         |