Module: Dag::Client::API::Storage

Included in:
Dag::Client::API
Defined in:
lib/dag/client/api/storage.rb

Defined Under Namespace

Classes: Import, MultipartUpload

Instance Method Summary collapse

Instance Method Details

#bucketsObject



8
9
10
11
# File 'lib/dag/client/api/storage.rb', line 8

def buckets
  xml_doc = execute_storage(RestParameter.new(:get, '/'))
  Dag::Client::API::BucketsResult.new(xml_doc)
end

#create_bucket(bucket) ⇒ Object



36
37
38
39
# File 'lib/dag/client/api/storage.rb', line 36

def create_bucket(bucket)
  resource = '/'
  execute_storage(RestParameter.new(:put, resource, bucket: bucket, content_type: 'application/json'))
end

#create_multipart_object(bucket, object_name, options = {}, &block) ⇒ Object



50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/dag/client/api/storage.rb', line 50

def create_multipart_object(bucket, object_name, options = {}, &block)
  mu = MultipartUpload.new(bucket, object_name, options) do
    self
  end

  # Initiate Multipart Upload
  upload_id = mu.initiate_multipart_upload

  begin
    # Upload Part
    upload_objects = mu.upload_part(upload_id, &block)

    # Complete Multipart Upload
    mu.complete_multipart_upload(upload_id, upload_objects)

  rescue => e
    # Abort Multipart Upload
    mu.abort_multipart_upload(upload_id)

    raise e
  end
end

#create_object(bucket, object_name, options = {}, &block) ⇒ Object



41
42
43
44
45
46
47
48
# File 'lib/dag/client/api/storage.rb', line 41

def create_object(bucket, object_name, options = {}, &block)
  resource = "/#{object_name}"

  type = MIME::Types.type_for(object_name).first
  content_type = type ? type.to_s : 'application/octet-stream'
  options = options.merge(bucket: bucket, content_type: content_type)
  execute_storage(RestParameter.new(:put, resource, options), &block)
end

#delete_bucket(bucket) ⇒ Object



84
85
86
87
# File 'lib/dag/client/api/storage.rb', line 84

def delete_bucket(bucket)
  resource = '/'
  execute_storage(RestParameter.new(:delete, resource, bucket: bucket))
end

#delete_object(bucket, object) ⇒ Object



89
90
91
92
# File 'lib/dag/client/api/storage.rb', line 89

def delete_object(bucket, object)
  resource = "/#{object}"
  execute_storage(RestParameter.new(:delete, resource, bucket: bucket, content_type: 'application/json'))
end

#get_object(bucket, object, range = nil) ⇒ Object



73
74
75
76
77
78
79
80
81
82
# File 'lib/dag/client/api/storage.rb', line 73

def get_object(bucket, object, range = nil)
  resource = "/#{object}"
  headers = {}
  if range
    bt = "bytes=#{range.first}-"
    bt += "#{range.last}" if range.last != -1
    headers[:Range] = bt
  end
  execute_storage(RestParameter.new(:get, resource, bucket: bucket, raw_data: true, headers: headers))
end

#import(db_name, tbl_name, file_paths, options = {}) ⇒ Object



94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
# File 'lib/dag/client/api/storage.rb', line 94

def import(db_name, tbl_name, file_paths, options = {})
  _import = Import.new(db_name, tbl_name, file_paths, options) do
    self
  end

  # calc label suffix => Fixnum
  suffix = _import.calc_label_suffix

  # import execute
  upload_objects = _import.execute(suffix)

  STDERR.puts "finished upload #{upload_objects.size} objects."
  STDERR.puts
  STDERR.puts 'upload_objects:'
  upload_objects.each do |o|
    STDERR.puts o
  end
end

#objects(bucket, prefix: nil, max: nil, marker: nil, delimiter: nil) ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/dag/client/api/storage.rb', line 13

def objects(bucket, prefix: nil, max: nil, marker: nil, delimiter: nil)
  resource = '/'
  query_params = {}
  if prefix
    query_params.merge!('prefix' => prefix)
  end

  if max
    query_params.merge!('max-keys' => max)
  end

  if marker
    query_params.merge!('marker' => marker)
  end

  if delimiter
    query_params.merge!('delimiter' => delimiter)
  end

  xml_doc = execute_storage(RestParameter.new(:get, resource, bucket: bucket, query_params: query_params))
  Dag::Client::API::ObjectsResult.new(xml_doc)
end