class Middleman::Spreadsheet::Extension
Public Class Methods
new(app, options_hash={}, &block)
click to toggle source
Calls superclass method
# File lib/middleman/spreadsheet/extension.rb, line 16 def initialize(app, options_hash={}, &block) super require "google_drive" require "sheet_wrap" session = drive_session(options) if options.spreadsheet_key spreadsheet = session.spreadsheet_by_key(options.spreadsheet_key) elsif options.spreadsheet_url spreadsheet = session.spreadsheet_by_url(options.spreadsheet_url) elsif options.spreadsheet_title spreadsheet = session.spreadsheet_by_title(options.spreadsheet_title) end raise SpreadsheetNotFound, "No spreadsheet specified" unless spreadsheet data = spreadsheet.worksheets.each_with_object({}) do |worksheet, hash| sheet_wrap = SheetWrap.wrap(worksheet) hash[sheet_wrap.title.to_sym] = sheet_wrap.rows.map(&:to_h) end @app.data.store(options.data_name.to_sym, data) end
Private Class Methods
refresh_token()
click to toggle source
# File lib/middleman/spreadsheet/extension.rb, line 74 def self.refresh_token @refresh_token end
refresh_token=(token)
click to toggle source
# File lib/middleman/spreadsheet/extension.rb, line 70 def self.refresh_token=(token) @refresh_token = token end
Private Instance Methods
drive_session(options)
click to toggle source
# File lib/middleman/spreadsheet/extension.rb, line 43 def drive_session(options) if options.credentials credentials = Google::Auth::UserRefreshCredentials.new( client_id: options.credentials[:client_id], client_secret: options.credentials[:client_secret], scope: GoogleDrive::Session::DEFAULT_SCOPE, redirect_uri: 'urn:ietf:wg:oauth:2.0:oob', ) if options.credentials[:refresh_token] || self.class.refresh_token credentials.refresh_token = options.credentials[:refresh_token] || self.class.refresh_token credentials.fetch_access_token! else STDERR.puts "1. Open this page:\n#{credentials.authorization_uri}" STDERR.print "2. Enter the authorization code shown in the page: " credentials.code = STDIN.gets.chomp credentials.fetch_access_token! STDERR.puts "3. Save refresh_token: #{credentials.refresh_token}" self.class.refresh_token = credentials.refresh_token end GoogleDrive::Session.from_credentials(credentials) elsif options.config GoogleDrive::Session.from_config(options.config) else raise CredentialsNotFound, "No credentials specified" end end