openstax_exchange 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -18,6 +18,10 @@ module OpenStax
18
18
  raise NotImplementedError
19
19
  end
20
20
 
21
+ def record_grade(identifier, resource, trial, grade)
22
+ raise NotImplementedError
23
+ end
24
+
21
25
  end
22
26
  end
23
27
  end
@@ -43,6 +43,14 @@ module OpenStax
43
43
  end
44
44
  end
45
45
 
46
+ def self.record_grade(*args)
47
+ begin
48
+ client.record_grade(*args)
49
+ rescue StandardError => error
50
+ raise ClientError.new("record_grade failure", error)
51
+ end
52
+ end
53
+
46
54
  private
47
55
 
48
56
  def self.client
@@ -33,6 +33,7 @@ module OpenStax
33
33
 
34
34
  @token = SecureRandom.hex(64)
35
35
  @multiple_choice_responses = {}
36
+ @grades = {}
36
37
  end
37
38
 
38
39
  def is_real_client?
@@ -66,6 +67,24 @@ module OpenStax
66
67
  'answer' => answer
67
68
  }
68
69
  end
70
+
71
+ def record_grade(identifier, resource, trial, grade, grader)
72
+ host = URI(resource).host
73
+ raise "invalid resource" unless host =~ /openstax\.org\z|localhost\z/
74
+
75
+ @grades[identifier] ||= {}
76
+ @grades[identifier][resource] ||= {}
77
+ @grades[identifier][resource][trial] ||= []
78
+ @grades[identifier][resource][trial] << {grade: grade, grader: grader}
79
+
80
+ return {
81
+ 'identifier' => identifier,
82
+ 'resource' => resource,
83
+ 'trial' => trial,
84
+ 'grade' => grade,
85
+ 'grader' => grader
86
+ }
87
+ end
69
88
  end
70
89
 
71
90
  end
@@ -60,6 +60,24 @@ module OpenStax
60
60
  return JSON.parse(response.body)
61
61
  end
62
62
 
63
+ def record_grade(identifier, resource, trial, grade, grader)
64
+ options = {}
65
+ add_accept_header! options
66
+ add_authorization_header! options
67
+ add_content_type_header! options
68
+
69
+ options[:body] = { identifier: identifier, resource: resource,
70
+ trial: trial, grade: grade, grader: grader }.to_json
71
+
72
+ response = @oauth_token.request(
73
+ :post,
74
+ "#{@server_url}/api/events/platforms/gradings",
75
+ options
76
+ )
77
+
78
+ return JSON.parse(response.body)
79
+ end
80
+
63
81
  private
64
82
 
65
83
  def add_header_hash!(options)
@@ -1,5 +1,5 @@
1
1
  module OpenStax
2
2
  module Exchange
3
- VERSION = "0.1.0"
3
+ VERSION = "0.2.0"
4
4
  end
5
5
  end
@@ -0,0 +1,198 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: http://123:abc@localhost:3003/oauth/token
6
+ body:
7
+ encoding: US-ASCII
8
+ string: grant_type=client_credentials
9
+ headers:
10
+ User-Agent:
11
+ - Faraday v0.9.1
12
+ Content-Type:
13
+ - application/x-www-form-urlencoded
14
+ Accept:
15
+ - ! '*/*'
16
+ response:
17
+ status:
18
+ code: 200
19
+ message: OK
20
+ headers:
21
+ X-Frame-Options:
22
+ - SAMEORIGIN
23
+ X-Xss-Protection:
24
+ - 1; mode=block
25
+ X-Content-Type-Options:
26
+ - nosniff
27
+ Cache-Control:
28
+ - no-store
29
+ Pragma:
30
+ - no-cache
31
+ Content-Type:
32
+ - application/json; charset=utf-8
33
+ Etag:
34
+ - W/"f2964886eb9c7cd1f64e2739e98321e4"
35
+ X-Request-Id:
36
+ - 457cd5be-08c5-460f-9f75-a6ae65f8cf33
37
+ X-Runtime:
38
+ - '0.017691'
39
+ Connection:
40
+ - close
41
+ Server:
42
+ - thin
43
+ body:
44
+ encoding: US-ASCII
45
+ string: ! '{"access_token":"24a5e62794ef61812b4ade1da0a3741a446a87c448cf8ffa267b6a95c97b6cea","token_type":"bearer","scope":"read
46
+ write","created_at":1431390441}'
47
+ http_version:
48
+ recorded_at: Tue, 12 May 2015 00:27:21 GMT
49
+ - request:
50
+ method: post
51
+ uri: http://localhost:3003/api/identifiers
52
+ body:
53
+ encoding: US-ASCII
54
+ string: ''
55
+ headers:
56
+ User-Agent:
57
+ - Faraday v0.9.1
58
+ Accept:
59
+ - application/vnd.exchange.openstax.v1
60
+ Content-Type:
61
+ - application/json
62
+ Authorization:
63
+ - Bearer 24a5e62794ef61812b4ade1da0a3741a446a87c448cf8ffa267b6a95c97b6cea
64
+ Content-Length:
65
+ - '0'
66
+ response:
67
+ status:
68
+ code: 201
69
+ message: Created
70
+ headers:
71
+ X-Frame-Options:
72
+ - SAMEORIGIN
73
+ X-Xss-Protection:
74
+ - 1; mode=block
75
+ X-Content-Type-Options:
76
+ - nosniff
77
+ Date:
78
+ - Tue, 12 May 2015 00:27:21 GMT
79
+ Content-Type:
80
+ - application/json; charset=utf-8
81
+ Etag:
82
+ - W/"2430efaf9cc9bc89900d4eaa04400807"
83
+ Cache-Control:
84
+ - max-age=0, private, must-revalidate
85
+ Set-Cookie:
86
+ - request_method=POST; path=/
87
+ X-Request-Id:
88
+ - 44d442fe-ef13-4e08-bd07-d0d9947abd78
89
+ X-Runtime:
90
+ - '0.062409'
91
+ Connection:
92
+ - close
93
+ Server:
94
+ - thin
95
+ body:
96
+ encoding: US-ASCII
97
+ string: ! '{"read":"8b23c3d2299a1fc6478e28b1f7024a4f14a7945c818b57864616f02149883065","write":"8fc97bc59e6bf2df9fb6612c74c63bf38292b5011f2266b5b78276aed7bd1b86"}'
98
+ http_version:
99
+ recorded_at: Tue, 12 May 2015 00:27:21 GMT
100
+ - request:
101
+ method: post
102
+ uri: http://localhost:3003/api/events/platforms/gradings
103
+ body:
104
+ encoding: UTF-8
105
+ string: ! '{"identifier":"8fc97bc59e6bf2df9fb6612c74c63bf38292b5011f2266b5b78276aed7bd1b86","resource":"https://exercises-dev1.openstax.org/api/exercises/123@1","trial":"1","grade":"0.0","grader":"openstax"}'
106
+ headers:
107
+ User-Agent:
108
+ - Faraday v0.9.1
109
+ Accept:
110
+ - application/vnd.exchange.openstax.v1
111
+ Authorization:
112
+ - Bearer 24a5e62794ef61812b4ade1da0a3741a446a87c448cf8ffa267b6a95c97b6cea
113
+ Content-Type:
114
+ - application/json
115
+ response:
116
+ status:
117
+ code: 201
118
+ message: Created
119
+ headers:
120
+ X-Frame-Options:
121
+ - SAMEORIGIN
122
+ X-Xss-Protection:
123
+ - 1; mode=block
124
+ X-Content-Type-Options:
125
+ - nosniff
126
+ Date:
127
+ - Tue, 12 May 2015 00:27:21 GMT
128
+ Content-Type:
129
+ - application/json; charset=utf-8
130
+ Etag:
131
+ - W/"bfe8018341200e22df35c585e2a0ec5d"
132
+ Cache-Control:
133
+ - max-age=0, private, must-revalidate
134
+ Set-Cookie:
135
+ - request_method=POST; path=/
136
+ X-Request-Id:
137
+ - db32c35a-413c-4482-92f0-d4c2baa49173
138
+ X-Runtime:
139
+ - '0.094311'
140
+ Connection:
141
+ - close
142
+ Server:
143
+ - thin
144
+ body:
145
+ encoding: US-ASCII
146
+ string: ! '{"identifier":"8fc97bc59e6bf2df9fb6612c74c63bf38292b5011f2266b5b78276aed7bd1b86","resource":"https://exercises-dev1.openstax.org/api/exercises/123@1","trial":"1","created_at":"2015-05-12T00:27:21.280Z","grader":"openstax","grade":"0.0"}'
147
+ http_version:
148
+ recorded_at: Tue, 12 May 2015 00:27:21 GMT
149
+ - request:
150
+ method: post
151
+ uri: http://localhost:3003/api/events/platforms/gradings
152
+ body:
153
+ encoding: UTF-8
154
+ string: ! '{"identifier":"8fc97bc59e6bf2df9fb6612c74c63bf38292b5011f2266b5b78276aed7bd1b86","resource":"https://exercises-dev1.openstax.org/api/exercises/123@1","trial":"1","grade":"1.0","grader":"tutor"}'
155
+ headers:
156
+ User-Agent:
157
+ - Faraday v0.9.1
158
+ Accept:
159
+ - application/vnd.exchange.openstax.v1
160
+ Authorization:
161
+ - Bearer 24a5e62794ef61812b4ade1da0a3741a446a87c448cf8ffa267b6a95c97b6cea
162
+ Content-Type:
163
+ - application/json
164
+ response:
165
+ status:
166
+ code: 201
167
+ message: Created
168
+ headers:
169
+ X-Frame-Options:
170
+ - SAMEORIGIN
171
+ X-Xss-Protection:
172
+ - 1; mode=block
173
+ X-Content-Type-Options:
174
+ - nosniff
175
+ Date:
176
+ - Tue, 12 May 2015 00:27:21 GMT
177
+ Content-Type:
178
+ - application/json; charset=utf-8
179
+ Etag:
180
+ - W/"8a5afe915582c7458850da40c2f35e79"
181
+ Cache-Control:
182
+ - max-age=0, private, must-revalidate
183
+ Set-Cookie:
184
+ - request_method=POST; path=/
185
+ X-Request-Id:
186
+ - 7f825b12-c4a7-4b6a-aea3-97db28fcee8a
187
+ X-Runtime:
188
+ - '0.086670'
189
+ Connection:
190
+ - close
191
+ Server:
192
+ - thin
193
+ body:
194
+ encoding: US-ASCII
195
+ string: ! '{"identifier":"8fc97bc59e6bf2df9fb6612c74c63bf38292b5011f2266b5b78276aed7bd1b86","resource":"https://exercises-dev1.openstax.org/api/exercises/123@1","trial":"1","created_at":"2015-05-12T00:27:21.372Z","grader":"tutor","grade":"1.0"}'
196
+ http_version:
197
+ recorded_at: Tue, 12 May 2015 00:27:21 GMT
198
+ recorded_with: VCR 2.9.3
@@ -0,0 +1,148 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: http://123:abc@localhost:3003/oauth/token
6
+ body:
7
+ encoding: US-ASCII
8
+ string: grant_type=client_credentials
9
+ headers:
10
+ User-Agent:
11
+ - Faraday v0.9.1
12
+ Content-Type:
13
+ - application/x-www-form-urlencoded
14
+ Accept:
15
+ - ! '*/*'
16
+ response:
17
+ status:
18
+ code: 200
19
+ message: OK
20
+ headers:
21
+ X-Frame-Options:
22
+ - SAMEORIGIN
23
+ X-Xss-Protection:
24
+ - 1; mode=block
25
+ X-Content-Type-Options:
26
+ - nosniff
27
+ Cache-Control:
28
+ - no-store
29
+ Pragma:
30
+ - no-cache
31
+ Content-Type:
32
+ - application/json; charset=utf-8
33
+ Etag:
34
+ - W/"671e0a562337a825aa19d4a1e8b75206"
35
+ X-Request-Id:
36
+ - 0c7e053f-e805-4c4a-9bf3-a1478d4f00ce
37
+ X-Runtime:
38
+ - '0.016269'
39
+ Connection:
40
+ - close
41
+ Server:
42
+ - thin
43
+ body:
44
+ encoding: US-ASCII
45
+ string: ! '{"access_token":"c0ca319e2588f9f74b8b14c960fd5f4e157a6edf060c36d764a390e082f7f131","token_type":"bearer","scope":"read
46
+ write","created_at":1431390182}'
47
+ http_version:
48
+ recorded_at: Tue, 12 May 2015 00:23:02 GMT
49
+ - request:
50
+ method: post
51
+ uri: http://localhost:3003/api/identifiers
52
+ body:
53
+ encoding: US-ASCII
54
+ string: ''
55
+ headers:
56
+ User-Agent:
57
+ - Faraday v0.9.1
58
+ Accept:
59
+ - application/vnd.exchange.openstax.v1
60
+ Content-Type:
61
+ - application/json
62
+ Authorization:
63
+ - Bearer c0ca319e2588f9f74b8b14c960fd5f4e157a6edf060c36d764a390e082f7f131
64
+ Content-Length:
65
+ - '0'
66
+ response:
67
+ status:
68
+ code: 201
69
+ message: Created
70
+ headers:
71
+ X-Frame-Options:
72
+ - SAMEORIGIN
73
+ X-Xss-Protection:
74
+ - 1; mode=block
75
+ X-Content-Type-Options:
76
+ - nosniff
77
+ Date:
78
+ - Tue, 12 May 2015 00:23:02 GMT
79
+ Content-Type:
80
+ - application/json; charset=utf-8
81
+ Etag:
82
+ - W/"8e5c3fe6bde08de633da0d6153d8d0cc"
83
+ Cache-Control:
84
+ - max-age=0, private, must-revalidate
85
+ Set-Cookie:
86
+ - request_method=POST; path=/
87
+ X-Request-Id:
88
+ - 64d5effc-e4a5-4180-a31f-38e3ddff9f8b
89
+ X-Runtime:
90
+ - '0.063133'
91
+ Connection:
92
+ - close
93
+ Server:
94
+ - thin
95
+ body:
96
+ encoding: US-ASCII
97
+ string: ! '{"read":"383cc2fee618697bf70d7cec3298b05733bb007ce9f18032de065b90709c26d4","write":"e26218f6aa93129c2b4fc84b2548264e3256308d53164212b3d0285b40575843"}'
98
+ http_version:
99
+ recorded_at: Tue, 12 May 2015 00:23:02 GMT
100
+ - request:
101
+ method: post
102
+ uri: http://localhost:3003/api/events/platforms/gradings
103
+ body:
104
+ encoding: UTF-8
105
+ string: ! '{"identifier":"e26218f6aa93129c2b4fc84b2548264e3256308d53164212b3d0285b40575843","resource":"https://example.com/api/exercises/123@1","trial":"1","grade":"1.0","grader":"openstax"}'
106
+ headers:
107
+ User-Agent:
108
+ - Faraday v0.9.1
109
+ Accept:
110
+ - application/vnd.exchange.openstax.v1
111
+ Authorization:
112
+ - Bearer c0ca319e2588f9f74b8b14c960fd5f4e157a6edf060c36d764a390e082f7f131
113
+ Content-Type:
114
+ - application/json
115
+ response:
116
+ status:
117
+ code: 422
118
+ message: Unprocessable Entity
119
+ headers:
120
+ X-Frame-Options:
121
+ - SAMEORIGIN
122
+ X-Xss-Protection:
123
+ - 1; mode=block
124
+ X-Content-Type-Options:
125
+ - nosniff
126
+ Date:
127
+ - Tue, 12 May 2015 00:23:02 GMT
128
+ Content-Type:
129
+ - application/json; charset=utf-8
130
+ Cache-Control:
131
+ - no-cache
132
+ Set-Cookie:
133
+ - request_method=POST; path=/
134
+ X-Request-Id:
135
+ - 09a3a36a-5172-46fe-aca0-115a7077df12
136
+ X-Runtime:
137
+ - '0.039371'
138
+ Connection:
139
+ - close
140
+ Server:
141
+ - thin
142
+ body:
143
+ encoding: US-ASCII
144
+ string: ! '[{"code":"blank","data":{"model":{"id":null,"identifier_id":15,"resource_id":null,"trial":"1","due_at":null,"created_at":null,"updated_at":null},"attribute":"resource"},"kind":"activerecord","message":"can''t
145
+ be blank","offending_inputs":"resource"}]'
146
+ http_version:
147
+ recorded_at: Tue, 12 May 2015 00:23:02 GMT
148
+ recorded_with: VCR 2.9.3
@@ -0,0 +1,249 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: http://123:abc@localhost:3003/oauth/token
6
+ body:
7
+ encoding: US-ASCII
8
+ string: grant_type=client_credentials
9
+ headers:
10
+ User-Agent:
11
+ - Faraday v0.9.1
12
+ Content-Type:
13
+ - application/x-www-form-urlencoded
14
+ Accept:
15
+ - ! '*/*'
16
+ response:
17
+ status:
18
+ code: 200
19
+ message: OK
20
+ headers:
21
+ X-Frame-Options:
22
+ - SAMEORIGIN
23
+ X-Xss-Protection:
24
+ - 1; mode=block
25
+ X-Content-Type-Options:
26
+ - nosniff
27
+ Cache-Control:
28
+ - no-store
29
+ Pragma:
30
+ - no-cache
31
+ Content-Type:
32
+ - application/json; charset=utf-8
33
+ Etag:
34
+ - W/"ab670f60e3a9b5c0efbe4129f1d37624"
35
+ X-Request-Id:
36
+ - 7cc8251c-b438-44c1-ac7c-7d97aacbf814
37
+ X-Runtime:
38
+ - '0.017613'
39
+ Connection:
40
+ - close
41
+ Server:
42
+ - thin
43
+ body:
44
+ encoding: US-ASCII
45
+ string: ! '{"access_token":"958660c63a1f4909480a222d1da43bdf57f9e4aae3c63fb735645fe81d4f19d7","token_type":"bearer","scope":"read
46
+ write","created_at":1431390181}'
47
+ http_version:
48
+ recorded_at: Tue, 12 May 2015 00:23:01 GMT
49
+ - request:
50
+ method: post
51
+ uri: http://localhost:3003/api/identifiers
52
+ body:
53
+ encoding: US-ASCII
54
+ string: ''
55
+ headers:
56
+ User-Agent:
57
+ - Faraday v0.9.1
58
+ Accept:
59
+ - application/vnd.exchange.openstax.v1
60
+ Content-Type:
61
+ - application/json
62
+ Authorization:
63
+ - Bearer 958660c63a1f4909480a222d1da43bdf57f9e4aae3c63fb735645fe81d4f19d7
64
+ Content-Length:
65
+ - '0'
66
+ response:
67
+ status:
68
+ code: 201
69
+ message: Created
70
+ headers:
71
+ X-Frame-Options:
72
+ - SAMEORIGIN
73
+ X-Xss-Protection:
74
+ - 1; mode=block
75
+ X-Content-Type-Options:
76
+ - nosniff
77
+ Date:
78
+ - Tue, 12 May 2015 00:23:01 GMT
79
+ Content-Type:
80
+ - application/json; charset=utf-8
81
+ Etag:
82
+ - W/"789d410da7b2991db05829ab261f60e3"
83
+ Cache-Control:
84
+ - max-age=0, private, must-revalidate
85
+ Set-Cookie:
86
+ - request_method=POST; path=/
87
+ X-Request-Id:
88
+ - f6fcebdb-65dc-4930-baa6-41d70df78f92
89
+ X-Runtime:
90
+ - '0.061422'
91
+ Connection:
92
+ - close
93
+ Server:
94
+ - thin
95
+ body:
96
+ encoding: US-ASCII
97
+ string: ! '{"read":"062be8afc3cfd2dc5ddc418c735d5c00783495b4947815b69289df6865e81ccd","write":"43afc96d250fa4bf6cc62c63c4b5ba22668345e2ac618edc6fdcf4813d44b5d0"}'
98
+ http_version:
99
+ recorded_at: Tue, 12 May 2015 00:23:01 GMT
100
+ - request:
101
+ method: post
102
+ uri: http://localhost:3003/api/identifiers
103
+ body:
104
+ encoding: US-ASCII
105
+ string: ''
106
+ headers:
107
+ User-Agent:
108
+ - Faraday v0.9.1
109
+ Accept:
110
+ - application/vnd.exchange.openstax.v1
111
+ Content-Type:
112
+ - application/json
113
+ Authorization:
114
+ - Bearer 958660c63a1f4909480a222d1da43bdf57f9e4aae3c63fb735645fe81d4f19d7
115
+ Content-Length:
116
+ - '0'
117
+ response:
118
+ status:
119
+ code: 201
120
+ message: Created
121
+ headers:
122
+ X-Frame-Options:
123
+ - SAMEORIGIN
124
+ X-Xss-Protection:
125
+ - 1; mode=block
126
+ X-Content-Type-Options:
127
+ - nosniff
128
+ Date:
129
+ - Tue, 12 May 2015 00:23:01 GMT
130
+ Content-Type:
131
+ - application/json; charset=utf-8
132
+ Etag:
133
+ - W/"90bb024d74098622bdbed99fea1d62f0"
134
+ Cache-Control:
135
+ - max-age=0, private, must-revalidate
136
+ Set-Cookie:
137
+ - request_method=POST; path=/
138
+ X-Request-Id:
139
+ - b4afb357-2b92-45c1-91dd-f407ee2e37c2
140
+ X-Runtime:
141
+ - '0.054959'
142
+ Connection:
143
+ - close
144
+ Server:
145
+ - thin
146
+ body:
147
+ encoding: US-ASCII
148
+ string: ! '{"read":"0d659139fa13163cfd60e6e365646505dad2ac6cff0afece9f01daa7db2b72d7","write":"8ffc8b438bca8f79e4b1ac7b1dfdb55c447e96099e19faf74e57718681e041d0"}'
149
+ http_version:
150
+ recorded_at: Tue, 12 May 2015 00:23:01 GMT
151
+ - request:
152
+ method: post
153
+ uri: http://localhost:3003/api/events/platforms/gradings
154
+ body:
155
+ encoding: UTF-8
156
+ string: ! '{"identifier":"43afc96d250fa4bf6cc62c63c4b5ba22668345e2ac618edc6fdcf4813d44b5d0","resource":"https://exercises-dev1.openstax.org/api/exercises/123@1","trial":"1","grade":"1.0","grader":"openstax"}'
157
+ headers:
158
+ User-Agent:
159
+ - Faraday v0.9.1
160
+ Accept:
161
+ - application/vnd.exchange.openstax.v1
162
+ Authorization:
163
+ - Bearer 958660c63a1f4909480a222d1da43bdf57f9e4aae3c63fb735645fe81d4f19d7
164
+ Content-Type:
165
+ - application/json
166
+ response:
167
+ status:
168
+ code: 201
169
+ message: Created
170
+ headers:
171
+ X-Frame-Options:
172
+ - SAMEORIGIN
173
+ X-Xss-Protection:
174
+ - 1; mode=block
175
+ X-Content-Type-Options:
176
+ - nosniff
177
+ Date:
178
+ - Tue, 12 May 2015 00:23:01 GMT
179
+ Content-Type:
180
+ - application/json; charset=utf-8
181
+ Etag:
182
+ - W/"b8477e35034c555e8d5851ab64cc2670"
183
+ Cache-Control:
184
+ - max-age=0, private, must-revalidate
185
+ Set-Cookie:
186
+ - request_method=POST; path=/
187
+ X-Request-Id:
188
+ - 8e004a6a-a92b-466b-bab2-8a90d7467884
189
+ X-Runtime:
190
+ - '0.096030'
191
+ Connection:
192
+ - close
193
+ Server:
194
+ - thin
195
+ body:
196
+ encoding: US-ASCII
197
+ string: ! '{"identifier":"43afc96d250fa4bf6cc62c63c4b5ba22668345e2ac618edc6fdcf4813d44b5d0","resource":"https://exercises-dev1.openstax.org/api/exercises/123@1","trial":"1","created_at":"2015-05-12T00:23:01.414Z","grader":"openstax","grade":"1.0"}'
198
+ http_version:
199
+ recorded_at: Tue, 12 May 2015 00:23:01 GMT
200
+ - request:
201
+ method: post
202
+ uri: http://localhost:3003/api/events/platforms/gradings
203
+ body:
204
+ encoding: UTF-8
205
+ string: ! '{"identifier":"8ffc8b438bca8f79e4b1ac7b1dfdb55c447e96099e19faf74e57718681e041d0","resource":"https://exercises-dev1.openstax.org/api/exercises/123@1","trial":"1","grade":"1.0","grader":"openstax"}'
206
+ headers:
207
+ User-Agent:
208
+ - Faraday v0.9.1
209
+ Accept:
210
+ - application/vnd.exchange.openstax.v1
211
+ Authorization:
212
+ - Bearer 958660c63a1f4909480a222d1da43bdf57f9e4aae3c63fb735645fe81d4f19d7
213
+ Content-Type:
214
+ - application/json
215
+ response:
216
+ status:
217
+ code: 201
218
+ message: Created
219
+ headers:
220
+ X-Frame-Options:
221
+ - SAMEORIGIN
222
+ X-Xss-Protection:
223
+ - 1; mode=block
224
+ X-Content-Type-Options:
225
+ - nosniff
226
+ Date:
227
+ - Tue, 12 May 2015 00:23:01 GMT
228
+ Content-Type:
229
+ - application/json; charset=utf-8
230
+ Etag:
231
+ - W/"2e96a53698c31e33a3cbaaa39d125557"
232
+ Cache-Control:
233
+ - max-age=0, private, must-revalidate
234
+ Set-Cookie:
235
+ - request_method=POST; path=/
236
+ X-Request-Id:
237
+ - 20a4191f-34c0-4035-9e9e-6a271a5737a6
238
+ X-Runtime:
239
+ - '0.102653'
240
+ Connection:
241
+ - close
242
+ Server:
243
+ - thin
244
+ body:
245
+ encoding: US-ASCII
246
+ string: ! '{"identifier":"8ffc8b438bca8f79e4b1ac7b1dfdb55c447e96099e19faf74e57718681e041d0","resource":"https://exercises-dev1.openstax.org/api/exercises/123@1","trial":"1","created_at":"2015-05-12T00:23:01.519Z","grader":"openstax","grade":"1.0"}'
247
+ http_version:
248
+ recorded_at: Tue, 12 May 2015 00:23:01 GMT
249
+ recorded_with: VCR 2.9.3