apple_music_library 0.8.0 → 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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5c00fde335b53ca8bacdd13bdbce297b0bea1a7f5f4453f4c42bbe9c867b6c02
4
- data.tar.gz: cec158953268525e8142c5a51960d0b79584e646c4e16def0fb2e71cd66b2b7e
3
+ metadata.gz: 7b345adc65b1d7e12d09e6a7019a857b8abd77ae831420d92e33266b0106fd61
4
+ data.tar.gz: a372d17051416b41edfd62095b5f09b35bd0ca580dffbf545650caac9c0283c8
5
5
  SHA512:
6
- metadata.gz: debab2473712160521d5bc793b65e3febd984620f53d060e3864285bcb906119b074d645c678fcb4e865ea23ae90b6005eff4ccc89c26a3cfb0d91b556f26199
7
- data.tar.gz: 47e7b6381f4d94afda90441cdd975fed9ba6afc6ff09de115e0cd0a1144b0bd9b3582cec0f5f736d394308d6537b5f3e31bba407cde5496b7ace6b5cc59ee6b6
6
+ metadata.gz: 1261413cf1b0583017abcc2189f986927820a67faa1d970e70fbe42e4ecf27bfa41adaf3599829f210cbfd5f12b1dda8c544f935405a43dced50f8349f2d7a28
7
+ data.tar.gz: 1cda8031165413f399bfa1eeaf58187063435f0a5598cf190b11cabc3785d7a45f0ce99d356e3176aad894ba48bcbb911cc183254ff821c136807bb669db867a
data/CHANGELOG.md CHANGED
@@ -3,6 +3,20 @@
3
3
  ## [Unreleased]
4
4
  - Ability to print out playlist folder hierarchy
5
5
 
6
+ ## 0.11.0 - 2022-03-19
7
+ ### Added
8
+ - Added Decade model to retrieve track and album info per decade
9
+
10
+ ## 0.10.0 - 2022-03-16
11
+ ### Fixed
12
+ - Fixed incorrect handling of tracks when added to track collections
13
+ ### Added
14
+ - Added Year model to retrieve tracks and track counts per year of release
15
+
16
+ ## 0.9.0 - 2022-03-15
17
+ ### Added
18
+ - Ability to get genres associated with an artist
19
+
6
20
  ## 0.8.0 - 2022-03-13
7
21
  ### Added
8
22
  - Ability to sort artists by track count and album count
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- apple_music_library (0.8.0)
4
+ apple_music_library (0.11.0)
5
5
  facets (~> 3.1)
6
6
  plist (~> 3.6)
7
7
 
data/README.md CHANGED
@@ -44,10 +44,15 @@ playlist.tracks.each do |track|
44
44
  puts track.name
45
45
  end
46
46
 
47
- # Count tracks by artist
47
+ # Count tracks by an artist
48
48
  artist = library.artist('XTC')
49
49
  puts artist.tracks.count
50
50
 
51
+ # List genres associated with the artist
52
+ artist.genres.each do |genre|
53
+ puts genre.name
54
+ end
55
+
51
56
  # Get favorite tracks by this artist
52
57
  favorite_tracks = artist.tracks.select{|t| t.loved? || t.star_rating > 3}
53
58
 
@@ -68,8 +73,29 @@ end
68
73
 
69
74
  # Display track counts per genre
70
75
  library.genres.each do |genre|
71
- puts "#{genre.tracks.count} #{genre.name}"
76
+ puts "#{genre.track_count} #{genre.name}"
77
+ end
78
+
79
+ # Display track counts per year
80
+ library.years.each do |year|
81
+ puts "#{year.track_count} #{year.name}"
82
+ end
83
+
84
+ # Display track counts per decade
85
+ library.decades.each do |decade|
86
+ puts "#{decade.track_count} #{decade.name}"
72
87
  end
88
+
89
+ # Print a report on all decades in the library
90
+ # e.g.
91
+ # 1990-1999 - 7217 tracks on 1030 albums
92
+ # 2000-2009 - 9083 tracks on 1876 albums
93
+ # 2010-2019 - 4729 tracks on 1046 albums
94
+ # 2020-2029 - 1074 tracks on 455 albums
95
+ library.decades_report
96
+
97
+
98
+
73
99
  ```
74
100
  All stored attributes are available via snake_cased methods on `Track` and `Playlist`. However, note that `#artist`, `#album`, and `#genre` are special cases, returning Ruby objects rather than their associated string values. Methods to return the string versions of these track attributes are provided as `track.artist_name`, `track.album_name`, and `track.genre_name`.
75
101
 
@@ -42,5 +42,9 @@ module AppleMusicLibrary
42
42
  end
43
43
  end
44
44
 
45
+ def self.token
46
+ :album
47
+ end
48
+
45
49
  end
46
50
  end
@@ -73,6 +73,10 @@ module AppleMusicLibrary
73
73
  tracks.map(&:play_count).sum
74
74
  end
75
75
 
76
+ def genres
77
+ @genres ||= tracks.map(&:genre).uniq
78
+ end
79
+
76
80
  protected
77
81
 
78
82
  def self.sorted_set(sort_by_method, limit)
@@ -0,0 +1,25 @@
1
+ require_relative 'track_collection'
2
+
3
+ module AppleMusicLibrary
4
+ class Decade < TrackCollection
5
+
6
+ def self.report
7
+ self.all.sort_by{|d| d.name}.each do |decade|
8
+ puts "#{decade.name} - #{decade.track_count} tracks on #{decade.album_count} albums"
9
+ end
10
+ end
11
+
12
+ def self.find_or_create_for(year_name)
13
+ decade_start_year = year_name.to_i - (year_name.to_i % 10)
14
+ decade_stop_year = decade_start_year + 9
15
+ decade_name = "#{decade_start_year}-#{decade_stop_year}"
16
+
17
+ self.find_or_create(decade_name)
18
+ end
19
+
20
+ def self.token
21
+ :decade
22
+ end
23
+
24
+ end
25
+ end
@@ -1,6 +1,9 @@
1
1
  module AppleMusicLibrary
2
2
  class Genre < TrackCollection
3
3
 
4
+ def self.token
5
+ :genre
6
+ end
4
7
 
5
8
  end
6
9
  end
@@ -1,10 +1,4 @@
1
- require_relative 'album'
2
- require_relative 'artist'
3
- require_relative 'genre'
4
- require_relative 'playlist'
5
- require_relative 'playlist_folder'
6
- require_relative 'track'
7
- require_relative "utils"
1
+ Dir[File.join(__dir__, '.', '*.rb')].each { |file| require file }
8
2
  require 'plist'
9
3
 
10
4
  module AppleMusicLibrary
@@ -84,6 +78,18 @@ module AppleMusicLibrary
84
78
  Track.find(track_id)
85
79
  end
86
80
 
81
+ def years
82
+ @years ||= Year.all
83
+ end
84
+
85
+ def decades
86
+ @decades ||= Decade.all
87
+ end
88
+
89
+ def decades_report
90
+ Decade.report
91
+ end
92
+
87
93
  def valid?
88
94
  has_tracks?
89
95
  end
@@ -59,6 +59,10 @@ module AppleMusicLibrary
59
59
  folder.present?
60
60
  end
61
61
 
62
+ def token
63
+ :playlist
64
+ end
65
+
62
66
  private
63
67
 
64
68
  def load_tracks
@@ -43,6 +43,14 @@ module AppleMusicLibrary
43
43
  # end
44
44
  @genre = Genre.find_or_create(genre_name)
45
45
 
46
+ if year_name.present?
47
+ @year = Year.find_or_create(year_name)
48
+ @year.add_track(self)
49
+
50
+ @decade = Decade.find_or_create_for(year_name)
51
+ @decade.add_track(self)
52
+ end
53
+
46
54
  @artist.add_track(self)
47
55
  @artist.add_album(@album)
48
56
  @album.add_track(self)
@@ -79,6 +87,10 @@ module AppleMusicLibrary
79
87
  @info['Genre']
80
88
  end
81
89
 
90
+ def year_name
91
+ @info['Year']
92
+ end
93
+
82
94
  def star_rating
83
95
  rating / 20
84
96
  end
@@ -7,7 +7,7 @@ module AppleMusicLibrary
7
7
 
8
8
  def initialize(name, *args)
9
9
  @tracks = []
10
- @name = name
10
+ @name = name.present? ? name : 'Unknown'
11
11
  end
12
12
 
13
13
  def self.all
@@ -19,16 +19,34 @@ module AppleMusicLibrary
19
19
  end
20
20
 
21
21
  def self.find_or_create(lookup_name)
22
+ if lookup_name.blank?
23
+ lookup_name = 'Unknown'
24
+ end
25
+ # puts "Finding or creating #{token}: #{lookup_name}"
22
26
  unless @@track_collections[token]
23
27
  @@track_collections[token] = {}
24
28
  end
29
+ if @@track_collections[token][lookup_name]
30
+ # puts "FOUND"
31
+ return @@track_collections[token][lookup_name]
32
+ end
33
+ # puts "CREATING"
25
34
  @@track_collections[token][lookup_name] = self.new(lookup_name)
26
35
  end
27
36
 
28
37
  def add_track(track)
38
+ # puts "Adding #{track.name} to #{self.class.token} #{name}"
29
39
  @tracks << track
30
40
  end
31
41
 
42
+ def track_count
43
+ @track_count ||= tracks.count
44
+ end
45
+
46
+ def album_count
47
+ @ablum_count ||= tracks.map(&:album).uniq.count
48
+ end
49
+
32
50
  def star_rating
33
51
  return nil if rated_tracks.empty?
34
52
  rated_tracks.map(&:star_rating).sum / rated_tracks.size
@@ -40,13 +58,6 @@ module AppleMusicLibrary
40
58
  @rated_tracks ||= tracks.select{|t| t.rated?}
41
59
  end
42
60
 
43
- def self.token
44
- self.class.name
45
- end
46
-
47
- def token
48
- self.class.token
49
- end
50
61
 
51
62
  end
52
63
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module AppleMusicLibrary
4
- VERSION = "0.8.0"
4
+ VERSION = "0.11.0"
5
5
  end
@@ -0,0 +1,20 @@
1
+ require_relative 'track_collection'
2
+
3
+ module AppleMusicLibrary
4
+ class Year < TrackCollection
5
+
6
+ def self.dump
7
+ self.all.sort_by{|y| y.name}.each do |year|
8
+ puts "#{year.name} - #{year.track_count} tracks"
9
+ # year.tracks.each do |track|
10
+ # puts "\t#{track.name}"
11
+ # end
12
+ end
13
+ end
14
+
15
+ def self.token
16
+ :year
17
+ end
18
+
19
+ end
20
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: apple_music_library
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.0
4
+ version: 0.11.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Todd Gehman
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-03-13 00:00:00.000000000 Z
11
+ date: 2022-03-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: awesome_print
@@ -126,6 +126,7 @@ files:
126
126
  - lib/apple_music_library.rb
127
127
  - lib/apple_music_library/album.rb
128
128
  - lib/apple_music_library/artist.rb
129
+ - lib/apple_music_library/decade.rb
129
130
  - lib/apple_music_library/genre.rb
130
131
  - lib/apple_music_library/library.rb
131
132
  - lib/apple_music_library/playlist.rb
@@ -134,6 +135,7 @@ files:
134
135
  - lib/apple_music_library/track_collection.rb
135
136
  - lib/apple_music_library/utils.rb
136
137
  - lib/apple_music_library/version.rb
138
+ - lib/apple_music_library/year.rb
137
139
  - sig/apple_music_library.rbs
138
140
  homepage: https://github.com/pugetive/apple_music_library
139
141
  licenses: