concourse.rb 0.4.0 → 0.5.0.pre.1

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: eb8b139f1aab79758d10152e99142dca3847e0663fd1d23fd0a7038a243ced17
4
- data.tar.gz: 3686d042ec39bc7c9ff2e15fc5b09e9586da235ab67f1daba2ef7a824ac1fc3b
3
+ metadata.gz: ca2610029d784fee0b28516c246eb64b9f49f939d24e1854dfcca52af05a5c74
4
+ data.tar.gz: cc90d5d0f12729d4170c5df3b7a0037d3faf0e376aa92754085b1729fbe76ef6
5
5
  SHA512:
6
- metadata.gz: ddc2b6e3e7789e1ec72e2e7e2359cda1958f4adc0e6e2ecc0c78297612f8a52caf29d67957ba678df1e5575121ba8c649b8e651a3ca869bd70e62548cb1ba283
7
- data.tar.gz: b49eb9ea8f046b6cdc5a33a1a95cea3c6d72401edca192989b772011a81d553add099349714774fa1efa59fc176ac1905bcfed4a5fa2fdaa50f4d58e46d9f867
6
+ metadata.gz: a49670a70d1841e4fef6fe713192e005edc80e069d0d0abafb983b56c19ab3c7d0ed740b074844aa7e2e8c70c6bd21d8432e2b8125cf15692f78c0b1a296799f
7
+ data.tar.gz: e686d1181b9252e0f50d244fb1a40ada9aa3a4e8b29cdb22838b69d1e16c4491ce8a5ca358603817940498daf28f60e3a61fa0e9c4ddfde7e7e3973d28dc94a4
data/Gemfile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
4
 
3
5
  # Specify dependencies in concourse.rb.gemspec
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- concourse.rb (0.4.0)
4
+ concourse.rb (0.5.0.pre.1)
5
5
  dry-schema (~> 0.5)
6
6
  excon (~> 0.72)
7
7
  semantic (~> 1.5)
@@ -17,6 +17,7 @@ GEM
17
17
  zeitwerk (~> 2.3)
18
18
  addressable (2.7.0)
19
19
  public_suffix (>= 2.0.2, < 5.0)
20
+ ast (2.4.2)
20
21
  colored2 (3.1.2)
21
22
  concurrent-ruby (1.1.7)
22
23
  diff-lcs (1.4.4)
@@ -73,7 +74,11 @@ GEM
73
74
  sawyer (~> 0.8.0, >= 0.5.3)
74
75
  open4 (1.3.4)
75
76
  openssl (2.2.0)
77
+ parallel (1.20.1)
78
+ parser (3.0.0.0)
79
+ ast (~> 2.4.1)
76
80
  public_suffix (4.0.6)
81
+ rainbow (3.0.0)
77
82
  rake (13.0.3)
78
83
  rake_circle_ci (0.9.0)
79
84
  colored2 (~> 3.1)
@@ -95,6 +100,8 @@ GEM
95
100
  colored2 (~> 3.1)
96
101
  rake_factory (~> 0.23)
97
102
  sshkey (~> 2.0)
103
+ regexp_parser (2.1.1)
104
+ rexml (3.2.4)
98
105
  rspec (3.10.0)
99
106
  rspec-core (~> 3.10.0)
100
107
  rspec-expectations (~> 3.10.0)
@@ -108,6 +115,23 @@ GEM
108
115
  diff-lcs (>= 1.2.0, < 2.0)
109
116
  rspec-support (~> 3.10.0)
110
117
  rspec-support (3.10.1)
118
+ rubocop (1.12.0)
119
+ parallel (~> 1.10)
120
+ parser (>= 3.0.0.0)
121
+ rainbow (>= 2.2.2, < 4.0)
122
+ regexp_parser (>= 1.8, < 3.0)
123
+ rexml
124
+ rubocop-ast (>= 1.2.0, < 2.0)
125
+ ruby-progressbar (~> 1.7)
126
+ unicode-display_width (>= 1.4.0, < 3.0)
127
+ rubocop-ast (1.4.1)
128
+ parser (>= 2.7.1.5)
129
+ rubocop-rake (0.5.1)
130
+ rubocop
131
+ rubocop-rspec (2.2.0)
132
+ rubocop (~> 1.0)
133
+ rubocop-ast (>= 1.1.0)
134
+ ruby-progressbar (1.11.0)
111
135
  ruby2_keywords (0.0.2)
112
136
  ruby_gpg2 (0.8.0)
113
137
  lino (>= 1.5)
@@ -118,6 +142,7 @@ GEM
118
142
  sshkey (2.0.0)
119
143
  tzinfo (2.0.4)
120
144
  concurrent-ruby (~> 1.0)
145
+ unicode-display_width (2.0.0)
121
146
  zeitwerk (2.4.2)
122
147
 
123
148
  PLATFORMS
@@ -138,6 +163,9 @@ DEPENDENCIES
138
163
  rake_gpg (~> 0.12)
139
164
  rake_ssh (~> 0.4)
140
165
  rspec (~> 3.9)
166
+ rubocop (~> 1.12)
167
+ rubocop-rake (~> 0.5)
168
+ rubocop-rspec (~> 2.2)
141
169
 
142
170
  BUNDLED WITH
143
- 2.2.4
171
+ 2.2.15
data/README.md CHANGED
@@ -24,15 +24,35 @@ Add usage here.
24
24
 
25
25
  ## Development
26
26
 
27
- After checking out the repo, run `bin/setup` to install dependencies. Then, run
28
- `rake spec` to run the tests. You can also run `bin/console` for an interactive
29
- prompt that will allow you to experiment.
30
-
31
- To install this gem onto your local machine, run `bundle exec rake install`. To
32
- release a new version, update the version number in `version.rb`, and then run
33
- `bundle exec rake release`, which will create a git tag for the version, push
34
- git commits and tags, and push the `.gem` file to
35
- [rubygems.org](https://rubygems.org).
27
+ To install dependencies and run the build, run the pre-commit build:
28
+
29
+ ```shell script
30
+ ./go
31
+ ```
32
+
33
+ This runs all unit tests and other checks including coverage and code linting /
34
+ formatting.
35
+
36
+ To run only the unit tests, including coverage:
37
+
38
+ ```shell script
39
+ ./go test:unit
40
+ ```
41
+
42
+ To attempt to fix any code linting / formatting issues:
43
+
44
+ ```shell script
45
+ ./go library:fix
46
+ ```
47
+
48
+ To check for code linting / formatting issues without fixing:
49
+
50
+ ```shell script
51
+ ./go library:check
52
+ ```
53
+
54
+ You can also run `bin/console` for an interactive prompt that will allow you to
55
+ experiment.
36
56
 
37
57
  ### Common Tasks
38
58
 
data/Rakefile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'yaml'
2
4
  require 'rake_circle_ci'
3
5
  require 'rake_github'
@@ -5,13 +7,16 @@ require 'rake_ssh'
5
7
  require 'rake_gpg'
6
8
  require 'securerandom'
7
9
  require 'rspec/core/rake_task'
10
+ require 'rubocop/rake_task'
8
11
 
9
- task :default => :spec
10
-
11
- RSpec::Core::RakeTask.new(:spec)
12
+ task default: %i[
13
+ library:fix
14
+ test:unit
15
+ ]
12
16
 
13
17
  namespace :encryption do
14
18
  namespace :passphrase do
19
+ desc 'Generate encryption passphrase for CI GPG key'
15
20
  task :generate do
16
21
  File.open('config/secrets/ci/encryption.passphrase', 'w') do |f|
17
22
  f.write(SecureRandom.base64(36))
@@ -23,86 +28,103 @@ end
23
28
  namespace :keys do
24
29
  namespace :deploy do
25
30
  RakeSSH.define_key_tasks(
26
- path: 'config/secrets/ci/',
27
- comment: 'maintainers@infrablocks.io')
31
+ path: 'config/secrets/ci/',
32
+ comment: 'maintainers@infrablocks.io'
33
+ )
28
34
  end
29
35
 
30
36
  namespace :gpg do
31
37
  RakeGPG.define_generate_key_task(
32
- output_directory: 'config/secrets/ci',
33
- name_prefix: 'gpg',
34
- owner_name: 'InfraBlocks Maintainers',
35
- owner_email: 'maintainers@infrablocks.io',
36
- owner_comment: 'concourse.rb CI Key')
38
+ output_directory: 'config/secrets/ci',
39
+ name_prefix: 'gpg',
40
+ owner_name: 'InfraBlocks Maintainers',
41
+ owner_email: 'maintainers@infrablocks.io',
42
+ owner_comment: 'concourse.rb CI Key'
43
+ )
37
44
  end
38
45
  end
39
46
 
47
+ RuboCop::RakeTask.new
48
+
49
+ namespace :library do
50
+ desc 'Run all checks of the library'
51
+ task check: [:rubocop]
52
+
53
+ desc 'Attempt to automatically fix issues with the library'
54
+ task fix: [:'rubocop:auto_correct']
55
+ end
56
+
57
+ namespace :test do
58
+ RSpec::Core::RakeTask.new(:unit)
59
+ end
60
+
40
61
  RakeCircleCI.define_project_tasks(
41
- namespace: :circle_ci,
42
- project_slug: 'github/infrablocks/concourse.rb'
62
+ namespace: :circle_ci,
63
+ project_slug: 'github/infrablocks/concourse.rb'
43
64
  ) do |t|
44
65
  circle_ci_config =
45
- YAML.load_file('config/secrets/circle_ci/config.yaml')
66
+ YAML.load_file('config/secrets/circle_ci/config.yaml')
46
67
 
47
- t.api_token = circle_ci_config["circle_ci_api_token"]
68
+ t.api_token = circle_ci_config['circle_ci_api_token']
48
69
  t.environment_variables = {
49
- ENCRYPTION_PASSPHRASE:
50
- File.read('config/secrets/ci/encryption.passphrase')
51
- .chomp
70
+ ENCRYPTION_PASSPHRASE:
71
+ File.read('config/secrets/ci/encryption.passphrase')
72
+ .chomp
52
73
  }
53
74
  t.checkout_keys = []
54
75
  t.ssh_keys = [
55
- {
56
- hostname: "github.com",
57
- private_key: File.read('config/secrets/ci/ssh.private')
58
- }
76
+ {
77
+ hostname: 'github.com',
78
+ private_key: File.read('config/secrets/ci/ssh.private')
79
+ }
59
80
  ]
60
81
  end
61
82
 
62
83
  RakeGithub.define_repository_tasks(
63
- namespace: :github,
64
- repository: 'infrablocks/concourse.rb',
84
+ namespace: :github,
85
+ repository: 'infrablocks/concourse.rb'
65
86
  ) do |t|
66
87
  github_config =
67
- YAML.load_file('config/secrets/github/config.yaml')
88
+ YAML.load_file('config/secrets/github/config.yaml')
68
89
 
69
- t.access_token = github_config["github_personal_access_token"]
90
+ t.access_token = github_config['github_personal_access_token']
70
91
  t.deploy_keys = [
71
- {
72
- title: 'CircleCI',
73
- public_key: File.read('config/secrets/ci/ssh.public')
74
- }
92
+ {
93
+ title: 'CircleCI',
94
+ public_key: File.read('config/secrets/ci/ssh.public')
95
+ }
75
96
  ]
76
97
  end
77
98
 
78
99
  namespace :pipeline do
79
- task :prepare => [
80
- :'circle_ci:project:follow',
81
- :'circle_ci:env_vars:ensure',
82
- :'circle_ci:checkout_keys:ensure',
83
- :'circle_ci:ssh_keys:ensure',
84
- :'github:deploy_keys:ensure'
100
+ desc 'Prepare CircleCI Pipeline'
101
+ task prepare: %i[
102
+ circle_ci:project:follow
103
+ circle_ci:env_vars:ensure
104
+ circle_ci:checkout_keys:ensure
105
+ circle_ci:ssh_keys:ensure
106
+ github:deploy_keys:ensure
85
107
  ]
86
108
  end
87
109
 
88
110
  namespace :version do
89
- desc "Bump version for specified type (pre, major, minor, patch)"
111
+ desc 'Bump version for specified type (pre, major, minor, patch)'
90
112
  task :bump, [:type] do |_, args|
91
113
  bump_version_for(args.type)
92
114
  end
93
115
  end
94
116
 
95
- desc "Release gem"
117
+ desc 'Release gem'
96
118
  task :release do
97
- sh "gem release --tag --push"
119
+ sh 'gem release --tag --push'
98
120
  end
99
121
 
100
122
  def bump_version_for(version_type)
101
- sh "gem bump " +
102
- "--skip-ci " +
103
- "--version #{version_type} " +
104
- "--file lib/concourse/version.rb " +
105
- "&& bundle install " +
106
- "&& export LAST_MESSAGE=\"$(git log -1 --pretty=%B)\" " +
107
- "&& git commit -a --amend -m \"${LAST_MESSAGE}\""
123
+ sh 'gem bump ' \
124
+ '--skip-ci ' \
125
+ "--version #{version_type} " \
126
+ '--file lib/concourse/version.rb ' \
127
+ '&& bundle install ' \
128
+ '&& export LAST_MESSAGE="$(git log -1 --pretty=%B)" ' \
129
+ '&& git commit -a --amend -m "${LAST_MESSAGE}"'
108
130
  end
data/bin/console CHANGED
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
4
  require 'bundler/setup'
4
5
  require 'concourse'
data/concourse.rb.gemspec CHANGED
@@ -1,23 +1,34 @@
1
- # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
1
+ # frozen_string_literal: true
2
+
3
+ lib = File.expand_path('lib', __dir__)
3
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
5
  require 'concourse/version'
5
6
  require 'date'
6
7
 
8
+ files = %w[
9
+ bin
10
+ lib
11
+ CODE_OF_CONDUCT.md
12
+ concourse.rb.gemspec
13
+ Gemfile
14
+ LICENSE.txt
15
+ Rakefile
16
+ README.md
17
+ ]
18
+
7
19
  Gem::Specification.new do |spec|
8
20
  spec.name = 'concourse.rb'
9
21
  spec.version = Concourse::VERSION
10
22
  spec.authors = ['Toby Clemson']
11
23
  spec.email = ['tobyclemson@gmail.com']
12
24
 
13
- spec.date = Date.today.to_s
14
25
  spec.summary = 'A Ruby SDK for the Concourse CI API.'
15
26
  spec.description = 'A Ruby SDK for the Concourse CI API.'
16
27
  spec.homepage = 'https://github.com/infrablocks/concourse.rb'
17
28
  spec.license = 'MIT'
18
29
 
19
30
  spec.files = `git ls-files -z`.split("\x0").select do |f|
20
- f.match(%r{^(bin|lib|CODE_OF_CONDUCT\.md|concourse\.rb\.gemspec|Gemfile|LICENSE\.txt|Rakefile|README\.md)})
31
+ f.match(/^(#{files.map { |g| Regexp.escape(g) }.join('|')})/)
21
32
  end
22
33
  spec.bindir = 'exe'
23
34
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
@@ -25,19 +36,22 @@ Gem::Specification.new do |spec|
25
36
 
26
37
  spec.required_ruby_version = '>= 2.6.0'
27
38
 
28
- spec.add_dependency 'excon', '~> 0.72'
29
39
  spec.add_dependency 'dry-schema', '~> 0.5'
40
+ spec.add_dependency 'excon', '~> 0.72'
30
41
  spec.add_dependency 'semantic', '~> 1.5'
31
42
 
32
43
  spec.add_development_dependency 'bundler', '~> 2.0'
44
+ spec.add_development_dependency 'faker', '~> 2.15'
45
+ spec.add_development_dependency 'gem-release', '~> 2.0'
46
+ spec.add_development_dependency 'jwt', '~> 2.2'
47
+ spec.add_development_dependency 'openssl', '~> 2.2'
33
48
  spec.add_development_dependency 'rake', '~> 13.0'
34
49
  spec.add_development_dependency 'rake_circle_ci', '~> 0.9'
35
50
  spec.add_development_dependency 'rake_github', '~> 0.5'
36
- spec.add_development_dependency 'rake_ssh', '~> 0.4'
37
51
  spec.add_development_dependency 'rake_gpg', '~> 0.12'
52
+ spec.add_development_dependency 'rake_ssh', '~> 0.4'
38
53
  spec.add_development_dependency 'rspec', '~> 3.9'
39
- spec.add_development_dependency 'jwt', '~> 2.2'
40
- spec.add_development_dependency 'openssl', '~> 2.2'
41
- spec.add_development_dependency 'faker', '~> 2.15'
42
- spec.add_development_dependency 'gem-release', '~> 2.0'
54
+ spec.add_development_dependency 'rubocop', '~> 1.12'
55
+ spec.add_development_dependency 'rubocop-rake', '~> 0.5'
56
+ spec.add_development_dependency 'rubocop-rspec', '~> 2.2'
43
57
  end
data/lib/concourse.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'concourse/version'
2
4
  require_relative 'concourse/models'
3
5
  require_relative 'concourse/errors'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'excon'
2
4
  require 'json'
3
5
 
@@ -11,15 +13,19 @@ module Concourse
11
13
 
12
14
  def for_skymarshal
13
15
  Concourse::SubClients::SkymarshalClient.new(
14
- @options.merge(version: get_info[:version]))
16
+ @options.merge(version: get_info[:version])
17
+ )
15
18
  end
16
19
 
20
+ # rubocop:disable Naming/AccessorMethodName
17
21
  def get_info
18
22
  JSON.parse(
19
- Excon.get(Concourse::Urls.info_url(@options[:url]))
20
- .body,
21
- symbolize_names: true)
23
+ Excon.get(Concourse::Urls.info_url(@options[:url]))
24
+ .body,
25
+ symbolize_names: true
26
+ )
22
27
  end
28
+ # rubocop:enable Naming/AccessorMethodName
23
29
 
24
30
  def ==(other)
25
31
  other.class == self.class && other.state == state
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Concourse
2
4
  module Errors
3
5
  class ApiError < StandardError
@@ -5,10 +7,10 @@ module Concourse
5
7
  @request = parameters[:request]
6
8
  @response = parameters[:response]
7
9
 
8
- super("Request to #{@request.url} failed " +
9
- "with status #{@response.status} " +
10
- "and body #{@response.body}")
10
+ super("Request to #{@request.url} failed " \
11
+ "with status #{@response.status} " \
12
+ "and body #{@response.body}")
11
13
  end
12
14
  end
13
15
  end
14
- end
16
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'base64'
2
4
 
3
5
  module Concourse
@@ -17,25 +19,25 @@ module Concourse
17
19
 
18
20
  module HeaderNames
19
21
  def self.content_type
20
- "Content-Type"
22
+ 'Content-Type'
21
23
  end
22
-
24
+
23
25
  def self.authorization
24
- "Authorization"
26
+ 'Authorization'
25
27
  end
26
28
 
27
29
  def self.date
28
- "Date"
30
+ 'Date'
29
31
  end
30
32
  end
31
33
 
32
34
  module Headers
33
35
  def self.content_type(content_type)
34
- {Concourse::HeaderNames.content_type => content_type}
36
+ { Concourse::HeaderNames.content_type => content_type }
35
37
  end
36
38
 
37
39
  def self.authorization(authorization)
38
- {Concourse::HeaderNames.authorization => authorization}
40
+ { Concourse::HeaderNames.authorization => authorization }
39
41
  end
40
42
  end
41
- end
43
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Concourse
2
4
  module Http
3
5
  class Request
@@ -26,15 +28,16 @@ module Concourse
26
28
  def state
27
29
  [@url, @headers, @body]
28
30
  end
29
-
30
31
  end
31
32
 
32
33
  def assert_successful(request, response)
33
- unless response.status < 400
34
- raise Errors::ApiError.new(
35
- request: request,
36
- response: response)
37
- end
34
+ raise api_error(request, response) unless response.status < 400
35
+ end
36
+
37
+ private
38
+
39
+ def api_error(request, response)
40
+ Errors::ApiError.new(request: request, response: response)
38
41
  end
39
42
  end
40
- end
43
+ end
@@ -1,6 +1,8 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'concourse/models/token'
2
4
 
3
5
  module Concourse
4
6
  module Models
5
7
  end
6
- end
8
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Concourse
2
4
  module Models
3
5
  class Token
@@ -29,4 +31,4 @@ module Concourse
29
31
  end
30
32
  end
31
33
  end
32
- end
34
+ end
@@ -1,6 +1,8 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'concourse/sub_clients/skymarshal_client'
2
4
 
3
5
  module Concourse
4
6
  module SubClients
5
7
  end
6
- end
8
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'semantic'
2
4
  require 'time'
3
5
  require 'json'
@@ -43,60 +45,87 @@ module Concourse
43
45
  private
44
46
 
45
47
  def create_token_url
46
- @version >= VERSION_6_1 ?
47
- Concourse::Urls.sky_issuer_token_url(@url) :
48
- Concourse::Urls.sky_token_url(@url)
48
+ if @version >= VERSION_6_1
49
+ Concourse::Urls.sky_issuer_token_url(@url)
50
+ else
51
+ Concourse::Urls.sky_token_url(@url)
52
+ end
49
53
  end
50
54
 
51
55
  def create_token_headers
52
56
  {}
53
- .merge(Concourse::Headers.content_type(
54
- Concourse::ContentTypes::APPLICATION_WWW_FORM_URLENCODED))
55
- .merge(Concourse::Headers.authorization(
56
- Concourse::Authorization.basic(
57
- "fly", "Zmx5")))
57
+ .merge(Concourse::Headers.content_type(
58
+ Concourse::ContentTypes::APPLICATION_WWW_FORM_URLENCODED
59
+ ))
60
+ .merge(Concourse::Headers.authorization(
61
+ Concourse::Authorization.basic(
62
+ 'fly', 'Zmx5'
63
+ )
64
+ ))
58
65
  end
59
66
 
60
67
  def create_token_body(parameters)
61
68
  username = parameters[:username]
62
69
  password = parameters[:password]
63
70
 
64
- scope = @version >= VERSION_6_1 ?
65
- 'openid profile email federated:id groups' :
66
- 'openid+profile+email+federated:id+groups'
67
-
68
- URI.encode_www_form({
71
+ URI.encode_www_form(
72
+ {
69
73
  grant_type: 'password',
70
74
  username: username,
71
75
  password: password,
72
76
  scope: scope
73
- })
77
+ }
78
+ )
74
79
  end
75
80
 
76
81
  def token(token_response)
77
- token_response_date = @version >= VERSION_6_1 ?
78
- Time.parse(
79
- token_response.headers[Concourse::HeaderNames.date]) :
80
- nil
81
- token_response_body =
82
- JSON.parse(token_response.body, symbolize_names: true)
83
-
84
- @version >= VERSION_6_1 ?
85
- Models::Token.new(
86
- access_token: token_response_body[:access_token],
87
- token_type: token_response_body[:token_type].downcase,
88
- expires_at:
89
- (token_response_date + token_response_body[:expires_in])
90
- .iso8601,
91
- id_token: token_response_body[:id_token]
92
- ) :
93
- Models::Token.new(
94
- access_token: token_response_body[:access_token],
95
- token_type: token_response_body[:token_type].downcase,
96
- expires_at: token_response_body[:expiry],
97
- id_token: token_response_body[:access_token]
98
- )
82
+ if @version >= VERSION_6_1
83
+ post_version_6_1_token(token_response)
84
+ else
85
+ pre_version_6_1_token(token_response)
86
+ end
87
+ end
88
+
89
+ def scope
90
+ if @version >= VERSION_6_1
91
+ 'openid profile email federated:id groups'
92
+ else
93
+ 'openid+profile+email+federated:id+groups'
94
+ end
95
+ end
96
+
97
+ def token_response_date(token_response)
98
+ Time.parse(token_response.headers[Concourse::HeaderNames.date])
99
+ end
100
+
101
+ def token_response_body(token_response)
102
+ JSON.parse(token_response.body, symbolize_names: true)
103
+ end
104
+
105
+ def pre_version_6_1_token(token_response)
106
+ token_response_body = token_response_body(token_response)
107
+
108
+ Models::Token.new(
109
+ access_token: token_response_body[:access_token],
110
+ token_type: token_response_body[:token_type].downcase,
111
+ expires_at: token_response_body[:expiry],
112
+ id_token: token_response_body[:access_token]
113
+ )
114
+ end
115
+
116
+ def post_version_6_1_token(token_response)
117
+ token_response_body = token_response_body(token_response)
118
+ token_response_date = token_response_date(token_response)
119
+
120
+ Models::Token.new(
121
+ access_token: token_response_body[:access_token],
122
+ token_type: token_response_body[:token_type].downcase,
123
+ expires_at:
124
+ (token_response_date + token_response_body[:expires_in])
125
+ .iso8601,
126
+ id_token: token_response_body[:id_token]
127
+ )
99
128
  end
100
129
  end
101
130
  end
102
- end
131
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Concourse
2
4
  module Urls
3
5
  def self.api_url(concourse_url)
@@ -16,8 +18,6 @@ module Concourse
16
18
  "#{api_url(concourse_url)}/info"
17
19
  end
18
20
 
19
- private
20
-
21
21
  def self.base_url(concourse_url)
22
22
  concourse_url.chomp('/')
23
23
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Concourse
2
- VERSION = '0.4.0'
4
+ VERSION = '0.5.0.pre.1'
3
5
  end
metadata CHANGED
@@ -1,43 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: concourse.rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0.pre.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Toby Clemson
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-01-05 00:00:00.000000000 Z
11
+ date: 2021-04-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: excon
14
+ name: dry-schema
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0.72'
19
+ version: '0.5'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0.72'
26
+ version: '0.5'
27
27
  - !ruby/object:Gem::Dependency
28
- name: dry-schema
28
+ name: excon
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0.5'
33
+ version: '0.72'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '0.5'
40
+ version: '0.72'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: semantic
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -67,61 +67,103 @@ dependencies:
67
67
  - !ruby/object:Gem::Version
68
68
  version: '2.0'
69
69
  - !ruby/object:Gem::Dependency
70
- name: rake
70
+ name: faker
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '13.0'
75
+ version: '2.15'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '13.0'
82
+ version: '2.15'
83
83
  - !ruby/object:Gem::Dependency
84
- name: rake_circle_ci
84
+ name: gem-release
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '0.9'
89
+ version: '2.0'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: '0.9'
96
+ version: '2.0'
97
97
  - !ruby/object:Gem::Dependency
98
- name: rake_github
98
+ name: jwt
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: '0.5'
103
+ version: '2.2'
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: '0.5'
110
+ version: '2.2'
111
111
  - !ruby/object:Gem::Dependency
112
- name: rake_ssh
112
+ name: openssl
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
115
  - - "~>"
116
116
  - !ruby/object:Gem::Version
117
- version: '0.4'
117
+ version: '2.2'
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
- version: '0.4'
124
+ version: '2.2'
125
+ - !ruby/object:Gem::Dependency
126
+ name: rake
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '13.0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '13.0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: rake_circle_ci
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: '0.9'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: '0.9'
153
+ - !ruby/object:Gem::Dependency
154
+ name: rake_github
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - "~>"
158
+ - !ruby/object:Gem::Version
159
+ version: '0.5'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - "~>"
165
+ - !ruby/object:Gem::Version
166
+ version: '0.5'
125
167
  - !ruby/object:Gem::Dependency
126
168
  name: rake_gpg
127
169
  requirement: !ruby/object:Gem::Requirement
@@ -137,75 +179,75 @@ dependencies:
137
179
  - !ruby/object:Gem::Version
138
180
  version: '0.12'
139
181
  - !ruby/object:Gem::Dependency
140
- name: rspec
182
+ name: rake_ssh
141
183
  requirement: !ruby/object:Gem::Requirement
142
184
  requirements:
143
185
  - - "~>"
144
186
  - !ruby/object:Gem::Version
145
- version: '3.9'
187
+ version: '0.4'
146
188
  type: :development
147
189
  prerelease: false
148
190
  version_requirements: !ruby/object:Gem::Requirement
149
191
  requirements:
150
192
  - - "~>"
151
193
  - !ruby/object:Gem::Version
152
- version: '3.9'
194
+ version: '0.4'
153
195
  - !ruby/object:Gem::Dependency
154
- name: jwt
196
+ name: rspec
155
197
  requirement: !ruby/object:Gem::Requirement
156
198
  requirements:
157
199
  - - "~>"
158
200
  - !ruby/object:Gem::Version
159
- version: '2.2'
201
+ version: '3.9'
160
202
  type: :development
161
203
  prerelease: false
162
204
  version_requirements: !ruby/object:Gem::Requirement
163
205
  requirements:
164
206
  - - "~>"
165
207
  - !ruby/object:Gem::Version
166
- version: '2.2'
208
+ version: '3.9'
167
209
  - !ruby/object:Gem::Dependency
168
- name: openssl
210
+ name: rubocop
169
211
  requirement: !ruby/object:Gem::Requirement
170
212
  requirements:
171
213
  - - "~>"
172
214
  - !ruby/object:Gem::Version
173
- version: '2.2'
215
+ version: '1.12'
174
216
  type: :development
175
217
  prerelease: false
176
218
  version_requirements: !ruby/object:Gem::Requirement
177
219
  requirements:
178
220
  - - "~>"
179
221
  - !ruby/object:Gem::Version
180
- version: '2.2'
222
+ version: '1.12'
181
223
  - !ruby/object:Gem::Dependency
182
- name: faker
224
+ name: rubocop-rake
183
225
  requirement: !ruby/object:Gem::Requirement
184
226
  requirements:
185
227
  - - "~>"
186
228
  - !ruby/object:Gem::Version
187
- version: '2.15'
229
+ version: '0.5'
188
230
  type: :development
189
231
  prerelease: false
190
232
  version_requirements: !ruby/object:Gem::Requirement
191
233
  requirements:
192
234
  - - "~>"
193
235
  - !ruby/object:Gem::Version
194
- version: '2.15'
236
+ version: '0.5'
195
237
  - !ruby/object:Gem::Dependency
196
- name: gem-release
238
+ name: rubocop-rspec
197
239
  requirement: !ruby/object:Gem::Requirement
198
240
  requirements:
199
241
  - - "~>"
200
242
  - !ruby/object:Gem::Version
201
- version: '2.0'
243
+ version: '2.2'
202
244
  type: :development
203
245
  prerelease: false
204
246
  version_requirements: !ruby/object:Gem::Requirement
205
247
  requirements:
206
248
  - - "~>"
207
249
  - !ruby/object:Gem::Version
208
- version: '2.0'
250
+ version: '2.2'
209
251
  description: A Ruby SDK for the Concourse CI API.
210
252
  email:
211
253
  - tobyclemson@gmail.com
@@ -248,9 +290,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
248
290
  version: 2.6.0
249
291
  required_rubygems_version: !ruby/object:Gem::Requirement
250
292
  requirements:
251
- - - ">="
293
+ - - ">"
252
294
  - !ruby/object:Gem::Version
253
- version: '0'
295
+ version: 1.3.1
254
296
  requirements: []
255
297
  rubygems_version: 3.0.1
256
298
  signing_key: