hallon 0.2.1 → 0.3.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/CHANGELOG +7 -0
- data/QUIRKS +7 -0
- data/README.markdown +3 -0
- data/Rakefile +16 -3
- data/examples/logging_in.rb +3 -11
- data/hallon.gemspec +1 -1
- data/lib/hallon.rb +1 -0
- data/lib/hallon/error.rb +7 -0
- data/lib/hallon/ext/object.rb +4 -1
- data/lib/hallon/linkable.rb +3 -1
- data/lib/hallon/track.rb +120 -0
- data/lib/hallon/version.rb +1 -1
- data/spec/fixtures/example_uris.rb +1 -0
- data/spec/hallon/error_spec.rb +6 -0
- data/spec/hallon/track_spec.rb +89 -0
- metadata +22 -19
data/CHANGELOG
CHANGED
@@ -1,6 +1,13 @@
|
|
1
1
|
Hallon’s Changelog
|
2
2
|
==================
|
3
3
|
|
4
|
+
v0.3.0
|
5
|
+
------------------
|
6
|
+
- Don’t use bundler for :spec and :test rake tasks
|
7
|
+
- Add Error.table
|
8
|
+
- Add Track subsystem
|
9
|
+
- Fix spec:cov and spotify:coverage rake tasks
|
10
|
+
|
4
11
|
v0.2.1
|
5
12
|
------------------
|
6
13
|
- Fix compatibility with v1.8
|
data/QUIRKS
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
# Quirks, oddities and general notes about libspotify
|
2
2
|
|
3
|
+
- HTTP links with track offset (spotify:track:7N2Vc8u56VGA4KUrGbikC2#1:40) don’t
|
4
|
+
work, even if you URL encode the hash: http://open.spotify.com/track/7N2Vc8u56VGA4KUrGbikC2%231:40
|
5
|
+
this appears to have worked at least 7 months ago
|
6
|
+
|
3
7
|
## Session
|
4
8
|
- `sp_session_release` will segfault (rare)
|
5
9
|
- `login` callback fires even if the login fails; instead,
|
@@ -9,3 +13,6 @@
|
|
9
13
|
|
10
14
|
## Link
|
11
15
|
- segfaults if created before a session
|
16
|
+
|
17
|
+
## Track
|
18
|
+
- `sp_link_as_track_and_offset` operate in milliseconds, but documentation states seconds
|
data/README.markdown
CHANGED
@@ -1,5 +1,8 @@
|
|
1
1
|
What is Hallon?
|
2
2
|
===============
|
3
|
+
|
4
|
+
> [Hallon, delicious Ruby bindings for libspotify](http://burgestrand.se/articles/hallon-delicious-ruby-bindings-to-libspotify.html)
|
5
|
+
|
3
6
|
We rubyists have this awesome [spotify gem][] allowing us to use [libspotify][] from within Ruby, but it has a significant drawback: the `libspotify` API is very hard to use. Now, we can’t have that, so what do we do? We make Hallon!
|
4
7
|
|
5
8
|
Hallon is Swedish for “Raspberry”, and has been written to satisfy my needs for API simplicity. It provides you with a wrapper around the spotify gem, making the experience of using `libspotify` from Ruby much more enjoyable.
|
data/Rakefile
CHANGED
@@ -9,11 +9,12 @@ YARD::Rake::YardocTask.new
|
|
9
9
|
|
10
10
|
require 'rspec/core/rake_task'
|
11
11
|
RSpec::Core::RakeTask.new('spec') do |task|
|
12
|
+
task.skip_bundler = true
|
12
13
|
task.ruby_opts = '-W2'
|
13
14
|
end
|
14
15
|
|
15
16
|
desc "Run the full test suite and generate a coverage report"
|
16
|
-
task 'spec:cov' => ['clean', 'spec
|
17
|
+
task 'spec:cov' => ['clean', 'spec'] do
|
17
18
|
require 'cover_me'
|
18
19
|
require './spec/support/cover_me'
|
19
20
|
|
@@ -26,9 +27,21 @@ task 'spotify:coverage' do
|
|
26
27
|
require 'set'
|
27
28
|
require 'spotify'
|
28
29
|
|
29
|
-
|
30
|
+
dynamicly_used = []
|
31
|
+
dynamicly_used << "link_create_from_track" # lib/hallon/track.rb
|
32
|
+
dynamicly_used << "track_add_ref" # lib/ext/spotify.rb
|
33
|
+
dynamicly_used << "track_release" # lib/ext/spotify.rb
|
34
|
+
dynamicly_used << "link_create_from_image" # lib/hallon/image.rb
|
35
|
+
dynamicly_used << "image_release" # lib/ext/spotify.rb
|
36
|
+
dynamicly_used << "link_create_from_user" # lib/hallon/user.rb
|
37
|
+
dynamicly_used << "user_add_ref" # lib/ext/spotify.rb
|
38
|
+
dynamicly_used << "user_release" # lib/ext/spotify.rb
|
39
|
+
dynamicly_used << "link_as_track" # IGNORE
|
40
|
+
dynamicly_used << "link_release" # lib/ext/spotify.rb
|
41
|
+
|
42
|
+
methods = Spotify.methods(false).map(&:to_s) - dynamicly_used
|
30
43
|
covered = Set.new(methods)
|
31
|
-
matcher = /Spotify
|
44
|
+
matcher = /Spotify(?:::|\.)([\w_]+)[ \(]/
|
32
45
|
|
33
46
|
FileList['lib/**/*.rb'].each do |file|
|
34
47
|
File.read(file).scan(matcher) { |method, _| covered.delete(method) }
|
data/examples/logging_in.rb
CHANGED
@@ -9,18 +9,10 @@ session = Hallon::Session.instance IO.read(ENV['HALLON_APPKEY']) do
|
|
9
9
|
end
|
10
10
|
|
11
11
|
session.login ENV['HALLON_USERNAME'], ENV['HALLON_PASSWORD']
|
12
|
-
logged_in = session.process_events_on(:logged_in) { |error| error }
|
13
12
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
conn_error = session.process_events_on(:connection_error) do |error|
|
19
|
-
session.logged_in? or error
|
20
|
-
end
|
21
|
-
|
22
|
-
unless conn_error == true
|
23
|
-
abort "[ERROR] (:connection_error) #{Hallon::Error.explain(conn_error)}"
|
13
|
+
session.process_events_on(:logged_in) { |error| Hallon::Error.maybe_raise(error) }
|
14
|
+
session.process_events_on(:connection_error) do |error|
|
15
|
+
session.logged_in? or Hallon::Error.maybe_raise(error)
|
24
16
|
end
|
25
17
|
|
26
18
|
puts "Successfully logged in!"
|
data/hallon.gemspec
CHANGED
@@ -19,7 +19,7 @@ Gem::Specification.new do |gem|
|
|
19
19
|
gem.required_ruby_version = '~> 1.8'
|
20
20
|
|
21
21
|
gem.add_dependency 'spotify', '~> 8.0.5'
|
22
|
-
gem.add_development_dependency 'mockspotify', '~> 0.1.
|
22
|
+
gem.add_development_dependency 'mockspotify', '~> 0.1.7'
|
23
23
|
gem.add_development_dependency 'rake', '~> 0.8'
|
24
24
|
gem.add_development_dependency 'rspec', '~> 2'
|
25
25
|
gem.add_development_dependency 'autotest-standalone'
|
data/lib/hallon.rb
CHANGED
@@ -14,6 +14,7 @@ require 'hallon/session'
|
|
14
14
|
require 'hallon/link'
|
15
15
|
require 'hallon/user'
|
16
16
|
require 'hallon/image'
|
17
|
+
require 'hallon/track'
|
17
18
|
|
18
19
|
# The Hallon module wraps around all Hallon objects to avoid polluting
|
19
20
|
# the global namespace. To start using Hallon, you most likely want to
|
data/lib/hallon/error.rb
CHANGED
@@ -5,6 +5,13 @@ module Hallon
|
|
5
5
|
# @see http://developer.spotify.com/en/libspotify/docs/group__error.html
|
6
6
|
class Error < RuntimeError
|
7
7
|
class << self
|
8
|
+
# Hash of error (Symbol) to code (Integer).
|
9
|
+
#
|
10
|
+
# @return [Hash<Symbol, Integer>]
|
11
|
+
def table
|
12
|
+
Spotify::enum_type(:error).to_hash
|
13
|
+
end
|
14
|
+
|
8
15
|
# Given a number or a symbol, find both the symbol and the error
|
9
16
|
# number it represents.
|
10
17
|
#
|
data/lib/hallon/ext/object.rb
CHANGED
@@ -1,11 +1,14 @@
|
|
1
|
+
# Extension of Object for Ruby 1.8 compatibility.
|
1
2
|
class Object
|
2
|
-
unless
|
3
|
+
unless method_defined?(:singleton_class)
|
4
|
+
# Singleton class of object.
|
3
5
|
def singleton_class
|
4
6
|
class << self; self; end
|
5
7
|
end
|
6
8
|
end
|
7
9
|
|
8
10
|
unless method_defined?(:define_singleton_method)
|
11
|
+
# Defines a method on the singleton class of object.
|
9
12
|
def define_singleton_method(*args, &b)
|
10
13
|
singleton_class.send(:define_method, *args, &b)
|
11
14
|
end
|
data/lib/hallon/linkable.rb
CHANGED
@@ -44,7 +44,9 @@ module Hallon
|
|
44
44
|
Hallon::Link.new(link)
|
45
45
|
end
|
46
46
|
|
47
|
-
define_method(:to_link)
|
47
|
+
define_method(:to_link) do |*args, &block|
|
48
|
+
self.class.to_link(@pointer, *args, &block)
|
49
|
+
end
|
48
50
|
end
|
49
51
|
end
|
50
52
|
end
|
data/lib/hallon/track.rb
ADDED
@@ -0,0 +1,120 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
module Hallon
|
3
|
+
# Tracks are an essential part to the Spotify service. They
|
4
|
+
# are browsable entities that can also be played by streaming.
|
5
|
+
#
|
6
|
+
# @see http://developer.spotify.com/en/libspotify/docs/group__track.html
|
7
|
+
class Track
|
8
|
+
extend Linkable
|
9
|
+
|
10
|
+
from_link(:track) { |link, ptr| Spotify.link_as_track_and_offset(link, ptr) }
|
11
|
+
to_link(:track)
|
12
|
+
|
13
|
+
# Create a Link to the current track and offset in seconds.
|
14
|
+
#
|
15
|
+
# @param [Float] offset offset into track in seconds
|
16
|
+
# @return [Hallon::Link]
|
17
|
+
def to_link(offset = offset)
|
18
|
+
self.class.to_link(@pointer, (offset * 1000).to_i)
|
19
|
+
end
|
20
|
+
|
21
|
+
# Offset into track in seconds this track was created with.
|
22
|
+
#
|
23
|
+
# @return [Rational]
|
24
|
+
attr_reader :offset
|
25
|
+
|
26
|
+
# Underlying Spotify pointer.
|
27
|
+
#
|
28
|
+
# @private
|
29
|
+
# @return [FFI::Pointer]
|
30
|
+
attr_reader :pointer
|
31
|
+
|
32
|
+
# Construct a new Track instance.
|
33
|
+
#
|
34
|
+
# @param [String, Link, FFI::Pointer] link
|
35
|
+
def initialize(link)
|
36
|
+
FFI::MemoryPointer.new(:int) do |ptr|
|
37
|
+
@pointer = Spotify::Pointer.new from_link(link, ptr), :track, true
|
38
|
+
@offset = Rational(ptr.read_int, 1000)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
# Create a new local track.
|
43
|
+
#
|
44
|
+
# @param [String] title
|
45
|
+
# @param [String] artist
|
46
|
+
# @param [String] album
|
47
|
+
# @param [Integer] length
|
48
|
+
# @return [Track]
|
49
|
+
def self.local(title, artist, album = nil, length = nil)
|
50
|
+
track = Spotify.localtrack_create(artist, title, album || "", length || -1)
|
51
|
+
new(track)
|
52
|
+
end
|
53
|
+
|
54
|
+
# @note This’ll be an empty string unless the track is loaded.
|
55
|
+
# @return [String]
|
56
|
+
def name
|
57
|
+
Spotify.track_name(@pointer)
|
58
|
+
end
|
59
|
+
|
60
|
+
# Duration of the track in seconds.
|
61
|
+
#
|
62
|
+
# @note This’ll be `0` unless the track is loaded.
|
63
|
+
# @return [Rational]
|
64
|
+
def duration
|
65
|
+
Rational(Spotify.track_duration(@pointer), 1000)
|
66
|
+
end
|
67
|
+
|
68
|
+
# Track popularity, between 0 and 1.
|
69
|
+
#
|
70
|
+
# @note This’ll be `0` unless the track is loaded.
|
71
|
+
# @return [Rational]
|
72
|
+
def popularity
|
73
|
+
Rational(Spotify.track_popularity(@pointer), 100)
|
74
|
+
end
|
75
|
+
|
76
|
+
# Disc number this track appears in.
|
77
|
+
#
|
78
|
+
# @note This function is a bit special. See libspotify docs for details.
|
79
|
+
def disc
|
80
|
+
Spotify.track_disc(@pointer)
|
81
|
+
end
|
82
|
+
|
83
|
+
# Position of track on its’ disc.
|
84
|
+
#
|
85
|
+
# @note This function is a bit special. See libspotify docs for details.
|
86
|
+
def index
|
87
|
+
Spotify.track_index(@pointer)
|
88
|
+
end
|
89
|
+
|
90
|
+
# Retrieve track error status.
|
91
|
+
#
|
92
|
+
# @return [Symbol]
|
93
|
+
def status
|
94
|
+
Spotify.track_error(@pointer)
|
95
|
+
end
|
96
|
+
|
97
|
+
# True if the track is loaded
|
98
|
+
#
|
99
|
+
# @return [Boolean]
|
100
|
+
def loaded?
|
101
|
+
Spotify.track_is_loaded(@pointer)
|
102
|
+
end
|
103
|
+
|
104
|
+
# Album this track belongs to.
|
105
|
+
#
|
106
|
+
# @note This’ll be `nil` unless the track is loaded.
|
107
|
+
# @return [Hallon::Album]
|
108
|
+
def album
|
109
|
+
album = Spotify.track_album(@pointer)
|
110
|
+
Hallon::Album.new(album) unless album.null?
|
111
|
+
end
|
112
|
+
|
113
|
+
# TODO: available?(session)
|
114
|
+
# TODO: local?(session)
|
115
|
+
# TODO: autolinked?(session)
|
116
|
+
# TODO: starred?(session)
|
117
|
+
# TODO: starred = true (session, array of tracks)
|
118
|
+
# TODO: artists (count, by index)
|
119
|
+
end
|
120
|
+
end
|
data/lib/hallon/version.rb
CHANGED
data/spec/hallon/error_spec.rb
CHANGED
@@ -0,0 +1,89 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
describe Hallon::Track, :session => true do
|
3
|
+
let(:artist) { Spotify.mock_artist("Artist", true) }
|
4
|
+
let(:album) { Spotify.mock_album("Album", artist, 2011, nil, :unknown, true, true) }
|
5
|
+
|
6
|
+
subject do
|
7
|
+
artists = FFI::MemoryPointer.new(:pointer)
|
8
|
+
artists.write_pointer artist
|
9
|
+
|
10
|
+
track = Spotify.mock_track(
|
11
|
+
"Elucteene", # name
|
12
|
+
1, artists, # num_artists, artists
|
13
|
+
album, # album
|
14
|
+
123_456, # duration
|
15
|
+
42, # popularity
|
16
|
+
2, 7, # disc, index
|
17
|
+
0, true # error, loaded
|
18
|
+
)
|
19
|
+
|
20
|
+
artists.free
|
21
|
+
|
22
|
+
Hallon::Track.new(track)
|
23
|
+
end
|
24
|
+
|
25
|
+
its(:name) { should eq "Elucteene" }
|
26
|
+
its(:disc) { should be 2 }
|
27
|
+
its(:index) { should be 7 }
|
28
|
+
its(:status) { should be :ok }
|
29
|
+
|
30
|
+
its(:duration) { should eq 123.456 }
|
31
|
+
its(:popularity) { should eq 0.42 }
|
32
|
+
|
33
|
+
xit("artist.name") { should eq "Artist" }
|
34
|
+
xit("album.name") { should eq "Album" }
|
35
|
+
|
36
|
+
it { should be_loaded }
|
37
|
+
|
38
|
+
describe "album" do
|
39
|
+
it "should be an album when there is one" do
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should be nil when there isn’t one" do
|
44
|
+
Spotify.should_receive(:track_album).and_return(FFI::Pointer.new(0))
|
45
|
+
|
46
|
+
subject.album.should be_nil
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
describe "to_link" do
|
51
|
+
it "should pass the current offset by default" do
|
52
|
+
subject.should_receive(:offset).and_return(10)
|
53
|
+
described_class.should_receive(:to_link).with(subject.pointer, 10_000)
|
54
|
+
|
55
|
+
subject.to_link
|
56
|
+
end
|
57
|
+
|
58
|
+
it "should accept offset as parameter" do
|
59
|
+
subject.should_not_receive(:offset)
|
60
|
+
described_class.should_receive(:to_link).with(subject.pointer, 1_337_000)
|
61
|
+
|
62
|
+
subject.to_link(1337)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
describe "offset" do
|
67
|
+
let(:without_offset) { 'spotify:track:7N2Vc8u56VGA4KUrGbikC2' }
|
68
|
+
let(:with_offset) { without_offset + '#1:00' }
|
69
|
+
|
70
|
+
specify "with offset" do
|
71
|
+
Hallon::Track.new(with_offset).offset.should eq 60
|
72
|
+
end
|
73
|
+
|
74
|
+
specify "without offset" do
|
75
|
+
Hallon::Track.new(without_offset).offset.should eq 0
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
describe "a local track" do
|
80
|
+
subject do
|
81
|
+
Hallon::Track.local "Title", "Artist", "Coolio", 100
|
82
|
+
end
|
83
|
+
|
84
|
+
its(:name) { should eq "Title" }
|
85
|
+
pending("artist.name") { should eq "Artist" }
|
86
|
+
pending("album.name") { should eq "Album" }
|
87
|
+
its(:duration) { should eq 0.1 }
|
88
|
+
end
|
89
|
+
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.3.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-07-
|
12
|
+
date: 2011-07-25 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: spotify
|
16
|
-
requirement: &
|
16
|
+
requirement: &2161051120 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,21 +21,21 @@ dependencies:
|
|
21
21
|
version: 8.0.5
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *2161051120
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: mockspotify
|
27
|
-
requirement: &
|
27
|
+
requirement: &2161050620 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version: 0.1.
|
32
|
+
version: 0.1.7
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *2161050620
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rake
|
38
|
-
requirement: &
|
38
|
+
requirement: &2161050020 !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: *2161050020
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: rspec
|
49
|
-
requirement: &
|
49
|
+
requirement: &2161049380 !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: *2161049380
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: autotest-standalone
|
60
|
-
requirement: &
|
60
|
+
requirement: &2161048660 !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: *2161048660
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: autotest-growl
|
71
|
-
requirement: &
|
71
|
+
requirement: &2161047680 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: '0'
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *2161047680
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: yard
|
82
|
-
requirement: &
|
82
|
+
requirement: &2161046920 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ! '>='
|
@@ -87,10 +87,10 @@ dependencies:
|
|
87
87
|
version: '0'
|
88
88
|
type: :development
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *2161046920
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: rdiscount
|
93
|
-
requirement: &
|
93
|
+
requirement: &2161044780 !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
95
|
requirements:
|
96
96
|
- - ! '>='
|
@@ -98,7 +98,7 @@ dependencies:
|
|
98
98
|
version: '0'
|
99
99
|
type: :development
|
100
100
|
prerelease: false
|
101
|
-
version_requirements: *
|
101
|
+
version_requirements: *2161044780
|
102
102
|
description:
|
103
103
|
email: kim@burgestrand.se
|
104
104
|
executables: []
|
@@ -131,6 +131,7 @@ files:
|
|
131
131
|
- lib/hallon/observable.rb
|
132
132
|
- lib/hallon/session.rb
|
133
133
|
- lib/hallon/synchronizable.rb
|
134
|
+
- lib/hallon/track.rb
|
134
135
|
- lib/hallon/user.rb
|
135
136
|
- lib/hallon/version.rb
|
136
137
|
- spec/fixtures/example_uris.rb
|
@@ -144,6 +145,7 @@ files:
|
|
144
145
|
- spec/hallon/observable_spec.rb
|
145
146
|
- spec/hallon/session_spec.rb
|
146
147
|
- spec/hallon/synchronizable_spec.rb
|
148
|
+
- spec/hallon/track_spec.rb
|
147
149
|
- spec/hallon/user_spec.rb
|
148
150
|
- spec/spec_helper.rb
|
149
151
|
- spec/support/.gitkeep
|
@@ -187,6 +189,7 @@ test_files:
|
|
187
189
|
- spec/hallon/observable_spec.rb
|
188
190
|
- spec/hallon/session_spec.rb
|
189
191
|
- spec/hallon/synchronizable_spec.rb
|
192
|
+
- spec/hallon/track_spec.rb
|
190
193
|
- spec/hallon/user_spec.rb
|
191
194
|
- spec/spec_helper.rb
|
192
195
|
- spec/support/.gitkeep
|