lastfm 1.26.0 → 1.27.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
  SHA1:
3
- metadata.gz: 9d75da0eb84e97b713db6269b03898aa030dd269
4
- data.tar.gz: e634865474c9d7f0942537d34c059bac4a030d3e
3
+ metadata.gz: 10b162c132972d25c1e26e047ca3cd4b23a5c40b
4
+ data.tar.gz: 45cd8bb96eed2cd4c7f9e2995443a76451983bca
5
5
  SHA512:
6
- metadata.gz: 31bd09f2c32dfb2a080cf4f543a2efe8b64a117993308e97051547f4ca8129b7def45e9fbbf824a7e4bcfc9b15b142dd77570a8282748cdc1e80f477b6faa4c9
7
- data.tar.gz: 8950457ca4a2fdcbd0f113979152dadaec1ae293f25ecae9f8b6acac977289e0d288a585881bbef92993707be9f4831703630b96070d568e86d8b13a76512286
6
+ metadata.gz: 849fa8b0f687be981575cffa0c91deca042c088ef75121b02291da04d7e8624f1638f6433c59b4d769d5909e4d92dadec51cf45959646b2d8bcecbc64c5f0a98
7
+ data.tar.gz: f521209a84aa6dfe273a32659903d2d57b25637e3dd8d7fc206bef65ad5cd9ae9697dee1f7909049a1c717b1cb257332655d2b2801601b0879018f51801958c1
data/README.md CHANGED
@@ -31,7 +31,15 @@ It supports methods which require [authentication](http://www.last.fm/api/authen
31
31
 
32
32
  ### Album
33
33
 
34
+ * [album.addTags](http://www.last.fm/api/show/album.addTags)
35
+ * [album.getBuylinks](http://www.last.fm/api/show/album.getBuylinks)
34
36
  * [album.getInfo](http://www.last.fm/api/show?service=290)
37
+ * [album.getShouts](http://www.last.fm/api/show/album.getShouts)
38
+ * [album.getTags](http://www.last.fm/api/show/album.getTags)
39
+ * [album.getTopTags](http://www.last.fm/api/show/album.getTopTags)
40
+ * [album.removeTag](http://www.last.fm/api/show/album.removeTag)
41
+ * [album.search](http://www.last.fm/api/show/album.search)
42
+ * [album.share](http://www.last.fm/api/show/album.share)
35
43
 
36
44
  ### Artist
37
45
 
@@ -12,7 +12,7 @@ Gem::Specification.new do |gem|
12
12
  gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
13
13
  gem.name = %q{lastfm}
14
14
  gem.require_paths = ["lib"]
15
- gem.version = "1.26.0"
15
+ gem.version = "1.27.0"
16
16
  gem.license = 'MIT'
17
17
 
18
18
  gem.add_dependency "xml-simple"
@@ -1,6 +1,29 @@
1
1
  class Lastfm
2
2
  module MethodCategory
3
3
  class Album < Base
4
+ write_method :add_tags, :required => [:artist, :album, :tags]
5
+
6
+ write_method :remove_tag, :required => [:artist, :album, :tag]
7
+
8
+ write_method(
9
+ :share,
10
+ :required => [:artist, :album, :recipient],
11
+ :optional => [
12
+ [:public, nil],
13
+ [:message, nil]
14
+ ]
15
+ )
16
+
17
+ regular_method(
18
+ :get_buylinks,
19
+ :required => any_params([:artist, :album, :country], [:mbid, :country]),
20
+ :optional => [
21
+ [:autocorrect, nil]
22
+ ]
23
+ ) do |response|
24
+ response.xml['affiliations']
25
+ end
26
+
4
27
  regular_method(
5
28
  :get_info,
6
29
  :required => any_params([:artist, :album], :mbid)
@@ -10,6 +33,50 @@ class Lastfm
10
33
  result['releasedate'].lstrip! unless result['releasedate'].empty?
11
34
  result
12
35
  end
36
+
37
+ regular_method(
38
+ :get_shouts,
39
+ :required => any_params([:artist, :album], :mbid),
40
+ :optional => [
41
+ [:limit, nil],
42
+ [:autocorrect, nil],
43
+ [:page, nil]
44
+ ]
45
+ ) do |response|
46
+ response.xml['shouts']['shout'] = Util.force_array(response.xml['shouts']['shout'])
47
+ end
48
+
49
+ regular_method(
50
+ :get_top_tags,
51
+ :required => [:artist, :album],
52
+ :optional => [
53
+ [:autocorrect, nil]
54
+ ]
55
+ ) do |response|
56
+ response.xml['toptags']['tag'] = Util.force_array(response.xml['toptags']['tag'])
57
+ end
58
+
59
+ regular_method(
60
+ :search,
61
+ :required => [:album],
62
+ :optional => [
63
+ [:limit, nil],
64
+ [:page, nil]
65
+ ]
66
+ ) do |response|
67
+ response.xml['results']['albummatches']['album'] = Util.force_array(response.xml['results']['albummatches']['album'])
68
+ response.xml
69
+ end
70
+
71
+ method_with_authentication(
72
+ :get_tags,
73
+ :required => any_params([:artist, :album], :mbid),
74
+ :optional => [
75
+ [:autocorrect, nil],
76
+ ]
77
+ ) do |response|
78
+ response.xml['tags']['tag'] = Util.force_array(response.xml['tags']['tag'])
79
+ end
13
80
  end
14
81
  end
15
82
  end
@@ -22,6 +22,13 @@ class Lastfm
22
22
  response.xml['artist']
23
23
  end
24
24
 
25
+ regular_method(
26
+ :get_correction,
27
+ :required => [:artist]
28
+ ) do |response|
29
+ response.xml['corrections']['correction']
30
+ end
31
+
25
32
  regular_method(
26
33
  :get_events,
27
34
  :required => any_params([:artist], [:mbid])
@@ -71,7 +71,10 @@ class Lastfm
71
71
 
72
72
  regular_method(
73
73
  :get_similar,
74
- :required => [:artist, :track]
74
+ :required => [:artist, :track],
75
+ :optional => [
76
+ [:limit, nil]
77
+ ]
75
78
  ) do |response|
76
79
  response.xml['similartracks']['track'][1 .. -1]
77
80
  end
@@ -33,7 +33,7 @@ class Lastfm
33
33
  [:page, nil]
34
34
  ]
35
35
  ) do |response|
36
- response.xml['lovedtracks']['track']
36
+ response.xml['lovedtracks']['track'] = Util.force_array(response.xml['lovedtracks']['track'])
37
37
  end
38
38
 
39
39
  regular_method(
@@ -1,7 +1,7 @@
1
1
  class Lastfm
2
2
  class Util
3
3
  def self.force_array(array_or_something)
4
- array_or_something.kind_of?(Array) ? array_or_something : [array_or_something]
4
+ array_or_something.kind_of?(Array) ? array_or_something : [array_or_something].compact
5
5
  end
6
6
 
7
7
  def self.build_options(args, mandatory, optional)
@@ -14,18 +14,13 @@ class Lastfm
14
14
 
15
15
  def self.build_options_from_hash(options, mandatory, optional)
16
16
  candidates = mandatory.kind_of?(AnyParams) ? mandatory.candidates : [mandatory]
17
- candidates.each_with_index do |params, index|
18
- Array(params).each do |param|
19
- if !options.has_key?(param)
20
- if params.equal? candidates.last
21
- raise ArgumentError.new("%s is required" % param)
22
- else
23
- next
24
- end
25
- end
17
+ candidates.each do |params|
18
+ missing_param = Array(params).any? { |param| !options.key?(param) }
19
+ if missing_param && params.equal?(candidates.last)
20
+ raise ArgumentError.new("%s is required" % candidates.map{ |c| Array(c).join(', ')}.join(' or '))
26
21
  end
27
22
 
28
- break
23
+ break unless missing_param
29
24
  end
30
25
 
31
26
  optional.each do |name, value|
@@ -0,0 +1,31 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <lfm status="ok">
3
+ <affiliations>
4
+ <physicals>
5
+ <affiliation>
6
+ <supplierName>Amazon</supplierName>
7
+ <price>
8
+ <currency>GBP</currency>
9
+ <amount>6.34</amount>
10
+ <formatted>£6.34</formatted>
11
+ </price>
12
+ <buyLink>http://www.last.fm/affiliate/byid/8/3418994/1/ws.album.buylinks.f4e2585261d8d10d3297e181d68940fc</buyLink>
13
+ <supplierIcon>http://cdn.last.fm/favicons/1/amazon.gif</supplierIcon>
14
+ <isSearch>0</isSearch>
15
+ </affiliation>
16
+ </physicals>
17
+ <downloads>
18
+ <affiliation>
19
+ <supplierName>Amazon MP3</supplierName>
20
+ <price>
21
+ <currency>GBP</currency>
22
+ <amount>7.99</amount>
23
+ <formatted>£7.99</formatted>
24
+ </price>
25
+ <buyLink>http://www.last.fm/affiliate/byid/8/3418994/44/ws.album.buylinks.f4e2585261d8d10d3297e181d68940fc</buyLink>
26
+ <supplierIcon>http://cdn.last.fm/favicons/amazon-mp3-16x16-a.gif</supplierIcon>
27
+ <isSearch>0</isSearch>
28
+ </affiliation>
29
+ </downloads>
30
+ </affiliations>
31
+ </lfm>
@@ -0,0 +1,15 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <lfm status="ok">
3
+ <shouts artist="Cher" album="Believe" page="1" perPage="50" totalPages="2" total="53">
4
+ <shout>
5
+ <body>A perfect Pop/Dance Masterpiece</body>
6
+ <author>top20fanatico</author>
7
+ <date>Wed, 7 Jan 2015 12:45:35</date>
8
+ </shout>
9
+ <shout>
10
+ <body>http://www.lastfm.com.br/music/Cher/+images/101972561</body>
11
+ <author>gabcmonteiro</author>
12
+ <date>Sun, 9 Nov 2014 12:07:06</date>
13
+ </shout>
14
+ </shouts>
15
+ </lfm>
@@ -0,0 +1,13 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <lfm status="ok">
3
+ <tags artist="Cher" album="Believe">
4
+ <tag>
5
+ <name>sourabh</name>
6
+ <url>http://www.last.fm/tag/sourabh</url>
7
+ </tag>
8
+ <tag>
9
+ <name>90s</name>
10
+ <url>http://www.last.fm/tag/90s</url>
11
+ </tag>
12
+ </tags>
13
+ </lfm>
@@ -0,0 +1,15 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <lfm status="ok">
3
+ <toptags artist="Radiohead" album="The Bends">
4
+ <tag>
5
+ <name>albums I own</name>
6
+ <count>100</count>
7
+ <url>http://www.last.fm/tag/albums%20i%20own</url>
8
+ </tag>
9
+ <tag>
10
+ <name>alternative rock</name>
11
+ <count>56</count>
12
+ <url>http://www.last.fm/tag/alternative%20rock</url>
13
+ </tag>
14
+ </toptags>
15
+ </lfm>
@@ -0,0 +1,35 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <lfm status="ok">
3
+ <results for="Believe" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/">
4
+ <opensearch:Query role="request" searchTerms="Believe" startPage="1" />
5
+ <opensearch:totalResults>3926</opensearch:totalResults>
6
+ <opensearch:startIndex>0</opensearch:startIndex>
7
+ <opensearch:itemsPerPage>50</opensearch:itemsPerPage>
8
+ <albummatches>
9
+ <album>
10
+ <name>Believe</name>
11
+ <artist>Disturbed</artist>
12
+ <id>1418894</id>
13
+ <url>http://www.last.fm/music/Disturbed/Believe</url>
14
+ <image size="small">http://userserve-ak.last.fm/serve/34s/53553281.png</image>
15
+ <image size="medium">http://userserve-ak.last.fm/serve/64s/53553281.png</image>
16
+ <image size="large">http://userserve-ak.last.fm/serve/126/53553281.png</image>
17
+ <image size="extralarge">http://userserve-ak.last.fm/serve/300x300/53553281.png</image>
18
+ <streamable>0</streamable>
19
+ <mbid>ed32813a-cd20-4bb3-b3fd-bca6161deb17</mbid>
20
+ </album>
21
+ <album>
22
+ <name>Make Believe</name>
23
+ <artist>Weezer</artist>
24
+ <id>2025180</id>
25
+ <url>http://www.last.fm/music/Weezer/Make+Believe</url>
26
+ <image size="small">http://userserve-ak.last.fm/serve/34s/53692665.png</image>
27
+ <image size="medium">http://userserve-ak.last.fm/serve/64s/53692665.png</image>
28
+ <image size="large">http://userserve-ak.last.fm/serve/126/53692665.png</image>
29
+ <image size="extralarge">http://userserve-ak.last.fm/serve/300x300/53692665.png</image>
30
+ <streamable>0</streamable>
31
+ <mbid>9e7103bb-fc9a-4e5a-a90c-2a3ab4c08e19</mbid>
32
+ </album>
33
+ </albummatches>
34
+ </results>
35
+ </lfm>
@@ -0,0 +1,10 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <lfm status="ok">
3
+ <results for="Believe" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/">
4
+ <opensearch:Query role="request" searchTerms="Believe" startPage="1" />
5
+ <opensearch:totalResults>0</opensearch:totalResults>
6
+ <opensearch:startIndex>0</opensearch:startIndex>
7
+ <opensearch:itemsPerPage>50</opensearch:itemsPerPage>
8
+ <albummatches></albummatches>
9
+ </results>
10
+ </lfm>
@@ -0,0 +1,23 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <lfm status="ok">
3
+ <results for="Believe" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/">
4
+ <opensearch:Query role="request" searchTerms="Believe" startPage="1" />
5
+ <opensearch:totalResults>3926</opensearch:totalResults>
6
+ <opensearch:startIndex>0</opensearch:startIndex>
7
+ <opensearch:itemsPerPage>50</opensearch:itemsPerPage>
8
+ <albummatches>
9
+ <album>
10
+ <name>Believe</name>
11
+ <artist>Disturbed</artist>
12
+ <id>1418894</id>
13
+ <url>http://www.last.fm/music/Disturbed/Believe</url>
14
+ <image size="small">http://userserve-ak.last.fm/serve/34s/53553281.png</image>
15
+ <image size="medium">http://userserve-ak.last.fm/serve/64s/53553281.png</image>
16
+ <image size="large">http://userserve-ak.last.fm/serve/126/53553281.png</image>
17
+ <image size="extralarge">http://userserve-ak.last.fm/serve/300x300/53553281.png</image>
18
+ <streamable>0</streamable>
19
+ <mbid>ed32813a-cd20-4bb3-b3fd-bca6161deb17</mbid>
20
+ </album>
21
+ </albummatches>
22
+ </results>
23
+ </lfm>
@@ -0,0 +1,12 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <lfm status="ok">
3
+ <corrections>
4
+ <correction index="0">
5
+ <artist>
6
+ <name>Guns N' Roses</name>
7
+ <mbid>eeb1195b-f213-4ce1-b28c-8565211f8e43</mbid>
8
+ <url>http://www.last.fm/music/Guns+N%27+Roses</url>
9
+ </artist>
10
+ </correction>
11
+ </corrections>
12
+ </lfm>
@@ -0,0 +1,11 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <lfm status="ok">
3
+ <results xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/" for="Believe">
4
+ <opensearch:Query role="request" searchTerms="Believe" startPage="1"/>
5
+ <opensearch:totalResults>0</opensearch:totalResults>
6
+ <opensearch:startIndex>0</opensearch:startIndex>
7
+ <opensearch:itemsPerPage>10</opensearch:itemsPerPage>
8
+ <trackmatches>
9
+ </trackmatches>
10
+ </results>
11
+ </lfm>
@@ -0,0 +1,5 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <lfm status="ok">
3
+ <lovedtracks user="skr" page="0" perPage="50" totalPages="0" total="0">
4
+ </lovedtracks>
5
+ </lfm>
@@ -0,0 +1,17 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <lfm status="ok">
3
+ <lovedtracks user="skr" page="1" perPage="50" totalPages="4" total="180">
4
+ <track>
5
+ <name>I Spy</name>
6
+ <mbid/>
7
+ <url>http://www.last.fm/music/Mikhael+Paskalev/_/I+Spy</url>
8
+ <date uts="1329859504">21 Feb 2012, 21:25</date>
9
+ <artist>
10
+ <name>Mikhael Paskalev</name>
11
+ <mbid/>
12
+ <url>http://www.last.fm/music/Mikhael+Paskalev</url>
13
+ </artist>
14
+ <streamable fulltrack="0">0</streamable>
15
+ </track>
16
+ </lovedtracks>
17
+ </lfm>
@@ -1,3 +1,4 @@
1
+ # encoding: utf-8
1
2
  require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
3
 
3
4
  describe '#album' do
@@ -7,6 +8,91 @@ describe '#album' do
7
8
  @lastfm.album.should be_an_instance_of(Lastfm::MethodCategory::Album)
8
9
  end
9
10
 
11
+ describe '#add_tags' do
12
+ it 'should add tags' do
13
+ @lastfm.should_receive(:request).with('album.addTags', {
14
+ :artist => 'foo artist',
15
+ :album => 'foo track',
16
+ :tags => 'aaa,bbb,ccc'
17
+ }, :post, true, true).and_return(@ok_response)
18
+
19
+ @lastfm.album.add_tags(
20
+ :artist => 'foo artist',
21
+ :album => 'foo track',
22
+ :tags => 'aaa,bbb,ccc'
23
+ ).should be_true
24
+ end
25
+ end
26
+
27
+ describe '#get_buylinks' do
28
+ it 'should get buylinks' do
29
+ @lastfm.should_receive(:request).with('album.getBuylinks', {
30
+ :artist => 'radiohead',
31
+ :album => 'in rainbows',
32
+ :country => 'united kingdom',
33
+ :autocorrect => nil
34
+ }).and_return(make_response('album_get_buylinks'))
35
+
36
+ buylinks = @lastfm.album.get_buylinks(
37
+ :artist => 'radiohead',
38
+ :album => 'in rainbows',
39
+ :country => 'united kingdom'
40
+ )
41
+
42
+ buylinks['physicals'].size.should == 1
43
+ buylinks['physicals']['affiliation']['supplierName'].should == 'Amazon'
44
+ buylinks['physicals']['affiliation']['price']['currency'].should == 'GBP'
45
+ buylinks['physicals']['affiliation']['price']['amount'].should == '6.34'
46
+ buylinks['physicals']['affiliation']['price']['formatted'].should == '£6.34'
47
+ buylinks['physicals']['affiliation']['buyLink'].should == 'http://www.last.fm/affiliate/byid/8/3418994/1/ws.album.buylinks.f4e2585261d8d10d3297e181d68940fc'
48
+
49
+ buylinks['downloads'].size.should == 1
50
+ buylinks['downloads']['affiliation']['supplierName'].should == 'Amazon MP3'
51
+ buylinks['downloads']['affiliation']['price']['currency'].should == 'GBP'
52
+ buylinks['downloads']['affiliation']['price']['amount'].should == '7.99'
53
+ buylinks['downloads']['affiliation']['price']['formatted'].should == '£7.99'
54
+ buylinks['downloads']['affiliation']['buyLink'].should == 'http://www.last.fm/affiliate/byid/8/3418994/44/ws.album.buylinks.f4e2585261d8d10d3297e181d68940fc'
55
+ end
56
+
57
+ it 'should get buylinks by mbid' do
58
+ @lastfm.should_receive(:request).with('album.getBuylinks', {
59
+ :mbid => 'radiohead',
60
+ :country => 'united kingdom',
61
+ :autocorrect => nil
62
+ }).and_return(make_response('album_get_buylinks'))
63
+
64
+ buylinks = @lastfm.album.get_buylinks(
65
+ :mbid => 'radiohead',
66
+ :country => 'united kingdom'
67
+ )
68
+
69
+ buylinks['physicals'].size.should == 1
70
+ buylinks['physicals']['affiliation']['supplierName'].should == 'Amazon'
71
+ buylinks['physicals']['affiliation']['price']['currency'].should == 'GBP'
72
+ buylinks['physicals']['affiliation']['price']['amount'].should == '6.34'
73
+ buylinks['physicals']['affiliation']['price']['formatted'].should == '£6.34'
74
+ buylinks['physicals']['affiliation']['buyLink'].should == 'http://www.last.fm/affiliate/byid/8/3418994/1/ws.album.buylinks.f4e2585261d8d10d3297e181d68940fc'
75
+
76
+ buylinks['downloads'].size.should == 1
77
+ buylinks['downloads']['affiliation']['supplierName'].should == 'Amazon MP3'
78
+ buylinks['downloads']['affiliation']['price']['currency'].should == 'GBP'
79
+ buylinks['downloads']['affiliation']['price']['amount'].should == '7.99'
80
+ buylinks['downloads']['affiliation']['price']['formatted'].should == '£7.99'
81
+ buylinks['downloads']['affiliation']['buyLink'].should == 'http://www.last.fm/affiliate/byid/8/3418994/44/ws.album.buylinks.f4e2585261d8d10d3297e181d68940fc'
82
+ end
83
+
84
+ it 'should raise ArgumentError without country' do
85
+ expect {@lastfm.album.get_buylinks(
86
+ :artist => 'radiohead',
87
+ :album => 'in rainbows'
88
+ )}.to raise_error(ArgumentError)
89
+
90
+ expect {@lastfm.album.get_buylinks(
91
+ :mbid => 'radiohead',
92
+ )}.to raise_error(ArgumentError)
93
+ end
94
+ end
95
+
10
96
  describe '#get_info' do
11
97
  it 'should get info by artist and album' do
12
98
  @lastfm.should_receive(:request).with('album.getInfo', {
@@ -46,4 +132,139 @@ describe '#album' do
46
132
  album['tracks']['track'][0]['url'].should == 'http://www.last.fm/music/Cher/_/Believe'
47
133
  end
48
134
  end
135
+
136
+ describe '#get_shouts' do
137
+ it 'should get shouts' do
138
+ @lastfm.should_receive(:request).with('album.getShouts', {
139
+ :artist => 'Cher',
140
+ :album => 'Believe',
141
+ :autocorrect => nil,
142
+ :limit => nil,
143
+ :page => nil
144
+ }).and_return(make_response('album_get_shouts'))
145
+
146
+ shouts = @lastfm.album.get_shouts(
147
+ :artist => 'Cher',
148
+ :album => 'Believe')
149
+ shouts.size.should == 2
150
+ shouts[0]['body'].should == 'A perfect Pop/Dance Masterpiece'
151
+ shouts[0]['author'].should == 'top20fanatico'
152
+ shouts[0]['date'].should == 'Wed, 7 Jan 2015 12:45:35'
153
+ end
154
+ end
155
+
156
+ describe '#get_tags' do
157
+ it 'should get tags' do
158
+ @lastfm.should_receive(:request).with('album.getTags', {
159
+ :artist => 'Cher',
160
+ :album => 'Believe',
161
+ :autocorrect => nil
162
+ }, :get, true, true).and_return(make_response('album_get_tags'))
163
+
164
+ tags = @lastfm.album.get_tags(
165
+ :artist => 'Cher',
166
+ :album => 'Believe')
167
+ tags.size.should == 2
168
+ tags[0]['name'].should == 'sourabh'
169
+ tags[0]['url'].should == 'http://www.last.fm/tag/sourabh'
170
+ end
171
+ end
172
+
173
+ describe '#get_top_tags' do
174
+ it 'should get top tags' do
175
+ @lastfm.should_receive(:request).with('album.getTopTags', {
176
+ :artist => 'Radiohead',
177
+ :album => 'The Bends',
178
+ :autocorrect => nil
179
+ }).and_return(make_response('album_get_top_tags'))
180
+
181
+ tags = @lastfm.album.get_top_tags(
182
+ :artist => 'Radiohead',
183
+ :album => 'The Bends')
184
+ tags.size.should == 2
185
+ tags[0]['name'].should == 'albums I own'
186
+ tags[0]['count'].should == '100'
187
+ tags[0]['url'].should == 'http://www.last.fm/tag/albums%20i%20own'
188
+ end
189
+ end
190
+
191
+ describe '#remove_tag' do
192
+ it 'should remove tag' do
193
+ @lastfm.should_receive(:request).with('album.removeTag', {
194
+ :artist => 'foo artist',
195
+ :album => 'foo track',
196
+ :tag => 'aaa'
197
+ }, :post, true, true).and_return(@ok_response)
198
+
199
+ @lastfm.album.remove_tag(
200
+ :artist => 'foo artist',
201
+ :album => 'foo track',
202
+ :tag => 'aaa').should be_true
203
+ end
204
+ end
205
+
206
+ describe '#search' do
207
+ it 'should search' do
208
+ @lastfm.should_receive(:request).with('album.search', {
209
+ :album => 'Believe',
210
+ :limit => nil,
211
+ :page => nil,
212
+ }).and_return(make_response('album_search'))
213
+
214
+ albums = @lastfm.album.search(:album => 'Believe')
215
+
216
+ albums['results']['for'].should == 'Believe'
217
+ albums['results']['totalResults'].should == '3926'
218
+ albums['results']['albummatches']['album'].size.should == 2
219
+ albums['results']['albummatches']['album'][0]['name'].should == 'Believe'
220
+ end
221
+
222
+ it 'should always return an array of albums' do
223
+ @lastfm.should_receive(:request).with('album.search', {
224
+ :album => 'Believe',
225
+ :limit => nil,
226
+ :page => nil,
227
+ }).and_return(make_response('album_search_single_album'))
228
+
229
+ albums = @lastfm.album.search(:album => 'Believe')
230
+
231
+ albums['results']['for'].should == 'Believe'
232
+ albums['results']['totalResults'].should == '3926'
233
+ albums['results']['albummatches']['album'].size.should == 1
234
+ albums['results']['albummatches']['album'][0]['name'].should == 'Believe'
235
+ end
236
+
237
+ it 'should return an empty array if no match found' do
238
+ @lastfm.should_receive(:request).with('album.search', {
239
+ :album => 'Believe',
240
+ :limit => nil,
241
+ :page => nil,
242
+ }).and_return(make_response('album_search_no_match'))
243
+
244
+ albums = @lastfm.album.search(:album => 'Believe')
245
+
246
+ albums['results']['for'].should == 'Believe'
247
+ albums['results']['totalResults'].should == '0'
248
+ albums['results']['albummatches']['album'].size.should == 0
249
+ end
250
+ end
251
+
252
+ describe '#share' do
253
+ it 'should share' do
254
+ @lastfm.should_receive(:request).with('album.share', {
255
+ :artist => 'bar artist',
256
+ :album => 'bar album',
257
+ :recipient => 'bar@example.com',
258
+ :message => 'this is a message',
259
+ :public => nil,
260
+ }, :post, true, true).and_return(@ok_response)
261
+
262
+ @lastfm.album.share(
263
+ :artist => 'bar artist',
264
+ :album => 'bar album',
265
+ :recipient => 'bar@example.com',
266
+ :message => 'this is a message',
267
+ ).should be_true
268
+ end
269
+ end
49
270
  end
@@ -7,6 +7,18 @@ describe '#artist' do
7
7
  @lastfm.artist.should be_an_instance_of(Lastfm::MethodCategory::Artist)
8
8
  end
9
9
 
10
+ describe '#get_correction' do
11
+ it 'should get corrections' do
12
+ @lastfm.should_receive(:request).with('artist.getCorrection', {
13
+ :artist => 'Guns N Roses'
14
+ }).and_return(make_response('artist_get_correction'))
15
+
16
+ corrections = @lastfm.artist.get_correction(:artist => 'Guns N Roses')
17
+ corrections[0]['artist']['name'].should == "Guns N' Roses"
18
+ corrections[0]['artist']['url'].should == 'http://www.last.fm/music/Guns+N%27+Roses'
19
+ end
20
+ end
21
+
10
22
  describe '#get_top_tracks' do
11
23
  it 'should get top tracks' do
12
24
  @lastfm.should_receive(:request).with('artist.getTopTracks', {
@@ -115,6 +115,7 @@ describe '#track' do
115
115
  @lastfm.should_receive(:request).with('track.getSimilar', {
116
116
  :artist => 'Cher',
117
117
  :track => 'Believe',
118
+ :limit => nil
118
119
  }).and_return(make_response('track_get_similar'))
119
120
 
120
121
  tracks = @lastfm.track.get_similar(
@@ -239,6 +240,23 @@ describe '#track' do
239
240
  tracks['results']['trackmatches']['track'].size.should == 1
240
241
  tracks['results']['trackmatches']['track'][0]['name'].should == 'Make Me Believe'
241
242
  end
243
+
244
+ it 'should return an empty array if no match found' do
245
+ @lastfm.should_receive(:request).with('track.search', {
246
+ :artist => nil,
247
+ :track => 'Believe',
248
+ :limit => 10,
249
+ :page => 1,
250
+ }).and_return(make_response('track_search_no_match'))
251
+
252
+ tracks = @lastfm.track.search(
253
+ :track => 'Believe',
254
+ :limit => 10,
255
+ :page => 1)
256
+ tracks['results']['for'].should == 'Believe'
257
+ tracks['results']['totalResults'].should == '0'
258
+ tracks['results']['trackmatches']['track'].size.should == 0
259
+ end
242
260
  end
243
261
 
244
262
  describe '#share' do
@@ -177,6 +177,36 @@ describe '#user' do
177
177
  tracks[1]['name'].should == 'Working Titles'
178
178
  tracks[1]['artist']['name'].should == 'Damien Jurado'
179
179
  end
180
+
181
+ it 'should always return an array of tracks' do
182
+ @lastfm.should_receive(:request).with('user.getLovedTracks', {
183
+ :user => 'test',
184
+ :period => nil,
185
+ :limit => nil,
186
+ :page => nil
187
+ }).and_return(make_response('user_get_loved_tracks_single_track'))
188
+
189
+ tracks = @lastfm.user.get_loved_tracks(:user => 'test')
190
+
191
+ tracks.size.should == 1
192
+
193
+ tracks[0]['rank'].should == nil
194
+ tracks[0]['name'].should == 'I Spy'
195
+ tracks[0]['artist']['name'].should == 'Mikhael Paskalev'
196
+ end
197
+
198
+ it 'should return an empty array when user has 0 loved tracks' do
199
+ @lastfm.should_receive(:request).with('user.getLovedTracks', {
200
+ :user => 'test',
201
+ :period => nil,
202
+ :limit => nil,
203
+ :page => nil
204
+ }).and_return(make_response('user_get_loved_tracks_no_tracks'))
205
+
206
+ tracks = @lastfm.user.get_loved_tracks(:user => 'test')
207
+
208
+ tracks.size.should == 0
209
+ end
180
210
  end
181
211
 
182
212
  describe '#get_friends' do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lastfm
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.26.0
4
+ version: 1.27.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - youpy
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-01-16 00:00:00.000000000 Z
11
+ date: 2015-08-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: xml-simple
@@ -114,7 +114,15 @@ files:
114
114
  - lib/lastfm/method_category/user.rb
115
115
  - lib/lastfm/response.rb
116
116
  - lib/lastfm/util.rb
117
+ - spec/fixtures/album_get_buylinks.xml
117
118
  - spec/fixtures/album_get_info.xml
119
+ - spec/fixtures/album_get_shouts.xml
120
+ - spec/fixtures/album_get_tags.xml
121
+ - spec/fixtures/album_get_top_tags.xml
122
+ - spec/fixtures/album_search.xml
123
+ - spec/fixtures/album_search_no_match.xml
124
+ - spec/fixtures/album_search_single_album.xml
125
+ - spec/fixtures/artist_get_correction.xml
118
126
  - spec/fixtures/artist_get_events.xml
119
127
  - spec/fixtures/artist_get_images.xml
120
128
  - spec/fixtures/artist_get_info.xml
@@ -154,10 +162,13 @@ files:
154
162
  - spec/fixtures/track_get_top_fans.xml
155
163
  - spec/fixtures/track_get_top_tags.xml
156
164
  - spec/fixtures/track_search.xml
165
+ - spec/fixtures/track_search_no_match.xml
157
166
  - spec/fixtures/track_search_single_track.xml
158
167
  - spec/fixtures/user_get_friends.xml
159
168
  - spec/fixtures/user_get_info.xml
160
169
  - spec/fixtures/user_get_loved_tracks.xml
170
+ - spec/fixtures/user_get_loved_tracks_no_tracks.xml
171
+ - spec/fixtures/user_get_loved_tracks_single_track.xml
161
172
  - spec/fixtures/user_get_neighbours.xml
162
173
  - spec/fixtures/user_get_new_releases.xml
163
174
  - spec/fixtures/user_get_personal_tags.xml
@@ -218,7 +229,15 @@ signing_key:
218
229
  specification_version: 4
219
230
  summary: A ruby interface for Last.fm web services version 2.0
220
231
  test_files:
232
+ - spec/fixtures/album_get_buylinks.xml
221
233
  - spec/fixtures/album_get_info.xml
234
+ - spec/fixtures/album_get_shouts.xml
235
+ - spec/fixtures/album_get_tags.xml
236
+ - spec/fixtures/album_get_top_tags.xml
237
+ - spec/fixtures/album_search.xml
238
+ - spec/fixtures/album_search_no_match.xml
239
+ - spec/fixtures/album_search_single_album.xml
240
+ - spec/fixtures/artist_get_correction.xml
222
241
  - spec/fixtures/artist_get_events.xml
223
242
  - spec/fixtures/artist_get_images.xml
224
243
  - spec/fixtures/artist_get_info.xml
@@ -258,10 +277,13 @@ test_files:
258
277
  - spec/fixtures/track_get_top_fans.xml
259
278
  - spec/fixtures/track_get_top_tags.xml
260
279
  - spec/fixtures/track_search.xml
280
+ - spec/fixtures/track_search_no_match.xml
261
281
  - spec/fixtures/track_search_single_track.xml
262
282
  - spec/fixtures/user_get_friends.xml
263
283
  - spec/fixtures/user_get_info.xml
264
284
  - spec/fixtures/user_get_loved_tracks.xml
285
+ - spec/fixtures/user_get_loved_tracks_no_tracks.xml
286
+ - spec/fixtures/user_get_loved_tracks_single_track.xml
265
287
  - spec/fixtures/user_get_neighbours.xml
266
288
  - spec/fixtures/user_get_new_releases.xml
267
289
  - spec/fixtures/user_get_personal_tags.xml