Class: Tupper

Inherits:
Object
  • Object
show all
Defined in:
lib/tupper.rb,
lib/tupper/version.rb

Constant Summary collapse

DEFAULT_TMP_DIR =
File.join(%w{ / tmp tupper })
SESSION_STORE_KEY =
'tupper_file_info'
VERSION =
"1.0.3"

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(session) ⇒ Tupper

Returns a new instance of Tupper.



11
12
13
14
15
16
17
18
19
20
21
# File 'lib/tupper.rb', line 11

def initialize session
  @session = session
  unless ((json = @session.fetch(SESSION_STORE_KEY, '')).empty?)
    begin
      @file_info = JSON.parse(json)
    rescue
      @session.delete(SESSION_STORE_KEY)
      raise RuntimeError.new('invalid session data')
    end
  end
end

Instance Attribute Details

#file_infoObject (readonly)

Returns the value of attribute file_info.



9
10
11
# File 'lib/tupper.rb', line 9

def file_info
  @file_info
end

Instance Method Details

#cleanupObject



59
60
61
62
63
# File 'lib/tupper.rb', line 59

def cleanup
  File.unlink uploaded_file if has_uploaded_file?
  @session.delete SESSION_STORE_KEY
  @file_info = nil
end

#has_uploaded_file?Boolean

Returns:

  • (Boolean)


32
33
34
# File 'lib/tupper.rb', line 32

def has_uploaded_file?
  @file_info && File.exists?(@file_info.fetch("uploaded_file", ''))
end

#original_fileObject



55
56
57
# File 'lib/tupper.rb', line 55

def original_file
  (@file_info || {}).fetch('original_file', nil)
end

#temp_dirObject



28
29
30
# File 'lib/tupper.rb', line 28

def temp_dir
  @temp_dir || DEFAULT_TMP_DIR
end

#temp_dir=(temp_dir) ⇒ Object



23
24
25
26
# File 'lib/tupper.rb', line 23

def temp_dir= temp_dir
  FileUtils.mkdir_p temp_dir
  @temp_dir = temp_dir
end

#upload(file_info) ⇒ Object



36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/tupper.rb', line 36

def upload file_info
  unless @temp_dir
    self.temp_dir = DEFAULT_TMP_DIR
  end

  file_hash = "#{Time.now.to_i}_#{Digest::MD5.hexdigest(file_info[:filename]).slice(0, 8)}"
  uploaded_file = File.join(temp_dir, file_hash + File.extname(file_info[:filename]))
  FileUtils.copy(file_info[:tempfile], uploaded_file)
  @file_info = {
    'uploaded_file' => uploaded_file,
    'original_file' => file_info[:filename],
  }
  @session.store SESSION_STORE_KEY, @file_info.to_json
end

#uploaded_fileObject



51
52
53
# File 'lib/tupper.rb', line 51

def uploaded_file
  (@file_info || {}).fetch('uploaded_file', nil)
end