Module: RR::CachedHttp

Defined in:
lib/refined-refinements/cached_http.rb

Class Method Summary collapse

Class Method Details

.cache_dirObject



10
11
12
# File 'lib/refined-refinements/cached_http.rb', line 10

def self.cache_dir
  @cache_dir || '/tmp'
end

.cache_dir=(cache_dir) ⇒ Object



14
15
16
# File 'lib/refined-refinements/cached_http.rb', line 14

def self.cache_dir=(cache_dir)
  @cache_dir = cache_dir
end

.cache_path(url) ⇒ Object



26
27
28
# File 'lib/refined-refinements/cached_http.rb', line 26

def self.cache_path(url)
  File.join(self.cache_dir, Base64.encode64(url).chomp.split("\n").last)
end

.fetch(url) ⇒ Object



50
51
52
53
54
55
56
# File 'lib/refined-refinements/cached_http.rb', line 50

def self.fetch(url)
  open(url).read.tap do |fetched_data|
    File.open(self.cache_path(url), 'w') do |file|
      file.write(fetched_data)
    end
  end
end

.get(url) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
# File 'lib/refined-refinements/cached_http.rb', line 30

def self.get(url)
  if self.offline?
    self.retrieve_from_cache(url)
  else
    self.fetch(url)
  end
rescue SocketError
  self.retrieve_from_cache(url, true)
rescue Exception => e
  p [:e, e]; raise e
end

.offline=(boolean) ⇒ Object



22
23
24
# File 'lib/refined-refinements/cached_http.rb', line 22

def self.offline=(boolean)
  @offline = boolean
end

.offline?Boolean

Returns:

  • (Boolean)


18
19
20
# File 'lib/refined-refinements/cached_http.rb', line 18

def self.offline?
  @offline
end

.retrieve_from_cache(url, tried_to_fetch = false) ⇒ Object



42
43
44
45
46
47
48
# File 'lib/refined-refinements/cached_http.rb', line 42

def self.retrieve_from_cache(url, tried_to_fetch = false)
  if File.exist?(self.cache_path(url))
    File.read(self.cache_path(url))
  else
    raise "URL #{url} is not cached#{" and can't be fetched" if tried_to_fetch}."
  end
end