Class: DaimonSkycrawlers::Storage::File

Inherits:
Base
  • Object
show all
Defined in:
lib/daimon_skycrawlers/storage/file.rb

Overview

Storage for files

Defined Under Namespace

Classes: Page

Instance Method Summary collapse

Constructor Details

#initialize(base_dir) ⇒ File

Returns a new instance of File.



9
10
11
12
# File 'lib/daimon_skycrawlers/storage/file.rb', line 9

def initialize(base_dir)
  super()
  @base_dir = Pathname(base_dir)
end

Instance Method Details

#read(message) ⇒ DaimonSkycrawlers::Storage::File::Page

Read data from files under base directory

Parameters:

  • message (Hash)

    this hash can include :url, :key to find page

Returns:



45
46
47
48
49
50
51
# File 'lib/daimon_skycrawlers/storage/file.rb', line 45

def read(message)
  url = message[:url]
  key = message[:key]
  headers = JSON.parse(headers_path(url, key).read)
  body = body_path(url, key).read
  Page.new(url, key, headers, body, headers["last-modified"], headers["etag"])
end

#save(data) ⇒ Object

Save data to files under base directory

Parameters:

  • data (Hash)

    data has following keys

    • :url: URL
    • :message: Given message
    • :response: HTTP response


22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/daimon_skycrawlers/storage/file.rb', line 22

def save(data)
  url = data[:url]
  message = data[:message]
  key = message[:key]
  response = data[:response]
  headers = response.headers
  body = response.body
  @base_dir.mkpath
  body_path(url, key).dirname.mkpath
  body_path(url, key).open("wb+") do |file|
    file.write(body)
  end
  headers_path(url, key).open("wb+") do |file|
    file.write(JSON.generate(headers))
  end
end