quiz_api_client 2.5.2 → 2.7.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 +5 -5
- data/README.md +6 -8
- data/Rakefile +20 -23
- data/bin/{contracts → contracts-generate} +7 -1
- data/bin/setup +45 -17
- data/build.sh +9 -4
- data/docker-compose.dev.override.yml +4 -0
- data/lib/quiz_api_client.rb +10 -0
- data/lib/quiz_api_client/http_client.rb +1 -0
- data/lib/quiz_api_client/services/items_service.rb +3 -1
- data/lib/quiz_api_client/services/quiz_clone_job_service.rb +16 -0
- data/lib/quiz_api_client/services/shared_banks.rb +29 -0
- data/lib/quiz_api_client/version.rb +1 -1
- metadata +6 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: c62d6c7422e6e7955a1d2ff49b5129adfae616cd48e20586226f8793361cf5d6
|
4
|
+
data.tar.gz: 3109b9e79d25dad954ff33ce31be7a6fab7cb78b10ad11865267ff55e52efd11
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e8d52fbd491cae973d46862f1ea33efc844c12eacf6308c7a5eff9d711a65a9a09769f0f19eec2844696789862ce68bb0859a2ae5cb8b04dbc56401593539407
|
7
|
+
data.tar.gz: 8c989448eab56f161e2a4dfacf6d68f12f7ad4244410e43478374f5cff60942b397312d4b11527e4a6546cc42c8632c93d43575e92db6f6788bd31bec0b451b8
|
data/README.md
CHANGED
@@ -185,21 +185,19 @@ When you add or modify a service, be sure to add or modify contract tests!
|
|
185
185
|
## Contract Tests
|
186
186
|
|
187
187
|
We use [Pact](https://docs.pact.io/) for our contract testing. To generate
|
188
|
-
a Pact file, run `bin/contracts`.
|
189
|
-
|
190
|
-
|
191
|
-
pacts/ directory. It will also attempt to publish the Pact file to a local
|
192
|
-
Pact Broker.
|
188
|
+
a Pact file, run `bin/contracts-generate`. The script will generate the Pact
|
189
|
+
file and place it in the pacts/ directory. It will also attempt to publish the
|
190
|
+
Pact file to a local Pact Broker.
|
193
191
|
|
194
192
|
### Development Workflow:
|
195
193
|
|
196
194
|
1. In the quiz_api repo, spin up the Quiz API service with `bin/dev-setup`
|
197
195
|
2. In the quiz_pact_broker repo, spin up a Pact Broker with `bin/dev-setup`
|
198
196
|
3. In the quiz_api repo, write Pact provider states in the
|
199
|
-
spec/service_consumers/quiz_api_client_ruby/ directory as needed
|
197
|
+
spec/service_consumers/api/quiz_api_client_ruby/ directory as needed
|
200
198
|
4. In this repo's spec/contracts/ directory, write or modify a contract test
|
201
|
-
5. In this repo, run `bin/contracts` to generate a Pact file and
|
202
|
-
the Pact Broker
|
199
|
+
5. In this repo, run `bin/contracts-generate` to generate a Pact file and
|
200
|
+
publish it to the Pact Broker
|
203
201
|
6. In the quiz_api repo, run `bin/contracts` to pull the new Pact file from
|
204
202
|
the Pact Broker and run the updated contract tests against the Quiz API service
|
205
203
|
|
data/Rakefile
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'bundler/gem_tasks'
|
2
2
|
require 'pact_broker/client/tasks'
|
3
3
|
require 'rspec/core/rake_task'
|
4
|
+
require_relative './spec/contracts/pact_config'
|
4
5
|
|
5
6
|
RSpec::Core::RakeTask.new(:spec)
|
6
7
|
|
@@ -20,32 +21,28 @@ task :console do
|
|
20
21
|
end
|
21
22
|
|
22
23
|
# see https://github.com/pact-foundation/pact_broker-client/blob/master/README.md
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
task.pattern = 'pacts/*.json'
|
28
|
-
|
29
|
-
task.pact_broker_base_url = 'http://pact-broker.docker'
|
30
|
-
task.pact_broker_basic_auth = { username: 'pact', password: 'broker' }
|
24
|
+
namespace :broker do
|
25
|
+
PactBroker::Client::PublicationTask.new(:local) do |task|
|
26
|
+
prepare_pact_files_for_publishing(task)
|
27
|
+
end
|
31
28
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
end
|
29
|
+
PactBroker::Client::PublicationTask.new(:jenkins_post_merge) do |task|
|
30
|
+
prepare_pact_files_for_publishing(task)
|
31
|
+
end
|
36
32
|
|
37
|
-
|
38
|
-
|
33
|
+
def prepare_pact_files_for_publishing(task)
|
34
|
+
task.pattern = 'pacts/*.json'
|
39
35
|
|
40
|
-
|
41
|
-
|
36
|
+
task.pact_broker_base_url = PactConfig.broker_host
|
37
|
+
task.pact_broker_basic_auth = {
|
38
|
+
username: PactConfig.broker_username,
|
39
|
+
password: PactConfig.broker_password
|
40
|
+
}
|
42
41
|
|
43
|
-
|
44
|
-
|
45
|
-
username: ENV.fetch('PACT_BROKER_BASIC_AUTH_USERNAME'),
|
46
|
-
password: ENV.fetch('PACT_BROKER_BASIC_AUTH_PASSWORD')
|
47
|
-
}
|
42
|
+
task.consumer_version = PactConfig.consumer_version
|
43
|
+
puts "Consumer version: #{task.consumer_version}"
|
48
44
|
|
49
|
-
|
50
|
-
|
45
|
+
task.tag = PactConfig.consumer_tag
|
46
|
+
puts "Pact file tagged with: #{task.tag}"
|
47
|
+
end
|
51
48
|
end
|
@@ -12,10 +12,16 @@ function print_results() {
|
|
12
12
|
|
13
13
|
docker cp contracts:/usr/src/app/log . &> /dev/null
|
14
14
|
docker cp contracts:/usr/src/app/pacts . &> /dev/null
|
15
|
+
docker rm -f contracts &> /dev/null
|
15
16
|
|
16
17
|
docker-compose rm -fv contracts-testrunner &> /dev/null
|
17
18
|
}
|
18
19
|
trap print_results INT TERM EXIT
|
19
20
|
set -e
|
20
21
|
|
21
|
-
|
22
|
+
rm -rf pacts
|
23
|
+
sha="$(git rev-parse --short HEAD)"
|
24
|
+
|
25
|
+
|
26
|
+
docker-compose run --name contracts -e SHA="${sha}" contracts-testrunner bash -c \
|
27
|
+
"bundle && bundle exec rspec spec/contracts && bundle exec rake broker:pact:publish:local"
|
data/bin/setup
CHANGED
@@ -15,23 +15,51 @@ function print_results() {
|
|
15
15
|
trap print_results INT TERM EXIT
|
16
16
|
set -e
|
17
17
|
|
18
|
+
OSNAME=$(uname | tr "[:upper:]" "[:lower:]")
|
19
|
+
|
20
|
+
function generate_docker_override_os () {
|
21
|
+
sed -E "s/#(.*# ${OSNAME}$)/\1/"
|
22
|
+
}
|
23
|
+
|
24
|
+
function generate_docker_override_filesystem () {
|
25
|
+
if [ -z "${IGNORE_FILESYSTEM_OVERRIDE}" ]; then
|
26
|
+
sed -E "s/#(.*# ${OSNAME}:fs)/\1/"
|
27
|
+
else
|
28
|
+
cat
|
29
|
+
fi
|
30
|
+
}
|
31
|
+
|
32
|
+
function generate_docker_override() {
|
33
|
+
if [ -e docker-compose.override.yml ]; then
|
34
|
+
echo "We found an existing docker-compose.override.yml"
|
35
|
+
echo ""
|
36
|
+
echo "You'll want to merge that file with the version controlled
|
37
|
+
docker-compose.dev.override.yml file to make sure you've got
|
38
|
+
the most recent changes"
|
39
|
+
echo ""
|
40
|
+
else
|
41
|
+
echo "we are building the development example override file to docker-compose.override.yml for you"
|
42
|
+
generate_docker_override_os < docker-compose.dev.override.yml | \
|
43
|
+
generate_docker_override_filesystem > docker-compose.override.yml
|
44
|
+
fi
|
45
|
+
}
|
46
|
+
|
47
|
+
function os_linux_specific_setup() {
|
48
|
+
mkdir -p log pacts
|
49
|
+
}
|
50
|
+
|
51
|
+
os_specific_setup() {
|
52
|
+
echo Configuring for "${OSNAME}"
|
53
|
+
case ${OSNAME} in
|
54
|
+
linux)
|
55
|
+
os_linux_specific_setup
|
56
|
+
;;
|
57
|
+
esac
|
58
|
+
}
|
59
|
+
|
60
|
+
os_specific_setup
|
61
|
+
generate_docker_override
|
62
|
+
|
18
63
|
echo ""
|
19
64
|
echo "Preparing environment for native development..."
|
20
65
|
bundle install
|
21
|
-
|
22
|
-
echo ""
|
23
|
-
echo "Preparing environment for dockerized development (if you choose to use it)..."
|
24
|
-
|
25
|
-
override_file='docker-compose.override.yml'
|
26
|
-
dev_override_file='docker-compose.dev.override.yml'
|
27
|
-
if [ -f ${override_file} ] && ! cmp ${override_file} ${dev_override_file} --silent; then
|
28
|
-
echo "We found an existing ${override_file}"
|
29
|
-
echo ""
|
30
|
-
echo "You'll want to merge that file with the version controlled
|
31
|
-
docker-compose.dev.override.yml file to make sure you've got
|
32
|
-
the most recent changes."
|
33
|
-
echo ""
|
34
|
-
else
|
35
|
-
echo "We are copying the development example override file to docker-compose.override.yml for you."
|
36
|
-
cp ${dev_override_file} ${override_file}
|
37
|
-
fi
|
data/build.sh
CHANGED
@@ -6,11 +6,16 @@ function publish_pact_file_to_pact_broker()
|
|
6
6
|
{
|
7
7
|
echo "Publishing pact file to Pact Broker..."
|
8
8
|
|
9
|
+
sha="$(git rev-parse --short HEAD)"
|
10
|
+
|
9
11
|
docker-compose run --rm \
|
10
|
-
-e
|
11
|
-
-e
|
12
|
-
-e
|
13
|
-
|
12
|
+
-e JENKINS_URL="${JENKINS_URL}" \
|
13
|
+
-e PACT_BROKER_HOST="${PACT_BROKER_HOST}" \
|
14
|
+
-e PACT_BROKER_USERNAME="${PACT_BROKER_USERNAME}" \
|
15
|
+
-e PACT_BROKER_PASSWORD="${PACT_BROKER_PASSWORD}" \
|
16
|
+
-e PACT_CONSUMER_TAG="${PACT_CONSUMER_TAG}" \
|
17
|
+
-e SHA="${sha}" \
|
18
|
+
contracts-testrunner bundle exec rake broker:pact:publish:jenkins_post_merge
|
14
19
|
}
|
15
20
|
|
16
21
|
function cleanup() {
|
@@ -7,9 +7,13 @@ services:
|
|
7
7
|
- bundler-config:/home/docker/.rvm/gems/ruby-2.4.0
|
8
8
|
|
9
9
|
contracts-testrunner:
|
10
|
+
#external_links: # linux
|
11
|
+
# - dory_dinghy_http_proxy:pact-broker.docker # linux
|
10
12
|
volumes:
|
11
13
|
- .:/usr/src/app
|
14
|
+
#- api-logs:/usr/src/app/log # linux:fs
|
12
15
|
- bundler-config:/home/docker/.rvm/gems/ruby-2.4.0
|
13
16
|
|
14
17
|
volumes:
|
15
18
|
bundler-config: {}
|
19
|
+
api-logs: {}
|
data/lib/quiz_api_client.rb
CHANGED
@@ -34,6 +34,10 @@ module QuizApiClient
|
|
34
34
|
@_quiz_sessions_service ||= Services::QuizSessionsService.new(service_params)
|
35
35
|
end
|
36
36
|
|
37
|
+
def quiz_clone_job_service
|
38
|
+
@_quiz_clone_job_service ||= Services::QuizCloneJobService.new(service_params)
|
39
|
+
end
|
40
|
+
|
37
41
|
def quiz_clone_jobs_service
|
38
42
|
@_quiz_clone_jobs_service ||= Services::QuizCloneJobsService.new(service_params)
|
39
43
|
end
|
@@ -78,6 +82,10 @@ module QuizApiClient
|
|
78
82
|
@_interaction_types_service ||= QuizApiClient::Services::InteractionTypesService.new(service_params)
|
79
83
|
end
|
80
84
|
|
85
|
+
def shared_banks
|
86
|
+
@_shared_banks ||= QuizApiClient::Services::SharedBanks.new(service_params)
|
87
|
+
end
|
88
|
+
|
81
89
|
private
|
82
90
|
|
83
91
|
def service_params
|
@@ -111,6 +119,8 @@ require 'quiz_api_client/services/quiz_sessions_service'
|
|
111
119
|
require 'quiz_api_client/services/quiz_service'
|
112
120
|
require 'quiz_api_client/services/quizzes_service'
|
113
121
|
require 'quiz_api_client/services/quiz_session_result_service'
|
122
|
+
require 'quiz_api_client/services/quiz_clone_job_service'
|
114
123
|
require 'quiz_api_client/services/quiz_clone_jobs_service'
|
115
124
|
require 'quiz_api_client/services/session_items_service'
|
116
125
|
require 'quiz_api_client/services/session_item_results_service'
|
126
|
+
require 'quiz_api_client/services/shared_banks'
|
@@ -90,6 +90,7 @@ module QuizApiClient
|
|
90
90
|
|
91
91
|
until request_url.nil?
|
92
92
|
resp = make_request(method, request_url, request_options)
|
93
|
+
raise RequestFailed, "#{url} responded #{resp.body} (#{resp.code})" unless resp.code == 200
|
93
94
|
entities.concat(resp.parsed_response)
|
94
95
|
request_url, request_options = next_page(resp, url, options)
|
95
96
|
end
|
@@ -8,8 +8,10 @@ module QuizApiClient::Services
|
|
8
8
|
private
|
9
9
|
|
10
10
|
def post_to_quiz_api(params:, token:)
|
11
|
+
quiz_id = params.delete(:quiz_id)
|
11
12
|
client(token: token).post(
|
12
|
-
"/api/quizzes/#{
|
13
|
+
"/api/quizzes/#{quiz_id}/items",
|
14
|
+
quiz_id: quiz_id,
|
13
15
|
item: params
|
14
16
|
)
|
15
17
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module QuizApiClient::Services
|
2
|
+
class QuizCloneJobService < BaseApiService
|
3
|
+
def show(params:, token: nil)
|
4
|
+
raise 'Quiz Clone Job Id Required' unless params && params[:id]
|
5
|
+
get_from_quiz_api(params: params, token: token)
|
6
|
+
end
|
7
|
+
|
8
|
+
private
|
9
|
+
|
10
|
+
def get_from_quiz_api(params:, token:)
|
11
|
+
client(token: token).get(
|
12
|
+
"/api/quiz_clone_jobs/#{params.fetch(:id)}"
|
13
|
+
)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module QuizApiClient::Services
|
2
|
+
class SharedBanks < BaseApiService
|
3
|
+
def list(params:, token: nil, all: false)
|
4
|
+
raise 'Bank Id Required' unless params && params[:bank_id]
|
5
|
+
client(token: token).get(
|
6
|
+
"/api/banks/#{params[:bank_id]}/shared_banks",
|
7
|
+
all: all
|
8
|
+
)
|
9
|
+
end
|
10
|
+
|
11
|
+
def create(params:, token: nil)
|
12
|
+
raise 'Bank Id Required' unless params && params[:bank_id]
|
13
|
+
client(token: token).post(
|
14
|
+
"/api/banks/#{params[:bank_id]}/shared_banks",
|
15
|
+
params
|
16
|
+
)
|
17
|
+
end
|
18
|
+
|
19
|
+
def update(params:, token: nil)
|
20
|
+
raise 'Bank Id Required' unless params && params[:bank_id]
|
21
|
+
raise 'Shared Bank Id Required' unless params && params[:shared_bank_id]
|
22
|
+
shared_bank_id = params.delete(:shared_bank_id)
|
23
|
+
client(token: token).put(
|
24
|
+
"/api/banks/#{params[:bank_id]}/shared_banks/#{shared_bank_id}",
|
25
|
+
params
|
26
|
+
)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: quiz_api_client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chris Wang
|
@@ -19,7 +19,7 @@ authors:
|
|
19
19
|
autorequire:
|
20
20
|
bindir: exe
|
21
21
|
cert_chain: []
|
22
|
-
date: 2018-
|
22
|
+
date: 2018-10-15 00:00:00.000000000 Z
|
23
23
|
dependencies:
|
24
24
|
- !ruby/object:Gem::Dependency
|
25
25
|
name: httparty
|
@@ -210,7 +210,7 @@ files:
|
|
210
210
|
- README.md
|
211
211
|
- Rakefile
|
212
212
|
- bin/console
|
213
|
-
- bin/contracts
|
213
|
+
- bin/contracts-generate
|
214
214
|
- bin/setup
|
215
215
|
- build.sh
|
216
216
|
- docker-compose.dev.override.yml
|
@@ -225,6 +225,7 @@ files:
|
|
225
225
|
- lib/quiz_api_client/services/jwt_service.rb
|
226
226
|
- lib/quiz_api_client/services/qti_imports_service.rb
|
227
227
|
- lib/quiz_api_client/services/quiz_analyses_service.rb
|
228
|
+
- lib/quiz_api_client/services/quiz_clone_job_service.rb
|
228
229
|
- lib/quiz_api_client/services/quiz_clone_jobs_service.rb
|
229
230
|
- lib/quiz_api_client/services/quiz_entries_service.rb
|
230
231
|
- lib/quiz_api_client/services/quiz_service.rb
|
@@ -235,6 +236,7 @@ files:
|
|
235
236
|
- lib/quiz_api_client/services/quizzes_service.rb
|
236
237
|
- lib/quiz_api_client/services/session_item_results_service.rb
|
237
238
|
- lib/quiz_api_client/services/session_items_service.rb
|
239
|
+
- lib/quiz_api_client/services/shared_banks.rb
|
238
240
|
- lib/quiz_api_client/version.rb
|
239
241
|
- quiz_api_client.gemspec
|
240
242
|
homepage:
|
@@ -256,7 +258,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
256
258
|
version: '0'
|
257
259
|
requirements: []
|
258
260
|
rubyforge_project:
|
259
|
-
rubygems_version: 2.6
|
261
|
+
rubygems_version: 2.7.6
|
260
262
|
signing_key:
|
261
263
|
specification_version: 4
|
262
264
|
summary: Ruby client for quiz_api
|