class DocumentExporter::Gdoc::Base
Constants
- GOOGLE_API_CLIENT_UPLOAD_RETRIES
- GOOGLE_API_CLIENT_UPLOAD_TIMEOUT
- GOOGLE_API_UPLOAD_OPTIONS
- VERSION_RE
Attributes
document[R]
options[R]
Public Class Methods
gdoc_key(type)
click to toggle source
# File lib/document_exporter/gdoc/base.rb, line 24 def gdoc_key(type) "gdoc_#{type}" end
url_for(file_id)
click to toggle source
# File lib/document_exporter/gdoc/base.rb, line 28 def url_for(file_id) "https://drive.google.com/open?id=#{file_id}" end
Public Instance Methods
create_gdoc_folders(folder)
click to toggle source
# File lib/document_exporter/gdoc/base.rb, line 33 def create_gdoc_folders(folder) id = drive_service.create_folder(folder) folders = [id] folders << drive_service.create_folder(DocumentExporter::Gdoc::TeacherMaterial::FOLDER_NAME, id) folders << drive_service.create_folder(DocumentExporter::Gdoc::StudentMaterial::FOLDER_NAME, id) folders.each(&method(:delete_previous_versions_from)) end
export()
click to toggle source
# File lib/document_exporter/gdoc/base.rb, line 41 def export file_id = @options[:file_id] || drive_service.file_id parent_folder = file_id.blank? ? @options[:folder_id] || drive_service.parent : nil file_name = "#{@options[:prefix]}#{document.base_filename}" file_params = { name: file_name, mime_type: 'application/vnd.google-apps.document' } file_params[:parents] = [parent_folder] if parent_folder.present? metadata = Google::Apis::DriveV3::File.new(file_params) params = { content_type: 'text/html', upload_source: StringIO.new(content) }.merge(GOOGLE_API_UPLOAD_OPTIONS) @id = if file_id.blank? drive_service.service.create_file(metadata, params) else drive_service.service.update_file(file_id, metadata, params) end.id post_processing self end
export_to(folder_id, file_id: nil)
click to toggle source
@param folder_id String ID of folder export file to @param file_id String ID of existing file
# File lib/document_exporter/gdoc/base.rb, line 70 def export_to(folder_id, file_id: nil) metadata = Google::Apis::DriveV3::File.new( name: document.base_filename(with_version: false), mime_type: 'application/vnd.google-apps.document', parents: [folder_id] ) params = { content_type: 'text/html', upload_source: StringIO.new(content) }.merge(GOOGLE_API_UPLOAD_OPTIONS) @id = if file_id.present? drive_service.service.update_file(file_id, metadata, params) else drive_service.service.create_file(metadata, params) end.id post_processing self end
url()
click to toggle source
# File lib/document_exporter/gdoc/base.rb, line 93 def url self.class.url_for @id end
Private Instance Methods
base_path(name)
click to toggle source
# File lib/document_exporter/gdoc/base.rb, line 99 def base_path(name) File.join('documents', 'gdoc', name) end
content()
click to toggle source
# File lib/document_exporter/gdoc/base.rb, line 103 def content render_template template_path('show'), layout: 'ld_gdoc' end
delete_previous_versions_from(folder)
click to toggle source
Deletes files of previous versions
# File lib/document_exporter/gdoc/base.rb, line 110 def delete_previous_versions_from(folder) drive_service.service.list_files(q: "'#{folder}' in parents").files.each do |file| next unless file.name =~ VERSION_RE drive_service.service.delete_file file.id end end
drive_service()
click to toggle source
# File lib/document_exporter/gdoc/base.rb, line 118 def drive_service @drive_service ||= Lcms::Engine::Google::DriveService.build(document, options) end
gdoc_folder()
click to toggle source
# File lib/document_exporter/gdoc/base.rb, line 122 def gdoc_folder @options[:subfolders] = [self.class::FOLDER_NAME] if defined?(self.class::FOLDER_NAME) @id = drive_service.parent self end
gdoc_folder_tmp(material_ids)
click to toggle source
# File lib/document_exporter/gdoc/base.rb, line 128 def gdoc_folder_tmp(material_ids) file_ids = material_ids.map do |id| document.links['materials']&.dig(id.to_s)&.dig('gdoc')&.gsub(/.*id=/, '') end @options[:subfolders] = [self.class::FOLDER_NAME] @id = drive_service.copy(file_ids) self end
post_processing()
click to toggle source
# File lib/document_exporter/gdoc/base.rb, line 138 def post_processing Lcms::Engine::Google::ScriptService.new(document).execute(@id) end