notu 1.0.6 → 2.0.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: 4032c7dd049dce2940bee2dd832c6393c0144948
4
- data.tar.gz: eb3a7c6206040c2a57cc2a7dd6852f2904729033
3
+ metadata.gz: a7e6c16f6e1f48be1810ff11d5e35626e14740c8
4
+ data.tar.gz: c7eb34d1781dc7a0283d9e49f3dbabb739cce687
5
5
  SHA512:
6
- metadata.gz: 99ffcde104872dc9bab4f7c02a2c7687c7ac4a806221fb11e9d9f54576ca0ce6dcb6943db47dc0a114b110f9f6b2a88b602e596bc2d3f0d1a1803cb54628f4eb
7
- data.tar.gz: cb0d3de34dccd6b92963928cd9b334297df8c9baf8581517101b4afb7f6ed48cdf8e39f1c29fc2935e6ef8b6c6c97823a524e1789bbd743a0f05213356db70dd
6
+ metadata.gz: 769b9ccdb8356903c55cb0d8bbcf93afda157d7ca7c5d779474efee32628d63a712ad5ee71f5f4359d82542a3262408487be15b06180bbf77733b505dae40136
7
+ data.tar.gz: a2da6e59c943176fd7767feb56c6aadf57e220b1b5f354b81b2697782597ebe7f477c439883270bcc0d6c0e64403bd8fbe874200cd040c18a4f2cb5615ad09b0
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.6
1
+ 2.0.0
data/lib/notu.rb CHANGED
@@ -26,3 +26,4 @@ require "#{lib_path}/loved_tracks"
26
26
  require "#{lib_path}/most_played_tracks"
27
27
  require "#{lib_path}/played_tracks"
28
28
  require "#{lib_path}/track"
29
+ require "#{lib_path}/unknown_username_error"
@@ -6,14 +6,13 @@ module Notu
6
6
  parse(HttpDownload.get(url, options))
7
7
  end
8
8
 
9
- private
10
-
11
9
  def self.parse(data)
12
10
  data = data.gsub(/ /i, ' ').gsub(/\s+/, ' ')
13
11
  document = Nokogiri::HTML.parse(data, nil, 'UTF-8')
14
12
  raise ParseError.new('Invalid HTML document') if (document/'head').empty?
15
13
  document
16
14
  end
15
+ private_class_method :parse
17
16
 
18
17
  end
19
18
 
data/lib/notu/library.rb CHANGED
@@ -2,14 +2,13 @@ module Notu
2
2
 
3
3
  class Library
4
4
 
5
- DEFAULT_HOST = 'www.last.fm'
5
+ HOST = 'www.last.fm'.freeze
6
6
 
7
- attr_reader :host, :username
7
+ attr_reader :username
8
8
 
9
9
  def initialize(options = {})
10
- options = options.stringify_keys
11
- self.host = options['host']
12
- self.username = options['username']
10
+ options = options.symbolize_keys
11
+ self.username = options[:username]
13
12
  end
14
13
 
15
14
  def loved_tracks
@@ -25,11 +24,11 @@ module Notu
25
24
  end
26
25
 
27
26
  def url(options = {})
28
- options = options.stringify_keys
29
- path = options['path'].presence
30
- query = options['query'].presence
31
- query = options['query'].map { |name, value| "#{CGI.escape(name.to_s)}=#{CGI.escape(value.to_s)}" }.join('&') if options['query'].is_a?(Hash)
32
- "https://#{host}/user/#{username}".tap do |url|
27
+ options = options.symbolize_keys
28
+ path = options[:path].presence
29
+ query = options[:query].presence
30
+ query = options[:query].map { |name, value| "#{CGI.escape(name.to_s)}=#{CGI.escape(value.to_s)}" }.join('&') if options[:query].is_a?(Hash)
31
+ "https://#{HOST}/user/#{username}".tap do |url|
33
32
  if path.present?
34
33
  url << '/' unless path.starts_with?('/')
35
34
  url << path
@@ -42,13 +41,14 @@ module Notu
42
41
 
43
42
  private
44
43
 
45
- def host=(value)
46
- @host = value.presence || DEFAULT_HOST
47
- end
48
-
49
44
  def username=(value)
50
45
  @username = value.to_s.strip.downcase
51
- raise Error.new("Invalid Last.fm username: #{value.inspect}") if username !~ /^[a-z0-9_]+$/
46
+ raise UnknownUsernameError.new(value) if username !~ /^[a-z0-9_]+$/
47
+ begin
48
+ HtmlDocument.get(url)
49
+ rescue
50
+ raise UnknownUsernameError.new(value)
51
+ end
52
52
  end
53
53
 
54
54
  end
@@ -0,0 +1,14 @@
1
+ module Notu
2
+
3
+ class UnknownUsernameError < Error
4
+
5
+ attr_reader :username
6
+
7
+ def initialize(username)
8
+ @username = username
9
+ super("No such Last.fm username: #{self.username.inspect}")
10
+ end
11
+
12
+ end
13
+
14
+ end
data/notu.gemspec CHANGED
@@ -20,7 +20,7 @@ Gem::Specification.new do |s|
20
20
 
21
21
  s.add_development_dependency 'byebug', '>= 3.2.0', '< 10.0.0'
22
22
  s.add_development_dependency 'rake', '>= 10.3.0', '< 13.0.0'
23
- s.add_development_dependency 'rspec', '>= 3.1.0', '< 3.7.0'
24
- s.add_development_dependency 'vcr', '>= 2.9.0', '< 3.1.0'
23
+ s.add_development_dependency 'rspec', '>= 3.1.0', '< 4.0.0'
24
+ s.add_development_dependency 'vcr', '>= 4.0.0', '< 5.0.0'
25
25
  s.add_development_dependency 'webmock', '>= 3.0.0', '< 4.0.0'
26
26
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: notu
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.6
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexis Toulotte
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-10-05 00:00:00.000000000 Z
11
+ date: 2018-01-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -99,7 +99,7 @@ dependencies:
99
99
  version: 3.1.0
100
100
  - - "<"
101
101
  - !ruby/object:Gem::Version
102
- version: 3.7.0
102
+ version: 4.0.0
103
103
  type: :development
104
104
  prerelease: false
105
105
  version_requirements: !ruby/object:Gem::Requirement
@@ -109,27 +109,27 @@ dependencies:
109
109
  version: 3.1.0
110
110
  - - "<"
111
111
  - !ruby/object:Gem::Version
112
- version: 3.7.0
112
+ version: 4.0.0
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: vcr
115
115
  requirement: !ruby/object:Gem::Requirement
116
116
  requirements:
117
117
  - - ">="
118
118
  - !ruby/object:Gem::Version
119
- version: 2.9.0
119
+ version: 4.0.0
120
120
  - - "<"
121
121
  - !ruby/object:Gem::Version
122
- version: 3.1.0
122
+ version: 5.0.0
123
123
  type: :development
124
124
  prerelease: false
125
125
  version_requirements: !ruby/object:Gem::Requirement
126
126
  requirements:
127
127
  - - ">="
128
128
  - !ruby/object:Gem::Version
129
- version: 2.9.0
129
+ version: 4.0.0
130
130
  - - "<"
131
131
  - !ruby/object:Gem::Version
132
- version: 3.1.0
132
+ version: 5.0.0
133
133
  - !ruby/object:Gem::Dependency
134
134
  name: webmock
135
135
  requirement: !ruby/object:Gem::Requirement
@@ -171,6 +171,7 @@ files:
171
171
  - lib/notu/parse_error.rb
172
172
  - lib/notu/played_tracks.rb
173
173
  - lib/notu/track.rb
174
+ - lib/notu/unknown_username_error.rb
174
175
  - notu.gemspec
175
176
  homepage: https://github.com/alexistoulotte/notu
176
177
  licenses:
@@ -192,7 +193,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
192
193
  version: '0'
193
194
  requirements: []
194
195
  rubyforge_project:
195
- rubygems_version: 2.5.2
196
+ rubygems_version: 2.6.13
196
197
  signing_key:
197
198
  specification_version: 4
198
199
  summary: API for Last.fm