comparison app/lib/cached_fetch.rb @ 264:4f86037f6e6a

Identifiable rate limited client
author nanaya <me@nanaya.net>
date Sun, 09 Feb 2025 03:48:26 +0900
parents c800506ae799
children
comparison
equal deleted inserted replaced
263:2fc76c51e184 264:4f86037f6e6a
1 module CachedFetch 1 module CachedFetch
2 def self.timeline(user_id) 2 def self.timeline(user_id)
3 cached("timeline:#{user_id}") { LegitClient.timeline(user_id)&.[](:timeline) } 3 cached("timeline:#{user_id}") { LegitClient.new.timeline(user_id)&.[](:timeline) }
4 end 4 end
5 5
6 def self.user_by_id(user_id) 6 def self.user_by_id(user_id)
7 cached("user_by_id:#{user_id}") { LegitClient.user_by_id(user_id)&.[](:user) } 7 cached("user_by_id:#{user_id}") { LegitClient.new.user_by_id(user_id)&.[](:user) }
8 end 8 end
9 9
10 def self.user_by_username(username) 10 def self.user_by_username(username)
11 cached("user_by_username:#{username}") { LegitClient.user_by_username(username)&.[](:user) } 11 cached("user_by_username:#{username}") { LegitClient.new.user_by_username(username)&.[](:user) }
12 end 12 end
13 13
14 def self.cached(key, &block) 14 def self.cached(key, &block)
15 Rails.cache.fetch(key, expires_in: (15 + rand(60)).minutes, &block) 15 Rails.cache.fetch(key, expires_in: (15 + rand(60)).minutes, &block)
16 end 16 end