slipsquare 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.
- checksums.yaml +7 -0
- data/.gitignore +11 -0
- data/.travis.yml +9 -0
- data/CHANGELOG.md +21 -0
- data/CONTRIBUTING.md +28 -0
- data/Gemfile +4 -0
- data/LICENSE.md +22 -0
- data/README.md +93 -0
- data/Rakefile +6 -0
- data/bin/slipsquare +7 -0
- data/lib/slipsquare.rb +6 -0
- data/lib/slipsquare/cli.rb +105 -0
- data/lib/slipsquare/config.rb +67 -0
- data/lib/slipsquare/middleware.rb +106 -0
- data/lib/slipsquare/middleware/account.rb +14 -0
- data/lib/slipsquare/middleware/ask_for_credentials.rb +39 -0
- data/lib/slipsquare/middleware/base.rb +28 -0
- data/lib/slipsquare/middleware/check_configuration.rb +18 -0
- data/lib/slipsquare/middleware/check_credentials.rb +27 -0
- data/lib/slipsquare/middleware/chunked_upload.rb +29 -0
- data/lib/slipsquare/middleware/delete_file.rb +13 -0
- data/lib/slipsquare/middleware/download_file.rb +25 -0
- data/lib/slipsquare/middleware/inject_client.rb +27 -0
- data/lib/slipsquare/middleware/inject_configuration.rb +15 -0
- data/lib/slipsquare/middleware/list_files.rb +19 -0
- data/lib/slipsquare/middleware/make_directory.rb +25 -0
- data/lib/slipsquare/middleware/upload_file.rb +17 -0
- data/lib/slipsquare/version.rb +3 -0
- data/slipsquare.gemspec +34 -0
- data/spec/cli/account.rb +24 -0
- data/spec/cli/authorize_spec.rb +46 -0
- data/spec/cli/chunked_upload_spec.rb +39 -0
- data/spec/cli/delete_file.rb +23 -0
- data/spec/cli/download_file.rb +43 -0
- data/spec/cli/get_keys_spec.rb +30 -0
- data/spec/cli/help_cli_spec.rb +17 -0
- data/spec/cli/ls_spec.rb +36 -0
- data/spec/cli/mkdir_spec.rb +52 -0
- data/spec/cli/upload_file.rb +33 -0
- data/spec/cli/verify_spec.rb +33 -0
- data/spec/cli/version_cli_spec.rb +16 -0
- data/spec/config_spec.rb +70 -0
- data/spec/fixtures/account.json +11 -0
- data/spec/fixtures/chunked_upload.json +5 -0
- data/spec/fixtures/commit_chunked_upload.json +13 -0
- data/spec/fixtures/find_foo_directory.json +15 -0
- data/spec/fixtures/ls_path_success.json +29 -0
- data/spec/fixtures/ls_success.json +14 -0
- data/spec/fixtures/mkdir_success.json +12 -0
- data/spec/fixtures/mkdir_success_multiple_path.json +12 -0
- data/spec/fixtures/upload_success.json +13 -0
- data/spec/fixtures/verify_success.json +14 -0
- data/spec/middleware/base_spec.rb +15 -0
- data/spec/middleware/check_configuration_spec.rb +16 -0
- data/spec/middleware/inject_configuration_spec.rb +16 -0
- data/spec/shared/environment.rb +49 -0
- data/spec/spec_helper.rb +20 -0
- data/tmp/.gitkeep +0 -0
- metadata +270 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: a010880a46f5c654486ac768be01ea64fc53b4f8
|
4
|
+
data.tar.gz: 458574fa784b56fdc85af8b7e77961b3f43bc92b
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: c09e12099dd70cbbae87f4c9e47951cb634ffddc24e22b030fec3d4591c6e3acc293124bfbf8e5b399922d43967ac418d6469b041b4aa64af338f75f6faa05da
|
7
|
+
data.tar.gz: 3bdad2880500f948fff5719ae17d7b915f3bffd667ff5e81657dac6717d467bbed3835cbda799324b9eb3cdedacd975161135432901fa01a92665a2384fac6b7
|
data/.gitignore
ADDED
data/.travis.yml
ADDED
data/CHANGELOG.md
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
## 0.0.1 (Unreleased)
|
2
|
+
|
3
|
+
Initial release.
|
4
|
+
|
5
|
+
Current Commands:
|
6
|
+
|
7
|
+
* account
|
8
|
+
* authorize
|
9
|
+
* chunked-upload [PATH]
|
10
|
+
* download [FILENAME]
|
11
|
+
* get-keys
|
12
|
+
* help [COMMAND]
|
13
|
+
* ls
|
14
|
+
* mkdir [PATH]
|
15
|
+
* upload [PATH]
|
16
|
+
* verify
|
17
|
+
* version
|
18
|
+
|
19
|
+
Added but not implemented
|
20
|
+
|
21
|
+
* delete [PATH] - Need to figure out why it doesnt return a file object from the find command, which I can then call a delete on, I think I have some idea, but I want to release 0.0.1 before the weekend so I'll stub for now...
|
data/CONTRIBUTING.md
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
# Contributing
|
2
|
+
|
3
|
+
1. Fork it
|
4
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
5
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
6
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
7
|
+
5. Create new Pull Request
|
8
|
+
|
9
|
+
## Development Environment
|
10
|
+
|
11
|
+
To add a feature, fix a bug, or to run a development build of Slipsquare
|
12
|
+
on your machine, clone down the repo and run:
|
13
|
+
|
14
|
+
$ bundle
|
15
|
+
|
16
|
+
You can then execute slipsquare:
|
17
|
+
|
18
|
+
$ bundle exec slipsquare [command]
|
19
|
+
|
20
|
+
As well as run the tests:
|
21
|
+
|
22
|
+
$ bundle exec rspec
|
23
|
+
|
24
|
+
To install the gem on your system from source:
|
25
|
+
|
26
|
+
$ bundle exec rake install
|
27
|
+
|
28
|
+
If you need help with your environment, feel free to open an issue.
|
data/Gemfile
ADDED
data/LICENSE.md
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2013 Peter Souter
|
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.
|
data/README.md
ADDED
@@ -0,0 +1,93 @@
|
|
1
|
+
# Slipsquare
|
2
|
+
|
3
|
+
A work-in-progress command line tool for uploading files to Dropbox, heavily inspired by tools such as
|
4
|
+
[Dropbox Uploader](https://github.com/andreafabrizi/Dropbox-Uploader) and [Tugboat](https://github.com/pearkes/tugboat)
|
5
|
+
|
6
|
+
### Installation
|
7
|
+
|
8
|
+
gem install slipsquare
|
9
|
+
|
10
|
+
Note: Currently not on Rubygems yet...
|
11
|
+
|
12
|
+
### Configuration
|
13
|
+
|
14
|
+
Run the configuration utility, `slipsquare authorize`.
|
15
|
+
|
16
|
+
### Download a file
|
17
|
+
|
18
|
+
```
|
19
|
+
$ slipsquare download miley_cyrus_dubstep.mp3
|
20
|
+
Downloading file...
|
21
|
+
File 'miley_cyrus_dubstep.mp3' downloaded successfully!
|
22
|
+
```
|
23
|
+
|
24
|
+
### Upload a file
|
25
|
+
|
26
|
+
```
|
27
|
+
$ slipsquare upload secret_plans.doc
|
28
|
+
Uploading file...
|
29
|
+
File 'secret_plans.doc' uploaded successfully
|
30
|
+
```
|
31
|
+
|
32
|
+
**Coming soon - Chunked uploads with progress bar!**
|
33
|
+
|
34
|
+
### Delete a file
|
35
|
+
|
36
|
+
*To be implemented*
|
37
|
+
|
38
|
+
```
|
39
|
+
$ slipsquare delete remove_me.tmp
|
40
|
+
Deleting file...
|
41
|
+
To be implemented...
|
42
|
+
```
|
43
|
+
|
44
|
+
### Create a directory
|
45
|
+
|
46
|
+
```
|
47
|
+
$ slipsquare mkdir breaking_bad_episodes
|
48
|
+
Creating directory on Dropbox...
|
49
|
+
Directory `breaking_bad_episodes` created successfully
|
50
|
+
```
|
51
|
+
|
52
|
+
### List files on dropbox
|
53
|
+
|
54
|
+
#### All files/Root
|
55
|
+
```
|
56
|
+
$ slipsquare ls
|
57
|
+
Listing files from Dropbox
|
58
|
+
PATH | MIME_TYPE | SIZE
|
59
|
+
-------------------------------|--------------------------|---------
|
60
|
+
/what_does_the_fox_say.mp3 | audio/mpeg | 7.6 MB
|
61
|
+
/photo_album.zip | application/zip | 83.7 MB
|
62
|
+
/Books | Method Missing | 0 bytes
|
63
|
+
/Camera Uploads | Method Missing | 0 bytes
|
64
|
+
/Comics | Method Missing | 0 bytes
|
65
|
+
/Music | Method Missing | 0 bytes
|
66
|
+
/Photos | Method Missing | 0 bytes
|
67
|
+
/Public | Method Missing | 0 bytes
|
68
|
+
```
|
69
|
+
|
70
|
+
#### Particular Path
|
71
|
+
```
|
72
|
+
$ slipsquare ls music
|
73
|
+
PATH | MIME_TYPE | SIZE
|
74
|
+
-------------------------------|------------|---------
|
75
|
+
/Music/01-paul_oakenfold_-_... | audio/mpeg | 183.9 MB
|
76
|
+
/Music/Big Bad Wolf (Dada L... | audio/mpeg | 12.5 MB
|
77
|
+
/Music/Drums Of Death - War... | audio/mpeg | 84.6 MB
|
78
|
+
/Music/Layo & Bushwacka! - ... | audio/mpeg | 78.8 MB
|
79
|
+
/Music/Lost Woods (Crizzly ... | audio/mpeg | 9.7 MB
|
80
|
+
/Music/The Glitch Mob -- We... | audio/mpeg | 12.6 MB
|
81
|
+
```
|
82
|
+
|
83
|
+
## Help
|
84
|
+
|
85
|
+
For a complete overview of all of the available commands, run:
|
86
|
+
|
87
|
+
$ slipsquare help
|
88
|
+
|
89
|
+
Feel free to open issues in case of bugs or improvments.
|
90
|
+
|
91
|
+
## Contributing
|
92
|
+
|
93
|
+
See the [contributing guide](CONTRIBUTING.md). Pull-requests welcome!
|
data/Rakefile
ADDED
data/bin/slipsquare
ADDED
data/lib/slipsquare.rb
ADDED
@@ -0,0 +1,105 @@
|
|
1
|
+
require 'thor'
|
2
|
+
|
3
|
+
module Slipsquare
|
4
|
+
autoload :Middleware, "slipsquare/middleware"
|
5
|
+
|
6
|
+
class CLI < Thor
|
7
|
+
include Thor::Actions
|
8
|
+
ENV['THOR_COLUMNS'] = '120'
|
9
|
+
|
10
|
+
!check_unknown_options
|
11
|
+
|
12
|
+
map "--version" => :version,
|
13
|
+
"-v" => :version
|
14
|
+
|
15
|
+
desc "help [COMMAND]", "Describe commands or a specific command"
|
16
|
+
def help(meth=nil)
|
17
|
+
super
|
18
|
+
if !meth
|
19
|
+
say "To learn more or to contribute, please see github.com/petems/slipsquare"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
desc "authorize", "Authorize a Dropbox account with slipsquare"
|
24
|
+
long_desc "This takes you through a workflow for adding configuration
|
25
|
+
details to slipsquare."
|
26
|
+
def authorize
|
27
|
+
Middleware.sequence_authorize.call({})
|
28
|
+
end
|
29
|
+
|
30
|
+
|
31
|
+
desc "account", "Shows Dropbox account details"
|
32
|
+
long_desc "This displays your main Dropbox meta-data, such as
|
33
|
+
Display Name, County, Download Quota information and the like"
|
34
|
+
def account
|
35
|
+
Middleware.sequence_account.call({})
|
36
|
+
end
|
37
|
+
|
38
|
+
desc "download [FILENAME]", "Download a file or directory"
|
39
|
+
long_desc "Download or directory from dropbox"
|
40
|
+
def download(filename)
|
41
|
+
Middleware.sequence_download_file.call({"download_file_name" => filename})
|
42
|
+
end
|
43
|
+
|
44
|
+
desc "verify", "Check your given credentials are valid"
|
45
|
+
long_desc "This checks that the credentials in ~/.slipsquare are correct"
|
46
|
+
def verify
|
47
|
+
Middleware.sequence_verify.call({})
|
48
|
+
end
|
49
|
+
|
50
|
+
desc "ls", "Show files for a particular path"
|
51
|
+
method_option "path",
|
52
|
+
:type => :string,
|
53
|
+
:aliases => "-p",
|
54
|
+
:desc => "The path you want to give."
|
55
|
+
long_desc "This shows all the files of a given path (defaulting to root)"
|
56
|
+
def ls(path=nil)
|
57
|
+
Middleware.sequence_ls.call({"list_files_path" => path})
|
58
|
+
end
|
59
|
+
|
60
|
+
desc "mkdir [PATH]", "Make a directory on dropbox"
|
61
|
+
long_desc "This creates a directory on Dropbox, it allows you to enter
|
62
|
+
multiple directories and all will be created eg. `slipsquare mkdir photos/america/san_fran"
|
63
|
+
def mkdir(path)
|
64
|
+
Middleware.sequence_mkdir.call({"mkdir_path" => path})
|
65
|
+
end
|
66
|
+
|
67
|
+
desc "delete [PATH]", "Delete a directory or file on Dropbox"
|
68
|
+
long_desc "This creates a directory on Dropbox"
|
69
|
+
def delete(path)
|
70
|
+
Middleware.sequence_delete_file.call({"delete_path" => path})
|
71
|
+
end
|
72
|
+
|
73
|
+
desc "upload [PATH]", "Upload a file or directory"
|
74
|
+
long_desc "Upload a file or directory to dropbox"
|
75
|
+
def upload(filename)
|
76
|
+
Middleware.sequence_upload_file.call({"upload_file_name" => filename})
|
77
|
+
end
|
78
|
+
|
79
|
+
desc "chunked-upload [PATH]", "Chunk Upload a file or directory"
|
80
|
+
long_desc "Upload a file or directory to dropbox with chunks, typically
|
81
|
+
4mb in size, allowing a way of showing progress of downloads."
|
82
|
+
def chunked_upload(filename)
|
83
|
+
Middleware.sequence_chunked_upload_file.call({"chunked_upload_file_name" => filename})
|
84
|
+
end
|
85
|
+
|
86
|
+
desc "get-keys", "Get your app and secret keys"
|
87
|
+
def get_keys
|
88
|
+
say "Please open this URL from your Browser, and login: https://www2.dropbox.com/developers/apps"
|
89
|
+
say "Click \"Create app\" button, and choose the following options:"
|
90
|
+
say "Type: Dropbox API app"
|
91
|
+
say "Data: Files and Datastores"
|
92
|
+
say "Permission type: Full Dropbox"
|
93
|
+
say "File Types: All file types"
|
94
|
+
say "App name: Slipsquare#{Time.now.to_i}"
|
95
|
+
say "Cick on the \"Create\" button, and note down the 'app key' and 'app secret'"
|
96
|
+
end
|
97
|
+
|
98
|
+
desc "version", "Show version"
|
99
|
+
def version
|
100
|
+
say "Slipsquare #{Slipsquare::VERSION}"
|
101
|
+
end
|
102
|
+
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
@@ -0,0 +1,67 @@
|
|
1
|
+
require 'singleton'
|
2
|
+
|
3
|
+
module Slipsquare
|
4
|
+
# This is the configuration object. It reads in configuration
|
5
|
+
# from a .slipsquare file located in the user's home directory
|
6
|
+
|
7
|
+
class Configuration
|
8
|
+
include Singleton
|
9
|
+
attr_reader :data
|
10
|
+
attr_reader :path
|
11
|
+
|
12
|
+
FILE_NAME = '.slipsquare'
|
13
|
+
|
14
|
+
def initialize
|
15
|
+
@path = ENV["SLIPSTREAM_CONFIG_PATH"] || File.join(File.expand_path("~"), FILE_NAME)
|
16
|
+
@data = self.load_config_file
|
17
|
+
end
|
18
|
+
|
19
|
+
# If we can't load the config file, self.data is nil, which we can
|
20
|
+
# check for in CheckConfiguration
|
21
|
+
def load_config_file
|
22
|
+
require 'yaml'
|
23
|
+
YAML.load_file(@path)
|
24
|
+
rescue Errno::ENOENT
|
25
|
+
return
|
26
|
+
end
|
27
|
+
|
28
|
+
def app_key
|
29
|
+
@data['authentication']['app_key']
|
30
|
+
end
|
31
|
+
|
32
|
+
def secret_key
|
33
|
+
@data['authentication']['secret_key']
|
34
|
+
end
|
35
|
+
|
36
|
+
def app_token
|
37
|
+
@data['client']['app_token']
|
38
|
+
end
|
39
|
+
|
40
|
+
def app_secret
|
41
|
+
@data['client']['app_secret']
|
42
|
+
end
|
43
|
+
|
44
|
+
# Re-runs initialize
|
45
|
+
def reset!
|
46
|
+
self.send(:initialize)
|
47
|
+
end
|
48
|
+
|
49
|
+
# Re-loads the config
|
50
|
+
def reload!
|
51
|
+
@data = self.load_config_file
|
52
|
+
end
|
53
|
+
|
54
|
+
# Writes a config file
|
55
|
+
def create_config_file(app_key, secret_key, app_token, app_secret)
|
56
|
+
require 'yaml'
|
57
|
+
File.open(@path, File::RDWR|File::TRUNC|File::CREAT, 0600) do |file|
|
58
|
+
data = {
|
59
|
+
"authentication" => { "app_key" => app_key, "secret_key" => secret_key },
|
60
|
+
"client" => { "app_token" => app_token, "app_secret" => app_secret }
|
61
|
+
}
|
62
|
+
file.write data.to_yaml
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,106 @@
|
|
1
|
+
require "middleware"
|
2
|
+
|
3
|
+
module Slipsquare
|
4
|
+
module Middleware
|
5
|
+
autoload :Base, "slipsquare/middleware/base"
|
6
|
+
|
7
|
+
autoload :AskForCredentials, "slipsquare/middleware/ask_for_credentials"
|
8
|
+
autoload :Account, "slipsquare/middleware/account"
|
9
|
+
autoload :CheckConfiguration, "slipsquare/middleware/check_configuration"
|
10
|
+
autoload :CheckCredentials, "slipsquare/middleware/check_credentials"
|
11
|
+
autoload :ChunkedUpload, "slipsquare/middleware/chunked_upload"
|
12
|
+
autoload :DeleteFile, "slipsquare/middleware/delete_file"
|
13
|
+
autoload :DownloadFile, "slipsquare/middleware/download_file"
|
14
|
+
autoload :InjectClient, "slipsquare/middleware/inject_client"
|
15
|
+
autoload :InjectConfiguration, "slipsquare/middleware/inject_configuration"
|
16
|
+
autoload :ListFiles, "slipsquare/middleware/list_files"
|
17
|
+
autoload :MakeDirectory, "slipsquare/middleware/make_directory"
|
18
|
+
autoload :UploadFile, "slipsquare/middleware/upload_file"
|
19
|
+
|
20
|
+
# Start the authorization flow.
|
21
|
+
# This writes a ~/.slipsquare file, which can be edited manually.
|
22
|
+
def self.sequence_authorize
|
23
|
+
::Middleware::Builder.new do
|
24
|
+
use InjectConfiguration
|
25
|
+
use AskForCredentials
|
26
|
+
use InjectConfiguration
|
27
|
+
use CheckConfiguration
|
28
|
+
use InjectClient
|
29
|
+
use CheckCredentials
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.sequence_account
|
34
|
+
::Middleware::Builder.new do
|
35
|
+
use InjectConfiguration
|
36
|
+
use CheckConfiguration
|
37
|
+
use InjectClient
|
38
|
+
use Account
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def self.sequence_verify
|
43
|
+
::Middleware::Builder.new do
|
44
|
+
use InjectConfiguration
|
45
|
+
use CheckConfiguration
|
46
|
+
use InjectClient
|
47
|
+
use CheckCredentials
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def self.sequence_ls
|
52
|
+
::Middleware::Builder.new do
|
53
|
+
use InjectConfiguration
|
54
|
+
use CheckConfiguration
|
55
|
+
use InjectClient
|
56
|
+
use ListFiles
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def self.sequence_mkdir
|
61
|
+
::Middleware::Builder.new do
|
62
|
+
use InjectConfiguration
|
63
|
+
use CheckConfiguration
|
64
|
+
use InjectClient
|
65
|
+
use MakeDirectory
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def self.sequence_upload_file
|
70
|
+
::Middleware::Builder.new do
|
71
|
+
use InjectConfiguration
|
72
|
+
use CheckConfiguration
|
73
|
+
use InjectClient
|
74
|
+
use UploadFile
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
def self.sequence_download_file
|
79
|
+
::Middleware::Builder.new do
|
80
|
+
use InjectConfiguration
|
81
|
+
use CheckConfiguration
|
82
|
+
use InjectClient
|
83
|
+
use DownloadFile
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
def self.sequence_delete_file
|
88
|
+
::Middleware::Builder.new do
|
89
|
+
use InjectConfiguration
|
90
|
+
use CheckConfiguration
|
91
|
+
use InjectClient
|
92
|
+
use DeleteFile
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
def self.sequence_chunked_upload_file
|
97
|
+
::Middleware::Builder.new do
|
98
|
+
use InjectConfiguration
|
99
|
+
use CheckConfiguration
|
100
|
+
use InjectClient
|
101
|
+
use ChunkedUpload
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
end
|
106
|
+
end
|