From 7fcddbabd5ea909a168c83ecc16b3781ba89365a Mon Sep 17 00:00:00 2001 From: Gregory Eremin Date: Sun, 26 Aug 2012 18:07:37 +0400 Subject: [PATCH] Safe attributes, api limits support --- README.md | 6 +++++- lib/robbie.rb | 4 ++++ lib/robbie/models/album.rb | 2 +- lib/robbie/models/artist.rb | 2 +- lib/robbie/models/track.rb | 4 ++++ lib/robbie/parsers/album.rb | 4 +++- lib/robbie/parsers/base_parser.rb | 17 +++++++++++++++-- 7 files changed, 33 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index dd51788..1013053 100644 --- a/README.md +++ b/README.md @@ -38,7 +38,11 @@ foo = Robbie::Artist.find_by_name("foo fighters") foo = Robbie::Artist.find("MN0000184043") foo.albums.last -# +# # ...or directly by id Robbie::Album.find("MW0002115022") diff --git a/lib/robbie.rb b/lib/robbie.rb index 65a61c6..40cb9f6 100644 --- a/lib/robbie.rb +++ b/lib/robbie.rb @@ -36,5 +36,9 @@ module Robbie def cache_enabled? @@cache_enabled end + + def free_limits? + true + end end end diff --git a/lib/robbie/models/album.rb b/lib/robbie/models/album.rb index 97fdf49..48efdfd 100644 --- a/lib/robbie/models/album.rb +++ b/lib/robbie/models/album.rb @@ -13,7 +13,7 @@ module Robbie end def tracks - @tracks ||= Parsers::Album.find(id).tracks + @tracks ||= Parsers::Album.find(id).tracks || [] end end end diff --git a/lib/robbie/models/artist.rb b/lib/robbie/models/artist.rb index 0fa5a6b..be91783 100644 --- a/lib/robbie/models/artist.rb +++ b/lib/robbie/models/artist.rb @@ -17,7 +17,7 @@ module Robbie end def albums - @albums ||= Parsers::Artist.find(id).albums + @albums ||= Parsers::Artist.find(id).albums || [] end end end diff --git a/lib/robbie/models/track.rb b/lib/robbie/models/track.rb index ca2f0b8..ab68f3e 100644 --- a/lib/robbie/models/track.rb +++ b/lib/robbie/models/track.rb @@ -7,5 +7,9 @@ module Robbie Parsers::Track.find(id) end end + + def artists + @artists || [] + end end end diff --git a/lib/robbie/parsers/album.rb b/lib/robbie/parsers/album.rb index 674c530..879d2da 100644 --- a/lib/robbie/parsers/album.rb +++ b/lib/robbie/parsers/album.rb @@ -36,8 +36,10 @@ module Robbie params = {} params[:id] = data["ids"]["albumId"] if data["ids"] params[:title] = data["title"] - if data["album"] && data["originalReleaseDate"].is_a?(String) + if data["originalReleaseDate"].is_a?(String) params[:year] = data["originalReleaseDate"].split("-").first + elsif data["year"].is_a?(String) + params[:year] = data["year"].split("-").first end Robbie::Album.new(params) diff --git a/lib/robbie/parsers/base_parser.rb b/lib/robbie/parsers/base_parser.rb index 28e17ba..40a27de 100644 --- a/lib/robbie/parsers/base_parser.rb +++ b/lib/robbie/parsers/base_parser.rb @@ -4,6 +4,7 @@ module Robbie include HTTParty base_uri "api.rovicorp.com" format :json + @@calls = [] class << self def sig @@ -25,16 +26,28 @@ module Robbie if File.exist?(cache_file) MultiJson.load(File.open(cache_file).read) else - data = get("#{path}?#{params_str}") + data = load("#{path}?#{params_str}") File.open(cache_file, "w") do |file| file.write(MultiJson.dump(data)) unless data.nil? or data.empty? end data end else - get("#{path}?#{params_str}") + load("#{path}?#{params_str}") end end + + def load(uri) + if Robbie.free_limits? + @@calls = @@calls.length > 5 ? @@calls.slice(-5, 5) : @@calls + if @@calls.length > 5 && Time.now.to_f - @@calls.first <= 1.0 + sleep(1.05 - (Time.now.to_f - @@calls.first)) + end + @@calls << Time.now.to_f + end + + get(uri) + end end end end