Class: AllSeeingPi::Uploader

Inherits:
Object
  • Object
show all
Defined in:
lib/all_seeing_pi/uploader.rb

Constant Summary collapse

DIRECTORY_PREFIX =
'all-seeing-pi'

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeUploader

Returns a new instance of Uploader.



9
10
11
12
13
14
15
# File 'lib/all_seeing_pi/uploader.rb', line 9

def initialize
  @client = Fog::Storage.new(
    provider: 'AWS',
    aws_access_key_id: AllSeeingPi.config[:aws_key],
    aws_secret_access_key: AllSeeingPi.config[:aws_secret]
  )
end

Instance Attribute Details

#clientObject (readonly)

Returns the value of attribute client.



7
8
9
# File 'lib/all_seeing_pi/uploader.rb', line 7

def client
  @client
end

Instance Method Details

#directory_idObject



37
38
39
# File 'lib/all_seeing_pi/uploader.rb', line 37

def directory_id
  Time.now.to_f.to_s.split('.').join.to_i
end

#fetch_or_create_directory_name(directories) ⇒ Object



28
29
30
31
32
33
34
35
# File 'lib/all_seeing_pi/uploader.rb', line 28

def fetch_or_create_directory_name(directories)
  directory_name = directories.map do |directory|
    key = directory.key
    key if key.match /#{DIRECTORY_PREFIX}/
  end.compact.first

  AllSeeingPi.config[:directory_name] ||= "#{DIRECTORY_PREFIX}-#{directory_id}"
end

#upload(image_path) ⇒ Object



17
18
19
20
21
22
23
24
25
26
# File 'lib/all_seeing_pi/uploader.rb', line 17

def upload(image_path)
  directories = client.directories

  directory_name = fetch_or_create_directory_name(directories)
  directory = directories.get(directory_name) || directories.create(key: directory_name)

  filename = File.basename(image_path)
  image = directory.files.create(key: filename, body: File.open(image_path), public: true)
  image.public_url
end