Class: CloudDoor::CloudStorage

Inherits:
Object
  • Object
show all
Defined in:
lib/cloud_door/cloud_storage.rb

Direct Known Subclasses

Dropbox, GoogleDrive, OneDrive

Constant Summary collapse

PARENT_DIR_PAT =

regular expression pattern of parent directory

/..\//
PICK_METHODS =
%w(request_user request_dir request_file)
ABSTRACT_METHODS =

there is abstract method. should define there method

%w(
  load_token
  login
  request_user
  request_dir
  request_file
  request_download
  request_upload
  request_delete
  request_mkdir
  pull_files
  format_property
)

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeCloudStorage

Returns a new instance of CloudStorage.



41
42
43
44
# File 'lib/cloud_door/cloud_storage.rb', line 41

def initialize
  # should make inherited subclass
  raise AbstractClassException
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method, *args) ⇒ Object



46
47
48
49
50
51
52
# File 'lib/cloud_door/cloud_storage.rb', line 46

def method_missing(method, *args)
  if ABSTRACT_METHODS.include?(method.to_s)
    raise AbstractMethodException, "'#{method.to_s}' is abstract method. please define on subclass."
  else
    super
  end
end

Instance Attribute Details

#root_idObject

Returns the value of attribute root_id.



21
22
23
# File 'lib/cloud_door/cloud_storage.rb', line 21

def root_id
  @root_id
end

#storage_nameObject

Returns the value of attribute storage_name.



21
22
23
# File 'lib/cloud_door/cloud_storage.rb', line 21

def storage_name
  @storage_name
end

Instance Method Details

#assign_upload_file_name(file_name) ⇒ Object



234
235
236
237
238
239
240
# File 'lib/cloud_door/cloud_storage.rb', line 234

def assign_upload_file_name(file_name)
  if File.directory?(file_name)
    "#{file_name}.zip"
  else
    file_name
  end
end

#change_directory(file_name) ⇒ Object



114
115
116
117
118
119
120
121
122
123
124
# File 'lib/cloud_door/cloud_storage.rb', line 114

def change_directory(file_name)
  raise FileNameEmptyException if file_name.nil? || file_name.empty?
  @file_name = file_name
  raise SetIDException unless set_file_id
  raise NotDirectoryException if file?(file_name)
  items = pull_files
  @file_list.write_file_list(items, @file_id, @file_name)
  items
rescue => e
  handle_exception(e)
end

#configuration_init?Boolean

Returns:

  • (Boolean)


66
67
68
# File 'lib/cloud_door/cloud_storage.rb', line 66

def configuration_init?
  @config.init?
end

#delete_file(file_name) ⇒ Object



176
177
178
179
180
181
182
183
184
185
186
187
# File 'lib/cloud_door/cloud_storage.rb', line 176

def delete_file(file_name)
  @file_name = file_name
  raise FileNameEmptyException if @file_name.nil? || @file_name.empty?
  raise SetIDException unless set_file_id
  # if not raise error, judge that's success
  request_delete
  @parent_id = pull_parent_id
  update_file_list
  true
rescue => e
  handle_exception(e)
end

#download_file(file_name) ⇒ Object



144
145
146
147
148
149
150
151
152
153
# File 'lib/cloud_door/cloud_storage.rb', line 144

def download_file(file_name)
  raise FileNameEmptyException if file_name.nil? || file_name.empty?
  @file_name = file_name
  raise SetIDException unless set_file_id
  raise NotFileException unless file?(file_name)
  request_download
  File.exist?(@file_name)
rescue => e
  handle_exception(e)
end

#file?(file_name) ⇒ Boolean

Returns:

  • (Boolean)


226
227
228
229
230
231
232
# File 'lib/cloud_door/cloud_storage.rb', line 226

def file?(file_name)
  return false if file_name.nil? || file_name.empty?
  return false if file_name =~ PARENT_DIR_PAT
  properties = @file_list.pull_file_properties(file_name)
  return false unless properties
  properties['type'] == 'file' ? true : false
end

#file_exist?(file_name) ⇒ Boolean

Returns:

  • (Boolean)


201
202
203
204
205
206
207
208
209
210
211
212
# File 'lib/cloud_door/cloud_storage.rb', line 201

def file_exist?(file_name)
  if file_name =~ PARENT_DIR_PAT
    return !@file_list.top?(file_name)
  end
  @parent_id = pull_parent_id
  items = pull_files
  @parent_id = nil
  return false if items.empty? || !items.is_a?(Hash)
  items.key?(file_name)
rescue => e
  handle_exception(e)
end

#has_file?(file_name) ⇒ Boolean

Returns:

  • (Boolean)


214
215
216
217
218
219
220
221
222
223
224
# File 'lib/cloud_door/cloud_storage.rb', line 214

def has_file?(file_name)
  raise FileNameEmptyException if file_name.nil? || file_name.empty?
  @file_name = file_name
  raise SetIDException unless set_file_id
  return false if file?(file_name)
  items = pull_files
  raise NoDataException if items.nil? || !items.is_a?(Hash)
  (items.count > 0)
rescue => e
  handle_exception(e)
end

#isset_account?Boolean

Returns:

  • (Boolean)


78
79
80
# File 'lib/cloud_door/cloud_storage.rb', line 78

def isset_account?
  @account.isset_account?
end

#make_directory(mkdir_name) ⇒ Object



189
190
191
192
193
194
195
196
197
198
199
# File 'lib/cloud_door/cloud_storage.rb', line 189

def make_directory(mkdir_name)
  @mkdir_name = mkdir_name
  raise DirectoryNameEmptyException if @mkdir_name.nil? || @mkdir_name.empty?
  @parent_id = pull_parent_id
  # if not raise error, judge that's success
  request_mkdir
  update_file_list
  true
rescue => e
  handle_exception(e)
end

#reset_token(token_value) ⇒ Object



82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# File 'lib/cloud_door/cloud_storage.rb', line 82

def reset_token(token_value)
  raise TokenClassException unless @token.is_a?(Token)
  @token.set_attributes(token_value)
  session_id = nil
  if @config.session_use?
    cgi        = CGI.new
    session    = CGI::Session.new(cgi)
    session_id = session.session_id
    @token.set_locate(session_id)
    @file_list.set_locate(session_id)
  end
  @token.write_token
  session_id
rescue => e
  handle_exception(e)
end

#show_accountObject



70
71
72
# File 'lib/cloud_door/cloud_storage.rb', line 70

def 
  @account
end

#show_configurationObject



58
59
60
# File 'lib/cloud_door/cloud_storage.rb', line 58

def show_configuration
  @config
end

#show_current_directoryObject



126
127
128
# File 'lib/cloud_door/cloud_storage.rb', line 126

def show_current_directory
  @file_list.pull_current_dir
end

#show_files(file_name = nil) ⇒ Object



105
106
107
108
109
110
111
112
# File 'lib/cloud_door/cloud_storage.rb', line 105

def show_files(file_name = nil)
  @file_name = file_name
  raise SetIDException unless set_file_id
  raise NotDirectoryException if file?(file_name)
  pull_files
rescue => e
  handle_exception(e)
end

#show_property(file_name) ⇒ Object



130
131
132
133
134
135
136
137
138
139
140
141
142
# File 'lib/cloud_door/cloud_storage.rb', line 130

def show_property(file_name)
  raise FileNameEmptyException if file_name.nil? || file_name.empty?
  @file_name = file_name
  raise SetIDException unless set_file_id
  unless file_exist?(file_name)
    raise FileNotExistsException, "'#{@file_name}' is not exists on cloud."
  end
  info = request_file
  raise NoDataException if info.nil? || !info.is_a?(Hash)
  format_property(info)
rescue => e
  handle_exception(e)
end

#show_storage_nameObject



54
55
56
# File 'lib/cloud_door/cloud_storage.rb', line 54

def show_storage_name
  @storage_name
end

#show_userObject



99
100
101
102
103
# File 'lib/cloud_door/cloud_storage.rb', line 99

def show_user
  request_user
rescue => e
  handle_exception(e)
end

#update_account(accounts) ⇒ Object



74
75
76
# File 'lib/cloud_door/cloud_storage.rb', line 74

def (accounts)
  @account.update_yaml(accounts)
end

#update_configuration(configs) ⇒ Object



62
63
64
# File 'lib/cloud_door/cloud_storage.rb', line 62

def update_configuration(configs)
  @config.update_yaml(configs)
end

#upload_file(file_name) ⇒ Object



155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
# File 'lib/cloud_door/cloud_storage.rb', line 155

def upload_file(file_name)
  @up_file_name = file_name
  raise FileNameEmptyException if @up_file_name.nil? || @up_file_name.empty?
  unless File.exist?(@up_file_name)
    raise FileNotExistsException, "'#{@up_file_name}' is not exists on local."
  end
  @parent_id = pull_parent_id
  up_file = assign_upload_file_name(file_name)
  compress_file if File.directory?(@up_file_name)
  # if not raise error, judge that's success
  request_upload(up_file)
  update_file_list
  File.delete(up_file) if File.directory?(@up_file_name)
  true
rescue => e
  unless e.is_a?(FileNameEmptyException)
    File.delete(up_file) if File.directory?(@up_file_name)
  end
  handle_exception(e)
end