hallon 0.10.1 → 0.11.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/.travis.yml +0 -1
- data/CHANGELOG +14 -1
- data/Rakefile +7 -4
- data/lib/hallon/album.rb +2 -2
- data/lib/hallon/album_browse.rb +2 -2
- data/lib/hallon/artist.rb +1 -1
- data/lib/hallon/artist_browse.rb +1 -1
- data/lib/hallon/base.rb +12 -4
- data/lib/hallon/image.rb +0 -1
- data/lib/hallon/linkable.rb +1 -1
- data/lib/hallon/player.rb +0 -1
- data/lib/hallon/playlist.rb +3 -3
- data/lib/hallon/playlist_container.rb +40 -19
- data/lib/hallon/search.rb +1 -1
- data/lib/hallon/session.rb +5 -4
- data/lib/hallon/track.rb +1 -1
- data/lib/hallon/user.rb +2 -2
- data/lib/hallon/version.rb +1 -1
- data/spec/hallon/base_spec.rb +38 -0
- data/spec/hallon/link_spec.rb +2 -2
- data/spec/hallon/playlist_container_spec.rb +10 -10
- data/spec/support/common_objects.rb +1 -0
- data/spec/support/shared_for_linkable_objects.rb +1 -1
- metadata +17 -16
- data/.autotest +0 -6
data/.travis.yml
CHANGED
data/CHANGELOG
CHANGED
@@ -1,7 +1,20 @@
|
|
1
1
|
Hallon’s Changelog
|
2
2
|
==================
|
3
3
|
|
4
|
-
|
4
|
+
v0.11.0
|
5
|
+
------------------
|
6
|
+
[ Added ]
|
7
|
+
- Playlist#can_move?
|
8
|
+
- Base.from(pointer)
|
9
|
+
|
10
|
+
[ Changed ]
|
11
|
+
- Playlist#move no longer takes a dry_run parameter
|
12
|
+
|
13
|
+
[ Fixed ]
|
14
|
+
- Player#music_delivery callback ignoring consumed frames
|
15
|
+
- Session#wait_for minimum timeout time from 0 to 10 ms
|
16
|
+
|
17
|
+
v0.10.1 (actually v0.10.0)
|
5
18
|
------------------
|
6
19
|
[ Added ]
|
7
20
|
- Add PlaylistContainer::Folder#rename
|
data/Rakefile
CHANGED
@@ -60,6 +60,7 @@ task 'spotify:coverage' do
|
|
60
60
|
covered = Set.new(methods)
|
61
61
|
warning = []
|
62
62
|
ignored = [
|
63
|
+
'attach_function', # spotify overloads this
|
63
64
|
'session_release', # segfaults on libspotify <= 9
|
64
65
|
'session_userdata', # wont support this
|
65
66
|
'link_as_track', # using link_as_track_and_offset instead
|
@@ -82,7 +83,7 @@ task 'spotify:coverage' do
|
|
82
83
|
# Direct calls
|
83
84
|
handlers[Sexp.new(:const, :Spotify)] = Hash.new(proc do |_, meth, _|
|
84
85
|
if auto_gc.include?("#{meth}!")
|
85
|
-
warning << meth
|
86
|
+
warning << [$file, meth]
|
86
87
|
end
|
87
88
|
|
88
89
|
result = [meth]
|
@@ -102,6 +103,7 @@ task 'spotify:coverage' do
|
|
102
103
|
# DSL Methods
|
103
104
|
no_receiver = handlers[nil] = Hash.new(silencer)
|
104
105
|
no_receiver[:from_link] = no_receiver[:to_link] = proc do |recv, meth, (_, name)|
|
106
|
+
next unless name.respond_to?(:value)
|
105
107
|
prefix = meth == :to_link ? "link_create" : "link"
|
106
108
|
method = "%s_%s" % [prefix, name.value]
|
107
109
|
[method, "#{method}!"]
|
@@ -110,7 +112,8 @@ task 'spotify:coverage' do
|
|
110
112
|
fails = {}
|
111
113
|
FileList['lib/**/*.rb'].each do |file|
|
112
114
|
begin
|
113
|
-
|
115
|
+
$file = file
|
116
|
+
ast = Ruby19Parser.new.parse File.read(file)
|
114
117
|
ast.each_of_type(:call) do |_, recv, meth, args, *rest|
|
115
118
|
name = handlers[recv][meth].call(recv, meth, args)
|
116
119
|
covered.subtract Array(name).map(&:to_s)
|
@@ -144,8 +147,8 @@ task 'spotify:coverage' do
|
|
144
147
|
|
145
148
|
unless warning.empty?
|
146
149
|
puts "Warnings (use auto-gc methods instead!):"
|
147
|
-
warning.each do |method|
|
148
|
-
puts " #{method}"
|
150
|
+
warning.each do |file, method|
|
151
|
+
puts " #{file}: #{method}"
|
149
152
|
end
|
150
153
|
puts
|
151
154
|
end
|
data/lib/hallon/album.rb
CHANGED
@@ -74,7 +74,7 @@ module Hallon
|
|
74
74
|
# @return [Artist, nil] album artist.
|
75
75
|
def artist
|
76
76
|
artist = Spotify.album_artist!(pointer)
|
77
|
-
Artist.
|
77
|
+
Artist.from(artist)
|
78
78
|
end
|
79
79
|
|
80
80
|
# Retrieves album cover art as an {Image} or a {Link}.
|
@@ -87,7 +87,7 @@ module Hallon
|
|
87
87
|
Image.new cover.read_string(20) unless cover.null?
|
88
88
|
else
|
89
89
|
cover = Spotify.link_create_from_album_cover!(pointer)
|
90
|
-
Link.
|
90
|
+
Link.from(cover)
|
91
91
|
end
|
92
92
|
end
|
93
93
|
|
data/lib/hallon/album_browse.rb
CHANGED
@@ -47,13 +47,13 @@ module Hallon
|
|
47
47
|
# @return [Artist, nil] artist performing this album.
|
48
48
|
def artist
|
49
49
|
artist = Spotify.albumbrowse_artist!(pointer)
|
50
|
-
Artist.
|
50
|
+
Artist.from(artist)
|
51
51
|
end
|
52
52
|
|
53
53
|
# @return [Album, nil] album this object is browsing.
|
54
54
|
def album
|
55
55
|
album = Spotify.albumbrowse_album!(pointer)
|
56
|
-
Album.
|
56
|
+
Album.from(album)
|
57
57
|
end
|
58
58
|
|
59
59
|
# @note If the object is not loaded, the result is undefined.
|
data/lib/hallon/artist.rb
CHANGED
data/lib/hallon/artist_browse.rb
CHANGED
data/lib/hallon/base.rb
CHANGED
@@ -3,6 +3,12 @@ module Hallon
|
|
3
3
|
# All objects in Hallon are mere representations of Spotify objects.
|
4
4
|
# Hallon::Base covers basic functionality shared by all of these.
|
5
5
|
class Base
|
6
|
+
# @param [#null?] pointer
|
7
|
+
# @return [self, nil] a new instance of self, unless given pointer is #null?
|
8
|
+
def self.from(pointer, *args, &block)
|
9
|
+
new(pointer, *args, &block) unless pointer.null?
|
10
|
+
end
|
11
|
+
|
6
12
|
# Underlying FFI pointer.
|
7
13
|
#
|
8
14
|
# @return [FFI::Pointer]
|
@@ -13,9 +19,11 @@ module Hallon
|
|
13
19
|
# @param [Object] other
|
14
20
|
# @return [Boolean]
|
15
21
|
def ==(other)
|
16
|
-
|
17
|
-
|
18
|
-
|
22
|
+
if other.respond_to?(:pointer)
|
23
|
+
pointer == other.pointer
|
24
|
+
else
|
25
|
+
super
|
26
|
+
end
|
19
27
|
end
|
20
28
|
|
21
29
|
# Default string representation of self.
|
@@ -74,7 +82,7 @@ module Hallon
|
|
74
82
|
end
|
75
83
|
|
76
84
|
if pointer.nil? or pointer.null?
|
77
|
-
raise ArgumentError, "#{resource.inspect}
|
85
|
+
raise ArgumentError, "#{resource.inspect} could not be converted to a spotify #{type} pointer"
|
78
86
|
elsif not Spotify::Pointer.typechecks?(pointer, type)
|
79
87
|
raise TypeError, "“#{resource}” is of type #{resource.type}, #{type} expected"
|
80
88
|
else
|
data/lib/hallon/image.rb
CHANGED
@@ -24,7 +24,6 @@ module Hallon
|
|
24
24
|
# image = Hallon::Image.new("3ad93423add99766e02d563605c6e76ed2b0e450")
|
25
25
|
#
|
26
26
|
# @param [String, Link, Spotify::Pointer] link link or image id
|
27
|
-
# @param [Hallon::Session] session
|
28
27
|
def initialize(link)
|
29
28
|
if link.respond_to?(:=~) and link =~ %r~(?:image[:/]|\A)([a-fA-F0-9]{40})\z~
|
30
29
|
link = to_id($1)
|
data/lib/hallon/linkable.rb
CHANGED
data/lib/hallon/player.rb
CHANGED
data/lib/hallon/playlist.rb
CHANGED
@@ -27,7 +27,7 @@ module Hallon
|
|
27
27
|
@seen = Spotify.playlist_track_seen(playlist.pointer, index)
|
28
28
|
@creator = begin
|
29
29
|
creator = Spotify.playlist_track_creator!(playlist.pointer, index)
|
30
|
-
User.
|
30
|
+
User.from(creator)
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
@@ -181,7 +181,7 @@ module Hallon
|
|
181
181
|
# @return [User, nil]
|
182
182
|
def owner
|
183
183
|
user = Spotify.playlist_owner!(pointer)
|
184
|
-
User.
|
184
|
+
User.from(user)
|
185
185
|
end
|
186
186
|
|
187
187
|
# @return [String]
|
@@ -253,7 +253,7 @@ module Hallon
|
|
253
253
|
def tracks
|
254
254
|
Enumerator.new(size) do |index|
|
255
255
|
track = Spotify.playlist_track!(pointer, index)
|
256
|
-
Playlist::Track.
|
256
|
+
Playlist::Track.from(track, self, index)
|
257
257
|
end
|
258
258
|
end
|
259
259
|
|
@@ -91,7 +91,7 @@ module Hallon
|
|
91
91
|
# @return [User, nil] owner of the container (nil if unknown or no owner).
|
92
92
|
def owner
|
93
93
|
owner = Spotify.playlistcontainer_owner!(pointer)
|
94
|
-
User.
|
94
|
+
User.from(owner)
|
95
95
|
end
|
96
96
|
|
97
97
|
# @return [Integer] number of playlists and folders in this container.
|
@@ -145,7 +145,7 @@ module Hallon
|
|
145
145
|
Spotify.playlistcontainer_add_playlist!(pointer, link.pointer)
|
146
146
|
end
|
147
147
|
|
148
|
-
Playlist.
|
148
|
+
Playlist.from(playlist)
|
149
149
|
end
|
150
150
|
|
151
151
|
# Create a new folder with the given name at the end of the container.
|
@@ -193,27 +193,52 @@ module Hallon
|
|
193
193
|
|
194
194
|
# Move a playlist or a folder.
|
195
195
|
#
|
196
|
+
# @example an illustration of how contents are moved
|
197
|
+
# # given a container like this:
|
198
|
+
# # A, B, C, D
|
199
|
+
#
|
200
|
+
# container.move(0, 1)
|
201
|
+
# # => B, A, C, D
|
202
|
+
#
|
203
|
+
# container.move(0, 3)
|
204
|
+
# # => B, C, D, A
|
205
|
+
#
|
206
|
+
# container.move(3, 1)
|
207
|
+
# # => A, D, B, C
|
208
|
+
#
|
196
209
|
# @note If moving a folder, only that end of the folder is moved. The folder
|
197
210
|
# size will change!
|
198
|
-
#
|
199
|
-
# @param [Integer]
|
200
|
-
# @param [Integer] to
|
201
|
-
# @param [Boolean] dry_run don’t really move anything (useful to check if it can be moved)
|
211
|
+
# @param [Integer] from index to move from
|
212
|
+
# @param [Integer] to index the item will end up at
|
202
213
|
# @return [Playlist, Folder] the entity that was moved
|
203
214
|
# @raise [Error] if the operation failed
|
204
|
-
def move(from, to
|
205
|
-
error =
|
215
|
+
def move(from, to)
|
216
|
+
error = move_playlist(from, to, false)
|
217
|
+
Error.maybe_raise(error)
|
218
|
+
contents[to]
|
219
|
+
end
|
206
220
|
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
221
|
+
# Control if if the item at index `from` can be moved to `infront_of`.
|
222
|
+
#
|
223
|
+
# @param (see #move)
|
224
|
+
# @return [Boolean] true if the operation can be performed
|
225
|
+
def can_move?(from, to)
|
226
|
+
error = move_playlist(from, to, true)
|
227
|
+
number, symbol = Error.disambiguate(error)
|
228
|
+
symbol == :ok
|
214
229
|
end
|
215
230
|
|
216
231
|
protected
|
232
|
+
# Wrapper for original API; adjusts indices accordingly.
|
233
|
+
#
|
234
|
+
# @param [Integer] from
|
235
|
+
# @param [Integer] from
|
236
|
+
# @return [Integer] error
|
237
|
+
def move_playlist(from, infront_of, dry_run)
|
238
|
+
infront_of += 1 if from < infront_of
|
239
|
+
Spotify.playlistcontainer_move_playlist(pointer, from, infront_of, dry_run)
|
240
|
+
end
|
241
|
+
|
217
242
|
# Given an index, find out the starting point and ending point
|
218
243
|
# of the folder at that index.
|
219
244
|
#
|
@@ -247,9 +272,5 @@ module Hallon
|
|
247
272
|
def folder_id(index)
|
248
273
|
Spotify.playlistcontainer_playlist_folder_id(pointer, index)
|
249
274
|
end
|
250
|
-
|
251
|
-
# playlistcontainer_remove_playlist
|
252
|
-
# playlistcontainer_move_playlist
|
253
|
-
# playlistcontainer_add_folder (#insert)
|
254
275
|
end
|
255
276
|
end
|
data/lib/hallon/search.rb
CHANGED
data/lib/hallon/session.rb
CHANGED
@@ -130,7 +130,7 @@ module Hallon
|
|
130
130
|
# @return [PlaylistContainer, nil]
|
131
131
|
def container
|
132
132
|
container = Spotify.session_playlistcontainer!(pointer)
|
133
|
-
PlaylistContainer.
|
133
|
+
PlaylistContainer.from(container)
|
134
134
|
end
|
135
135
|
|
136
136
|
# Process pending Spotify events (might fire callbacks).
|
@@ -160,6 +160,7 @@ module Hallon
|
|
160
160
|
loop do
|
161
161
|
begin
|
162
162
|
timeout = [process_events.fdiv(1000), 5].min # scope to five seconds
|
163
|
+
timeout = timeout + 0.010 # minimum of ten miliseconds timeout
|
163
164
|
params = Timeout::timeout(timeout) { channel.pop }
|
164
165
|
redo if params == :notify
|
165
166
|
rescue Timeout::Error
|
@@ -252,7 +253,7 @@ module Hallon
|
|
252
253
|
# @return [User] the User currently logged in.
|
253
254
|
def user
|
254
255
|
user = Spotify.session_user!(pointer)
|
255
|
-
User.
|
256
|
+
User.from(user)
|
256
257
|
end
|
257
258
|
|
258
259
|
# @return [Symbol] current connection status.
|
@@ -364,14 +365,14 @@ module Hallon
|
|
364
365
|
# @return [Playlist, nil] currently logged in user’s starred playlist.
|
365
366
|
def starred
|
366
367
|
playlist = Spotify.session_starred_create!(pointer)
|
367
|
-
Playlist.
|
368
|
+
Playlist.from(playlist)
|
368
369
|
end
|
369
370
|
|
370
371
|
# @note Returns nil when no user is logged in.
|
371
372
|
# @return [Playlist, nil] currently logged in user’s inbox playlist.
|
372
373
|
def inbox
|
373
374
|
playlist = Spotify.session_inbox_create!(pointer)
|
374
|
-
Playlist.
|
375
|
+
Playlist.from(playlist)
|
375
376
|
end
|
376
377
|
|
377
378
|
# @see #status
|
data/lib/hallon/track.rb
CHANGED
@@ -132,7 +132,7 @@ module Hallon
|
|
132
132
|
# @return [Hallon::Album] album this track belongs to.
|
133
133
|
def album
|
134
134
|
album = Spotify.track_album!(pointer)
|
135
|
-
Album.
|
135
|
+
Album.from(album)
|
136
136
|
end
|
137
137
|
|
138
138
|
# @note There may be more than one artist, see {#artists} for retrieving them all!
|
data/lib/hallon/user.rb
CHANGED
@@ -76,14 +76,14 @@ module Hallon
|
|
76
76
|
# @return [Playlist, nil] starred playlist of the User.
|
77
77
|
def starred
|
78
78
|
playlist = Spotify.session_starred_for_user_create!(session.pointer, name)
|
79
|
-
Playlist.
|
79
|
+
Playlist.from(playlist)
|
80
80
|
end
|
81
81
|
|
82
82
|
# @note Returns nil unless {#loaded?}
|
83
83
|
# @return [PlaylistContainer, nil] published playlists of the User.
|
84
84
|
def published
|
85
85
|
container = Spotify.session_publishedcontainer_for_user_create!(session.pointer, name)
|
86
|
-
PlaylistContainer.
|
86
|
+
PlaylistContainer.from(container)
|
87
87
|
end
|
88
88
|
|
89
89
|
# Send tracks to this users’ inbox, with an optional message.
|
data/lib/hallon/version.rb
CHANGED
@@ -0,0 +1,38 @@
|
|
1
|
+
describe Hallon::Base do
|
2
|
+
let(:klass) do
|
3
|
+
Class.new(Hallon::Base) do
|
4
|
+
def initialize(pointer)
|
5
|
+
@pointer = pointer
|
6
|
+
end
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
describe ".from" do
|
11
|
+
it "should return a new object if given pointer is not null" do
|
12
|
+
a_pointer.should_receive(:null?).and_return(false)
|
13
|
+
klass.from(a_pointer).should_not be_nil
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should return nil if given pointer is null" do
|
17
|
+
a_pointer.should_receive(:null?).and_return(true)
|
18
|
+
klass.from(a_pointer).should be_nil
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
describe "#==" do
|
23
|
+
it "should compare the pointers if applicable" do
|
24
|
+
one = klass.new(a_pointer)
|
25
|
+
two = klass.new(a_pointer)
|
26
|
+
|
27
|
+
one.should eq two
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should fall back to default object comparison" do
|
31
|
+
one = klass.new(a_pointer)
|
32
|
+
two = klass.new(a_pointer)
|
33
|
+
two.stub(:respond_to?).and_return(false)
|
34
|
+
|
35
|
+
one.should_not eq two
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
data/spec/hallon/link_spec.rb
CHANGED
@@ -11,8 +11,8 @@ describe Hallon::Link do
|
|
11
11
|
expect { Hallon::Link.new("spotify:user:burgestrand") }.to_not raise_error
|
12
12
|
end
|
13
13
|
|
14
|
-
it "should
|
15
|
-
expect { Hallon::Link.new(Spotify::Pointer.new(null_pointer, :link, false)) }.to raise_error(ArgumentError
|
14
|
+
it "should raise an error given a null pointer" do
|
15
|
+
expect { Hallon::Link.new(Spotify::Pointer.new(null_pointer, :link, false)) }.to raise_error(ArgumentError)
|
16
16
|
end
|
17
17
|
|
18
18
|
it "should raise an error when no session instance is about" do
|
@@ -121,24 +121,24 @@ describe Hallon::PlaylistContainer do
|
|
121
121
|
playlist = container.contents[0]
|
122
122
|
|
123
123
|
container.contents.map(&:class).should eq [Hallon::Playlist, Hallon::PlaylistContainer::Folder, Hallon::PlaylistContainer::Folder]
|
124
|
-
container.move(0,
|
124
|
+
container.move(0, 1).should eq playlist
|
125
125
|
container.contents.map(&:class).should eq [Hallon::PlaylistContainer::Folder, Hallon::Playlist, Hallon::PlaylistContainer::Folder]
|
126
126
|
container.move(1, 0).should eq playlist
|
127
127
|
container.contents.map(&:class).should eq [Hallon::Playlist, Hallon::PlaylistContainer::Folder, Hallon::PlaylistContainer::Folder]
|
128
128
|
end
|
129
129
|
|
130
|
-
it "should
|
131
|
-
container.
|
132
|
-
container.move(0, 2, :dry_run).should be_true
|
133
|
-
container.contents.map(&:class).should eq [Hallon::Playlist, Hallon::PlaylistContainer::Folder, Hallon::PlaylistContainer::Folder]
|
130
|
+
it "should raise an error if the operation failed" do
|
131
|
+
expect { container.move(0, -1) }.to raise_error(Hallon::Error)
|
134
132
|
end
|
133
|
+
end
|
135
134
|
|
136
|
-
|
137
|
-
|
135
|
+
describe "#can_move?" do
|
136
|
+
it "should be true if the operation can be performed" do
|
137
|
+
expect { container.can_move?(0, 1).should be_true }.to_not change { container.contents.to_a }
|
138
138
|
end
|
139
139
|
|
140
|
-
it "should
|
141
|
-
expect { container.
|
140
|
+
it "should be false if the operation cannot be performed" do
|
141
|
+
expect { container.can_move?(0, -1).should be_false }.to_not change { container.contents.to_a }
|
142
142
|
end
|
143
143
|
end
|
144
144
|
|
@@ -172,7 +172,7 @@ describe Hallon::PlaylistContainer do
|
|
172
172
|
folder.should_not be_moved
|
173
173
|
container.move(folder.begin, 0).id.should eq folder.id
|
174
174
|
folder.should be_moved
|
175
|
-
container.move(0,
|
175
|
+
container.move(0, 1).id.should eq folder.id
|
176
176
|
folder.should_not be_moved
|
177
177
|
end
|
178
178
|
end
|
@@ -104,6 +104,7 @@ RSpec::Core::ExampleGroup.instance_eval do
|
|
104
104
|
let(:mock_image_hex) { "3ad93423add99766e02d563605c6e76ed2b0e450" }
|
105
105
|
let(:mock_image_id) { ":\xD94#\xAD\xD9\x97f\xE0-V6\x05\xC6\xE7n\xD2\xB0\xE4P".force_encoding("BINARY") }
|
106
106
|
let(:null_pointer) { FFI::Pointer.new(0) }
|
107
|
+
let(:a_pointer) { FFI::Pointer.new(1) }
|
107
108
|
|
108
109
|
let(:mock_offline_sync_status) do
|
109
110
|
sync = Spotify::OfflineSyncStatus.new
|
@@ -13,7 +13,7 @@ shared_examples_for "a Linkable object" do
|
|
13
13
|
end
|
14
14
|
|
15
15
|
it "should fail with an invalid spotify pointer" do
|
16
|
-
expect { described_class.new("i_am_invalid_uri") }.to raise_error(ArgumentError, /not a
|
16
|
+
expect { described_class.new("i_am_invalid_uri") }.to raise_error(ArgumentError, /could not be converted to a spotify \w+ pointer/)
|
17
17
|
end
|
18
18
|
|
19
19
|
it "should work with a Link object" do
|
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.11.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-
|
12
|
+
date: 2011-12-13 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: spotify
|
16
|
-
requirement: &
|
16
|
+
requirement: &70296624265220 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 10.1.1
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70296624265220
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: bundler
|
27
|
-
requirement: &
|
27
|
+
requirement: &70296624264760 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '1.0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70296624264760
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rake
|
38
|
-
requirement: &
|
38
|
+
requirement: &70296624264300 !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: *70296624264300
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: rspec
|
49
|
-
requirement: &
|
49
|
+
requirement: &70296619129680 !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: *70296619129680
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: yard
|
60
|
-
requirement: &
|
60
|
+
requirement: &70296619126080 !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: *70296619126080
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rdiscount
|
71
|
-
requirement: &
|
71
|
+
requirement: &70296619124020 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,14 +76,13 @@ dependencies:
|
|
76
76
|
version: '0'
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *70296619124020
|
80
80
|
description:
|
81
81
|
email: kim@burgestrand.se
|
82
82
|
executables: []
|
83
83
|
extensions: []
|
84
84
|
extra_rdoc_files: []
|
85
85
|
files:
|
86
|
-
- .autotest
|
87
86
|
- .gemtest
|
88
87
|
- .gitignore
|
89
88
|
- .gitmodules
|
@@ -131,6 +130,7 @@ files:
|
|
131
130
|
- spec/hallon/album_spec.rb
|
132
131
|
- spec/hallon/artist_browse_spec.rb
|
133
132
|
- spec/hallon/artist_spec.rb
|
133
|
+
- spec/hallon/base_spec.rb
|
134
134
|
- spec/hallon/enumerator_spec.rb
|
135
135
|
- spec/hallon/error_spec.rb
|
136
136
|
- spec/hallon/ffi_spec.rb
|
@@ -202,7 +202,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
202
202
|
version: '0'
|
203
203
|
requirements: []
|
204
204
|
rubyforge_project:
|
205
|
-
rubygems_version: 1.8.
|
205
|
+
rubygems_version: 1.8.12
|
206
206
|
signing_key:
|
207
207
|
specification_version: 3
|
208
208
|
summary: Hallon allows you to write Ruby applications utilizing the official Spotify
|
@@ -214,6 +214,7 @@ test_files:
|
|
214
214
|
- spec/hallon/album_spec.rb
|
215
215
|
- spec/hallon/artist_browse_spec.rb
|
216
216
|
- spec/hallon/artist_spec.rb
|
217
|
+
- spec/hallon/base_spec.rb
|
217
218
|
- spec/hallon/enumerator_spec.rb
|
218
219
|
- spec/hallon/error_spec.rb
|
219
220
|
- spec/hallon/ffi_spec.rb
|