gslide 0.1.1 → 0.1.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 52da391c6d99b7a6c04b766ec32349d41409af6a568f6b3dad3bc300f9e362b4
4
- data.tar.gz: 0adf949984afb45f782c8a4bef5d516b68550bd499b382dfa2e993b008b7402c
3
+ metadata.gz: c60628d84c354c773b26428a27bf090324f9d480e7fbaa21f61b9eff373afcfd
4
+ data.tar.gz: 35dfbc790360627c4829f6747e9e25532ab0342d8044c61259e77bf050e85f2c
5
5
  SHA512:
6
- metadata.gz: 788294f12da41010e96ecb1576983e51cbd57de78970971b7940a60a325563685a2a494395925998c936ea2b862467d8971c6dbcfa62dd21442bafd81d7b83be
7
- data.tar.gz: 5c18a8c54b79bdff0da9c8f896d7aa31a2388cc7a86b9ad6e5a6c4a4425236a6915cde046dfee446e1a80ec5d8966b487e59c9356dbc4b5e54c8052f66f4736e
6
+ metadata.gz: 3998d8e6e183a9a7f1bc4164284a26fa4296c11187dcbf848f8dbe0f75ba6fdc5bb6b9e4407007d1cd7a11d6fd3f5c46b023b7fcda9000a23f3c2fdf0c88eddf
7
+ data.tar.gz: '086712b43b87c1a09ee7563c028af143282dc22f3fd74762c0e0dd2d99c81f8d78268affa80be92b1f3eb6e5fe98700356132d8d7f97f6d59ed9e50535333228'
data/CHANGELOG.md CHANGED
@@ -1,7 +1,11 @@
1
+ ## [0.1.2] - 2025-05-09
2
+
3
+ - Add `Gslide::HTTPError`, `Gslide::UnauthorizedError` and `Gslide::QuotaExceededError` #10
4
+
1
5
  ## [0.1.1] - 2025-04-14
2
6
 
3
- - Use a regular expression for finding a presentation id from url #8
4
- - Add retry logic for slide batch_update #7
7
+ - Use a regular expression for finding a presentation id from url [#8](https://github.com/lininglink/gslide/pull/8)
8
+ - Add retry logic for slide batch_update [#7](https://github.com/lininglink/gslide/pull/7)
5
9
 
6
10
  ## [0.1.0] - 2025-03-31
7
11
 
@@ -7,9 +7,21 @@ module Gslide
7
7
  req = Net::HTTP::Get.new(uri.to_s)
8
8
  req['Authorization'] = "Bearer #{auth_token}"
9
9
 
10
- Net::HTTP.start(uri.host, uri.port, :use_ssl => uri.scheme == 'https') do |http|
10
+ res = Net::HTTP.start(uri.host, uri.port, :use_ssl => uri.scheme == 'https') do |http|
11
11
  http.request(req)
12
12
  end
13
+ response_body = JSON(res.body)
14
+
15
+ case res
16
+ when Net::HTTPSuccess
17
+ response_body
18
+ when Net::HTTPUnauthorized
19
+ msg = response_body["error"] ? response_body["error"]["message"] : "Unauthorized"
20
+ raise Gslide::UnauthorizedError, msg
21
+ else
22
+ msg = response_body["error"] ? response_body["error"]["message"] : "HTTPError"
23
+ raise Gslide::HTTPError, msg
24
+ end
13
25
  end
14
26
 
15
27
  def post_request(uri, auth_token: "", body: {})
@@ -19,9 +31,29 @@ module Gslide
19
31
 
20
32
  req.body = body
21
33
 
22
- Net::HTTP.start(uri.host, uri.port, :use_ssl => uri.scheme == 'https') do |http|
34
+ res = Net::HTTP.start(uri.host, uri.port, :use_ssl => uri.scheme == 'https') do |http|
23
35
  http.request(req)
24
36
  end
37
+
38
+ response_body = JSON(res.body)
39
+
40
+ case res
41
+ when Net::HTTPSuccess
42
+ response_body
43
+ when Net::HTTPUnauthorized
44
+ msg = response_body["error"] ? response_body["error"]["message"] : "Unauthorized"
45
+ raise Gslide::UnauthorizedError, msg
46
+ when Net::HTTPTooManyRequests
47
+ # "Quota exceeded for quota metric 'Write requests' and limit 'Write requests per minute per user' of service 'slides.googleapis.com' for consumer 'project_number:012345678901'."
48
+ if response_body["error"] && response_body["error"]["message"] =~ /Quota exceeded/
49
+ raise Gslide::QuotaExceededError, msg
50
+ else
51
+ raise Gslide::HTTPError, msg || "TooManyRequests"
52
+ end
53
+ else
54
+ msg = response_body["error"] ? response_body["error"]["message"] : "HTTPError"
55
+ raise Gslide::HTTPError, msg
56
+ end
25
57
  end
26
58
  end
27
59
  end
@@ -23,12 +23,7 @@ module Gslide
23
23
  uri = URI(GOOGLE_SLIDES + "")
24
24
 
25
25
  # "title" is the only allowed field in the request body
26
- res = post_request(uri, auth_token: @token, body: options.to_json)
27
- response_body = JSON(res.body)
28
-
29
- if response_body["error"]
30
- raise Gslide::Error.new(response_body["error"]["message"])
31
- end
26
+ response_body = post_request(uri, auth_token: @token, body: options.to_json)
32
27
  Presentation.new response_body["presentationId"], auth: self
33
28
  end
34
29
  end
@@ -19,8 +19,8 @@ module Gslide
19
19
  def get
20
20
  uri = URI(GOOGLE_SLIDES + "/#{@id}")
21
21
 
22
- res = get_request(uri, auth_token: @auth.token)
23
- JSON(res.body).convert_keys {|k| k.snake_case.to_sym }
22
+ response_body = get_request(uri, auth_token: @auth.token)
23
+ response_body.convert_keys {|k| k.snake_case.to_sym }
24
24
  end
25
25
 
26
26
  def link_url
@@ -36,23 +36,16 @@ module Gslide
36
36
  uri = URI(GOOGLE_SLIDES + "/#{@id}:batchUpdate")
37
37
  request_body = options.convert_keys { |k| k.to_s.lower_camel_case }.to_json
38
38
 
39
- res = post_request(uri, auth_token: @auth.token, body: request_body)
40
- response_body = JSON(res.body)
41
-
42
- if response_body["error"]
43
- raise Gslide::Error.new(response_body["error"]["message"])
44
- end
39
+ response_body = post_request(uri, auth_token: @auth.token, body: request_body)
45
40
  response_body["presentationId"] == @id
46
-
47
- rescue Gslide::Error => e
48
- if e.message =~ /Quota exceeded/ && (retries += 1) < 3
49
- # "Quota exceeded for quota metric 'Write requests' and limit 'Write requests per minute per user' of service 'slides.googleapis.com' for consumer 'project_number:012345678901'."
41
+ rescue Gslide::QuotaExceededError
42
+ if (retries += 1) < 3
50
43
  sleep 10 + retries * retries * 10
51
44
 
52
45
  retry
53
46
  end
54
- # all retries failed, re-raise exception
55
- raise e
47
+ # all retries failed, raise exception
48
+ raise
56
49
  end
57
50
 
58
51
  def get_slide_ids
@@ -17,8 +17,8 @@ module Gslide
17
17
  def get
18
18
  uri = URI(GOOGLE_SHEETS + "/#{@id}")
19
19
 
20
- res = get_request(uri, auth_token: @auth.token)
21
- JSON(res.body).convert_keys {|k| k.snake_case.to_sym }
20
+ response_body = get_request(uri, auth_token: @auth.token)
21
+ response_body.convert_keys {|k| k.snake_case.to_sym }
22
22
  end
23
23
 
24
24
  def link_url
@@ -32,12 +32,7 @@ module Gslide
32
32
  uri = URI(GOOGLE_SHEETS + "/#{@id}:batchUpdate")
33
33
  request_body = options.convert_keys { |k| k.to_s.lower_camel_case }.to_json
34
34
 
35
- res = post_request(uri, auth_token: @auth.token, body: request_body)
36
- response_body = JSON(res.body)
37
-
38
- if response_body["error"]
39
- raise Gslide::Error.new(response_body["error"]["message"])
40
- end
35
+ response_body = post_request(uri, auth_token: @auth.token, body: request_body)
41
36
  response_body["spreadsheetId"] == @id
42
37
  end
43
38
 
@@ -58,11 +53,8 @@ module Gslide
58
53
  request_body = options.convert_keys { |k| k.to_s.lower_camel_case }.to_json
59
54
 
60
55
  uri = URI(GOOGLE_SHEETS)
61
- res = post_request(uri, auth_token: @auth.token, body: request_body)
62
- response_body = JSON(res.body)
63
- if response_body["error"]
64
- raise Gslide::Error.new(response_body["error"]["message"])
65
- end
56
+ response_body = post_request(uri, auth_token: @auth.token, body: request_body)
57
+
66
58
  spreadsheet_id = response_body["spreadsheetId"]
67
59
  Spreadsheet.new(spreadsheet_id, auth: @auth)
68
60
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Gslide
4
- VERSION = "0.1.1"
4
+ VERSION = "0.1.2"
5
5
  end
data/lib/gslide.rb CHANGED
@@ -7,5 +7,7 @@ require "gslide/models/models"
7
7
 
8
8
  module Gslide
9
9
  class Error < StandardError; end
10
-
10
+ class HTTPError < Error; end
11
+ class UnauthorizedError < HTTPError; end
12
+ class QuotaExceededError < HTTPError; end
11
13
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gslide
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kang-Kyu Lee