lastfm-m3u 0.2.2
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/.gitignore +23 -0
- data/.rspec +2 -0
- data/Gemfile +4 -0
- data/Guardfile +13 -0
- data/MIT-LICENSE +22 -0
- data/README.md +41 -0
- data/Rakefile +10 -0
- data/config.yml +4 -0
- data/config/lastfm.yml.dist +3 -0
- data/lastfm-m3u.gemspec +33 -0
- data/lib/lastfm-m3u.rb +20 -0
- data/spec/lastfm_spec.rb +12 -0
- data/spec/search/file_search_spec.rb +117 -0
- data/spec/spec_helper.rb +12 -0
- data/spec/support/fixtures/music/biosphere/poa-alpina.mp3 +0 -0
- data/spec/support/fixtures/music/flac_song.flac +0 -0
- data/spec/support/fixtures/music/id3v1.mp3 +0 -0
- data/spec/support/fixtures/music/id3v2.mp3 +0 -0
- data/spec/support/fixtures/music/sid_vicious/05._stepping_stone.mp3 +0 -0
- data/spec/support/fixtures/music/sid_vicious/my_way.mp3 +0 -0
- metadata +308 -0
data/.gitignore
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
*.gem
|
|
2
|
+
*.rbc
|
|
3
|
+
.bundle
|
|
4
|
+
.config
|
|
5
|
+
.yardoc
|
|
6
|
+
Gemfile.lock
|
|
7
|
+
InstalledFiles
|
|
8
|
+
_yardoc
|
|
9
|
+
coverage
|
|
10
|
+
doc/
|
|
11
|
+
lib/bundler/man
|
|
12
|
+
pkg
|
|
13
|
+
rdoc
|
|
14
|
+
spec/reports
|
|
15
|
+
test/tmp
|
|
16
|
+
test/version_tmp
|
|
17
|
+
tmp
|
|
18
|
+
tags
|
|
19
|
+
gems.tags
|
|
20
|
+
lastfm.yml
|
|
21
|
+
*m3u
|
|
22
|
+
m3u
|
|
23
|
+
coverage
|
data/.rspec
ADDED
data/Gemfile
ADDED
data/Guardfile
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
notification :terminal_notifier
|
|
2
|
+
|
|
3
|
+
guard 'rspec', :version => 2, :all_after_pass => false, :all_on_start => false, :cli => "--color --format nested --fail-fast" do
|
|
4
|
+
watch(%r{^spec/.+_spec\.rb$})
|
|
5
|
+
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
|
|
6
|
+
watch(%r{^lib/lastfm-m3u/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
|
|
7
|
+
watch('spec/spec_helper.rb') { "spec" }
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
guard 'ctags-bundler', :src_path => ["lib", "spec/support"] do
|
|
11
|
+
watch(/^(lib|spec\/support)\/.*\.rb$/)
|
|
12
|
+
watch('Gemfile.lock')
|
|
13
|
+
end
|
data/MIT-LICENSE
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
Copyright (c) 2012 Jon Austin
|
|
2
|
+
|
|
3
|
+
MIT License
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
6
|
+
a copy of this software and associated documentation files (the
|
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
|
11
|
+
the following conditions:
|
|
12
|
+
|
|
13
|
+
The above copyright notice and this permission notice shall be
|
|
14
|
+
included in all copies or substantial portions of the Software.
|
|
15
|
+
|
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Lastfm Top tracks Playlist creator
|
|
2
|
+
|
|
3
|
+
Searches given directory for mp3/flac files that match lastfm top tracks for given artist.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
$ gem install lastfm-m3u
|
|
8
|
+
$ lastfm-m3u --init
|
|
9
|
+
Follow instructions to add your Lastfm API keys
|
|
10
|
+
|
|
11
|
+
## Usage
|
|
12
|
+
|
|
13
|
+
LastfmM3u Playlist Creator
|
|
14
|
+
To get started: lastfm-m3u --init
|
|
15
|
+
|
|
16
|
+
Usage: lastfm-m3u [options]
|
|
17
|
+
Note: defaults to filename-only search. id3/both search is more thorough, but much slower
|
|
18
|
+
|
|
19
|
+
Examples:
|
|
20
|
+
lastfm-m3u -a "Biosphere,Brian Eno"
|
|
21
|
+
lastfm-m3u -a Biosphere
|
|
22
|
+
lastfm-m3u -a Biosphere -t both
|
|
23
|
+
lastfm-m3u -a Biosphere -d ~/music/Biosphere
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
Options:
|
|
27
|
+
-t, --type TYPE Select search type
|
|
28
|
+
(f,i,b,file,id3,both)
|
|
29
|
+
-i, --init init lastfm API access config
|
|
30
|
+
-a "x,y,z" one or more artists separated by commas (enclose with quotes if any spaces)
|
|
31
|
+
-d, --directory DIR music directory
|
|
32
|
+
-p, --path PATH Specify path to use for m3u file entries (e.g. MPD requires a path relative to its music directory - i.e. -d /home/user/music/Biosphere -p /home/user/music where the second one is MPD's root)
|
|
33
|
+
-l, --limit NUM Specify limit of tracks to fetch from Last.fm (defaults to all)
|
|
34
|
+
-f, --not-found Show not found
|
|
35
|
+
--debug [LEVEL] Enable debugging output (Optional Level :: 0=all, 1=info,warn,error, 2=warn,error, 3=error)
|
|
36
|
+
-v, --version Show LastfmM3u version
|
|
37
|
+
-h, --help Show this help message
|
|
38
|
+
|
|
39
|
+
## Demo
|
|
40
|
+
|
|
41
|
+

|
data/Rakefile
ADDED
data/config.yml
ADDED
data/lastfm-m3u.gemspec
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
|
2
|
+
require File.expand_path('../lib/lastfm-m3u/version', __FILE__)
|
|
3
|
+
|
|
4
|
+
Gem::Specification.new do |gem|
|
|
5
|
+
gem.authors = ["Jon Austin"]
|
|
6
|
+
gem.email = ["jon.i.austin@gmail.com"]
|
|
7
|
+
gem.summary = %q{Create m3u playlists of top artist tracks according to lastfm}
|
|
8
|
+
gem.description = gem.summary
|
|
9
|
+
gem.homepage = "https://github.com/jonaustin/lastfm-m3u"
|
|
10
|
+
|
|
11
|
+
gem.files = `git ls-files`.split($\)
|
|
12
|
+
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
|
13
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
|
14
|
+
gem.name = "lastfm-m3u"
|
|
15
|
+
gem.require_paths = ["lib"]
|
|
16
|
+
gem.version = LastfmM3u::VERSION
|
|
17
|
+
|
|
18
|
+
gem.add_development_dependency 'rspec', '~> 2.12.0'
|
|
19
|
+
gem.add_development_dependency 'guard-rspec', '~> 1.2.1'
|
|
20
|
+
gem.add_development_dependency 'guard-ctags-bundler', '~> 0.1.3'
|
|
21
|
+
gem.add_development_dependency 'terminal-notifier-guard', '~> 1.5.3'
|
|
22
|
+
gem.add_development_dependency 'rb-fsevent', '~> 0.9'
|
|
23
|
+
gem.add_development_dependency 'debugger', '~> 1.2.0'
|
|
24
|
+
gem.add_development_dependency 'simplecov', '~> 0.6.4'
|
|
25
|
+
|
|
26
|
+
gem.add_dependency 'rockstar', '~> 0.6.4'
|
|
27
|
+
gem.add_dependency 'ruby-mp3info', '~> 0.7.1'
|
|
28
|
+
gem.add_dependency 'rainbow', '~> 1.1.4'
|
|
29
|
+
gem.add_dependency 'ansi', '~> 1.4.3' # color logging
|
|
30
|
+
gem.add_dependency 'm3uzi', '~> 0.5.1'
|
|
31
|
+
gem.add_dependency 'highline', '~> 1.6.13'
|
|
32
|
+
gem.add_dependency 'ruby-progressbar', '~> 1.0.0'
|
|
33
|
+
end
|
data/lib/lastfm-m3u.rb
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
#require 'rbconfig' # lots of config info for current ruby install
|
|
2
|
+
require 'fileutils'
|
|
3
|
+
require 'pathname'
|
|
4
|
+
require 'lastfm-m3u/version'
|
|
5
|
+
|
|
6
|
+
require 'rockstar'
|
|
7
|
+
require 'mp3info'
|
|
8
|
+
require 'm3uzi'
|
|
9
|
+
require 'rainbow'
|
|
10
|
+
require 'ansi/logger'
|
|
11
|
+
|
|
12
|
+
require 'lastfm-m3u/base'
|
|
13
|
+
require 'lastfm-m3u/lastfm'
|
|
14
|
+
require 'lastfm-m3u/search/file_search'
|
|
15
|
+
|
|
16
|
+
module LastfmM3u
|
|
17
|
+
$logger = ANSI::Logger.new(STDOUT)
|
|
18
|
+
$logger.level = 3 # errors only
|
|
19
|
+
SEARCH_TYPES = [:file, :id3, :both]
|
|
20
|
+
end
|
data/spec/lastfm_spec.rb
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'ostruct'
|
|
3
|
+
|
|
4
|
+
describe LastfmM3u::Lastfm do
|
|
5
|
+
it "should return expected results" do
|
|
6
|
+
YAML.stub(:load_file).and_return({api_key: 'key', api_secret: 'secret'})
|
|
7
|
+
track = OpenStruct.new(name: 'Poa Alpina')
|
|
8
|
+
lf = LastfmM3u::Lastfm.new('Biosphere', music_dir)
|
|
9
|
+
found = lf.find_tracks([track])
|
|
10
|
+
found.should == { track.name => ["#{music_dir}/biosphere/poa-alpina.mp3"] }
|
|
11
|
+
end
|
|
12
|
+
end
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe LastfmM3u::FileSearch do
|
|
4
|
+
before { ANSI::Logger.any_instance.stub(:warn => false, :info => false, :debug => false) } # quiet logging
|
|
5
|
+
|
|
6
|
+
let(:file_search) { LastfmM3u::FileSearch.new(music_dir) }
|
|
7
|
+
|
|
8
|
+
context "root dir" do
|
|
9
|
+
it "should set the root dir" do
|
|
10
|
+
file_search.root_dir.to_s.should == music_dir
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
it "should be a pathname" do
|
|
14
|
+
file_search.root_dir.class.should == Pathname
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
context "find" do
|
|
19
|
+
pending
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
context "normalization" do
|
|
23
|
+
it "should find a filename with underscores in place of spaces" do
|
|
24
|
+
file_search.find('my way', {search_type: :file}).first.to_s.should match /my_way/
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
it "should find a file with dashes in place of spaces" do
|
|
28
|
+
file_search.find('poa alpina', {search_type: :file}).to_s.should match /poa-alpina/
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
context "find by filename" do
|
|
33
|
+
it "should be an array" do
|
|
34
|
+
file_search.find('my way').should be_an_instance_of(Array)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it "should return a filename" do
|
|
38
|
+
filename = file_search.find('stepping_stone')
|
|
39
|
+
(Pathname.new music_dir).join('sid_vicious/05._stepping_stone.mp3').should exist
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
it "should continue when bad filename" do
|
|
43
|
+
path = "spec/support/fixtures/music/11\ Tchaikovsky\ -\ S$'\351'r$'\351'nade\ m$'\351'lancoliq.mp3".force_encoding('utf-8')
|
|
44
|
+
Dir.stub_chain(:glob).and_return [path]
|
|
45
|
+
expect { file_search.find('tchaikovsky', {search_type: :file, prefer_flac: false}) }.to raise_error ArgumentError
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
context "track" do
|
|
49
|
+
it "should find a track if one exists" do
|
|
50
|
+
file_search.find('stepping stone', {search_type: :file}).to_s.should match /stepping_stone/
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
it "should find flac" do
|
|
54
|
+
file_search.find('flac song', {search_type: :file}).to_s.should match /flac_song/
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
context "artist or album" do
|
|
59
|
+
it "should find an artist or album directory" do
|
|
60
|
+
file_search.find('biosphere', {query_type: :artist, search_type: :file}).to_s.should match /biosphere/
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
context "prefer flac" do
|
|
65
|
+
it "should only return flac files if any found" do
|
|
66
|
+
pending
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
context "find by id3" do
|
|
72
|
+
it "should return an array" do
|
|
73
|
+
file_search.find('id3v1-title', {search_type: :id3}).should be_an_instance_of(Array)
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
it "should return filename" do
|
|
77
|
+
file_search.find('id3v1-title', {search_type: :id3}).first.should == "#{music_dir}/id3v1.mp3"
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
it "should return title, album, artist, filename" do
|
|
81
|
+
pending "returning filenames for now to ease sorting/uniq when both filenames and id3s searched"
|
|
82
|
+
file_search.find('id3v1-title', {search_type: :id3}).first.should == "id3v1-title, id3v1-album, id3v1-artist, #{music_dir}/id3v1.mp3"
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
context "track" do
|
|
86
|
+
it "should find a tag" do
|
|
87
|
+
file_search.find('id3v1-title', {search_type: :id3}).first.to_s.should match /id3v1/i
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
it "should find a id3v2 tag" do
|
|
91
|
+
file_search.find('id3v2-title', {search_type: :id3}).first.to_s.should match /id3v2/i
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
context "album" do
|
|
96
|
+
it "should find a tag" do
|
|
97
|
+
file_search.find('id3v1-album', {query_type: :album, search_type: :id3}).first.to_s.should match /id3v1/i
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
it "should find a id3v2 tag" do
|
|
101
|
+
file_search.find('id3v2-album', {query_type: :album, search_type: :id3}).first.to_s.should match /id3v2/i
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
context "artist" do
|
|
106
|
+
it "should find a tag" do
|
|
107
|
+
file_search.find('id3v1-artist', {query_type: :artist, search_type: :id3}).first.to_s.should match /id3v1/i
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
it "should find a id3v2 tag" do
|
|
111
|
+
file_search.find('id3v2-artist', {query_type: :artist, search_type: :id3}).first.to_s.should match /id3v2/i
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
end
|
data/spec/spec_helper.rb
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
require 'simplecov'
|
|
2
|
+
SimpleCov.start
|
|
3
|
+
|
|
4
|
+
# normal require does not work once gem is installed, because its loaded via rubygems
|
|
5
|
+
$:.unshift(File.expand_path('../lib', __FILE__))
|
|
6
|
+
|
|
7
|
+
require 'rspec'
|
|
8
|
+
require 'lastfm-m3u'
|
|
9
|
+
|
|
10
|
+
def music_dir
|
|
11
|
+
File.expand_path("../support/fixtures/music/", __FILE__)
|
|
12
|
+
end
|
|
File without changes
|
|
File without changes
|
|
Binary file
|
|
Binary file
|
|
File without changes
|
|
File without changes
|
metadata
ADDED
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: lastfm-m3u
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.2.2
|
|
5
|
+
prerelease:
|
|
6
|
+
platform: ruby
|
|
7
|
+
authors:
|
|
8
|
+
- Jon Austin
|
|
9
|
+
autorequire:
|
|
10
|
+
bindir: bin
|
|
11
|
+
cert_chain: []
|
|
12
|
+
date: 2013-03-17 00:00:00.000000000 Z
|
|
13
|
+
dependencies:
|
|
14
|
+
- !ruby/object:Gem::Dependency
|
|
15
|
+
name: rspec
|
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
|
17
|
+
none: false
|
|
18
|
+
requirements:
|
|
19
|
+
- - ~>
|
|
20
|
+
- !ruby/object:Gem::Version
|
|
21
|
+
version: 2.12.0
|
|
22
|
+
type: :development
|
|
23
|
+
prerelease: false
|
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
25
|
+
none: false
|
|
26
|
+
requirements:
|
|
27
|
+
- - ~>
|
|
28
|
+
- !ruby/object:Gem::Version
|
|
29
|
+
version: 2.12.0
|
|
30
|
+
- !ruby/object:Gem::Dependency
|
|
31
|
+
name: guard-rspec
|
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
|
33
|
+
none: false
|
|
34
|
+
requirements:
|
|
35
|
+
- - ~>
|
|
36
|
+
- !ruby/object:Gem::Version
|
|
37
|
+
version: 1.2.1
|
|
38
|
+
type: :development
|
|
39
|
+
prerelease: false
|
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
41
|
+
none: false
|
|
42
|
+
requirements:
|
|
43
|
+
- - ~>
|
|
44
|
+
- !ruby/object:Gem::Version
|
|
45
|
+
version: 1.2.1
|
|
46
|
+
- !ruby/object:Gem::Dependency
|
|
47
|
+
name: guard-ctags-bundler
|
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
|
49
|
+
none: false
|
|
50
|
+
requirements:
|
|
51
|
+
- - ~>
|
|
52
|
+
- !ruby/object:Gem::Version
|
|
53
|
+
version: 0.1.3
|
|
54
|
+
type: :development
|
|
55
|
+
prerelease: false
|
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
57
|
+
none: false
|
|
58
|
+
requirements:
|
|
59
|
+
- - ~>
|
|
60
|
+
- !ruby/object:Gem::Version
|
|
61
|
+
version: 0.1.3
|
|
62
|
+
- !ruby/object:Gem::Dependency
|
|
63
|
+
name: terminal-notifier-guard
|
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
|
65
|
+
none: false
|
|
66
|
+
requirements:
|
|
67
|
+
- - ~>
|
|
68
|
+
- !ruby/object:Gem::Version
|
|
69
|
+
version: 1.5.3
|
|
70
|
+
type: :development
|
|
71
|
+
prerelease: false
|
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
73
|
+
none: false
|
|
74
|
+
requirements:
|
|
75
|
+
- - ~>
|
|
76
|
+
- !ruby/object:Gem::Version
|
|
77
|
+
version: 1.5.3
|
|
78
|
+
- !ruby/object:Gem::Dependency
|
|
79
|
+
name: rb-fsevent
|
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
|
81
|
+
none: false
|
|
82
|
+
requirements:
|
|
83
|
+
- - ~>
|
|
84
|
+
- !ruby/object:Gem::Version
|
|
85
|
+
version: '0.9'
|
|
86
|
+
type: :development
|
|
87
|
+
prerelease: false
|
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
89
|
+
none: false
|
|
90
|
+
requirements:
|
|
91
|
+
- - ~>
|
|
92
|
+
- !ruby/object:Gem::Version
|
|
93
|
+
version: '0.9'
|
|
94
|
+
- !ruby/object:Gem::Dependency
|
|
95
|
+
name: debugger
|
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
|
97
|
+
none: false
|
|
98
|
+
requirements:
|
|
99
|
+
- - ~>
|
|
100
|
+
- !ruby/object:Gem::Version
|
|
101
|
+
version: 1.2.0
|
|
102
|
+
type: :development
|
|
103
|
+
prerelease: false
|
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
105
|
+
none: false
|
|
106
|
+
requirements:
|
|
107
|
+
- - ~>
|
|
108
|
+
- !ruby/object:Gem::Version
|
|
109
|
+
version: 1.2.0
|
|
110
|
+
- !ruby/object:Gem::Dependency
|
|
111
|
+
name: simplecov
|
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
|
113
|
+
none: false
|
|
114
|
+
requirements:
|
|
115
|
+
- - ~>
|
|
116
|
+
- !ruby/object:Gem::Version
|
|
117
|
+
version: 0.6.4
|
|
118
|
+
type: :development
|
|
119
|
+
prerelease: false
|
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
121
|
+
none: false
|
|
122
|
+
requirements:
|
|
123
|
+
- - ~>
|
|
124
|
+
- !ruby/object:Gem::Version
|
|
125
|
+
version: 0.6.4
|
|
126
|
+
- !ruby/object:Gem::Dependency
|
|
127
|
+
name: rockstar
|
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
|
129
|
+
none: false
|
|
130
|
+
requirements:
|
|
131
|
+
- - ~>
|
|
132
|
+
- !ruby/object:Gem::Version
|
|
133
|
+
version: 0.6.4
|
|
134
|
+
type: :runtime
|
|
135
|
+
prerelease: false
|
|
136
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
137
|
+
none: false
|
|
138
|
+
requirements:
|
|
139
|
+
- - ~>
|
|
140
|
+
- !ruby/object:Gem::Version
|
|
141
|
+
version: 0.6.4
|
|
142
|
+
- !ruby/object:Gem::Dependency
|
|
143
|
+
name: ruby-mp3info
|
|
144
|
+
requirement: !ruby/object:Gem::Requirement
|
|
145
|
+
none: false
|
|
146
|
+
requirements:
|
|
147
|
+
- - ~>
|
|
148
|
+
- !ruby/object:Gem::Version
|
|
149
|
+
version: 0.7.1
|
|
150
|
+
type: :runtime
|
|
151
|
+
prerelease: false
|
|
152
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
153
|
+
none: false
|
|
154
|
+
requirements:
|
|
155
|
+
- - ~>
|
|
156
|
+
- !ruby/object:Gem::Version
|
|
157
|
+
version: 0.7.1
|
|
158
|
+
- !ruby/object:Gem::Dependency
|
|
159
|
+
name: rainbow
|
|
160
|
+
requirement: !ruby/object:Gem::Requirement
|
|
161
|
+
none: false
|
|
162
|
+
requirements:
|
|
163
|
+
- - ~>
|
|
164
|
+
- !ruby/object:Gem::Version
|
|
165
|
+
version: 1.1.4
|
|
166
|
+
type: :runtime
|
|
167
|
+
prerelease: false
|
|
168
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
169
|
+
none: false
|
|
170
|
+
requirements:
|
|
171
|
+
- - ~>
|
|
172
|
+
- !ruby/object:Gem::Version
|
|
173
|
+
version: 1.1.4
|
|
174
|
+
- !ruby/object:Gem::Dependency
|
|
175
|
+
name: ansi
|
|
176
|
+
requirement: !ruby/object:Gem::Requirement
|
|
177
|
+
none: false
|
|
178
|
+
requirements:
|
|
179
|
+
- - ~>
|
|
180
|
+
- !ruby/object:Gem::Version
|
|
181
|
+
version: 1.4.3
|
|
182
|
+
type: :runtime
|
|
183
|
+
prerelease: false
|
|
184
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
185
|
+
none: false
|
|
186
|
+
requirements:
|
|
187
|
+
- - ~>
|
|
188
|
+
- !ruby/object:Gem::Version
|
|
189
|
+
version: 1.4.3
|
|
190
|
+
- !ruby/object:Gem::Dependency
|
|
191
|
+
name: m3uzi
|
|
192
|
+
requirement: !ruby/object:Gem::Requirement
|
|
193
|
+
none: false
|
|
194
|
+
requirements:
|
|
195
|
+
- - ~>
|
|
196
|
+
- !ruby/object:Gem::Version
|
|
197
|
+
version: 0.5.1
|
|
198
|
+
type: :runtime
|
|
199
|
+
prerelease: false
|
|
200
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
201
|
+
none: false
|
|
202
|
+
requirements:
|
|
203
|
+
- - ~>
|
|
204
|
+
- !ruby/object:Gem::Version
|
|
205
|
+
version: 0.5.1
|
|
206
|
+
- !ruby/object:Gem::Dependency
|
|
207
|
+
name: highline
|
|
208
|
+
requirement: !ruby/object:Gem::Requirement
|
|
209
|
+
none: false
|
|
210
|
+
requirements:
|
|
211
|
+
- - ~>
|
|
212
|
+
- !ruby/object:Gem::Version
|
|
213
|
+
version: 1.6.13
|
|
214
|
+
type: :runtime
|
|
215
|
+
prerelease: false
|
|
216
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
217
|
+
none: false
|
|
218
|
+
requirements:
|
|
219
|
+
- - ~>
|
|
220
|
+
- !ruby/object:Gem::Version
|
|
221
|
+
version: 1.6.13
|
|
222
|
+
- !ruby/object:Gem::Dependency
|
|
223
|
+
name: ruby-progressbar
|
|
224
|
+
requirement: !ruby/object:Gem::Requirement
|
|
225
|
+
none: false
|
|
226
|
+
requirements:
|
|
227
|
+
- - ~>
|
|
228
|
+
- !ruby/object:Gem::Version
|
|
229
|
+
version: 1.0.0
|
|
230
|
+
type: :runtime
|
|
231
|
+
prerelease: false
|
|
232
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
233
|
+
none: false
|
|
234
|
+
requirements:
|
|
235
|
+
- - ~>
|
|
236
|
+
- !ruby/object:Gem::Version
|
|
237
|
+
version: 1.0.0
|
|
238
|
+
description: Create m3u playlists of top artist tracks according to lastfm
|
|
239
|
+
email:
|
|
240
|
+
- jon.i.austin@gmail.com
|
|
241
|
+
executables:
|
|
242
|
+
- lastfm-m3u
|
|
243
|
+
extensions: []
|
|
244
|
+
extra_rdoc_files: []
|
|
245
|
+
files:
|
|
246
|
+
- .gitignore
|
|
247
|
+
- .rspec
|
|
248
|
+
- Gemfile
|
|
249
|
+
- Guardfile
|
|
250
|
+
- MIT-LICENSE
|
|
251
|
+
- README.md
|
|
252
|
+
- Rakefile
|
|
253
|
+
- bin/lastfm-m3u
|
|
254
|
+
- config.yml
|
|
255
|
+
- config/lastfm.yml.dist
|
|
256
|
+
- doc/lastfm-m3u-demo.gif
|
|
257
|
+
- doc/lastfm-m3u-demo.sh
|
|
258
|
+
- lastfm-m3u.gemspec
|
|
259
|
+
- lib/lastfm-m3u.rb
|
|
260
|
+
- lib/lastfm-m3u/base.rb
|
|
261
|
+
- lib/lastfm-m3u/lastfm.rb
|
|
262
|
+
- lib/lastfm-m3u/search/file_search.rb
|
|
263
|
+
- lib/lastfm-m3u/util.rb
|
|
264
|
+
- lib/lastfm-m3u/version.rb
|
|
265
|
+
- spec/lastfm_spec.rb
|
|
266
|
+
- spec/search/file_search_spec.rb
|
|
267
|
+
- spec/spec_helper.rb
|
|
268
|
+
- spec/support/fixtures/music/biosphere/poa-alpina.mp3
|
|
269
|
+
- spec/support/fixtures/music/flac_song.flac
|
|
270
|
+
- spec/support/fixtures/music/id3v1.mp3
|
|
271
|
+
- spec/support/fixtures/music/id3v2.mp3
|
|
272
|
+
- spec/support/fixtures/music/sid_vicious/05._stepping_stone.mp3
|
|
273
|
+
- spec/support/fixtures/music/sid_vicious/my_way.mp3
|
|
274
|
+
homepage: https://github.com/jonaustin/lastfm-m3u
|
|
275
|
+
licenses: []
|
|
276
|
+
post_install_message:
|
|
277
|
+
rdoc_options: []
|
|
278
|
+
require_paths:
|
|
279
|
+
- lib
|
|
280
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
281
|
+
none: false
|
|
282
|
+
requirements:
|
|
283
|
+
- - ! '>='
|
|
284
|
+
- !ruby/object:Gem::Version
|
|
285
|
+
version: '0'
|
|
286
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
287
|
+
none: false
|
|
288
|
+
requirements:
|
|
289
|
+
- - ! '>='
|
|
290
|
+
- !ruby/object:Gem::Version
|
|
291
|
+
version: '0'
|
|
292
|
+
requirements: []
|
|
293
|
+
rubyforge_project:
|
|
294
|
+
rubygems_version: 1.8.25
|
|
295
|
+
signing_key:
|
|
296
|
+
specification_version: 3
|
|
297
|
+
summary: Create m3u playlists of top artist tracks according to lastfm
|
|
298
|
+
test_files:
|
|
299
|
+
- spec/lastfm_spec.rb
|
|
300
|
+
- spec/search/file_search_spec.rb
|
|
301
|
+
- spec/spec_helper.rb
|
|
302
|
+
- spec/support/fixtures/music/biosphere/poa-alpina.mp3
|
|
303
|
+
- spec/support/fixtures/music/flac_song.flac
|
|
304
|
+
- spec/support/fixtures/music/id3v1.mp3
|
|
305
|
+
- spec/support/fixtures/music/id3v2.mp3
|
|
306
|
+
- spec/support/fixtures/music/sid_vicious/05._stepping_stone.mp3
|
|
307
|
+
- spec/support/fixtures/music/sid_vicious/my_way.mp3
|
|
308
|
+
has_rdoc:
|