apple_music_library 0.7.0 → 0.8.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: be251230181d53ca2f311d1b3fe47f60773c16300f3c7c115761e98bfa8da47b
4
- data.tar.gz: e0ebe21930daf26dacca4d16e4ff94f5fad36da8a2e07e06ae4fa8b94ef7d721
3
+ metadata.gz: 5c00fde335b53ca8bacdd13bdbce297b0bea1a7f5f4453f4c42bbe9c867b6c02
4
+ data.tar.gz: cec158953268525e8142c5a51960d0b79584e646c4e16def0fb2e71cd66b2b7e
5
5
  SHA512:
6
- metadata.gz: a9ddddc083a2d4621110b304d32474fc1164471c67ec3c671a33ae5cbe40bc51ce6bb23b51c7a930d456fd9c8f33300dbd67b39e553ecf15558a3ae54515e774
7
- data.tar.gz: 1b08775b63e98f7e1eae53c6caa2ec5f6dbed16ba4b2c97df5ee41dfa8b836116ef58cf370b3b689485bad38d31e151f8dae732b337798d74dd5b6c172b94f9c
6
+ metadata.gz: debab2473712160521d5bc793b65e3febd984620f53d060e3864285bcb906119b074d645c678fcb4e865ea23ae90b6005eff4ccc89c26a3cfb0d91b556f26199
7
+ data.tar.gz: 47e7b6381f4d94afda90441cdd975fed9ba6afc6ff09de115e0cd0a1144b0bd9b3582cec0f5f736d394308d6537b5f3e31bba407cde5496b7ace6b5cc59ee6b6
data/CHANGELOG.md CHANGED
@@ -3,6 +3,10 @@
3
3
  ## [Unreleased]
4
4
  - Ability to print out playlist folder hierarchy
5
5
 
6
+ ## 0.8.0 - 2022-03-13
7
+ ### Added
8
+ - Ability to sort artists by track count and album count
9
+
6
10
  ## 0.7.0 - 2022-03-12
7
11
  ### Added
8
12
  - Average star ratings for track collectsion (albums, playlists, genres)
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- apple_music_library (0.7.0)
4
+ apple_music_library (0.8.0)
5
5
  facets (~> 3.1)
6
6
  plist (~> 3.6)
7
7
 
data/README.md CHANGED
@@ -56,6 +56,16 @@ library.artists(:most_played).each do |artist|
56
56
  puts "#{artist.play_count} :: #{artist.name}"
57
57
  end
58
58
 
59
+ # List out artists with the most tracks
60
+ library.artists(:most_tracks).each do |artist|
61
+ puts "#{artist.track_count} :: #{artist.name}"
62
+ end
63
+
64
+ # List out artists with the most albums
65
+ library.artists(:most_albums).each do |artist|
66
+ puts "#{artist.album_count} :: #{artist.name}"
67
+ end
68
+
59
69
  # Display track counts per genre
60
70
  library.genres.each do |genre|
61
71
  puts "#{genre.tracks.count} #{genre.name}"
@@ -4,14 +4,10 @@ module AppleMusicLibrary
4
4
  class Album < TrackCollection
5
5
  attr_reader :artist
6
6
 
7
-
8
- attr_reader :artist
9
-
10
7
  @@albums = {}
11
8
 
12
- def initialize(artist, album_name)
9
+ def initialize(album_name, artist)
13
10
  @artist = artist
14
- @album_name = album_name
15
11
  super
16
12
  end
17
13
 
@@ -24,7 +20,7 @@ module AppleMusicLibrary
24
20
  if @@albums[key]
25
21
  return @@albums[key]
26
22
  end
27
- @@albums[key] = self.new(artist, album_name)
23
+ @@albums[key] = self.new(album_name, artist)
28
24
  end
29
25
 
30
26
  def id
@@ -16,11 +16,15 @@ module AppleMusicLibrary
16
16
  end
17
17
 
18
18
  def self.most_played(limit = 20)
19
- if limit.nil?
20
- self.all.sort_by(&:play_count).reverse
21
- else
22
- self.all.sort_by(&:play_count).reverse.take(limit)
23
- end
19
+ self.sorted_set(:play_count, limit)
20
+ end
21
+
22
+ def self.most_tracks(limit = 20)
23
+ self.sorted_set(:track_count, limit)
24
+ end
25
+
26
+ def self.most_albums(limit = 20)
27
+ self.sorted_set(:album_count, limit)
24
28
  end
25
29
 
26
30
  def self.find_or_create(name)
@@ -53,13 +57,30 @@ module AppleMusicLibrary
53
57
  @albums.sort_by(&:year)
54
58
  end
55
59
 
60
+ def album_count
61
+ @albums.size
62
+ end
63
+
56
64
  def tracks
57
65
  @tracks
58
66
  end
59
67
 
68
+ def track_count
69
+ @tracks.size
70
+ end
71
+
60
72
  def play_count
61
73
  tracks.map(&:play_count).sum
62
74
  end
63
75
 
76
+ protected
77
+
78
+ def self.sorted_set(sort_by_method, limit)
79
+ if limit.nil?
80
+ self.all.sort_by{|a| a.send(sort_by_method)}.reverse
81
+ else
82
+ self.all.sort_by{|a| a.send(sort_by_method)}.reverse.take(limit)
83
+ end
84
+ end
64
85
  end
65
86
  end
@@ -1,29 +1,6 @@
1
1
  module AppleMusicLibrary
2
2
  class Genre < TrackCollection
3
3
 
4
- attr_reader :name
5
-
6
- @@genres = {}
7
-
8
- def initialize(name)
9
- @name = name
10
- super
11
- end
12
-
13
- def self.all
14
- @@genres.values
15
- end
16
-
17
- def self.find_or_create(name)
18
- if @@genres[name]
19
- return @@genres[name]
20
- end
21
- @@genres[name] = self.new(name)
22
- end
23
-
24
- def self.find_by_name(name)
25
- @@genres[name]
26
- end
27
4
 
28
5
  end
29
6
  end
@@ -1,10 +1,28 @@
1
1
  module AppleMusicLibrary
2
2
  class TrackCollection
3
3
 
4
- attr_reader :tracks
4
+ attr_reader :name, :tracks
5
5
 
6
- def initialize(*args)
6
+ @@track_collections = {}
7
+
8
+ def initialize(name, *args)
7
9
  @tracks = []
10
+ @name = name
11
+ end
12
+
13
+ def self.all
14
+ @@track_collections[token].values
15
+ end
16
+
17
+ def self.find_by_name(lookup_name)
18
+ @@track_collections[token][lookup_name]
19
+ end
20
+
21
+ def self.find_or_create(lookup_name)
22
+ unless @@track_collections[token]
23
+ @@track_collections[token] = {}
24
+ end
25
+ @@track_collections[token][lookup_name] = self.new(lookup_name)
8
26
  end
9
27
 
10
28
  def add_track(track)
@@ -22,5 +40,13 @@ module AppleMusicLibrary
22
40
  @rated_tracks ||= tracks.select{|t| t.rated?}
23
41
  end
24
42
 
43
+ def self.token
44
+ self.class.name
45
+ end
46
+
47
+ def token
48
+ self.class.token
49
+ end
50
+
25
51
  end
26
52
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module AppleMusicLibrary
4
- VERSION = "0.7.0"
4
+ VERSION = "0.8.0"
5
5
  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.7.0
4
+ version: 0.8.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-12 00:00:00.000000000 Z
11
+ date: 2022-03-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: awesome_print