cloud_door 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +23 -0
  3. data/.travis.yml +4 -0
  4. data/Gemfile +4 -0
  5. data/Guardfile +7 -0
  6. data/LICENSE.txt +22 -0
  7. data/README.md +204 -0
  8. data/Rakefile +11 -0
  9. data/bin/dropbox +133 -0
  10. data/bin/onedrive +133 -0
  11. data/cloud_door.gemspec +38 -0
  12. data/cloud_door_config.yml +12 -0
  13. data/data/.gitkeep +0 -0
  14. data/data/testlist +0 -0
  15. data/lib/cloud_door.rb +114 -0
  16. data/lib/cloud_door/account.rb +27 -0
  17. data/lib/cloud_door/cloud_storage.rb +294 -0
  18. data/lib/cloud_door/cloud_yaml.rb +45 -0
  19. data/lib/cloud_door/config.rb +61 -0
  20. data/lib/cloud_door/console.rb +334 -0
  21. data/lib/cloud_door/dropbox.rb +166 -0
  22. data/lib/cloud_door/exceptions.rb +153 -0
  23. data/lib/cloud_door/file_list.rb +164 -0
  24. data/lib/cloud_door/onedrive.rb +180 -0
  25. data/lib/cloud_door/onedrive_api.rb +169 -0
  26. data/lib/cloud_door/token.rb +67 -0
  27. data/lib/cloud_door/version.rb +3 -0
  28. data/log/.gitkeep +0 -0
  29. data/spec/cloud_door/account_spec.rb +96 -0
  30. data/spec/cloud_door/cloud_storage_spec.rb +10 -0
  31. data/spec/cloud_door/cloud_yaml_spec.rb +32 -0
  32. data/spec/cloud_door/config_spec.rb +95 -0
  33. data/spec/cloud_door/console_spec.rb +633 -0
  34. data/spec/cloud_door/dropbox_spec.rb +625 -0
  35. data/spec/cloud_door/file_list_spec.rb +451 -0
  36. data/spec/cloud_door/onedrive_api_spec.rb +256 -0
  37. data/spec/cloud_door/onedrive_spec.rb +652 -0
  38. data/spec/cloud_door/token_spec.rb +81 -0
  39. data/spec/fabricators/account_fabricator.rb +5 -0
  40. data/spec/fabricators/cloud_yaml_fabricator.rb +5 -0
  41. data/spec/fabricators/config_fabrication.rb +5 -0
  42. data/spec/fabricators/token_fabricator.rb +10 -0
  43. data/spec/spec_helper.rb +55 -0
  44. metadata +380 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: caf57815f0cdd5cd8a83a379407fa1025406ea4d
4
+ data.tar.gz: 0121e8b37b6bde073502bd932b1e8cd6abeb231f
5
+ SHA512:
6
+ metadata.gz: d74ad868c208e4f83b075d7e163b9e211955a5836adc207e886d0c36c4e54f403f53f93f62cc08aa65c63b3d75bc6f64a58115dba634bb58b4e47d4c6ea3a020
7
+ data.tar.gz: e3dd3881346ddd873f9b04fdd98749c35d120326fa54f8be43aefcc72f3c8d89e821144d738dd0273cc792ea9d601fe2f2e1421c08c8f220507dbdac5b9168fe
@@ -0,0 +1,23 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ *.bundle
19
+ *.so
20
+ *.o
21
+ *.a
22
+ mkmf.log
23
+ *.swp
@@ -0,0 +1,4 @@
1
+ language: ruby
2
+ rvm:
3
+ - "2.1.1"
4
+ script: bundle exec rake spec
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in cloud_door.gemspec
4
+ gemspec
@@ -0,0 +1,7 @@
1
+ guard :rspec do
2
+ watch(%r{^spec/.+_spec\.rb$})
3
+ watch(%r{^spec/cloud_door_spec/.+_spec\.rb$})
4
+ watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
5
+ watch(%r{^lib/cloud_door/(.+)\.rb$}) { |m| "spec/cloud_door/#{m[1]}_spec.rb" }
6
+ watch('spec/spec_helper.rb') { 'spec' }
7
+ end
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 k-hibi
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,204 @@
1
+ # CloudDoor
2
+
3
+ This gem can access different cloud storage through same interface.
4
+ This gem supports OneDrive and Dropbox, now.
5
+ It will be supported also google drive in the future.
6
+
7
+
8
+ ## Installation
9
+
10
+ Add this line to your application's Gemfile:
11
+
12
+ gem 'cloud_door'
13
+
14
+ And then execute:
15
+
16
+ $ bundle
17
+
18
+ Or install it yourself as:
19
+
20
+ $ gem install cloud_door
21
+
22
+
23
+ ## usage
24
+
25
+ ### prepare
26
+
27
+ This gem use cloud storage application setting.
28
+ Please create application on below url.
29
+
30
+ |storage|url|
31
+ |-------|---|
32
+ |OneDrive|https://account.live.com/developers/applications/index|
33
+ |Dropbox|https://www.dropbox.com/developers/apps/create|
34
+
35
+ ### configuration
36
+ 1. make "cloud_door_config.yml" on application root directory.
37
+ 2. write application settings to "cloud_door_config.yml".
38
+ - all
39
+ - data_path
40
+ data_path is path to save data file.
41
+ application must have write permission to data_path.
42
+ - session_flg
43
+ Whether or not to switch the session for each user.
44
+ "0" is "no" and "1" is "yes".
45
+ must be a "1" in an environment where multiple users use application at same time.
46
+ - onedrive
47
+ - client_id
48
+ OneDrive's client id
49
+ - client_secret
50
+ OneDrive's client secret
51
+ - redirect_url
52
+ OneDrive's redirect url after login.
53
+ please set to "https://login.live.com/oauth20_desktop.srf" for desktop apps.
54
+ - dropbox
55
+ - client_id
56
+ Dropbox's client id
57
+ - client_secret
58
+ Dropbox's client secret
59
+ - redirect_url
60
+ Dropbox's redirect url after login.
61
+ please set to "https://localhost" for desktop apps.
62
+
63
+ example
64
+ ```
65
+ all:
66
+ data_path : './data/'
67
+ web_app_flag: 0
68
+ onedrive:
69
+ client_id: onedrive
70
+ client_secret: onedrive_secret
71
+ redirect_url: https://login.live.com/oauth20_desktop.srf
72
+ dropbox:
73
+ client_id: dropbox
74
+ client_secret: dropbox_secret
75
+ redirect_url: http://localhost
76
+ ```
77
+
78
+
79
+ ### example
80
+
81
+ A.before login
82
+ ```ruby
83
+ require 'cloud_door'
84
+ require 'pp'
85
+
86
+ # make an instance for connecting to Onedrive
87
+ storage = CloudDoor::CloudDoor.new(CloudDoor::OneDrive)
88
+ # make an instance for connecting to Dropbox
89
+ # storage = CloudDoor::CloudDoor.new(CloudDoor::Dropbox)
90
+ # login
91
+ storage.login('account', 'password')
92
+ # show files
93
+ files = storage.show_files
94
+ pp files
95
+ # upload file
96
+ storage.upload_file('README.md')
97
+ # download file
98
+ storage.download_file('README.md')
99
+ ```
100
+
101
+ B.after login
102
+ ```ruby
103
+ require 'cloud_door'
104
+
105
+ storage = CloudDoor::CloudDoor.new(CloudDoor::OneDrive)
106
+ # load_token calls the login information of previous
107
+ storage.load_token
108
+ ```
109
+
110
+ C.if session_flag is "1"(using session ID)
111
+ ```ruby
112
+ require 'cloud_door'
113
+
114
+ # login
115
+ storage = CloudDoor::CloudDoor.new(CloudDoor::OneDrive)
116
+ session_id = storage.login('account', 'password')
117
+
118
+ # load_token
119
+ storage = CloudDoor::CloudDoor.new(CloudDoor::OneDrive, session_id)
120
+ storage.load_token
121
+
122
+ ```
123
+
124
+
125
+ ### methods
126
+ You can use these methods as instance method.
127
+ these methods can operate current directory only.
128
+ - login(login_account, login_password)
129
+ - login cloud storage.
130
+ - return the session ID after logging in if "session_flag" is "1".
131
+ please hold session ID by use of uri/session
132
+ - load_token
133
+ - load login session.
134
+ - show_user
135
+ - return login user information as Hash.
136
+ - show_files(file_name = nil)
137
+ - if file_name is nil, return files on current directory as Hash.
138
+ - if file_name is not nil, return files on specified directory as Hash.
139
+ - raise error if specified file not found.
140
+ - change_directory(file_name)
141
+ - change current directory to specified directory.
142
+ - return files on specified directory as Hash.
143
+ - raise error if specified file not found.
144
+ - show_current_directory
145
+ - return path of current directory.
146
+ - show_property(file_name)
147
+ - return properties of specified file as Hash.
148
+ - raise error if specified file not found.
149
+ - delete_file(file_name)
150
+ - delete specified file from cloud storage.
151
+ - cannot delete a directory that has files.
152
+ - raise error if specified file not found.
153
+ - download_file(file_name)
154
+ - download specified file from cloud storage to local.
155
+ - cannot download directory.
156
+ - overwrite file if there is a file with the same name.
157
+ please check before if you do not want to overwrite.
158
+ - raise error if specified file not found.
159
+ - upload_file(file_name)
160
+ - upload specified file to cloud storage from local.
161
+ - if specified file is a directory, Upload by zip compression automatically.
162
+ - overwrite file if there is a file with the same name.
163
+ please check before if you do not want to overwrite.
164
+ - raise error if specified file not found.
165
+ - make_directory(mkdir_name)
166
+ - make specified directory on cloud storage.
167
+ - raise error if there is a file with the same name.
168
+ - file_exist?(file_name)
169
+ - make sure the specified file exists in current directory.
170
+ return true if the specified file exists.
171
+ - has_file?(file_name)
172
+ - make sure the specified directory has files.
173
+ return true if the specified file has files.
174
+ - file?(file_name)
175
+ - make sure the specified file is file or a directory.
176
+ return true if the specified file has files.
177
+ - check if a file or directory is the corresponding element.
178
+ return true if the specified file is a file.
179
+ - show_storage_name
180
+ - return storage name which "OneDrive" or "Dropbox".
181
+ - show_configuration
182
+ - return settings on "cloud_door_config.yml" as Hash.
183
+ - update_configuration(configs)
184
+ - update settings on "cloud_door_config.yml".
185
+ - configuration_init?
186
+ - check if is set "cloud_door_config.yml".
187
+ return true if "cloud_door_config.yml" is set.
188
+ - show_account
189
+ - return registered account as Hash.
190
+ - update_account(accounts)
191
+ - update account.
192
+ - iseset_account?
193
+ - check if is set account.
194
+ return true if account is set.
195
+
196
+
197
+ ## Contributing
198
+
199
+ 1. Fork it ( https://github.com/KotaroHibi/cloud_door/fork )
200
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
201
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
202
+ 4. Push to the branch (`git push origin my-new-feature`)
203
+ 5. Create a new Pull Request
204
+
@@ -0,0 +1,11 @@
1
+ require "bundler/gem_tasks"
2
+
3
+ task :default => [:spec]
4
+ begin
5
+ require 'rspec/core/rake_task'
6
+ RSpec::Core::RakeTask.new(:spec) do |spec|
7
+ spec.pattern = 'spec/**/*_spec.rb'
8
+ spec.rspec_opts = ['-cfs']
9
+ end
10
+ rescue LoadError => e
11
+ end
@@ -0,0 +1,133 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rubygems'
4
+ require 'commander/import'
5
+ require 'cloud_door'
6
+
7
+ program :version, '0.0.1'
8
+ program :description, 'access dropbox from CLI'
9
+
10
+ command :config do |c|
11
+ c.syntax = 'dropbox config'
12
+ c.summary = 'configure the dropbox connection'
13
+ c.description = 'configure the dropbox connection'
14
+ c.example 'description', 'dropbox config'
15
+ c.option '-l'
16
+ c.action do |args, options|
17
+ console = CloudDoor::Console.new(CloudDoor::Dropbox)
18
+ console.config(options.l)
19
+ end
20
+ end
21
+
22
+ command :account do |c|
23
+ c.syntax = 'dropbox account'
24
+ c.summary = 'set account for the dropbox connection'
25
+ c.description = 'set account for the dropbox connection'
26
+ c.example 'description', 'dropbox accout'
27
+ # c.option '-b STR', String, 'Example of string'
28
+ c.option '-l'
29
+ c.action do |args, options|
30
+ console = CloudDoor::Console.new(CloudDoor::Dropbox)
31
+ console.account(options.l)
32
+ end
33
+ end
34
+
35
+ command :login do |c|
36
+ c.syntax = 'dropbox login'
37
+ c.summary = 'authentication for dropbox'
38
+ c.description = 'authentication for dropbox'
39
+ c.example 'description', 'dropbox login'
40
+ c.option '-d'
41
+ c.action do |args, options|
42
+ console = CloudDoor::Console.new(CloudDoor::Dropbox)
43
+ console.login(options.d)
44
+ end
45
+ end
46
+
47
+ command :ls do |c|
48
+ c.syntax = 'dropbox list [file_name]'
49
+ c.summary = 'list dropbox files'
50
+ c.description = 'list dropbox files'
51
+ c.example 'description', "dropbox list 'file'"
52
+ c.action do |args, options|
53
+ console = CloudDoor::Console.new(CloudDoor::Dropbox)
54
+ console.ls(args[0])
55
+ end
56
+ end
57
+
58
+ command :cd do |c|
59
+ c.syntax = 'dropbox cd [file_name]'
60
+ c.summary = 'change directory on dropbox'
61
+ c.description = 'change directory on dropbox'
62
+ c.example 'description', "dropbox cd 'file'"
63
+ c.action do |args, options|
64
+ console = CloudDoor::Console.new(CloudDoor::Dropbox)
65
+ console.cd(args[0])
66
+ end
67
+ end
68
+
69
+ command :info do |c|
70
+ c.syntax = 'dropbox info [file_name]'
71
+ c.summary = 'show dropbox file information'
72
+ c.description = 'show dropbox file information'
73
+ c.example 'description', "dropbox info 'file'"
74
+ c.action do |args, options|
75
+ console = CloudDoor::Console.new(CloudDoor::Dropbox)
76
+ console.info(args[0])
77
+ end
78
+ end
79
+
80
+ command :pwd do |c|
81
+ c.syntax = 'dropbox pwd'
82
+ c.summary = 'show current directory'
83
+ c.description = 'show current directory'
84
+ c.example 'description', "dropbox pwd"
85
+ c.action do |args, options|
86
+ console = CloudDoor::Console.new(CloudDoor::Dropbox)
87
+ console.pwd
88
+ end
89
+ end
90
+
91
+ command :download do |c|
92
+ c.syntax = 'dropbox download [file_name]'
93
+ c.summary = 'download file from dropbox'
94
+ c.description = 'download file from dropbox'
95
+ c.example 'description', "dropbox download 'file'"
96
+ c.action do |args, options|
97
+ console = CloudDoor::Console.new(CloudDoor::Dropbox)
98
+ console.download(args[0])
99
+ end
100
+ end
101
+
102
+ command :upload do |c|
103
+ c.syntax = 'dropbox upload [file_name]'
104
+ c.summary = 'upload file to dropbox'
105
+ c.description = 'upload file to dropbox'
106
+ c.example 'description', "dropbox upload 'file'"
107
+ c.action do |args, options|
108
+ console = CloudDoor::Console.new(CloudDoor::Dropbox)
109
+ console.upload(args[0])
110
+ end
111
+ end
112
+
113
+ command :rm do |c|
114
+ c.syntax = 'dropbox delete [file_name]'
115
+ c.summary = 'delete file on dropbox'
116
+ c.description = 'delete file on dropbox'
117
+ c.example 'description', "dropbox delete 'file'"
118
+ c.action do |args, options|
119
+ console = CloudDoor::Console.new(CloudDoor::Dropbox)
120
+ console.rm(args[0])
121
+ end
122
+ end
123
+
124
+ command :mkdir do |c|
125
+ c.syntax = 'dropbox mkdir [folder_name]'
126
+ c.summary = 'make directory on dropbox'
127
+ c.description = 'make directory on dropbox'
128
+ c.example 'description', "dropbox mkdir 'folder'"
129
+ c.action do |args, options|
130
+ console = CloudDoor::Console.new(CloudDoor::Dropbox)
131
+ console.mkdir(args[0])
132
+ end
133
+ end
@@ -0,0 +1,133 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rubygems'
4
+ require 'commander/import'
5
+ require 'cloud_door'
6
+
7
+ program :version, '0.0.1'
8
+ program :description, 'access onedrive from CLI'
9
+
10
+ command :config do |c|
11
+ c.syntax = 'onedrive config'
12
+ c.summary = 'configure the onedrive connection'
13
+ c.description = 'configure the onedrive connection'
14
+ c.example 'description', 'onedrive config'
15
+ c.option '-l'
16
+ c.action do |args, options|
17
+ console = CloudDoor::Console.new(CloudDoor::OneDrive)
18
+ console.config(options.l)
19
+ end
20
+ end
21
+
22
+ command :account do |c|
23
+ c.syntax = 'onedrive account'
24
+ c.summary = 'set account for the onedrive connection'
25
+ c.description = 'set account for the onedrive connection'
26
+ c.example 'description', 'onedrive accout'
27
+ # c.option '-b STR', String, 'Example of string'
28
+ c.option '-l'
29
+ c.action do |args, options|
30
+ console = CloudDoor::Console.new(CloudDoor::OneDrive)
31
+ console.account(options.l)
32
+ end
33
+ end
34
+
35
+ command :login do |c|
36
+ c.syntax = 'onedrive login'
37
+ c.summary = 'authentication for onedrive'
38
+ c.description = 'authentication for onedrive'
39
+ c.example 'description', 'onedrive login'
40
+ c.option '-d'
41
+ c.action do |args, options|
42
+ console = CloudDoor::Console.new(CloudDoor::OneDrive)
43
+ console.login(options.d)
44
+ end
45
+ end
46
+
47
+ command :ls do |c|
48
+ c.syntax = 'onedrive list [file_name]'
49
+ c.summary = 'list onedrive files'
50
+ c.description = 'list onedrive files'
51
+ c.example 'description', "onedrive list 'file'"
52
+ c.action do |args, options|
53
+ console = CloudDoor::Console.new(CloudDoor::OneDrive)
54
+ console.ls(args[0])
55
+ end
56
+ end
57
+
58
+ command :cd do |c|
59
+ c.syntax = 'onedrive cd [file_name]'
60
+ c.summary = 'change directory on onedrive'
61
+ c.description = 'change directory on onedrive'
62
+ c.example 'description', "onedrive cd 'file'"
63
+ c.action do |args, options|
64
+ console = CloudDoor::Console.new(CloudDoor::OneDrive)
65
+ console.cd(args[0])
66
+ end
67
+ end
68
+
69
+ command :info do |c|
70
+ c.syntax = 'onedrive info [file_name]'
71
+ c.summary = 'show onedrive file information'
72
+ c.description = 'show onedrive file information'
73
+ c.example 'description', "onedrive info 'file'"
74
+ c.action do |args, options|
75
+ console = CloudDoor::Console.new(CloudDoor::OneDrive)
76
+ console.info(args[0])
77
+ end
78
+ end
79
+
80
+ command :pwd do |c|
81
+ c.syntax = 'onedrive pwd'
82
+ c.summary = 'show current directory'
83
+ c.description = 'show current directory'
84
+ c.example 'description', "onedrive pwd"
85
+ c.action do |args, options|
86
+ console = CloudDoor::Console.new(CloudDoor::OneDrive)
87
+ console.pwd
88
+ end
89
+ end
90
+
91
+ command :download do |c|
92
+ c.syntax = 'onedrive download [file_name]'
93
+ c.summary = 'download file from onedrive'
94
+ c.description = 'download file from onedrive'
95
+ c.example 'description', "onedrive download 'file'"
96
+ c.action do |args, options|
97
+ console = CloudDoor::Console.new(CloudDoor::OneDrive)
98
+ console.download(args[0])
99
+ end
100
+ end
101
+
102
+ command :upload do |c|
103
+ c.syntax = 'onedrive upload [file_name]'
104
+ c.summary = 'upload file to onedrive'
105
+ c.description = 'upload file to onedrive'
106
+ c.example 'description', "onedrive upload 'file'"
107
+ c.action do |args, options|
108
+ console = CloudDoor::Console.new(CloudDoor::OneDrive)
109
+ console.upload(args[0])
110
+ end
111
+ end
112
+
113
+ command :rm do |c|
114
+ c.syntax = 'onedrive delete [file_name]'
115
+ c.summary = 'delete file on onedrive'
116
+ c.description = 'delete file on onedrive'
117
+ c.example 'description', "onedrive delete 'file'"
118
+ c.action do |args, options|
119
+ console = CloudDoor::Console.new(CloudDoor::OneDrive)
120
+ console.rm(args[0])
121
+ end
122
+ end
123
+
124
+ command :mkdir do |c|
125
+ c.syntax = 'onedrive mkdir [folder_name]'
126
+ c.summary = 'make directory on onedrive'
127
+ c.description = 'make directory on onedrive'
128
+ c.example 'description', "onedrive mkdir 'folder'"
129
+ c.action do |args, options|
130
+ console = CloudDoor::Console.new(CloudDoor::OneDrive)
131
+ console.mkdir(args[0])
132
+ end
133
+ end