name changes + refactoring in LastFM lib

This commit is contained in:
Thomas Buchöster
2011-06-08 03:49:13 +02:00
parent 47e38da04f
commit 8c892791ea
13 changed files with 50 additions and 56 deletions
+9 -19
View File
@@ -6,14 +6,18 @@ gem 'rails', '3.0.5'
gem 'jquery-rails', '>= 0.2.6'
gem 'jrails'
# templating / styling
gem 'sqlite3'
gem 'sqlite3-ruby', :require => 'sqlite3'
# templating
gem 'haml-rails'
gem "sass"
# for using last.fm api
gem 'typhoeus'
# gem 'httparty'
# for object caching
gem 'redis'
# for using 7digital api
gem '7digital'
@@ -22,7 +26,7 @@ gem '7digital'
gem 'json'
gem 'hashie'
# authentication, authorization, roles
# authentication
gem 'devise'
gem 'oa-oauth', :require => 'omniauth/oauth'
gem 'oa-openid', :require => 'omniauth/openid'
@@ -40,22 +44,8 @@ group :development, :test do
# alternative servers (because openID URIs are too long for WEBRick)
gem 'mongrel', '1.2.0.pre2'
# gem 'thin'
end
# Deploy with Capistrano
# gem 'capistrano'
# Bundle the extra gems:
# gem 'bj'
gem 'sqlite3'
gem 'sqlite3-ruby', :require => 'sqlite3'
# gem 'aws-s3', :require => 'aws/s3'
# Bundle gems for the local environment. Make sure to
# put test-only gems in this group so their generators
# and rake tasks are available in development mode:
# group :development, :test do
# gem 'webrat'
# end
+2
View File
@@ -114,6 +114,7 @@ GEM
rake (>= 0.8.7)
thor (~> 0.14.4)
rake (0.9.2)
redis (2.2.0)
ruby-openid (2.1.8)
ruby-openid-apps-discovery (1.2.0)
ruby-openid (>= 2.1.7)
@@ -155,6 +156,7 @@ DEPENDENCIES
paperclip (~> 2.3)
rails (= 3.0.5)
rake
redis
ruby_parser
sass
sqlite3
+3 -3
View File
@@ -12,7 +12,7 @@ class ArtistsController < ApplicationController
@albums = LastFM::Artist.getTopAlbums artist, @@limit[:albums]
@related= LastFM::Artist.getSimilar artist, @@limit[:similar]
LastFM::LastFMRequest.run_queue!
LastFM::Request.run_queue!
render :partial=>"show", :locals=>{
:artist=>@artist,
@@ -30,7 +30,7 @@ class ArtistsController < ApplicationController
def more_tracks
more params
@tracks = LastFM::Artist.getTopTracks params[:artist], @@limit[:tracks], (params[:size] / @@limit[:tracks] + 1)
LastFM::LastFMRequest.run_queue!
LastFM::Request.run_queue!
render :partial=>"more_tracks", :locals=>{:tracks=>@tracks}
end
@@ -38,7 +38,7 @@ class ArtistsController < ApplicationController
def more_albums
more params
@albums = LastFM::Artist.getTopAlbums params[:artist], @@limit[:albums], (params[:size] / @@limit[:albums] + 1)
LastFM::LastFMRequest.run_queue!
LastFM::Request.run_queue!
render :partial=>"more_albums", :locals=>{:albums=>@albums}
end
+2 -1
View File
@@ -1,7 +1,8 @@
class HomeController < ApplicationController
def show
@charts = LastFM::Chart.getTopArtists 10
LastFM::LastFMRequest.run_queue!
LastFM::Request.run_queue!
render :partial=>"index"
end
+1 -1
View File
@@ -5,7 +5,7 @@ class SearchController < ApplicationController
@tracks = LastFM::Track.search(params[:q].to_s.lstrip, 24)
@albums = LastFM::Album.search(params[:q].to_s.lstrip, 16)
LastFM::LastFMRequest.run_queue!
LastFM::Request.run_queue!
end
end
-2
View File
@@ -3,8 +3,6 @@ Nineminutes::Application.configure do
# Reloads modules and files in lib directory
config.autoload_paths += %W(#{config.root}/lib)
config.autoload_paths += Dir["#{config.root}/lib/**/"]
# In the development environment your application's code is reloaded on
# every request. This slows down response time but is perfect for development
+3
View File
@@ -0,0 +1,3 @@
ActionDispatch::Callbacks.to_prepare do
LastFM::Request::api_key = APP_CONFIG['lastfm_api_key']
end
-3
View File
@@ -1,3 +0,0 @@
ActionDispatch::Callbacks.to_prepare do
LastFM::LastFMRequest::api_key = APP_CONFIG['lastfm_api_key']
end
+2 -2
View File
@@ -1,11 +1,11 @@
module LastFM
class Album < LastFMRequest
class Album < Request
def self.search query, limit = nil, page = nil
album_request "search", "albummatches", query, nil, limit, page do |result|
result = LastFM::Validator.validate_mash result
result = Hashie::Mash.new({ :album => [] }) if result.blank?
update_results "#{current_class_name}_#{__method__}", result
update_results [current_class_name, __method__], result
end
end
+6 -5
View File
@@ -1,19 +1,20 @@
module LastFM
class Artist < LastFMRequest
class Artist < Request
def self.search query, limit = nil, page = nil
artist_request "search", "artistmatches", query, limit, page do |result|
result = LastFM::Validator.validate_mash result
result = Hashie::Mash.new({ :artist => [] }) if result.blank?
update_results "#{current_class_name}_#{__method__}", result
update_results [current_class_name, __method__], result
end
end
# return: artist name, tags, similar artists, artist bio (summary / long), mbid, image urls ( different sizes )
def self.getInfo artist
artist_request "getInfo", "artist", artist do |info|
LastFM::Validator.validate_mash info, "tag", "image"
info = LastFM::Validator.validate_mash info, "tag", "image"
update_results [current_class_name, __method__], info
end
end
@@ -37,7 +38,7 @@ module LastFM
artist_request "getTopAlbums", "topalbums", artist, limit, page do |albums|
albums = LastFM::Validator.validate_mash albums, "album"
albums = Hashie::Mash.new({ :album => [] }) if albums.total == "0"
update_results "#{current_class_name}_#{__method__}", albums
update_results [current_class_name, __method__], albums
end
end
@@ -45,7 +46,7 @@ module LastFM
artist_request "getImages", "images", artist, limit do |images|
images = LastFM::Validator.validate_mash images, "image"
images = Hashie::Mash.new({ :image => [] }) if images.total == "0"
update_results "#{current_class_name}_#{__method__}", images
update_results [current_class_name, __method__], images
end
end
+1 -1
View File
@@ -1,6 +1,6 @@
module LastFM
class Chart < LastFMRequest
class Chart < Request
def self.getTopArtists limit = nil, page = nil
chart_request "getTopArtists", "artists", limit, page do |artists|
LastFM::Validator.validate_mash artists, "image"
@@ -3,7 +3,7 @@ require 'hashie'
module LastFM
class LastFMRequest
class Request
@@base_uri = 'http://ws.audioscrobbler.com/2.0/'
@@default_params = { :format => 'json', :autocorrect => '1' }
@@ -16,15 +16,16 @@ module LastFM
end
def self.base_uri
return @@base_uri
@@base_uri
end
def self.default_params
return @@default_params
@@default_params
end
def self.results
return @@results
def self.results keys = nil
return @@results if keys.nil?
@@results[("#{keys[0]}_#{keys[1]}".to_sym)]
end
def self.run_queue!
@@ -34,29 +35,30 @@ module LastFM
end
def self.artist_request method, node, q, limit = nil, page = nil, &block
request_params = default_params.merge( :method => "#{current_class_name}.#{method.to_s}", :artist => q, :limit => limit, :page => page )
request_params = default_params.merge( :method => "#{current_class_name}.#{method}", :artist => q, :limit => limit, :page => page )
create_and_queue_request method, node, block, request_params
end
def self.album_request method, node, q, artist = nil, limit = nil, page = nil, &block
request_params = default_params.merge( :method => "#{current_class_name}.#{method.to_s}", :album => q, :artist => artist, :limit => limit, :page => page )
request_params = default_params.merge( :method => "#{current_class_name}.#{method}", :album => q, :artist => artist, :limit => limit, :page => page )
create_and_queue_request method, node, block, request_params
end
def self.track_request method, node, q, artist = nil, limit = nil, page = nil, &block
request_params = default_params.merge( :method => "#{current_class_name}.#{method.to_s}", :track => q, :artist => artist, :limit => limit, :page => page )
request_params = default_params.merge( :method => "#{current_class_name}.#{method}", :track => q, :artist => artist, :limit => limit, :page => page )
create_and_queue_request method, node, block, request_params
end
def self.chart_request method, node, limit = nil, page = nil, &block
request_params = default_params.merge( :method => "#{current_class_name}.#{method.to_s}", :limit => limit, :page => page )
request_params = default_params.merge( :method => "#{current_class_name}.#{method}", :limit => limit, :page => page )
create_and_queue_request method, node, block, request_params
end
protected
def self.update_results key, hash
@@results[(key.to_sym)].update hash
def self.update_results keys, hash
puts "updated"
@@results[("#{keys[0]}_#{keys[1]}".to_sym)].update hash
end
def self.current_class_name
@@ -69,23 +71,23 @@ module LastFM
request = Typhoeus::Request.new(base_uri, :params => request_params) # :timeout => APP_CONFIG["request_timeout"],
handle_response request, method, node, block
puts ">> ---- '#{current_class_name}.#{method.to_s}' request is queued ----" if @@hydra.queue request
@@results[(current_class_name + "_" + method).to_sym] = Hashie::Mash.new
puts ">> ---- '#{current_class_name}.#{method}' request is queued ----" if @@hydra.queue request
@@results["#{current_class_name}_#{method}".to_sym] = Hashie::Mash.new
end
def self.handle_response request, method, node, block
request.on_complete do |response|
if response.success?
puts "<< ---- '#{current_class_name}.#{method.to_s}' -- TIME: #{response.time.to_s} ----"
puts "<< ---- '#{current_class_name}.#{method}' -- TIME: #{response.time} ----"
hash = Hashie::Mash.new(JSON.parse(response.body))
hash = method.to_s == "search" ? hash.results.send(node.to_sym) : hash.send(node.to_sym)
update_results "#{current_class_name}_#{method}", hash unless hash.blank?
update_results [current_class_name, method], hash if hash.present? and block.nil?
block.call( hash ) unless block.nil?
block.call(@@results[("#{current_class_name}_#{method}").to_sym]) unless block.nil?
elsif response.timed_out?
puts ">> -- '#{current_class_name}.#{method.to_s}' -- TIMED OUT -- <<"
puts ">> -- '#{current_class_name}.#{method}' -- TIMED OUT -- <<"
end
end
end
+2 -2
View File
@@ -1,11 +1,11 @@
module LastFM
class Track < LastFMRequest
class Track < Request
def self.search query, limit = nil, page = nil
track_request "search", "trackmatches", query, nil, limit, page do |result|
result = LastFM::Validator.validate_mash result
result = Hashie::Mash.new({ :track => [] }) if result.blank?
update_results "#{current_class_name}_#{__method__}", result
update_results [current_class_name, __method__], result
end
end