Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion lib/gslide/models/models.rb
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
require "gslide/models/presentation"
require "gslide/models/editor"
require "gslide/models/presentation"
require "gslide/models/spreadsheet"

module Gslide
module Models
GOOGLE_SLIDES = "https://slides.googleapis.com/v1/presentations"
GOOGLE_SHEETS = "https://sheets.googleapis.com/v4/spreadsheets"
end

include Models
Expand Down
4 changes: 2 additions & 2 deletions lib/gslide/models/presentation.rb
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ def get
uri = URI(GOOGLE_SLIDES + "/#{@id}")

res = get_request(uri, auth_token: @auth.token)
JSON(res.body)
JSON(res.body).convert_keys {|k| k.snake_case.to_sym }
end

def link_url
Expand All @@ -43,7 +43,7 @@ def batch_update(options = {})

def get_slide_ids
parsed_body = get
parsed_body["slides"].collect { |slide| slide["objectId"] }
parsed_body[:slides].collect { |slide| slide[:object_id] }
end
end
end
Expand Down
88 changes: 88 additions & 0 deletions lib/gslide/models/spreadsheet.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
require "gslide/concerns/requests"

module Gslide
module Models
class Spreadsheet
include Concerns::Requests

attr_reader :id

def initialize(id, auth: nil)
@id = id
@auth = auth
end

# @return [Hash] data from a Google Sheets spreadsheet.
# @see https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/get
def get
uri = URI(GOOGLE_SHEETS + "/#{@id}")

res = get_request(uri, auth_token: @auth.token)
JSON(res.body).convert_keys {|k| k.snake_case.to_sym }
end

def link_url
"https://docs.google.com/spreadsheets/d/#{@id}/edit"
end

# @param [Hash] options the request body.
# @return True when update successful.
# @see https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/batchUpdate
def batch_update(options = {})
uri = URI(GOOGLE_SHEETS + "/#{@id}:batchUpdate")
request_body = options.convert_keys { |k| k.to_s.lower_camel_case }.to_json

res = post_request(uri, auth_token: @auth.token, body: request_body)
response_body = JSON(res.body)

if response_body["error"]
raise Gslide::Error.new(response_body["error"]["message"])
end
response_body["spreadsheetId"] == @id
end

def get_sheets
parsed_body = get
parsed_body[:sheets].collect { |h| Sheet.new(h) }
end
end

class SpreadsheetDraft
include Concerns::Requests

def initialize(auth: nil)
@auth = auth
end

def create(options = {})
request_body = options.convert_keys { |k| k.to_s.lower_camel_case }.to_json

uri = URI(GOOGLE_SHEETS)
res = post_request(uri, auth_token: @auth.token, body: request_body)
response_body = JSON(res.body)
if response_body["error"]
raise Gslide::Error.new(response_body["error"]["message"])
end
spreadsheet_id = response_body["spreadsheetId"]
Spreadsheet.new(spreadsheet_id, auth: @auth)
end
end

class Sheet
attr_reader :id, :charts

def initialize(options = {})
@id = options[:properties][:sheet_id]
@charts = options[:charts].collect { |h| Chart.new(h) } if options[:charts]
end
end

class Chart
attr_reader :id

def initialize(options = {})
@id = options[:chart_id]
end
end
end
end
Loading