api_client_builder 1.4.1 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6fe7e4e6055363b600d2544fab5f2585f30b73da723f2ee928762b0913251190
4
- data.tar.gz: d6a81b59ceacb77cd86d5f4df6badeb21ed15d2f90889cd048a0ffcf8dab0f3e
3
+ metadata.gz: f59cebf79d7809c5aaefdf60a84a0d3bd7d797c5bcb17d00d3cfd4c27af7aa6c
4
+ data.tar.gz: b23e9d509dcb617b8beb41dee7fb499f0dfa8e9bdd4f802b4cde713fd1abb724
5
5
  SHA512:
6
- metadata.gz: 0775c90d669b8fe323902689e9d5c8c12fc7d62039f32704a5a3b2f4158c68aa77a9aa5e7ea4d5fff458435beacd564f5f12ba3145967ee37368c66fd6cb3981
7
- data.tar.gz: 804e72d9df7452aac1756568c9663d61fe6d5c8bf34e9952340a9445cd616a55d5fa041312c3793f2b56e9f1561b7fe55051c47531716ab2a30783cca62ce621
6
+ metadata.gz: 2bb885f59496c7ff2a11ccdced0a31ff182cd8758ee420c14c3ed78cb3445d0f76b290fe0ee08dcb5f5bef945b3d4a98a04df5f749d7491abcc91d939551ba03
7
+ data.tar.gz: 00d6a87b521d7dfa9e3e0d92e2ee573d9c73c85b57f37cc9511a0b71467efb09754525a8dff2961171edc82f23414db426b17639c5e442d348c956f9608b46c5
data/Dockerfile ADDED
@@ -0,0 +1,18 @@
1
+ FROM instructure/ruby-passenger:2.7
2
+
3
+ ENV RAILS_ENV "production"
4
+
5
+ USER root
6
+
7
+ RUN apt-get update -qq \
8
+ && apt-get install -qqy \
9
+ git \
10
+ && rm -rf /var/lib/apt/lists/*
11
+
12
+ USER docker
13
+
14
+ COPY --chown=docker:docker . .
15
+
16
+ RUN bundle install --jobs 8
17
+
18
+ CMD ["tail", "-f", "/dev/null"]
data/Jenkinsfile CHANGED
@@ -3,11 +3,59 @@ pipeline {
3
3
  label 'docker'
4
4
  }
5
5
 
6
+ options {
7
+ parallelsAlwaysFailFast()
8
+ }
9
+
6
10
  stages {
7
- stage('Lint & Test') {
11
+ stage('Build') {
12
+ steps {
13
+ sh 'docker compose build --pull'
14
+ }
15
+ }
16
+
17
+ stage('Spec') {
18
+ steps {
19
+ sh 'docker compose run api_client_builder bundle exec rspec --format doc'
20
+ sh '''
21
+ image=$(docker ps --all --no-trunc | grep spec | cut -f 1 -d " " | head -n 1)
22
+ docker cp "$image:/usr/src/app/coverage" .
23
+ '''
24
+ sh 'ls -als coverage'
25
+ }
26
+
27
+ post {
28
+ always {
29
+ publishHTML target: [
30
+ allowMissing: false,
31
+ alwaysLinkToLastBuild: false,
32
+ keepAll: true,
33
+ reportDir: 'coverage',
34
+ reportFiles: 'index.html',
35
+ reportName: 'Coverage Report'
36
+ ]
37
+ }
38
+ }
39
+ }
40
+
41
+ stage('Publish') {
42
+ when {
43
+ allOf {
44
+ expression { GERRIT_BRANCH == 'master' }
45
+ environment name: 'GERRIT_EVENT_TYPE', value: 'change-merged'
46
+ }
47
+ }
8
48
  steps {
9
- sh './build.sh'
49
+ withCredentials([string(credentialsId: 'rubygems-rw', variable: 'GEM_HOST_API_KEY')]) {
50
+ sh 'docker compose run -e GEM_HOST_API_KEY --rm api_client_builder /bin/bash -lc "./bin/publish.sh"'
51
+ }
10
52
  }
11
53
  }
12
54
  }
55
+
56
+ post {
57
+ cleanup {
58
+ sh 'docker compose down --rmi=all --volumes --remove-orphans'
59
+ }
60
+ }
13
61
  }
data/README.md CHANGED
@@ -396,6 +396,31 @@ end
396
396
 
397
397
  response_body = single_request.response
398
398
  ```
399
+ ## Development
400
+ First copy the compose override example file:
401
+ ```
402
+ cp docker-compose.override.yml.example docker-compose.override.yml
403
+ ```
404
+
405
+ This project uses [Compose watch](https://docs.docker.com/compose/file-watch/) to sync files between host and container.
406
+
407
+ Compose watch will also rebuild the container (and install gems)
408
+ if new dependencies are added to the gemspec.
409
+
410
+ To build the container and start file watching, run the following
411
+ ```
412
+ docker compose watch
413
+ ```
414
+
415
+ To execute tests run
416
+ ```
417
+ docker compose exec api_client_builder rspec
418
+ ```
419
+
420
+ Start a shell in the container with
421
+ ```
422
+ docker compose exec api_client_builder bash
423
+ ```
399
424
 
400
425
  ---
401
426
 
@@ -9,7 +9,7 @@ Gem::Specification.new do |gem|
9
9
  gem.homepage = 'https://github.com/instructure/api-client-builder'
10
10
 
11
11
  gem.version = APIClientBuilder::VERSION
12
- gem.required_ruby_version = '>= 2.3'
12
+ gem.required_ruby_version = '>= 2.7'
13
13
 
14
14
  gem.license = 'MIT'
15
15
 
data/bin/publish.sh ADDED
@@ -0,0 +1,12 @@
1
+ #!/bin/bash
2
+
3
+ set -e
4
+
5
+ current_version=$(ruby -e "require '$(pwd)/lib/api_client_builder/version.rb'; puts APIClientBuilder::VERSION;")
6
+
7
+ if gem list --exact api_client_builder --remote --all | grep -o '\((.*)\)$' | tr '() ,' '\n' | grep -xF "$current_version"; then
8
+ echo "Gem has already been published ... skipping ..."
9
+ else
10
+ gem build ./api_client_builder.gemspec
11
+ find api_client_builder-*.gem | xargs gem push
12
+ fi
@@ -0,0 +1,14 @@
1
+ version: '3.8'
2
+
3
+ services:
4
+ api_client_builder:
5
+ develop:
6
+ watch:
7
+ - action: sync
8
+ path: ./
9
+ target: /usr/src/app
10
+ ignore:
11
+ - coverage
12
+ - .git
13
+ - action: rebuild
14
+ path: api_client_builder.gemspec
@@ -0,0 +1,13 @@
1
+ version: '3.8'
2
+
3
+ volumes:
4
+ bundler-config:
5
+ bundler-gems:
6
+
7
+ services:
8
+ api_client_builder:
9
+ build:
10
+ context: .
11
+ volumes:
12
+ - bundler-config:/home/docker/.bundle
13
+ - bundler-gems:/home/docker/.gem/ruby
@@ -21,7 +21,7 @@ module APIClientBuilder
21
21
  #
22
22
  # @return [URI] the fully built route
23
23
  def build_route(route, **params)
24
- string_params = route.split(%r{[\/=]}).select { |param| param.start_with?(':') }
24
+ string_params = route.split(%r{[\/=&]}).select { |param| param.start_with?(':') }
25
25
  symboled_params = string_params.map { |param| param.tr(':', '').to_sym }
26
26
 
27
27
  new_route = route.clone
@@ -1,3 +1,3 @@
1
1
  module APIClientBuilder
2
- VERSION = '1.4.1'.freeze
2
+ VERSION = '2.0.0'.freeze
3
3
  end
@@ -38,6 +38,27 @@ module APIClientBuilder
38
38
  expect(route).to eq(URI.parse('https://www.domain.com/api/endpoints/route_to_object/%E1%BD%8A9/object/' \
39
39
  '?sample[]=%E1%BD%A48%E1%BD%A49%E1%BD%A4A&success=party%E1%BD%A4C'))
40
40
  end
41
+
42
+ context "and the route has multiple colon params in they query string" do
43
+ let(:url) { 'object_one/:object_one_id/:object_one_id/object&as_user_id=:user_object_id&param_2=:param_2&per_page=100' }
44
+ let(:url_generator) { URLGenerator.new('https://www.domain.com/api/endpoints/') }
45
+
46
+ subject do
47
+ route = url_generator.build_route(
48
+ url,
49
+ object_one_id: '4',
50
+ user_object_id: '1',
51
+ param_2: 'anotherqueryparam'
52
+ )
53
+ end
54
+
55
+ it do
56
+ is_expected.to eq URI.parse(
57
+ 'https://www.domain.com/api/endpoints/object_one/4/4/object&as_user_id=1&param_2=anotherqueryparam&per_page=100'
58
+ )
59
+ end
60
+ end
61
+
41
62
  end
42
63
 
43
64
  context 'route with colon params and non matching keys' do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: api_client_builder
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.1
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jayce Higgins
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-05-24 00:00:00.000000000 Z
11
+ date: 2024-01-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pry
@@ -71,19 +71,23 @@ description: API Client Builder provides an easy to use interface for creating H
71
71
  email:
72
72
  - jhiggins@instructure.com
73
73
  - eng@instructure.com
74
- executables: []
74
+ executables:
75
+ - publish.sh
75
76
  extensions: []
76
77
  extra_rdoc_files: []
77
78
  files:
78
79
  - ".gitignore"
79
80
  - ".rubocop.yml"
80
81
  - ".travis.yml"
82
+ - Dockerfile
81
83
  - Gemfile
82
84
  - Jenkinsfile
83
85
  - LICENSE.txt
84
86
  - README.md
85
87
  - api_client_builder.gemspec
86
- - build.sh
88
+ - bin/publish.sh
89
+ - docker-compose.override.yml.example
90
+ - docker-compose.yml
87
91
  - lib/api_client_builder.rb
88
92
  - lib/api_client_builder/api_client.rb
89
93
  - lib/api_client_builder/delete_request.rb
@@ -120,14 +124,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
120
124
  requirements:
121
125
  - - ">="
122
126
  - !ruby/object:Gem::Version
123
- version: '2.3'
127
+ version: '2.7'
124
128
  required_rubygems_version: !ruby/object:Gem::Requirement
125
129
  requirements:
126
130
  - - ">="
127
131
  - !ruby/object:Gem::Version
128
132
  version: '0'
129
133
  requirements: []
130
- rubygems_version: 3.0.3
134
+ rubygems_version: 3.2.6
131
135
  signing_key:
132
136
  specification_version: 4
133
137
  summary: API Client Builder provides an easy to use interface for creating HTTP api
data/build.sh DELETED
@@ -1,16 +0,0 @@
1
- #!/usr/bin/env bash
2
-
3
- set -e
4
-
5
- docker pull ruby:2.5
6
- docker pull ruby:2.6
7
-
8
- docker run --rm -v "`pwd`:/app" -w /app --user `id -u`:`id -g` -e HOME="/tmp" "ruby:2.3" \
9
- /bin/sh -c "echo \"gem: --no-document\" >> ~/.gemrc && bundle install --jobs 5 --quiet && bundle exec rubocop --cache false --fail-level autocorrect"
10
-
11
- for version in '2.5' '2.6'; do
12
- echo "Testing Ruby $version..."
13
- docker run --rm -v "`pwd`:/app" -w /app --user `id -u`:`id -g` \
14
- -e HOME="/tmp" "ruby:$version" /bin/sh -c \
15
- "echo \"gem: --no-document\" >> ~/.gemrc && bundle install --jobs 5 --quiet && bundle exec rspec"
16
- done