name changes + refactoring in LastFM lib
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
ActionDispatch::Callbacks.to_prepare do
|
||||
LastFM::Request::api_key = APP_CONFIG['lastfm_api_key']
|
||||
end
|
||||
@@ -1,3 +0,0 @@
|
||||
ActionDispatch::Callbacks.to_prepare do
|
||||
LastFM::LastFMRequest::api_key = APP_CONFIG['lastfm_api_key']
|
||||
end
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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,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
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user