hallon 0.10.1 → 0.11.0

Sign up to get free protection for your applications and to get access to all the features.
data/.travis.yml CHANGED
@@ -1,4 +1,3 @@
1
1
  rvm:
2
2
  - 1.9.2
3
3
  - 1.9.3
4
-
data/CHANGELOG CHANGED
@@ -1,7 +1,20 @@
1
1
  Hallon’s Changelog
2
2
  ==================
3
3
 
4
- v10.0.0
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
- ast = RubyParser.new.parse File.read(file)
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.new(artist) unless artist.null?
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.new cover unless cover.null?
90
+ Link.from(cover)
91
91
  end
92
92
  end
93
93
 
@@ -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.new(artist) unless artist.null?
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.new(album) unless album.null?
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
@@ -52,7 +52,7 @@ module Hallon
52
52
  Image.new portrait.read_bytes(20) unless portrait.null?
53
53
  else
54
54
  portrait = Spotify.link_create_from_artist_portrait!(pointer)
55
- Link.new portrait unless portrait.null?
55
+ Link.from(portrait)
56
56
  end
57
57
  end
58
58
 
@@ -46,7 +46,7 @@ module Hallon
46
46
  # @return [Artist, nil] artist this browser is browsing.
47
47
  def artist
48
48
  artist = Spotify.artistbrowse_artist!(pointer)
49
- Artist.new(artist) unless artist.null?
49
+ Artist.from(artist)
50
50
  end
51
51
 
52
52
  # @return [String] artist biography.
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
- pointer == other.pointer
17
- rescue NoMethodError
18
- super
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} is not a valid spotify #{type} URI or pointer"
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)
@@ -94,7 +94,7 @@ module Hallon
94
94
  def to_link(cmethod)
95
95
  define_method(:to_link) do |*args|
96
96
  link = Spotify.__send__(:"link_create_#{cmethod}!", pointer, *args)
97
- Link.new(link) unless link.null?
97
+ Link.from(link)
98
98
  end
99
99
  end
100
100
 
data/lib/hallon/player.rb CHANGED
@@ -69,7 +69,6 @@ module Hallon
69
69
 
70
70
  @session.on(:music_delivery) do |format, frames, num_frames|
71
71
  trigger(:music_delivery, format, frames, num_frames)
72
- num_frames # assume we consume all data
73
72
  end
74
73
  end
75
74
 
@@ -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.new(creator) unless creator.null?
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.new(user) unless user.null?
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.new(track, self, index) unless track.null?
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.new(owner) unless owner.null?
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.new(playlist) unless playlist.null?
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] from
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, dry_run = false)
205
- error = Spotify.playlistcontainer_move_playlist(pointer, from, to, !! dry_run)
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
- if dry_run
208
- error, symbol = Error.disambiguate(error)
209
- symbol == :ok
210
- else
211
- Error.maybe_raise(error)
212
- contents[from > to ? to : to - 1]
213
- end
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
@@ -129,7 +129,7 @@ module Hallon
129
129
  # @return [Link] link for this search query.
130
130
  def to_link
131
131
  link = Spotify.link_create_from_search!(pointer)
132
- Link.new(link) unless link.null?
132
+ Link.from(link)
133
133
  end
134
134
  end
135
135
  end
@@ -130,7 +130,7 @@ module Hallon
130
130
  # @return [PlaylistContainer, nil]
131
131
  def container
132
132
  container = Spotify.session_playlistcontainer!(pointer)
133
- PlaylistContainer.new(container) unless container.null?
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.new(user) unless user.null?
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.new(playlist) unless playlist.null?
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.new(playlist) unless playlist.null?
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.new(album) unless album.null?
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.new(playlist) unless playlist.null?
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.new(container) unless container.null?
86
+ PlaylistContainer.from(container)
87
87
  end
88
88
 
89
89
  # Send tracks to this users’ inbox, with an optional message.
@@ -3,5 +3,5 @@ module Hallon
3
3
  # Current release version of Hallon
4
4
  #
5
5
  # @see http://semver.org/
6
- VERSION = [0, 10, 1].join('.')
6
+ VERSION = [0, 11, 0].join('.')
7
7
  end
@@ -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
@@ -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 accept an FFI pointer" do
15
- expect { Hallon::Link.new(Spotify::Pointer.new(null_pointer, :link, false)) }.to raise_error(ArgumentError, /is not a valid spotify link/)
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, 2).should eq playlist
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 not do anything if it’s a dry-run operation" do
131
- container.contents.map(&:class).should eq [Hallon::Playlist, Hallon::PlaylistContainer::Folder, Hallon::PlaylistContainer::Folder]
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
- it "should not raise an error for an invalid operation when dry_run is active" do
137
- container.move(0, -1, :dry_run).should be_false
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 raise an error if the operation failed" do
141
- expect { container.move(0, -1) }.to raise_error(Hallon::Error)
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, 2).id.should eq folder.id
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 valid spotify \w+ URI or pointer/)
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.10.1
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-11-30 00:00:00.000000000 Z
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: &70214553379640 !ruby/object:Gem::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: *70214553379640
24
+ version_requirements: *70296624265220
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: bundler
27
- requirement: &70214553395220 !ruby/object:Gem::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: *70214553395220
35
+ version_requirements: *70296624264760
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rake
38
- requirement: &70214553394740 !ruby/object:Gem::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: *70214553394740
46
+ version_requirements: *70296624264300
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rspec
49
- requirement: &70214553394240 !ruby/object:Gem::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: *70214553394240
57
+ version_requirements: *70296619129680
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: yard
60
- requirement: &70214553393680 !ruby/object:Gem::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: *70214553393680
68
+ version_requirements: *70296619126080
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rdiscount
71
- requirement: &70214553393200 !ruby/object:Gem::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: *70214553393200
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.10
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
data/.autotest DELETED
@@ -1,6 +0,0 @@
1
- require 'autotest/rspec2'
2
- require 'autotest/growl'
3
- require 'autotest/fsevent' rescue nil
4
-
5
- Autotest::add_discovery { 'rspec2' }
6
- Autotest::Growl::image_dir = 'ampelmaennchen'