quiz_api_client 2.3.1 → 2.4.0

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
  SHA1:
3
- metadata.gz: f7699a214c62a08a38ae0bebdd20a2e8eaddd0df
4
- data.tar.gz: 4030369f162e0940b1219810ba3119e42ba8ca18
3
+ metadata.gz: f109a4af811b6581467d20b04bc580c1f2a3c209
4
+ data.tar.gz: 73ffe5b91db4ffa77db9de146b29c8162aaef2db
5
5
  SHA512:
6
- metadata.gz: bb05024dcce94975b684f29c5e84e3aa0d0e610d59c0df21911b1fd966c833876abfa6f43760c34437f47fbe687c33e7d19b2512c8d8902af98e48fe3f4676de
7
- data.tar.gz: aa28886b1b04e984a035844e6b0be54f1033745760b22fbbdabd54d73375a913e243f4523bf11a8f0f6ef4935b8290eae828394a8e34d86d7b7d7b15e1a81ce9
6
+ metadata.gz: 355d7520d371d4cf3a19cb42def9ff1eee21e70eefe6e001b2e0558d6a26dfca1abd9a48d9c184f33ff2bf4ec0d338497729acfa749d73736c490106018509ed
7
+ data.tar.gz: f99bbc820678763fd8caee43d27ea3ee78f6bb02591c3a0bc833889d754421b088a7b218615ea9940b97bc7dbf94cf2073105772fcf1c8dcfe4bcd3ff5fafdda
data/Gemfile CHANGED
@@ -2,5 +2,4 @@ source 'https://rubygems.org'
2
2
 
3
3
  gemspec
4
4
 
5
-
6
5
  gem 'pry'
@@ -1,3 +1,5 @@
1
+ require 'logger'
2
+
1
3
  module QuizApiClient
2
4
  class HttpClient
3
5
  include HTTParty
@@ -6,9 +8,11 @@ module QuizApiClient
6
8
 
7
9
  attr_reader :jwt, :uri
8
10
 
9
- def initialize(uri:, jwt:)
11
+ def initialize(uri:, jwt:, consumer_request_id: nil, logging: true, log_level: :info)
10
12
  @uri = uri
11
13
  @jwt = jwt
14
+ @consumer_request_id = consumer_request_id
15
+ initialize_logger(log_level) if logging
12
16
  end
13
17
 
14
18
  def get(path, all: false, query: {})
@@ -34,6 +38,33 @@ module QuizApiClient
34
38
 
35
39
  private
36
40
 
41
+ def initialize_logger(log_level)
42
+ HTTParty::Logger.add_formatter('quiz_api_client_json_formatter', QuizApiClient::JSONFormatter)
43
+ @logger = ::Logger.new(STDOUT,
44
+ formatter: proc {|_,_,_,msg| msg.merge({consumer_request_id: @consumer_request_id}).to_json },
45
+ level: unfriendly_logger_level(log_level)
46
+ )
47
+ @logger_config = { logger: @logger,
48
+ log_level: log_level,
49
+ log_format: :quiz_api_client_json_formatter
50
+ }
51
+ end
52
+
53
+ def unfriendly_logger_level(level)
54
+ case level
55
+ when :fatal
56
+ ::Logger::FATAL
57
+ when :error
58
+ ::Logger::ERROR
59
+ when :warn
60
+ ::Logger::WARN
61
+ when :info
62
+ ::Logger::INFO
63
+ when :debug
64
+ ::Logger::DEBUG
65
+ end
66
+ end
67
+
37
68
  def make_request(method, path, request_options = {})
38
69
  self.class.send(
39
70
  method,
@@ -57,7 +88,7 @@ module QuizApiClient
57
88
  end
58
89
 
59
90
  def default_request_data
60
- {
91
+ initial_hash = {
61
92
  headers: {
62
93
  'Authorization' => jwt,
63
94
  'AuthType' => 'Signature',
@@ -65,6 +96,11 @@ module QuizApiClient
65
96
  'Content-Type' => 'application/json'
66
97
  }
67
98
  }
99
+
100
+ initial_hash[:headers]['X-Consumer-Request-Id'] = @consumer_request_id if @consumer_request_id
101
+
102
+ initial_hash.merge!(@logger_config) if @logger_config
103
+ initial_hash
68
104
  end
69
105
 
70
106
  def next_page(response)
@@ -0,0 +1,18 @@
1
+ module QuizApiClient
2
+ class JSONFormatter
3
+ def initialize(logger, level)
4
+ @logger = logger
5
+ @level = level.to_sym
6
+ end
7
+
8
+ def format(request, response)
9
+ @logger.send(@level, {
10
+ client_request_id: response.headers.dig('x-request-id', 0),
11
+ request_url: request.last_uri,
12
+ response_code: response.code
13
+ })
14
+ end
15
+ end
16
+ end
17
+
18
+
@@ -4,12 +4,13 @@ module QuizApiClient::Services
4
4
  :protocol, :errors
5
5
 
6
6
  def initialize(consumer_key:, host:,
7
- shared_secret:, protocol: 'https')
7
+ shared_secret:, protocol: 'https', consumer_request_id: nil)
8
8
  @consumer_key = consumer_key
9
9
  @host = host
10
10
  @shared_secret = shared_secret
11
11
  @protocol = protocol
12
12
  @errors = []
13
+ @consumer_request_id = consumer_request_id
13
14
  end
14
15
 
15
16
  private
@@ -21,7 +22,8 @@ module QuizApiClient::Services
21
22
  def client(token:)
22
23
  QuizApiClient::HttpClient.new(
23
24
  uri: uri,
24
- jwt: token
25
+ jwt: token,
26
+ consumer_request_id: @consumer_request_id
25
27
  )
26
28
  end
27
29
  end
@@ -4,11 +4,12 @@ module QuizApiClient::Services
4
4
 
5
5
  attr_reader :consumer_key, :host, :shared_secret, :protocol
6
6
 
7
- def initialize(consumer_key: nil, shared_secret:, host:, protocol: 'https')
7
+ def initialize(consumer_key: nil, consumer_request_id: nil, shared_secret:, host:, protocol: 'https')
8
8
  @consumer_key = consumer_key
9
9
  @host = host
10
10
  @shared_secret = shared_secret
11
11
  @protocol = protocol
12
+ @consumer_request_id = consumer_request_id
12
13
  end
13
14
 
14
15
  def grant_permission(scope:, exp: nil, uuid: nil, **additional_fields)
@@ -1,3 +1,3 @@
1
1
  module QuizApiClient
2
- VERSION = '2.3.1'.freeze
2
+ VERSION = '2.4.0'.freeze
3
3
  end
@@ -3,13 +3,14 @@ require 'jwt'
3
3
 
4
4
  module QuizApiClient
5
5
  class Client
6
- attr_reader :consumer_key, :host, :shared_secret, :protocol
6
+ attr_reader :consumer_key, :consumer_request_id, :host, :protocol, :shared_secret
7
7
 
8
- def initialize(consumer_key:, host:, shared_secret:, protocol: 'https')
8
+ def initialize(consumer_key:, host:, shared_secret:, protocol: 'https', consumer_request_id: nil)
9
9
  @consumer_key = consumer_key
10
10
  @host = host
11
11
  @shared_secret = shared_secret
12
12
  @protocol = protocol
13
+ @consumer_request_id = consumer_request_id
13
14
  end
14
15
 
15
16
  def jwt_service
@@ -69,9 +70,10 @@ module QuizApiClient
69
70
  def service_params
70
71
  {
71
72
  consumer_key: consumer_key,
73
+ consumer_request_id: consumer_request_id,
72
74
  host: host,
73
- shared_secret: shared_secret,
74
- protocol: protocol
75
+ protocol: protocol,
76
+ shared_secret: shared_secret
75
77
  }
76
78
  end
77
79
  end
@@ -80,6 +82,7 @@ end
80
82
  require 'quiz_api_client/version'
81
83
 
82
84
  require 'quiz_api_client/http_client'
85
+ require 'quiz_api_client/json_formatter'
83
86
  require 'quiz_api_client/services/jwt_service'
84
87
  require 'quiz_api_client/services/base_api_service'
85
88
 
@@ -6,8 +6,34 @@ require 'quiz_api_client/version'
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = 'quiz_api_client'
8
8
  spec.version = QuizApiClient::VERSION
9
- spec.authors = ['Chris Wang']
10
- spec.email = ['cwang@instructure.com']
9
+ spec.authors = [
10
+ 'Chris Wang',
11
+ 'Augusto Callejas',
12
+ 'Bryan Petty',
13
+ 'Christian Prescott',
14
+ 'Han Yan',
15
+ 'Jayce Higgins',
16
+ 'Marc Alan Phillips',
17
+ 'Michael Brewer-Davis',
18
+ 'Michael Hargiss',
19
+ 'Omar Khan',
20
+ 'Robin Kuss',
21
+ 'Ryan Taylor'
22
+ ]
23
+ spec.email = [
24
+ 'acallejas@instructure.com',
25
+ 'bpetty@instructure.com',
26
+ 'cprescott@instructure.com',
27
+ 'hyan@instructure.com',
28
+ 'jhiggins@instructure.com',
29
+ 'mphillips@instructure.com',
30
+ 'mbd@instructure.com',
31
+ 'mhargiss@instructure.com',
32
+ 'okhan@instructure.com',
33
+ 'rkuss@instructure.com',
34
+ 'rtaylor@instructure.com',
35
+ 'cwang@instructure.com'
36
+ ]
11
37
  spec.summary = 'Ruby client for quiz_api'
12
38
 
13
39
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
@@ -16,7 +42,7 @@ Gem::Specification.new do |spec|
16
42
  spec.require_paths = ['lib']
17
43
 
18
44
  spec.add_dependency 'httparty', '0.14.0'
19
- spec.add_dependency 'jwt'
45
+ spec.add_dependency 'jwt', '~> 1.5'
20
46
  spec.add_dependency 'link_header'
21
47
 
22
48
  spec.add_development_dependency 'bundler', '~> 1.12'
metadata CHANGED
@@ -1,14 +1,25 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: quiz_api_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.1
4
+ version: 2.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Wang
8
+ - Augusto Callejas
9
+ - Bryan Petty
10
+ - Christian Prescott
11
+ - Han Yan
12
+ - Jayce Higgins
13
+ - Marc Alan Phillips
14
+ - Michael Brewer-Davis
15
+ - Michael Hargiss
16
+ - Omar Khan
17
+ - Robin Kuss
18
+ - Ryan Taylor
8
19
  autorequire:
9
20
  bindir: exe
10
21
  cert_chain: []
11
- date: 2017-09-05 00:00:00.000000000 Z
22
+ date: 2017-09-28 00:00:00.000000000 Z
12
23
  dependencies:
13
24
  - !ruby/object:Gem::Dependency
14
25
  name: httparty
@@ -28,16 +39,16 @@ dependencies:
28
39
  name: jwt
29
40
  requirement: !ruby/object:Gem::Requirement
30
41
  requirements:
31
- - - ">="
42
+ - - "~>"
32
43
  - !ruby/object:Gem::Version
33
- version: '0'
44
+ version: '1.5'
34
45
  type: :runtime
35
46
  prerelease: false
36
47
  version_requirements: !ruby/object:Gem::Requirement
37
48
  requirements:
38
- - - ">="
49
+ - - "~>"
39
50
  - !ruby/object:Gem::Version
40
- version: '0'
51
+ version: '1.5'
41
52
  - !ruby/object:Gem::Dependency
42
53
  name: link_header
43
54
  requirement: !ruby/object:Gem::Requirement
@@ -138,6 +149,17 @@ dependencies:
138
149
  version: '3.0'
139
150
  description:
140
151
  email:
152
+ - acallejas@instructure.com
153
+ - bpetty@instructure.com
154
+ - cprescott@instructure.com
155
+ - hyan@instructure.com
156
+ - jhiggins@instructure.com
157
+ - mphillips@instructure.com
158
+ - mbd@instructure.com
159
+ - mhargiss@instructure.com
160
+ - okhan@instructure.com
161
+ - rkuss@instructure.com
162
+ - rtaylor@instructure.com
141
163
  - cwang@instructure.com
142
164
  executables: []
143
165
  extensions: []
@@ -161,6 +183,7 @@ files:
161
183
  - docker-compose.yml
162
184
  - lib/quiz_api_client.rb
163
185
  - lib/quiz_api_client/http_client.rb
186
+ - lib/quiz_api_client/json_formatter.rb
164
187
  - lib/quiz_api_client/services/base_api_service.rb
165
188
  - lib/quiz_api_client/services/item_analyses_service.rb
166
189
  - lib/quiz_api_client/services/jwt_service.rb