Class: AssetUploader

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

Defined Under Namespace

Classes: Uploader

Constant Summary collapse

SIGNATURE_LENGTH =
6
PADDING =
"x" * SIGNATURE_LENGTH
VERSION =
"0.0.3"

Instance Method Summary collapse

Constructor Details

#initialize(prefix, path_to_asset) ⇒ AssetUploader

Returns a new instance of AssetUploader.



10
11
12
13
14
# File 'lib/asset_uploader.rb', line 10

def initialize(prefix, path_to_asset)
  @prefix = prefix
  @path_to_asset = path_to_asset
  @original_file_name = @target_file_name = File.basename(@path_to_asset)
end

Instance Method Details

#signObject



16
17
18
19
20
21
22
23
# File 'lib/asset_uploader.rb', line 16

def sign
  content = File.read(@path_to_asset)
  digest  = Digest::SHA1.digest(content)
  digest  = digest.unpack("q").first
  digest  = -digest if digest < 0
  digest  =  "#{digest.to_s(36)}#{PADDING}"[0, SIGNATURE_LENGTH]
  @target_file_name = @original_file_name.sub(/\.(\w+)$/) { "__#{digest}__.#{$1}" }
end

#target_pathObject



25
26
27
# File 'lib/asset_uploader.rb', line 25

def target_path
  File.join(@prefix, @target_file_name)
end

#uploadObject



29
30
31
32
33
34
# File 'lib/asset_uploader.rb', line 29

def upload
  require "asset_uploader/uploader"    # Defer because we don't need S3 keys just to sign
  uploader = Uploader.new
  path = uploader.do_upload(target_path, @path_to_asset)
  path.sub(/s3.amazonaws.com\//, '').sub(/\?AWS.*/, '').sub(/-origin/, '')
end