hallon 0.4.0 → 0.8.0
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/.gitmodules +3 -0
- data/.travis.yml +2 -0
- data/CHANGELOG +30 -6
- data/README.markdown +7 -7
- data/Rakefile +70 -16
- data/examples/logging_in.rb +3 -3
- data/examples/printing_link_information.rb +1 -1
- data/examples/show_published_playlists_of_user.rb +92 -0
- data/hallon.gemspec +7 -4
- data/lib/hallon.rb +16 -4
- data/lib/hallon/album.rb +16 -6
- data/lib/hallon/album_browse.rb +78 -0
- data/lib/hallon/artist.rb +59 -0
- data/lib/hallon/artist_browse.rb +89 -0
- data/lib/hallon/base.rb +7 -0
- data/lib/hallon/enumerator.rb +64 -0
- data/lib/hallon/error.rb +8 -6
- data/lib/hallon/ext/spotify.rb +3 -3
- data/lib/hallon/image.rb +25 -12
- data/lib/hallon/link.rb +4 -4
- data/lib/hallon/linkable.rb +4 -2
- data/lib/hallon/observable.rb +1 -4
- data/lib/hallon/player.rb +130 -0
- data/lib/hallon/search.rb +128 -0
- data/lib/hallon/session.rb +226 -25
- data/lib/hallon/toplist.rb +83 -0
- data/lib/hallon/track.rb +62 -7
- data/lib/hallon/user.rb +6 -6
- data/lib/hallon/version.rb +1 -1
- data/spec/hallon/album_browse_spec.rb +20 -0
- data/spec/hallon/album_spec.rb +12 -7
- data/spec/hallon/artist_browse_spec.rb +29 -0
- data/spec/hallon/artist_spec.rb +32 -0
- data/spec/hallon/enumerator_spec.rb +106 -0
- data/spec/hallon/error_spec.rb +10 -0
- data/spec/hallon/hallon_spec.rb +5 -1
- data/spec/hallon/image_spec.rb +39 -25
- data/spec/hallon/linkable_spec.rb +12 -4
- data/spec/hallon/observable_spec.rb +5 -0
- data/spec/hallon/player_spec.rb +73 -0
- data/spec/hallon/search_spec.rb +80 -0
- data/spec/hallon/session_spec.rb +187 -6
- data/spec/hallon/toplist_spec.rb +40 -0
- data/spec/hallon/track_spec.rb +43 -8
- data/spec/mockspotify.rb +47 -0
- data/spec/mockspotify/.gitignore +5 -0
- data/spec/mockspotify/extconf.rb +5 -0
- data/spec/mockspotify/mockspotify_spec.rb +41 -0
- data/spec/spec_helper.rb +20 -0
- data/spec/support/common_objects.rb +84 -7
- metadata +72 -20
- data/lib/hallon/ext/object.rb +0 -16
@@ -0,0 +1,40 @@
|
|
1
|
+
describe Hallon::Toplist do
|
2
|
+
subject do
|
3
|
+
mock_session do
|
4
|
+
Spotify.should_receive(:toplistbrowse_create).and_return(mock_toplistbrowse)
|
5
|
+
Hallon::Toplist.new(:artists)
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
it { should be_a Hallon::Observable }
|
10
|
+
it { should be_loaded }
|
11
|
+
its(:error) { should eq :ok }
|
12
|
+
|
13
|
+
its('artists.size') { should eq 2 }
|
14
|
+
its('artists.to_a') { should eq instantiate(Hallon::Artist, mock_artist, mock_artist_two) }
|
15
|
+
|
16
|
+
its('albums.size') { should eq 1 }
|
17
|
+
its('albums.to_a') { should eq instantiate(Hallon::Album, mock_album) }
|
18
|
+
|
19
|
+
its('tracks.size') { should eq 2 }
|
20
|
+
its('tracks.to_a') { should eq instantiate(Hallon::Track, mock_track, mock_track_two) }
|
21
|
+
|
22
|
+
describe ".new" do
|
23
|
+
around { |test| mock_session(&test) }
|
24
|
+
|
25
|
+
it "should fail given an invalid type" do
|
26
|
+
expect { Hallon::Toplist.new(:invalid_type) }.to raise_error(ArgumentError, /invalid enum value/)
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should pass the username given a string to libspotify" do
|
30
|
+
Spotify.should_receive(:toplistbrowse_create).with(anything, anything, :user, "Kim", anything, nil).and_return(null_pointer)
|
31
|
+
Hallon::Toplist.new(:artists, "Kim")
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should pass the correct region to libspotify" do
|
35
|
+
sweden = 21317
|
36
|
+
Spotify.should_receive(:toplistbrowse_create).with(anything, anything, sweden, anything, anything, nil).and_return(null_pointer)
|
37
|
+
Hallon::Toplist.new(:artists, :se)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
data/spec/hallon/track_spec.rb
CHANGED
@@ -1,19 +1,49 @@
|
|
1
1
|
# coding: utf-8
|
2
|
-
describe Hallon::Track
|
2
|
+
describe Hallon::Track do
|
3
3
|
subject { Hallon::Track.new(mock_track) }
|
4
4
|
|
5
|
+
it { should be_loaded }
|
5
6
|
its(:name) { should eq "They" }
|
6
7
|
its(:disc) { should be 2 }
|
7
8
|
its(:index) { should be 7 }
|
8
9
|
its(:status) { should be :ok }
|
9
|
-
|
10
|
-
its(:duration) { should eq 123.456 }
|
10
|
+
its(:duration) { should eq 123.456 }
|
11
11
|
its(:popularity) { should eq 0.42 }
|
12
|
+
its(:album) { should eq Hallon::Album.new(mock_album) }
|
13
|
+
its(:artist) { should eq Hallon::Artist.new(mock_artist) }
|
14
|
+
its('artists.size') { should eq 2 }
|
15
|
+
its('artists.to_a') { should eq [mock_artist, mock_artist_two].map{ |p| Hallon::Artist.new(p) } }
|
12
16
|
|
13
|
-
|
14
|
-
|
17
|
+
describe "#starred=" do
|
18
|
+
around { |test| mock_session(&test) }
|
15
19
|
|
16
|
-
|
20
|
+
it "should delegate to session to unstar" do
|
21
|
+
session.should_receive(:unstar).with(subject)
|
22
|
+
subject.starred = false
|
23
|
+
end
|
24
|
+
|
25
|
+
|
26
|
+
it "should delegate to session to star" do
|
27
|
+
session.should_receive(:star).with(subject)
|
28
|
+
subject.starred = true
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should change starred status of track" do
|
32
|
+
subject.should be_starred
|
33
|
+
subject.starred = false
|
34
|
+
subject.should_not be_starred
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
describe "session bound queries" do
|
39
|
+
subject { Hallon::Track.new(mock_track) }
|
40
|
+
around { |test| mock_session(&test) }
|
41
|
+
|
42
|
+
it { should be_available }
|
43
|
+
it { should_not be_local }
|
44
|
+
it { should be_autolinked }
|
45
|
+
it { should be_starred }
|
46
|
+
end
|
17
47
|
|
18
48
|
describe "album" do
|
19
49
|
it "should be an album when there is one" do
|
@@ -46,7 +76,7 @@ describe Hallon::Track, :session => true do
|
|
46
76
|
|
47
77
|
describe "offset" do
|
48
78
|
let(:without_offset) { 'spotify:track:7N2Vc8u56VGA4KUrGbikC2' }
|
49
|
-
let(:with_offset)
|
79
|
+
let(:with_offset) { without_offset + '#1:00' }
|
50
80
|
|
51
81
|
specify "with offset" do
|
52
82
|
Hallon::Track.new(with_offset).offset.should eq 60
|
@@ -64,7 +94,12 @@ describe Hallon::Track, :session => true do
|
|
64
94
|
|
65
95
|
its(:name) { should eq "Nissy" }
|
66
96
|
its("album.name") { should eq "Coolio" }
|
67
|
-
|
97
|
+
its("artist.name") { should eq "Emmy" }
|
68
98
|
its(:duration) { should eq 0.1 }
|
99
|
+
|
100
|
+
it do
|
101
|
+
Hallon::Session.should_receive(:instance).and_return(session)
|
102
|
+
should be_local
|
103
|
+
end
|
69
104
|
end
|
70
105
|
end
|
data/spec/mockspotify.rb
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'ffi'
|
2
|
+
require 'rbconfig'
|
3
|
+
|
4
|
+
module Spotify
|
5
|
+
module Mock
|
6
|
+
# @return [String] path to the libmockspotify C extension binary.
|
7
|
+
def self.path
|
8
|
+
File.expand_path('../mockspotify/libmockspotify.', __FILE__) << Config::MAKEFILE_CONFIG['DLEXT']
|
9
|
+
end
|
10
|
+
|
11
|
+
# Overridden to always ffi_lib the mock path.
|
12
|
+
def ffi_lib(*)
|
13
|
+
super(Mock.path)
|
14
|
+
end
|
15
|
+
|
16
|
+
# Overriden to not throw an error on missing functions.
|
17
|
+
def attach_function(*)
|
18
|
+
super
|
19
|
+
rescue FFI::NotFoundError => e
|
20
|
+
warn "#{e.message}" if $VERBOSE
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
extend FFI::Library
|
25
|
+
extend Mock
|
26
|
+
require 'spotify'
|
27
|
+
|
28
|
+
old_verbose, $VERBOSE = $VERBOSE, true
|
29
|
+
|
30
|
+
attach_function :registry_find, [:string], :pointer
|
31
|
+
attach_function :registry_add, [:string, :pointer], :void
|
32
|
+
|
33
|
+
attach_function :mock_session, :mocksp_session_create, [:pointer, :connectionstate, :int, :array, :int, Spotify::OfflineSyncStatus, :int, :int], :session
|
34
|
+
attach_function :mock_user, :mocksp_user_create, [:string, :string, :string, :string, :relation_type, :bool], :user
|
35
|
+
attach_function :mock_track, :mocksp_track_create, [:string, :int, :array, :album, :int, :int, :int, :int, :error, :bool, :bool, :bool, :bool, :bool], :track
|
36
|
+
attach_function :mock_image, :mocksp_image_create, [:image_id, :imageformat, :size_t, :buffer_in, :error], :image
|
37
|
+
attach_function :mock_artist, :mocksp_artist_create, [:string, :bool], :artist
|
38
|
+
attach_function :mock_album, :mocksp_album_create, [:string, :artist, :int, :image_id, :albumtype, :bool, :bool], :album
|
39
|
+
|
40
|
+
attach_function :mock_albumbrowse, :mocksp_albumbrowse_create, [:error, :album, :artist, :int, :array, :int, :array, :string, :albumbrowse_complete_cb, :pointer], :albumbrowse
|
41
|
+
attach_function :mock_artistbrowse, :mocksp_artistbrowse_create, [:error, :artist, :int, :array, :int, :array, :int, :array, :int, :array, :string, :artistbrowse_complete_cb, :pointer], :artistbrowse
|
42
|
+
attach_function :mock_toplistbrowse, :mocksp_toplistbrowse_create, [:error, :int, :array, :int, :array, :int, :array], :toplistbrowse
|
43
|
+
|
44
|
+
attach_function :mock_search, :mocksp_search_create, [:error, :string, :string, :int, :int, :array, :int, :int, :array, :int, :int, :array, :search_complete_cb, :pointer], :search
|
45
|
+
|
46
|
+
$VERBOSE = old_verbose
|
47
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
describe Spotify::Mock do
|
2
|
+
it "should have injected itself into Spotify's ancestor chain" do
|
3
|
+
ancestors = (class << Spotify; self; end).ancestors
|
4
|
+
mock_index = ancestors.index(Spotify::Mock)
|
5
|
+
ffi_index = ancestors.index(FFI::Library)
|
6
|
+
|
7
|
+
mock_index.should < ffi_index # [Mock, FFI, BasicObject]
|
8
|
+
end
|
9
|
+
|
10
|
+
describe "hextoa" do
|
11
|
+
it "should convert a hexidecimal string properly" do
|
12
|
+
Spotify.attach_function :hextoa, [:string, :int], :string
|
13
|
+
Spotify.hextoa("3A3A", 4).should eq "::"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
describe "atohex" do
|
18
|
+
it "should convert a byte string to a hexadecimal string" do
|
19
|
+
Spotify.attach_function :atohex, [:buffer_out, :buffer_in, :int], :void
|
20
|
+
|
21
|
+
FFI::Buffer.alloc_out(8) do |b|
|
22
|
+
Spotify.atohex(b, "\x3A\x3A\x0F\xF1", b.size)
|
23
|
+
b.get_string(0, b.size).should eq "3a3a0ff1"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
describe "the registry" do
|
29
|
+
it "should find previously added entries" do
|
30
|
+
Spotify.registry_add("i_exist", FFI::Pointer.new(1))
|
31
|
+
Spotify.registry_add("i_exist_too", FFI::Pointer.new(2))
|
32
|
+
|
33
|
+
Spotify.registry_find("i_exist").should eq FFI::Pointer.new(1)
|
34
|
+
Spotify.registry_find("i_exist_too").should eq FFI::Pointer.new(2)
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should return nil for entries not in the registry" do
|
38
|
+
Spotify.registry_find("i_do_not_exist").should be_null
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# coding: utf-8
|
2
|
+
require 'bundler/setup'
|
2
3
|
|
3
4
|
begin
|
4
5
|
require 'cover_me'
|
@@ -23,6 +24,25 @@ RSpec.configure do |config|
|
|
23
24
|
appkey = valid_appkey ? 'appkey_good' : 'appkey_bad'
|
24
25
|
Hallon::Session.send(:new, appkey, options)
|
25
26
|
end
|
27
|
+
|
28
|
+
def instantiate(klass, *pointers)
|
29
|
+
pointers.map { |x| klass.new(x) }
|
30
|
+
end
|
31
|
+
|
32
|
+
def mock_session
|
33
|
+
Hallon::Session.should_receive(:instance).at_least(1).times.and_return(session)
|
34
|
+
yield
|
35
|
+
end
|
36
|
+
|
37
|
+
def pointer_array_with(*args)
|
38
|
+
ary = FFI::MemoryPointer.new(:pointer, args.size)
|
39
|
+
ary.write_array_of_pointer args
|
40
|
+
def ary.length
|
41
|
+
size / type_size
|
42
|
+
end
|
43
|
+
|
44
|
+
ary
|
45
|
+
end
|
26
46
|
end
|
27
47
|
|
28
48
|
RSpec::Core::ExampleGroup.instance_eval do
|
@@ -1,18 +1,95 @@
|
|
1
|
+
# coding: utf-8
|
1
2
|
RSpec::Core::ExampleGroup.instance_eval do
|
2
3
|
let(:mock_artist) { Spotify.mock_artist("Jem", true) }
|
4
|
+
let(:mock_artist_two) { Spotify.mock_artist("Maroon 5", true) }
|
5
|
+
|
3
6
|
let(:mock_album) { Spotify.mock_album("Finally Woken", mock_artist, 2004, "DEADBEEFDEADBEEFDEAD", :single, true, true) }
|
4
7
|
let(:mock_user) { Spotify.mock_user("burgestrand", "Burgestrand", "Kim Burgestrand", "https://secure.gravatar.com/avatar/b67b73b5b1fd84119ec788b1c3df02ad", :none, true) }
|
5
8
|
let(:mock_image) { Spotify.mock_image(mock_image_id, :jpeg, File.size(fixture_image_path), File.read(fixture_image_path), :ok) }
|
9
|
+
|
6
10
|
let(:mock_track) do
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
11
|
+
artists = pointer_array_with(mock_artist, mock_artist_two)
|
12
|
+
Spotify.mock_track("They", artists.length, artists, mock_album, 123_456, 42, 2, 7, 0, true, true, false, true, true)
|
13
|
+
end
|
14
|
+
|
15
|
+
let(:mock_track_two) do
|
16
|
+
artists = pointer_array_with(mock_artist)
|
17
|
+
Spotify.mock_track("Amazing", artists.length, artists, mock_album, 123_456, 42, 2, 7, 0, true, true, false, true, true)
|
18
|
+
end
|
19
|
+
|
20
|
+
let(:mock_albumbrowse) do
|
21
|
+
copyrights = %w[Kim Elin].map { |x| FFI::MemoryPointer.from_string(x) }
|
22
|
+
copyrights = pointer_array_with(*copyrights)
|
23
|
+
tracks = pointer_array_with(mock_track, mock_track_two)
|
24
|
+
review = "This album is AWESOME"
|
25
|
+
Spotify.mock_albumbrowse(:ok, mock_album, mock_artist, 2, copyrights, 2, tracks, review, nil, nil)
|
26
|
+
end
|
27
|
+
|
28
|
+
let(:mock_artistbrowse) do
|
29
|
+
artistbrowse = nil
|
30
|
+
|
31
|
+
mock_image_pointer = FFI::MemoryPointer.from_string(mock_image_id)
|
32
|
+
similar_artists = pointer_array_with(mock_artist, mock_artist_two)
|
33
|
+
portraits = pointer_array_with(mock_image_pointer, mock_image_pointer)
|
34
|
+
tracks = pointer_array_with(mock_track, mock_track_two)
|
35
|
+
albums = pointer_array_with(mock_album)
|
36
|
+
|
37
|
+
Spotify.mock_artistbrowse(:ok, mock_artist, portraits.length, portraits, tracks.length, tracks, albums.length, albums, similar_artists.length, similar_artists, "grew up in DA BLOCK", nil, nil)
|
38
|
+
end
|
39
|
+
|
40
|
+
let(:mock_toplistbrowse) do
|
41
|
+
artists = pointer_array_with(mock_artist, mock_artist_two)
|
42
|
+
albums = pointer_array_with(mock_album)
|
43
|
+
tracks = pointer_array_with(mock_track, mock_track_two)
|
44
|
+
Spotify.mock_toplistbrowse(:ok, artists.length, artists, albums.length, albums, tracks.length, tracks)
|
45
|
+
end
|
46
|
+
|
47
|
+
let(:mock_search) do
|
48
|
+
artists = pointer_array_with(mock_artist, mock_artist_two)
|
49
|
+
albums = pointer_array_with(mock_album)
|
50
|
+
tracks = pointer_array_with(mock_track, mock_track_two)
|
51
|
+
|
52
|
+
Spotify.mock_search(:ok, "my query", "another thing", 1337, tracks.length, tracks, 42, albums.length, albums, 81104, artists.length, artists, nil, nil)
|
13
53
|
end
|
14
54
|
|
15
55
|
let(:mock_image_hex) { "3ad93423add99766e02d563605c6e76ed2b0e450" }
|
16
|
-
let(:mock_image_id) { ":\xD94#\xAD\xD9\x97f\xE0-V6\x05\xC6\xE7n\xD2\xB0\xE4P" }
|
56
|
+
let(:mock_image_id) { ":\xD94#\xAD\xD9\x97f\xE0-V6\x05\xC6\xE7n\xD2\xB0\xE4P".force_encoding("BINARY") }
|
17
57
|
let(:null_pointer) { FFI::Pointer.new(0) }
|
58
|
+
|
59
|
+
let(:mock_offline_sync_status) do
|
60
|
+
sync = Spotify::OfflineSyncStatus.new
|
61
|
+
mock_offline_sync_status_hash.each_pair do |key, value|
|
62
|
+
sync[key] = value
|
63
|
+
end
|
64
|
+
sync
|
65
|
+
end
|
66
|
+
|
67
|
+
let(:mock_offline_sync_status_hash) do
|
68
|
+
{
|
69
|
+
:queued_tracks => 1,
|
70
|
+
:queued_bytes => 2,
|
71
|
+
:done_tracks => 3,
|
72
|
+
:done_bytes => 4,
|
73
|
+
:copied_tracks => 5,
|
74
|
+
:copied_bytes => 6,
|
75
|
+
:error_tracks => 8,
|
76
|
+
:syncing => false,
|
77
|
+
:willnotcopy_tracks => 7
|
78
|
+
}
|
79
|
+
end
|
80
|
+
|
81
|
+
let(:mock_session_object) do
|
82
|
+
session = Hallon::Session.send(:allocate)
|
83
|
+
friends = pointer_array_with(mock_user)
|
84
|
+
sstatus = mock_offline_sync_status
|
85
|
+
session.instance_eval do
|
86
|
+
@pointer = Spotify.mock_session(nil, :undefined, friends.length, friends, 60 * 60 * 24 * 30, sstatus, 7, 3)
|
87
|
+
end
|
88
|
+
session
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
RSpec::Core::ExampleGroup.new.instance_eval do
|
93
|
+
Spotify.registry_add 'spotify:track:7N2Vc8u56VGA4KUrGbikC2', mock_track
|
94
|
+
Spotify.registry_add 'spotify:user:burgestrand', mock_user
|
18
95
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hallon
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,33 +9,33 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-
|
12
|
+
date: 2011-10-01 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: spotify
|
16
|
-
requirement: &
|
16
|
+
requirement: &2156044680 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version:
|
21
|
+
version: 9.0.0
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *2156044680
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
|
-
name:
|
27
|
-
requirement: &
|
26
|
+
name: bundler
|
27
|
+
requirement: &2156043420 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version:
|
32
|
+
version: '1.0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *2156043420
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rake
|
38
|
-
requirement: &
|
38
|
+
requirement: &2156041620 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0.8'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *2156041620
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: rspec
|
49
|
-
requirement: &
|
49
|
+
requirement: &2156039900 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: '2'
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *2156039900
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: yard
|
60
|
-
requirement: &
|
60
|
+
requirement: &2156038000 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: '0'
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *2156038000
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rdiscount
|
71
|
-
requirement: &
|
71
|
+
requirement: &2156036440 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,7 +76,7 @@ dependencies:
|
|
76
76
|
version: '0'
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *2156036440
|
80
80
|
description:
|
81
81
|
email: kim@burgestrand.se
|
82
82
|
executables: []
|
@@ -86,7 +86,9 @@ files:
|
|
86
86
|
- .autotest
|
87
87
|
- .gemtest
|
88
88
|
- .gitignore
|
89
|
+
- .gitmodules
|
89
90
|
- .rspec
|
91
|
+
- .travis.yml
|
90
92
|
- .yardopts
|
91
93
|
- CHANGELOG
|
92
94
|
- Gemfile
|
@@ -97,26 +99,37 @@ files:
|
|
97
99
|
- Termfile
|
98
100
|
- examples/logging_in.rb
|
99
101
|
- examples/printing_link_information.rb
|
102
|
+
- examples/show_published_playlists_of_user.rb
|
100
103
|
- hallon.gemspec
|
101
104
|
- lib/hallon.rb
|
102
105
|
- lib/hallon/album.rb
|
106
|
+
- lib/hallon/album_browse.rb
|
107
|
+
- lib/hallon/artist.rb
|
108
|
+
- lib/hallon/artist_browse.rb
|
103
109
|
- lib/hallon/base.rb
|
110
|
+
- lib/hallon/enumerator.rb
|
104
111
|
- lib/hallon/error.rb
|
105
112
|
- lib/hallon/ext/ffi.rb
|
106
|
-
- lib/hallon/ext/object.rb
|
107
113
|
- lib/hallon/ext/spotify.rb
|
108
114
|
- lib/hallon/image.rb
|
109
115
|
- lib/hallon/link.rb
|
110
116
|
- lib/hallon/linkable.rb
|
111
117
|
- lib/hallon/observable.rb
|
118
|
+
- lib/hallon/player.rb
|
119
|
+
- lib/hallon/search.rb
|
112
120
|
- lib/hallon/session.rb
|
113
121
|
- lib/hallon/synchronizable.rb
|
122
|
+
- lib/hallon/toplist.rb
|
114
123
|
- lib/hallon/track.rb
|
115
124
|
- lib/hallon/user.rb
|
116
125
|
- lib/hallon/version.rb
|
117
126
|
- spec/fixtures/example_uris.rb
|
118
127
|
- spec/fixtures/pink_cover.jpg
|
128
|
+
- spec/hallon/album_browse_spec.rb
|
119
129
|
- spec/hallon/album_spec.rb
|
130
|
+
- spec/hallon/artist_browse_spec.rb
|
131
|
+
- spec/hallon/artist_spec.rb
|
132
|
+
- spec/hallon/enumerator_spec.rb
|
120
133
|
- spec/hallon/error_spec.rb
|
121
134
|
- spec/hallon/ffi_spec.rb
|
122
135
|
- spec/hallon/hallon_spec.rb
|
@@ -124,19 +137,47 @@ files:
|
|
124
137
|
- spec/hallon/link_spec.rb
|
125
138
|
- spec/hallon/linkable_spec.rb
|
126
139
|
- spec/hallon/observable_spec.rb
|
140
|
+
- spec/hallon/player_spec.rb
|
141
|
+
- spec/hallon/search_spec.rb
|
127
142
|
- spec/hallon/session_spec.rb
|
128
143
|
- spec/hallon/synchronizable_spec.rb
|
144
|
+
- spec/hallon/toplist_spec.rb
|
129
145
|
- spec/hallon/track_spec.rb
|
130
146
|
- spec/hallon/user_spec.rb
|
147
|
+
- spec/mockspotify.rb
|
148
|
+
- spec/mockspotify/.gitignore
|
149
|
+
- spec/mockspotify/extconf.rb
|
150
|
+
- spec/mockspotify/mockspotify_spec.rb
|
131
151
|
- spec/spec_helper.rb
|
132
152
|
- spec/support/.gitkeep
|
133
153
|
- spec/support/common_objects.rb
|
134
154
|
- spec/support/context_logged_in.rb
|
135
155
|
- spec/support/cover_me.rb
|
136
156
|
- spec/support/shared_for_loadable_objects.rb
|
157
|
+
- spec/mockspotify/libmockspotify/src/Makefile.am
|
158
|
+
- spec/mockspotify/libmockspotify/src/album.c
|
159
|
+
- spec/mockspotify/libmockspotify/src/albumbrowse.c
|
160
|
+
- spec/mockspotify/libmockspotify/src/artist.c
|
161
|
+
- spec/mockspotify/libmockspotify/src/artistbrowse.c
|
162
|
+
- spec/mockspotify/libmockspotify/src/error.c
|
163
|
+
- spec/mockspotify/libmockspotify/src/image.c
|
164
|
+
- spec/mockspotify/libmockspotify/src/libmockspotify.c
|
165
|
+
- spec/mockspotify/libmockspotify/src/libmockspotify.h
|
166
|
+
- spec/mockspotify/libmockspotify/src/libspotify/api.h
|
167
|
+
- spec/mockspotify/libmockspotify/src/link.c
|
168
|
+
- spec/mockspotify/libmockspotify/src/player.c
|
169
|
+
- spec/mockspotify/libmockspotify/src/playlist.c
|
170
|
+
- spec/mockspotify/libmockspotify/src/playlistcontainer.c
|
171
|
+
- spec/mockspotify/libmockspotify/src/search.c
|
172
|
+
- spec/mockspotify/libmockspotify/src/session.c
|
173
|
+
- spec/mockspotify/libmockspotify/src/toplistbrowse.c
|
174
|
+
- spec/mockspotify/libmockspotify/src/track.c
|
175
|
+
- spec/mockspotify/libmockspotify/src/user.c
|
176
|
+
- spec/mockspotify/libmockspotify/src/util.c
|
177
|
+
- spec/mockspotify/libmockspotify/src/util.h
|
137
178
|
homepage: http://github.com/Burgestrand/Hallon
|
138
179
|
licenses:
|
139
|
-
-
|
180
|
+
- X11 License
|
140
181
|
post_install_message:
|
141
182
|
rdoc_options: []
|
142
183
|
require_paths:
|
@@ -155,14 +196,18 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
155
196
|
version: '0'
|
156
197
|
requirements: []
|
157
198
|
rubyforge_project:
|
158
|
-
rubygems_version: 1.8.
|
199
|
+
rubygems_version: 1.8.6
|
159
200
|
signing_key:
|
160
201
|
specification_version: 3
|
161
202
|
summary: Delicious Ruby bindings to the official Spotify API
|
162
203
|
test_files:
|
163
204
|
- spec/fixtures/example_uris.rb
|
164
205
|
- spec/fixtures/pink_cover.jpg
|
206
|
+
- spec/hallon/album_browse_spec.rb
|
165
207
|
- spec/hallon/album_spec.rb
|
208
|
+
- spec/hallon/artist_browse_spec.rb
|
209
|
+
- spec/hallon/artist_spec.rb
|
210
|
+
- spec/hallon/enumerator_spec.rb
|
166
211
|
- spec/hallon/error_spec.rb
|
167
212
|
- spec/hallon/ffi_spec.rb
|
168
213
|
- spec/hallon/hallon_spec.rb
|
@@ -170,10 +215,17 @@ test_files:
|
|
170
215
|
- spec/hallon/link_spec.rb
|
171
216
|
- spec/hallon/linkable_spec.rb
|
172
217
|
- spec/hallon/observable_spec.rb
|
218
|
+
- spec/hallon/player_spec.rb
|
219
|
+
- spec/hallon/search_spec.rb
|
173
220
|
- spec/hallon/session_spec.rb
|
174
221
|
- spec/hallon/synchronizable_spec.rb
|
222
|
+
- spec/hallon/toplist_spec.rb
|
175
223
|
- spec/hallon/track_spec.rb
|
176
224
|
- spec/hallon/user_spec.rb
|
225
|
+
- spec/mockspotify.rb
|
226
|
+
- spec/mockspotify/.gitignore
|
227
|
+
- spec/mockspotify/extconf.rb
|
228
|
+
- spec/mockspotify/mockspotify_spec.rb
|
177
229
|
- spec/spec_helper.rb
|
178
230
|
- spec/support/.gitkeep
|
179
231
|
- spec/support/common_objects.rb
|