gdsh 0.4.0
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 +21 -0
- data/.rspec +1 -0
- data/Gemfile +7 -0
- data/LICENSE.txt +22 -0
- data/README.md +31 -0
- data/Rakefile +1 -0
- data/bin/gdsh +10 -0
- data/document.txt +2 -0
- data/gdsh.gemspec +28 -0
- data/lib/gdsh.rb +61 -0
- data/lib/gdsh/clear.rb +20 -0
- data/lib/gdsh/command_factory.rb +32 -0
- data/lib/gdsh/command_mixin.rb +46 -0
- data/lib/gdsh/commands.rb +53 -0
- data/lib/gdsh/drive.rb +113 -0
- data/lib/gdsh/error.rb +7 -0
- data/lib/gdsh/get_file.rb +65 -0
- data/lib/gdsh/help.rb +20 -0
- data/lib/gdsh/list_files.rb +78 -0
- data/lib/gdsh/mime.rb +52 -0
- data/lib/gdsh/query_revision.rb +106 -0
- data/lib/gdsh/quit.rb +23 -0
- data/lib/gdsh/remove.rb +34 -0
- data/lib/gdsh/revision_diff.rb +87 -0
- data/lib/gdsh/share.rb +65 -0
- data/lib/gdsh/share_read_only.rb +18 -0
- data/lib/gdsh/share_read_write.rb +18 -0
- data/lib/gdsh/unrecognized.rb +12 -0
- data/lib/gdsh/upload_template.rb +52 -0
- data/lib/gdsh/version.rb +6 -0
- data/spec/commands_spec.rb +41 -0
- metadata +175 -0
data/lib/gdsh/share.rb
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
require_relative 'commands'
|
2
|
+
|
3
|
+
module Commands
|
4
|
+
class Share < Command
|
5
|
+
attr_reader :email_list
|
6
|
+
|
7
|
+
def self.parameters
|
8
|
+
'(<file_id>[, <email_1>, <email_2>, ...])'
|
9
|
+
end
|
10
|
+
|
11
|
+
def initialize(client, params)
|
12
|
+
super(client, params)
|
13
|
+
@email_list = []
|
14
|
+
@file_id = @params[1]
|
15
|
+
@params.drop(2).each do |email|
|
16
|
+
@email_list << email
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def role_with_colours(role)
|
21
|
+
case role
|
22
|
+
when 'reader'
|
23
|
+
'read-only'.colorize(:green)
|
24
|
+
when 'writer'
|
25
|
+
'read-write'.colorize(:blue)
|
26
|
+
when 'owner'
|
27
|
+
'owner'.colorize(:magenta)
|
28
|
+
else
|
29
|
+
'error'.colorize(:red)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def puts_shared_notification(email, role)
|
34
|
+
puts "Shared ".colorize(:cyan) + @file_id.colorize(:light_yellow) +
|
35
|
+
" with ".colorize(:cyan) + email.colorize(:light_yellow) +
|
36
|
+
" with ".colorize(:cyan) + role_with_colours(role) +
|
37
|
+
" permissions.".colorize(:cyan)
|
38
|
+
end
|
39
|
+
|
40
|
+
def share_with_email(email, role)
|
41
|
+
drive = @client.discovered_api('drive', 'v2')
|
42
|
+
new_permission = drive.permissions.insert.request_schema.new(
|
43
|
+
value: email,
|
44
|
+
type: 'user',
|
45
|
+
role: role)
|
46
|
+
result = @client.execute(
|
47
|
+
api_method: drive.permissions.insert,
|
48
|
+
body_object: new_permission,
|
49
|
+
parameters: { fileId: @file_id })
|
50
|
+
if result.status == 200
|
51
|
+
puts_shared_notification(email, role)
|
52
|
+
return result.data
|
53
|
+
else
|
54
|
+
puts drive_error_string
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def share_with_email_list(role)
|
59
|
+
return if @email_list.empty?
|
60
|
+
@email_list.each do |email|
|
61
|
+
share_with_email(email, role)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require_relative 'commands'
|
2
|
+
require_relative 'share'
|
3
|
+
|
4
|
+
module Commands
|
5
|
+
class ShareReadOnly < Share
|
6
|
+
def self.command_name
|
7
|
+
'share_read_only'
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.function
|
11
|
+
'Shares a file with other users by email with read-only permission.'
|
12
|
+
end
|
13
|
+
|
14
|
+
def execute
|
15
|
+
share_with_email_list('reader')
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require_relative 'commands'
|
2
|
+
require_relative 'share'
|
3
|
+
|
4
|
+
module Commands
|
5
|
+
class ShareReadWrite < Share
|
6
|
+
def self.command_name
|
7
|
+
'share_read_write'
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.function
|
11
|
+
'Shares a file with other users by email with read-write permission.'
|
12
|
+
end
|
13
|
+
|
14
|
+
def execute
|
15
|
+
share_with_email_list('writer')
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require_relative 'commands'
|
2
|
+
require_relative 'mime'
|
3
|
+
|
4
|
+
module Commands
|
5
|
+
##
|
6
|
+
# Uploads a template to the Drive.
|
7
|
+
#
|
8
|
+
class UploadTemplate < Command
|
9
|
+
include Mime
|
10
|
+
|
11
|
+
def self.command_name
|
12
|
+
'upload_template'
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.function
|
16
|
+
'Uploads a template to the Drive.'
|
17
|
+
end
|
18
|
+
|
19
|
+
def insert_schema(title, description, mimetype)
|
20
|
+
drive = @client.discovered_api('drive', 'v2')
|
21
|
+
drive.files.insert.request_schema.new(
|
22
|
+
title: title,
|
23
|
+
description: description,
|
24
|
+
mimeType: mimetype)
|
25
|
+
end
|
26
|
+
|
27
|
+
def insert_file(filename, file, mimetype)
|
28
|
+
drive = @client.discovered_api('drive', 'v2')
|
29
|
+
media = Google::APIClient::UploadIO.new(filename, mimetype)
|
30
|
+
@client.execute(
|
31
|
+
api_method: drive.files.insert,
|
32
|
+
body_object: file,
|
33
|
+
media: media,
|
34
|
+
parameters: {
|
35
|
+
uploadType: 'multipart',
|
36
|
+
convert: 'true',
|
37
|
+
alt: 'json' })
|
38
|
+
end
|
39
|
+
|
40
|
+
##
|
41
|
+
# Writes a template file to drive.
|
42
|
+
#
|
43
|
+
def execute
|
44
|
+
filename = 'document.txt'
|
45
|
+
return unless @client && File.exist?(filename)
|
46
|
+
|
47
|
+
puts 'Writing template to drive.'.colorize(:green)
|
48
|
+
file = insert_schema('My Document', 'A test document', txt)
|
49
|
+
insert_file(filename, file, txt)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
data/lib/gdsh/version.rb
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
require_relative '../lib/gdsh/commands'
|
2
|
+
|
3
|
+
describe Commands do
|
4
|
+
describe 'interpret' do
|
5
|
+
it 'creates an Unrecognized Command object' do
|
6
|
+
expect(Commands.interpret ('abc')).to eq(Commands::Unrecognized)
|
7
|
+
end
|
8
|
+
|
9
|
+
it 'creates a Quit Command object' do
|
10
|
+
expect(Commands.interpret('quit')).to eq(Commands::Quit)
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'creates a Help Command object' do
|
14
|
+
expect(Commands.interpret('help')).to eq(Commands::Help)
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'creates a Clear Command object' do
|
18
|
+
expect(Commands.interpret('clear')).to eq(Commands::Clear)
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'creates a ListFiles Command object' do
|
22
|
+
expect(Commands.interpret('ls')).to eq(Commands::ListFiles)
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'creates a UploadTemplate Command object' do
|
26
|
+
expect(Commands.interpret('upload_template')).to eq(Commands::UploadTemplate)
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'creates a QueryRevision Command object' do
|
30
|
+
expect(Commands.interpret('query')).to eq(Commands::QueryRevision)
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'creates a GetFile Command object' do
|
34
|
+
expect(Commands.interpret('get')).to eq(Commands::GetFile)
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'creates a RevisionDiff Command object' do
|
38
|
+
expect(Commands.interpret('diff')).to eq(Commands::RevisionDiff)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
metadata
ADDED
@@ -0,0 +1,175 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: gdsh
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.4.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Emin Tham
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-06-29 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.5'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.5'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: google-api-client
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: launchy
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: differ
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: colorize
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :runtime
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
description: ''
|
112
|
+
email:
|
113
|
+
- emintham@gmail.com
|
114
|
+
executables:
|
115
|
+
- gdsh
|
116
|
+
extensions: []
|
117
|
+
extra_rdoc_files: []
|
118
|
+
files:
|
119
|
+
- ".gitignore"
|
120
|
+
- ".rspec"
|
121
|
+
- Gemfile
|
122
|
+
- LICENSE.txt
|
123
|
+
- README.md
|
124
|
+
- Rakefile
|
125
|
+
- bin/gdsh
|
126
|
+
- document.txt
|
127
|
+
- gdsh.gemspec
|
128
|
+
- lib/gdsh.rb
|
129
|
+
- lib/gdsh/clear.rb
|
130
|
+
- lib/gdsh/command_factory.rb
|
131
|
+
- lib/gdsh/command_mixin.rb
|
132
|
+
- lib/gdsh/commands.rb
|
133
|
+
- lib/gdsh/drive.rb
|
134
|
+
- lib/gdsh/error.rb
|
135
|
+
- lib/gdsh/get_file.rb
|
136
|
+
- lib/gdsh/help.rb
|
137
|
+
- lib/gdsh/list_files.rb
|
138
|
+
- lib/gdsh/mime.rb
|
139
|
+
- lib/gdsh/query_revision.rb
|
140
|
+
- lib/gdsh/quit.rb
|
141
|
+
- lib/gdsh/remove.rb
|
142
|
+
- lib/gdsh/revision_diff.rb
|
143
|
+
- lib/gdsh/share.rb
|
144
|
+
- lib/gdsh/share_read_only.rb
|
145
|
+
- lib/gdsh/share_read_write.rb
|
146
|
+
- lib/gdsh/unrecognized.rb
|
147
|
+
- lib/gdsh/upload_template.rb
|
148
|
+
- lib/gdsh/version.rb
|
149
|
+
- spec/commands_spec.rb
|
150
|
+
homepage: https://github.com/emintham/gdsh
|
151
|
+
licenses:
|
152
|
+
- MIT
|
153
|
+
metadata: {}
|
154
|
+
post_install_message:
|
155
|
+
rdoc_options: []
|
156
|
+
require_paths:
|
157
|
+
- lib
|
158
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
159
|
+
requirements:
|
160
|
+
- - ">="
|
161
|
+
- !ruby/object:Gem::Version
|
162
|
+
version: '0'
|
163
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
164
|
+
requirements:
|
165
|
+
- - ">="
|
166
|
+
- !ruby/object:Gem::Version
|
167
|
+
version: '0'
|
168
|
+
requirements: []
|
169
|
+
rubyforge_project:
|
170
|
+
rubygems_version: 2.3.0
|
171
|
+
signing_key:
|
172
|
+
specification_version: 4
|
173
|
+
summary: A Google Drive shell in Ruby.
|
174
|
+
test_files:
|
175
|
+
- spec/commands_spec.rb
|