lastfm-m3u 0.2.5.1 → 0.3

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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: de09e3f4d00705ab33a9cb6b5d4abd3f2b8b2c01
4
+ data.tar.gz: 12c27431e6ed373a1c46b53f9aaa5f4a480a9fce
5
+ SHA512:
6
+ metadata.gz: 52e2a0c7502745c51bb243d75cda886b8468858d9259b525e792cad549404b4bb86f8f889ec3df348ffbdee8528f669532f3c2cbdec38407b516a4740137b0e3
7
+ data.tar.gz: 27078025fb27b0e45389aa9db8ffa10a5999fbee453bb99061e7d07b9dc118b2567a5a04ebbb9d22a8173109642ea66ce25d2c881c567b05a4c89e92558fb55d
data/.ruby-gemset ADDED
@@ -0,0 +1 @@
1
+ lastfm-m3u
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ ruby-2.0.0-p353
data/.travis.yml CHANGED
@@ -1,8 +1,5 @@
1
1
  language: ruby
2
2
  bundler_args: --without development
3
3
  rvm:
4
- - 1.9.2
5
4
  - 1.9.3
6
5
  - 2.0.0
7
- - ruby-head
8
- - jruby-19mode
data/Gemfile CHANGED
@@ -5,7 +5,12 @@ gemspec
5
5
  gem 'rake'
6
6
 
7
7
  group :test do
8
- gem 'rspec', '~> 2.13.0'
9
- gem 'simplecov', '~> 0.7.1'
8
+ gem 'rspec', '~> 2.13.0'
9
+ gem 'simplecov', '~> 0.7.1'
10
+ gem 'guard-rspec', '~> 2.5'
11
+ gem 'guard-ctags-bundler', '~> 0.1'
12
+ gem 'terminal-notifier-guard', '~> 1.5'
13
+ gem 'rb-fsevent', '~> 0.9'
14
+ gem 'pry-debugger', '~> 0.2'
10
15
  gem 'coveralls', require: false
11
16
  end
data/bin/lastfm-m3u CHANGED
@@ -3,7 +3,6 @@ require 'rubygems'
3
3
  require 'optparse'
4
4
  require 'ostruct'
5
5
  require 'highline/import'
6
- require 'ruby-progressbar'
7
6
 
8
7
  $LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__) + "/../lib"))
9
8
  require 'lastfm-m3u'
@@ -98,7 +97,12 @@ if options.init
98
97
  end
99
98
 
100
99
  unless options.artists
101
- puts "Please provide at least one artist (-a Elvis).".color(:red) + " See".color(:green) + " --help".color(:yellow) + " for usage or".color(:green) + " --init".color(:yellow) + " to get started".color(:green)
100
+ puts "Please provide at least one artist (-a Elvis).".color(:red) +
101
+ " See".color(:green) +
102
+ " --help".color(:yellow) +
103
+ " for usage or".color(:green) +
104
+ " --init".color(:yellow) +
105
+ " to get started".color(:green)
102
106
  exit
103
107
  end
104
108
 
@@ -108,16 +112,13 @@ end
108
112
 
109
113
  options.artists.each do |artist|
110
114
  not_found = []
111
- lastfm = LastfmM3u::Lastfm.new(artist)
112
- lastfm.root_dir = options.directory if options.directory
113
- lastfm.limit = options.limit if options.limit
115
+ lastfm = LastfmM3u::Lastfm.new(artist, options)
114
116
 
115
117
  puts
116
118
  puts "Searching filesystem with method: ".color(:green) + options.type.to_s.capitalize.color(:yellow)
117
119
  puts
118
120
  num_tracks = (options.limit.nil? ? lastfm.tracks.size : options.limit)
119
- progressbar = ProgressBar.create(starting_at: 0, total: num_tracks, format: "%a".color(:cyan) + "|".color(:magenta) + "%B".color(:green) + "|".color(:magenta) + "%p%%".color(:cyan))
120
- lastfm.find_tracks(options.type, progressbar).each do |track, track_set|
121
+ lastfm.find_tracks(options.type, false).each do |track, track_set|
121
122
  if track_set.empty?
122
123
  not_found << track
123
124
  next
data/lastfm-m3u.gemspec CHANGED
@@ -15,17 +15,9 @@ Gem::Specification.new do |gem|
15
15
  gem.require_paths = ["lib"]
16
16
  gem.version = LastfmM3u::VERSION
17
17
 
18
- gem.add_development_dependency 'guard-rspec', '~> 2.5'
19
- gem.add_development_dependency 'guard-ctags-bundler', '~> 0.1'
20
- gem.add_development_dependency 'terminal-notifier-guard', '~> 1.5'
21
- gem.add_development_dependency 'rb-fsevent', '~> 0.9'
22
- gem.add_development_dependency 'debugger', '~> 1.5'
23
- gem.add_development_dependency 'pry-debugger', '~> 0.2'
24
-
25
18
  gem.add_dependency 'rockstar', '~> 0.7'
26
19
  gem.add_dependency 'ruby-mp3info', '~> 0.8'
27
20
  gem.add_dependency 'rainbow', '~> 1.1'
28
- gem.add_dependency 'ansi', '~> 1.4' # color logging
29
21
  gem.add_dependency 'm3uzi', '~> 0.5'
30
22
  gem.add_dependency 'highline', '~> 1.6'
31
23
  gem.add_dependency 'ruby-progressbar', '~> 1.1'
data/lib/lastfm-m3u.rb CHANGED
@@ -6,7 +6,6 @@ require 'lastfm-m3u/version'
6
6
  require 'rockstar'
7
7
  require 'm3uzi'
8
8
  require 'rainbow'
9
- require 'ansi/logger'
10
9
 
11
10
  require 'lastfm-m3u/base'
12
11
  require 'lastfm-m3u/lastfm'
@@ -14,7 +13,7 @@ require 'lastfm-m3u/search/file_search'
14
13
  require 'lastfm-m3u/mp3_info_ext'
15
14
 
16
15
  module LastfmM3u
17
- $logger = ANSI::Logger.new(STDOUT)
16
+ $logger = Logger.new(STDOUT)
18
17
  $logger.level = 3 # errors only
19
18
  SEARCH_TYPES = [:file, :id3, :both]
20
19
  end
@@ -1,42 +1,31 @@
1
1
  require 'fileutils'
2
+ require 'ruby-progressbar'
2
3
 
3
4
  module LastfmM3u
4
5
  class Lastfm < Base
5
6
  attr_accessor :artist, :root_dir, :limit, :tracks
6
7
 
7
- def initialize(artist, root_dir='/home/jon/music/trance')
8
+ def initialize(artist, options=OpenStruct.new)
8
9
  init_config
9
10
  set_artist(artist)
10
11
  set_top_tracks
11
- @root_dir = root_dir
12
- @limit = nil
12
+ @root_dir = options.directory
13
+ @limit = options.limit
14
+ @search_type = options.type || :file
13
15
  super()
14
16
  end
15
17
 
16
18
  def set_artist(artist)
17
- @artist = Rockstar::Artist.new artist
19
+ @artist = Rockstar::Artist.new(artist)
18
20
  end
19
21
 
20
22
  def set_top_tracks
21
23
  @tracks = @artist.top_tracks
22
24
  end
23
25
 
24
- def find_tracks(search_type = :file, progressbar = nil)
25
- begin
26
- raise InvalidSearchType unless SEARCH_TYPES.include?(search_type)
27
- rescue InvalidSearchType
28
- $logger.error("Invalid Search Type '#{search_type}', use one of #{SEARCH_TYPES.join(',')}")
29
- exit
30
- end
31
- found_tracks = {}
32
- search = LastfmM3u::FileSearch.new(root_dir)
33
- self.limit ||= tracks.size
34
- tracks[0..limit-1].each do |track|
35
- track.name = CGI.unescapeHTML(track.name)
36
- found_tracks[track.name] = search.find(track.name, {search_type: search_type})
37
- progressbar.increment if progressbar
38
- end
39
- found_tracks
26
+ def find_tracks(search_type=@search_type, progressbar=false)
27
+ check_for_invalid_search_type(search_type)
28
+ found_tracks(tracks, search_type, progressbar)
40
29
  end
41
30
 
42
31
 
@@ -69,6 +58,39 @@ module LastfmM3u
69
58
  def invalid_config?(config_hash)
70
59
  config_hash.values.any? {|v| v==''}
71
60
  end
61
+
62
+ def search(search_type, track)
63
+ case search_type
64
+ when :file, :id3, :both
65
+ LastfmM3u::FileSearch.new(root_dir).find(track.name, {search_type: search_type})
66
+ end
67
+ end
68
+
69
+ def found_tracks(tracks, search_type, show_progressbar)
70
+ self.limit ||= tracks.size
71
+ progressbar = progressbar
72
+ tracks[0..limit-1].each_with_object({}) do |track, found_tracks|
73
+ track.name = CGI.unescapeHTML(track.name)
74
+ found_tracks[track.name] = search(search_type, track)
75
+ progressbar.increment if show_progressbar
76
+ end
77
+ end
78
+
79
+ def check_for_invalid_search_type(search_type=@search_type)
80
+ begin
81
+ raise InvalidSearchType unless SEARCH_TYPES.include?(search_type)
82
+ rescue InvalidSearchType
83
+ $logger.error("Invalid Search Type '#{search_type}', use one of #{SEARCH_TYPES.join(',')}")
84
+ exit
85
+ end
86
+ end
87
+ end
88
+
89
+ def progressbar
90
+ ProgressBar.create(
91
+ starting_at: 0,
92
+ total: num_tracks,
93
+ format: "%a".color(:cyan) + "|".color(:magenta) + "%B".color(:green) + "|".color(:magenta) + "%p%%".color(:cyan))
72
94
  end
73
95
 
74
96
  class InvalidSearchType < Exception; end
@@ -19,14 +19,13 @@ module LastfmM3u
19
19
  prefer_flac = options[:prefer_flac] || true
20
20
 
21
21
  files = find_unique_files(query, query_type, file_or_id3)
22
- if prefer_flac && !(flac_files=trim_non_flac(files)).empty?
23
- files = flac_files
22
+ if prefer_flac
23
+ files = flac_files(files) || files
24
24
  end
25
25
  $logger.debug "#{query} => #{files}"
26
26
  files
27
27
  end
28
28
 
29
-
30
29
  private
31
30
 
32
31
  def find_unique_files(query, query_type, file_or_id3)
@@ -93,6 +92,10 @@ module LastfmM3u
93
92
  pathname.basename.to_s.gsub('-', ' ').gsub('_', ' ').sub(/#{pathname.extname}$/, '')
94
93
  end
95
94
 
95
+ def flac_files(files)
96
+ !trim_non_flac(files).empty? && trim_non_flac(files)
97
+ end
98
+
96
99
  def trim_non_flac(pathnames)
97
100
  pathnames.select{|pn| pn.to_s =~ /\.flac$/}
98
101
  end
@@ -1,3 +1,3 @@
1
1
  module LastfmM3u
2
- VERSION = "0.2.5.1"
2
+ VERSION = "0.3"
3
3
  end
data/spec/lastfm_spec.rb CHANGED
@@ -2,10 +2,12 @@ require 'spec_helper'
2
2
  require 'ostruct'
3
3
 
4
4
  describe LastfmM3u::Lastfm do
5
+ let(:options) { OpenStruct.new(directory: music_dir, search_type: :file) }
6
+
5
7
  it "should successfully run full circle" do
6
8
  YAML.stub(:load_file).and_return({api_key: 'key', api_secret: 'secret'})
7
9
  track = OpenStruct.new(name: 'Poa Alpina')
8
- lf = LastfmM3u::Lastfm.new('Biosphere', music_dir)
10
+ lf = LastfmM3u::Lastfm.new('Biosphere', options)
9
11
  lf.send(:tracks=, [track])
10
12
  found = lf.find_tracks
11
13
  found.should == { track.name => ["#{music_dir}/biosphere/poa-alpina.mp3"] }
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe LastfmM3u::FileSearch do
4
- before { ANSI::Logger.any_instance.stub(:warn => false, :info => false, :debug => false) } # quiet logging
4
+ before { Logger.any_instance.stub(:warn => false, :info => false, :debug => false) } # quiet logging
5
5
 
6
6
  let(:file_search) { LastfmM3u::FileSearch.new(music_dir) }
7
7
 
@@ -51,16 +51,16 @@ describe LastfmM3u::FileSearch do
51
51
  end
52
52
  end
53
53
 
54
+ context "prefer flac" do
55
+ it "should only return flac files if any found" do
56
+ file_search.find('flac song', {search_type: :file}).to_s.should match /flac_song.flac/
57
+ end
58
+
54
59
  context "artist or album" do
55
60
  it "should find an artist or album directory" do
56
61
  file_search.find('biosphere', {query_type: :artist, search_type: :file}).to_s.should match /biosphere/
57
62
  end
58
63
  end
59
-
60
- context "prefer flac" do
61
- it "should only return flac files if any found" do
62
- pending
63
- end
64
64
  end
65
65
  end
66
66
 
File without changes
metadata CHANGED
@@ -1,116 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lastfm-m3u
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.5.1
5
- prerelease:
4
+ version: '0.3'
6
5
  platform: ruby
7
6
  authors:
8
7
  - Jon Austin
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-06-02 00:00:00.000000000 Z
11
+ date: 2014-01-02 00:00:00.000000000 Z
13
12
  dependencies:
14
- - !ruby/object:Gem::Dependency
15
- name: guard-rspec
16
- requirement: !ruby/object:Gem::Requirement
17
- none: false
18
- requirements:
19
- - - ~>
20
- - !ruby/object:Gem::Version
21
- version: '2.5'
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.5'
30
- - !ruby/object:Gem::Dependency
31
- name: guard-ctags-bundler
32
- requirement: !ruby/object:Gem::Requirement
33
- none: false
34
- requirements:
35
- - - ~>
36
- - !ruby/object:Gem::Version
37
- version: '0.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: '0.1'
46
- - !ruby/object:Gem::Dependency
47
- name: terminal-notifier-guard
48
- requirement: !ruby/object:Gem::Requirement
49
- none: false
50
- requirements:
51
- - - ~>
52
- - !ruby/object:Gem::Version
53
- version: '1.5'
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: '1.5'
62
- - !ruby/object:Gem::Dependency
63
- name: rb-fsevent
64
- requirement: !ruby/object:Gem::Requirement
65
- none: false
66
- requirements:
67
- - - ~>
68
- - !ruby/object:Gem::Version
69
- version: '0.9'
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: '0.9'
78
- - !ruby/object:Gem::Dependency
79
- name: debugger
80
- requirement: !ruby/object:Gem::Requirement
81
- none: false
82
- requirements:
83
- - - ~>
84
- - !ruby/object:Gem::Version
85
- version: '1.5'
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: '1.5'
94
- - !ruby/object:Gem::Dependency
95
- name: pry-debugger
96
- requirement: !ruby/object:Gem::Requirement
97
- none: false
98
- requirements:
99
- - - ~>
100
- - !ruby/object:Gem::Version
101
- version: '0.2'
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: '0.2'
110
13
  - !ruby/object:Gem::Dependency
111
14
  name: rockstar
112
15
  requirement: !ruby/object:Gem::Requirement
113
- none: false
114
16
  requirements:
115
17
  - - ~>
116
18
  - !ruby/object:Gem::Version
@@ -118,7 +20,6 @@ dependencies:
118
20
  type: :runtime
119
21
  prerelease: false
120
22
  version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
23
  requirements:
123
24
  - - ~>
124
25
  - !ruby/object:Gem::Version
@@ -126,7 +27,6 @@ dependencies:
126
27
  - !ruby/object:Gem::Dependency
127
28
  name: ruby-mp3info
128
29
  requirement: !ruby/object:Gem::Requirement
129
- none: false
130
30
  requirements:
131
31
  - - ~>
132
32
  - !ruby/object:Gem::Version
@@ -134,7 +34,6 @@ dependencies:
134
34
  type: :runtime
135
35
  prerelease: false
136
36
  version_requirements: !ruby/object:Gem::Requirement
137
- none: false
138
37
  requirements:
139
38
  - - ~>
140
39
  - !ruby/object:Gem::Version
@@ -142,7 +41,6 @@ dependencies:
142
41
  - !ruby/object:Gem::Dependency
143
42
  name: rainbow
144
43
  requirement: !ruby/object:Gem::Requirement
145
- none: false
146
44
  requirements:
147
45
  - - ~>
148
46
  - !ruby/object:Gem::Version
@@ -150,31 +48,13 @@ dependencies:
150
48
  type: :runtime
151
49
  prerelease: false
152
50
  version_requirements: !ruby/object:Gem::Requirement
153
- none: false
154
51
  requirements:
155
52
  - - ~>
156
53
  - !ruby/object:Gem::Version
157
54
  version: '1.1'
158
- - !ruby/object:Gem::Dependency
159
- name: ansi
160
- requirement: !ruby/object:Gem::Requirement
161
- none: false
162
- requirements:
163
- - - ~>
164
- - !ruby/object:Gem::Version
165
- version: '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.4'
174
55
  - !ruby/object:Gem::Dependency
175
56
  name: m3uzi
176
57
  requirement: !ruby/object:Gem::Requirement
177
- none: false
178
58
  requirements:
179
59
  - - ~>
180
60
  - !ruby/object:Gem::Version
@@ -182,7 +62,6 @@ dependencies:
182
62
  type: :runtime
183
63
  prerelease: false
184
64
  version_requirements: !ruby/object:Gem::Requirement
185
- none: false
186
65
  requirements:
187
66
  - - ~>
188
67
  - !ruby/object:Gem::Version
@@ -190,7 +69,6 @@ dependencies:
190
69
  - !ruby/object:Gem::Dependency
191
70
  name: highline
192
71
  requirement: !ruby/object:Gem::Requirement
193
- none: false
194
72
  requirements:
195
73
  - - ~>
196
74
  - !ruby/object:Gem::Version
@@ -198,7 +76,6 @@ dependencies:
198
76
  type: :runtime
199
77
  prerelease: false
200
78
  version_requirements: !ruby/object:Gem::Requirement
201
- none: false
202
79
  requirements:
203
80
  - - ~>
204
81
  - !ruby/object:Gem::Version
@@ -206,7 +83,6 @@ dependencies:
206
83
  - !ruby/object:Gem::Dependency
207
84
  name: ruby-progressbar
208
85
  requirement: !ruby/object:Gem::Requirement
209
- none: false
210
86
  requirements:
211
87
  - - ~>
212
88
  - !ruby/object:Gem::Version
@@ -214,7 +90,6 @@ dependencies:
214
90
  type: :runtime
215
91
  prerelease: false
216
92
  version_requirements: !ruby/object:Gem::Requirement
217
- none: false
218
93
  requirements:
219
94
  - - ~>
220
95
  - !ruby/object:Gem::Version
@@ -230,6 +105,8 @@ files:
230
105
  - .coveralls.yml
231
106
  - .gitignore
232
107
  - .rspec
108
+ - .ruby-gemset
109
+ - .ruby-version
233
110
  - .travis.yml
234
111
  - Gemfile
235
112
  - Guardfile
@@ -253,39 +130,33 @@ files:
253
130
  - spec/spec_helper.rb
254
131
  - spec/support/fixtures/music/biosphere/poa-alpina.mp3
255
132
  - spec/support/fixtures/music/flac_song.flac
133
+ - spec/support/fixtures/music/flac_song.mp3
256
134
  - spec/support/fixtures/music/id3v1.mp3
257
135
  - spec/support/fixtures/music/id3v2.mp3
258
136
  - spec/support/fixtures/music/sid_vicious/05._stepping_stone.mp3
259
137
  - spec/support/fixtures/music/sid_vicious/my_way.mp3
260
138
  homepage: https://github.com/jonaustin/lastfm-m3u
261
139
  licenses: []
140
+ metadata: {}
262
141
  post_install_message:
263
142
  rdoc_options: []
264
143
  require_paths:
265
144
  - lib
266
145
  required_ruby_version: !ruby/object:Gem::Requirement
267
- none: false
268
146
  requirements:
269
- - - ! '>='
147
+ - - '>='
270
148
  - !ruby/object:Gem::Version
271
149
  version: '0'
272
- segments:
273
- - 0
274
- hash: -587761823380421897
275
150
  required_rubygems_version: !ruby/object:Gem::Requirement
276
- none: false
277
151
  requirements:
278
- - - ! '>='
152
+ - - '>='
279
153
  - !ruby/object:Gem::Version
280
154
  version: '0'
281
- segments:
282
- - 0
283
- hash: -587761823380421897
284
155
  requirements: []
285
156
  rubyforge_project:
286
- rubygems_version: 1.8.25
157
+ rubygems_version: 2.1.11
287
158
  signing_key:
288
- specification_version: 3
159
+ specification_version: 4
289
160
  summary: CLI tool to create m3u playlists of top artist tracks according to lastfm
290
161
  test_files:
291
162
  - spec/lastfm_spec.rb
@@ -293,6 +164,7 @@ test_files:
293
164
  - spec/spec_helper.rb
294
165
  - spec/support/fixtures/music/biosphere/poa-alpina.mp3
295
166
  - spec/support/fixtures/music/flac_song.flac
167
+ - spec/support/fixtures/music/flac_song.mp3
296
168
  - spec/support/fixtures/music/id3v1.mp3
297
169
  - spec/support/fixtures/music/id3v2.mp3
298
170
  - spec/support/fixtures/music/sid_vicious/05._stepping_stone.mp3