notu 1.0.6 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
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