gdsh 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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,12 @@
1
+ require_relative 'commands'
2
+
3
+ module Commands
4
+ ##
5
+ # Unrecognized command.
6
+ #
7
+ class Unrecognized < Command
8
+ def execute
9
+ "Command not recognized, got: #{@params}".colorize(:red)
10
+ end
11
+ end
12
+ 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
@@ -0,0 +1,6 @@
1
+ ##
2
+ # Implements a command interpreter to wrap Google Drive API.
3
+ #
4
+ module Gdsh
5
+ VERSION = '0.4.0'
6
+ end
@@ -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