underway 1.1.0 → 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
- SHA1:
3
- metadata.gz: ea67c9db9aa37c2b89c6b4e6c5d70c96808a0628
4
- data.tar.gz: 2e44144648905e30991c8e561f2b6e86073804e2
2
+ SHA256:
3
+ metadata.gz: 625bebc01bb77601adbae0c81624ca3d8855ed867116b9387ac038a46d1b70e8
4
+ data.tar.gz: b9e918961a7dd95bed609e6ada573df2346901c8951ab50bee6eb880edbd5a55
5
5
  SHA512:
6
- metadata.gz: 940689feca04bf0f6eaa358920d22b60039b1e001fb10da571171ca9547693eda20427b83854ff56757e696f1dc4d9cba28bb969e4815817cf8875d18b3643d3
7
- data.tar.gz: '020818b8d5c4a3b06aca9e77efecc4c04a2ac5a0e1eec7bf05f4bda408c77e385d89737e7a7c545c6f462928e8d11f01fb3a9d06404b57c8c0ac9784503a4ad6'
6
+ metadata.gz: 3ed6fcb4ae357a182dacb84fa821cb1252628f7d3ef92b59df5db468483b9f839d9d8d6f9cba9f0095df2545cd828c5275390b06bdd5fe425b5c90e0b8fa3e5b
7
+ data.tar.gz: 59d44eb123657d17e837a7b0b8eb2f2f8396ffc743b1e5a0046554823e07768f6672fda2fb7777140c599ee59df02353c61a32501795999f9b124ec8d5396f2f
@@ -0,0 +1,21 @@
1
+ name: RSpec
2
+
3
+ on: [push]
4
+
5
+ jobs:
6
+ build:
7
+
8
+ runs-on: ubuntu-18.04
9
+
10
+ steps:
11
+ - uses: actions/checkout@master
12
+ - name: Set up Ruby 2.5
13
+ uses: actions/setup-ruby@v1
14
+ with:
15
+ ruby-version: 2.5.x
16
+ - name: Build and test with Rake
17
+ run: |
18
+ sudo apt-get install libsqlite3-dev
19
+ gem install bundler
20
+ bundle install --jobs 4 --retry 3
21
+ bundle exec rake test
data/.gitignore CHANGED
@@ -1,7 +1,7 @@
1
1
  config.json
2
2
  config.json.localhost
3
3
  config.json.prod*
4
- *.pem
4
+ ./*.pem
5
5
  *.db
6
6
  *.gem
7
7
  *.rbc
@@ -4,4 +4,4 @@ rvm:
4
4
  - 2.4
5
5
  - 2.5
6
6
  before_install:
7
- - gem install -v 2.0.1 bundler --no-rdoc --no-ri
7
+ - gem install -v 2.0.1 bundler
@@ -5,6 +5,18 @@ This project adheres to [Semantic Versioning](http://semver.org/).
5
5
  ## [Unreleased][unreleased]
6
6
  - Nothing
7
7
 
8
+ ## [2.0.0] - 2020-07-17
9
+ ### Added
10
+ - `Underway::Api.configure` can now accept individual attributes instead of
11
+ just a config file. When supplying a config file, the `app_root` is no longer
12
+ required, just pass the absolute or relative path to the file
13
+
14
+ ### Changed
15
+ - `Underway::Settings.config` is no longer supported. Use
16
+ `Underway::Settings.configuration` instead
17
+ - `Underway::Settings.configuration.raw` is no longer supported. It is no
18
+ longer possible to retrieve arbitrary values from the config
19
+
8
20
  ## [1.1.0] - 2019-05-21
9
21
  ### Added
10
22
  - `Underway::Api.client_for` helper that returns a configured `Octokit` client
@@ -23,7 +35,8 @@ This project adheres to [Semantic Versioning](http://semver.org/).
23
35
  ### Added
24
36
  - First release
25
37
 
26
- [unreleased]: https://github.com/jamesmartin/underway/compare/v1.1.0...HEAD
38
+ [unreleased]: https://github.com/jamesmartin/underway/compare/v2.0.0...HEAD
39
+ [2.0.0]: https://github.com/jamesmartin/underway/compare/v1.1.0...v2.0.0
27
40
  [1.1.0]: https://github.com/jamesmartin/underway/compare/v1.0.1...v1.1.0
28
41
  [1.0.1]: https://github.com/jamesmartin/underway/compare/v1.0.0...v1.0.1
29
42
  [1.0.0]: https://github.com/jamesmartin/underway/compare/5c7f4d7d3bfc...v1.0.0
data/README.md CHANGED
@@ -27,7 +27,7 @@ changes are documented in the
27
27
  Add this line to your application's Gemfile:
28
28
 
29
29
  ```ruby
30
- gem "underway", "~> 1.0"
30
+ gem "underway", "~> 1.1"
31
31
  ```
32
32
 
33
33
  And then run:
@@ -73,12 +73,27 @@ Sinatra application, do something like this:
73
73
  ```ruby
74
74
  require "underway"
75
75
 
76
- # This assumes that your configuration file and private key file is located in
77
- # the same directory as the current ruby file.
76
+ Underway::Settings.configure do |config|
77
+ # Note: config.app_root is no longer supported as of version 2.0. Just pass
78
+ # the absolute or relative path to the configuration file.
79
+ config.config_filename = "./config.json"
80
+ end
81
+ ```
82
+
83
+ You can also configure Underway by individually setting its configuration
84
+ attributes:
85
+
86
+ ```ruby
87
+ require "underway"
78
88
 
79
89
  Underway::Settings.configure do |config|
80
- config.app_root = __FILE__
81
- config.config_filename = "config.json"
90
+ config.app_id = "some-app-id"
91
+ config.client_id = "some-client-id"
92
+ config.client_secret = "some-client-secret"
93
+ config.database_url = "/some/db/url"
94
+ config.github_api_host = "https://api.github.com"
95
+ config.webhook_secret = "some-webhook-secret"
96
+ config.private_key = "my-pem"
82
97
  end
83
98
  ```
84
99
 
@@ -4,24 +4,24 @@ require "octokit"
4
4
  module Underway
5
5
  class Api
6
6
  # Returns a Sawyer::Resource or PORO from the GitHub REST API
7
- def self.invoke(route, headers: {}, method: :get)
7
+ def self.invoke(route, headers: {}, data: {}, method: :get)
8
8
  debug_octokit! if verbose_logging?
9
9
 
10
- Octokit.api_endpoint = Underway::Settings.config.raw["github_api_host"]
10
+ Octokit.api_endpoint = Underway::Settings.configuration.github_api_host
11
11
 
12
12
  if !headers[:authorization] && !headers["Authorization"]
13
13
  Octokit.bearer_token = generate_jwt
14
14
  end
15
15
 
16
- final_headers = {
16
+ options = {
17
17
  accept: "application/vnd.github.machine-man-preview+json",
18
18
  headers: headers
19
19
  }
20
20
 
21
21
  begin
22
22
  case method
23
- when :post then Octokit.post(route, final_headers)
24
- else Octokit.get(route, final_headers)
23
+ when :post then Octokit.post(route, options.merge(data))
24
+ else Octokit.get(route, options)
25
25
  end
26
26
  rescue Octokit::Error => e
27
27
  { error: e.to_s }
@@ -37,7 +37,7 @@ module Underway
37
37
  return if token.nil?
38
38
 
39
39
  client = Octokit::Client.new(
40
- api_endpoint: Underway::Settings.config.raw["github_api_host"],
40
+ api_endpoint: Underway::Settings.configuration.github_api_host,
41
41
  access_token: token
42
42
  )
43
43
  end
@@ -49,15 +49,15 @@ module Underway
49
49
  # JWT expiration time (10 minute maximum)
50
50
  exp: Time.now.to_i + (10 * 60),
51
51
  # GitHub Apps identifier
52
- iss: Underway::Settings.config.app_issuer
52
+ iss: Underway::Settings.configuration.app_id
53
53
  }
54
54
 
55
- JWT.encode(payload, Underway::Settings.config.private_key, "RS256")
55
+ JWT.encode(payload, Underway::Settings.configuration.private_key, "RS256")
56
56
  end
57
57
 
58
58
  # Returns a valid auth token for the installation
59
59
  def self.installation_token(id:)
60
- if token = Underway::Settings.config.token_cache.lookup_installation_auth_token(id: id)
60
+ if token = Underway::Settings.configuration.token_cache.lookup_installation_auth_token(id: id)
61
61
  log("token cache: hit")
62
62
  return token
63
63
  else
@@ -73,7 +73,7 @@ module Underway
73
73
 
74
74
  token = res.token
75
75
  expires_at = res.expires_at.to_s
76
- Underway::Settings.config.token_cache.store_installation_auth_token(id: id, token: token, expires_at: expires_at)
76
+ Underway::Settings.configuration.token_cache.store_installation_auth_token(id: id, token: token, expires_at: expires_at)
77
77
  token
78
78
  end
79
79
  end
@@ -90,12 +90,12 @@ module Underway
90
90
  end
91
91
 
92
92
  def self.verbose_logging?
93
- !!Underway::Settings.config.verbose_logging
93
+ !!Underway::Settings.configuration.verbose_logging
94
94
  end
95
95
 
96
96
  def self.log(message)
97
97
  if verbose_logging?
98
- ::Underway::Settings.config.logger.info(message)
98
+ ::Underway::Settings.configuration.logger.info(message)
99
99
  end
100
100
  end
101
101
  end
@@ -5,25 +5,39 @@ require "json"
5
5
  module Underway
6
6
  class Settings
7
7
  class Configuration
8
- attr_reader :config, :logger
8
+ SUPPORTED_SETTINGS = [
9
+ :app_id,
10
+ :client_id,
11
+ :client_secret,
12
+ :database_url,
13
+ :github_api_host,
14
+ :logger,
15
+ :private_key,
16
+ :private_key_filename,
17
+ :verbose_logging,
18
+ :webhook_secret,
19
+ ].freeze
20
+
21
+ attr_reader :app_id, :client_id, :client_secret, :database_url,
22
+ :github_api_host, :private_key_filename, :logger, :verbose_logging, :webhook_secret, :config_filename
23
+
9
24
 
10
25
  def initialize
11
26
  @logger = Underway::Logger.new
12
27
  end
13
28
 
14
29
  def load!
15
- @config = JSON.parse(
16
- @app_root.join(@config_filename).read
17
- )
18
- end
19
-
20
- # TODO: deprecate
21
- def raw
22
- @config
23
- end
24
-
25
- def app_root=(directory)
26
- @app_root = Pathname.new(directory).dirname
30
+ if config_filename
31
+ config = JSON.parse(
32
+ Pathname.new(config_filename).read
33
+ )
34
+
35
+ SUPPORTED_SETTINGS.map(&:to_s).each do |setting|
36
+ if config[setting]
37
+ send("#{setting}=", config[setting])
38
+ end
39
+ end
40
+ end
27
41
  end
28
42
 
29
43
  def config_filename=(filename)
@@ -34,42 +48,67 @@ module Underway
34
48
  @logger = logger
35
49
  end
36
50
 
51
+ def database_url=(url)
52
+ @database_url = url
53
+ end
54
+
37
55
  def db
38
56
  @db ||=
39
57
  begin
40
- Underway::DB.configure(config["database_url"])
58
+ Underway::DB.configure(database_url)
41
59
  Underway::DB.instance.database
42
60
  end
43
61
  end
44
62
 
63
+ def github_api_host=(host)
64
+ @github_api_host = host
65
+ end
66
+
45
67
  # The Integration ID
46
68
  # From "About -> ID" at github.com/settings/apps/<app-name>
47
- def app_issuer
48
- @app_issuer ||= config["app_id"]
69
+ def app_id=(id)
70
+ @app_id = id
71
+ end
72
+
73
+ def client_id=(id)
74
+ @client_id = id
75
+ end
76
+
77
+ def client_secret=(secret)
78
+ @client_secret = secret
49
79
  end
50
80
 
51
81
  # Integration webhook secret (for validating that webhooks come from GitHub)
52
- def webhook_secret
53
- @webhook_secret ||= config["webhook_secret"]
82
+ def webhook_secret=(secret)
83
+ @webhook_secret = secret
54
84
  end
55
85
 
56
- def private_key_filename
57
- @app_root.join(config["private_key_filename"])
86
+ def private_key_filename=(filename)
87
+ @private_key_filename = filename
58
88
  end
59
89
 
60
90
  # PEM file for request signing (PKCS#1 RSAPrivateKey format)
61
91
  # (Download from github.com/settings/apps/<app-name> "Private key")
62
92
  def private_pem
63
- @private_pem ||= File.read(private_key_filename)
93
+ @private_pem ||= Pathname.new(private_key_filename).read
64
94
  end
65
95
 
66
- # Private Key for the App, generated based on the PEM file
96
+ # Private Key for the App.
97
+ # Either the explicitly configured private_key value or the contents of
98
+ # the configured private_key_filename.
67
99
  def private_key
68
- @private_key ||= OpenSSL::PKey::RSA.new(private_pem)
100
+ @private_key ||=
101
+ unless private_key_filename.nil?
102
+ OpenSSL::PKey::RSA.new(private_pem)
103
+ end
69
104
  end
70
105
 
71
- def verbose_logging
72
- @verbose ||= config["verbose_logging"]
106
+ def private_key=(key)
107
+ @private_key = OpenSSL::PKey::RSA.new(key)
108
+ end
109
+
110
+ def verbose_logging=(verbose)
111
+ @verbose_logging = !!verbose
73
112
  end
74
113
 
75
114
  def token_cache
@@ -77,12 +116,12 @@ module Underway
77
116
  end
78
117
 
79
118
  def oauth_authorize_url
80
- uri = Addressable::URI.parse(config["github_api_host"])
81
- "#{uri.scheme}://#{uri.domain}/login/oauth/authorize?client_id=#{config["client_id"]}"
119
+ uri = Addressable::URI.parse(github_api_host)
120
+ "#{uri.scheme}://#{uri.domain}/login/oauth/authorize?client_id=#{client_id}"
82
121
  end
83
122
 
84
123
  def oauth_access_token_url(code)
85
- api_host = Addressable::URI.parse(config["github_api_host"])
124
+ api_host = Addressable::URI.parse(github_api_host)
86
125
  template = Addressable::Template.new(
87
126
  "{scheme}://{host}/login/oauth/access_token{?code,client_id,client_secret}"
88
127
  )
@@ -90,8 +129,8 @@ module Underway
90
129
  "scheme" => api_host.scheme,
91
130
  "host" => api_host.domain,
92
131
  "code" => code,
93
- "client_id" => config["client_id"],
94
- "client_secret" => config["client_secret"]
132
+ "client_id" => client_id,
133
+ "client_secret" => client_secret
95
134
  )
96
135
  end
97
136
  end
@@ -102,6 +141,8 @@ module Underway
102
141
  attr_reader :configuration
103
142
 
104
143
  def configure
144
+ reset_configuration!
145
+
105
146
  if block_given?
106
147
  yield configuration
107
148
  else
@@ -111,9 +152,8 @@ module Underway
111
152
  configuration.load!
112
153
  end
113
154
 
114
- # TODO: remove me
115
- def config
116
- configuration
155
+ def reset_configuration!
156
+ @configuration = Configuration.new
117
157
  end
118
158
  end
119
159
 
@@ -8,12 +8,12 @@ module Sinatra
8
8
  end
9
9
 
10
10
  def verbose_logging?
11
- !!::Underway::Settings.config.verbose_logging
11
+ !!::Underway::Settings.configuration.verbose_logging
12
12
  end
13
13
 
14
14
  def log(message)
15
15
  if verbose_logging?
16
- ::Underway::Settings.config.logger.info(message)
16
+ ::Underway::Settings.configuration.logger.info(message)
17
17
  end
18
18
  end
19
19
 
@@ -30,7 +30,7 @@ module Sinatra
30
30
  </pre>
31
31
  <h2>Private PEM file</h2>
32
32
  <pre>
33
- #{::Underway::Settings.config.private_key_filename}
33
+ #{::Underway::Settings.configuration.private_key_filename}
34
34
  </pre>
35
35
  EOS
36
36
  end
@@ -1,3 +1,3 @@
1
1
  module Underway
2
- VERSION = "1.1.0"
2
+ VERSION = "2.0.0"
3
3
  end
@@ -0,0 +1,10 @@
1
+ {
2
+ "app_id":"fixture-app-id",
3
+ "client_id": "fixture-client-id",
4
+ "client_secret": "fixture-client-secret",
5
+ "database_url":"/fixture/db/url",
6
+ "github_api_host":"https://fixture.example.com",
7
+ "private_key_filename":"./test.pem",
8
+ "verbose_logging":true,
9
+ "webhook_secret":"fixture-webhook-secret"
10
+ }
@@ -0,0 +1,16 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIICljCCAX4CCQCkfmagknruqTANBgkqhkiG9w0BAQsFADANMQswCQYDVQQGEwJV
3
+ UzAeFw0yMDA3MTcwMzI3MDlaFw0yMDA4MTYwMzI3MDlaMA0xCzAJBgNVBAYTAlVT
4
+ MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxds9chO6mpmM54MlrIkO
5
+ dK7u42x7VlmSAV/uGqvZi+E/aqiZzgSxqL4LPh7Owv++m6CZR3q7bzwBWTR6h6wC
6
+ mSqoP6n3nYKb270KOQdPKSkd4Br6WrS3qdLzAj3mz9Af3XvEUU0sfOocdDmVPDH2
7
+ NbqsAEmRee8tknMPaXwpBEXQaYTudHGF9mXVaZoAUYUDB5G/mofQLKnRIc7qVxC9
8
+ I9gYfI3Olxr83X1GbBQDRZT3YUoPpt5eH/9d3/ev60tf5KT7pNBJnvHjVfqpTkpq
9
+ AIblfgDtdpUsmpwzoGDuExOoi5ew4sA7bJmhh4iWKugX626RplqmvrZohXlF2q35
10
+ 7QIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQCxRNDfbHixwUReMPchWbDHVdYzU9kf
11
+ GEeooaYImxX+JbXU0f9aj+4DEaAETZUMFfJxdF3qCJgiS62LKGXQ96Inj7cdo9Z8
12
+ 7JXXvKt8o5j7gsf5fNSsPSSJFQz7V7DneRJpFICaqae+CDJ9y7G6ZVRYW26D4z7w
13
+ 21Fl2dk0LU1KqcBFqdXmwFJRdqv+Xoj9NaAydmhPWDz/3nI88cJRQ4l6xr7KHeXz
14
+ w7fHBWbu48B8LAKeokYZ7+pVil7hXNw1cQjOLZOJLLVt8whcMZF6vNqonHHFx8Yd
15
+ upx5+kTTWHuTXEh2rtTfdcWeo5V8Pnt3r4uItUsg+dgyl4l+YPQvpF9A
16
+ -----END CERTIFICATE-----
@@ -0,0 +1,28 @@
1
+ -----BEGIN PRIVATE KEY-----
2
+ MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDF2z1yE7qamYzn
3
+ gyWsiQ50ru7jbHtWWZIBX+4aq9mL4T9qqJnOBLGovgs+Hs7C/76boJlHertvPAFZ
4
+ NHqHrAKZKqg/qfedgpvbvQo5B08pKR3gGvpatLep0vMCPebP0B/de8RRTSx86hx0
5
+ OZU8MfY1uqwASZF57y2Scw9pfCkERdBphO50cYX2ZdVpmgBRhQMHkb+ah9AsqdEh
6
+ zupXEL0j2Bh8jc6XGvzdfUZsFANFlPdhSg+m3l4f/13f96/rS1/kpPuk0Eme8eNV
7
+ +qlOSmoAhuV+AO12lSyanDOgYO4TE6iLl7DiwDtsmaGHiJYq6BfrbpGmWqa+tmiF
8
+ eUXarfntAgMBAAECggEACoMdfqQhs/kYjWxgYgxeIkDxHFA1NV9I7J3GLtCWnGH5
9
+ VpdipJmHPunp+wD0B1RDMk2UF0IkF0Le53hsUi0Hbk/f5JIJP+sikMg4dNM4l31B
10
+ wxhr2MnlQDafBq13R+9M4h2jTpaFGJXvsRUmIq6c4DnszY8bFZlpmHBYj0gzfbCH
11
+ 3YYR1A+1q0JK2Prn2bcGmm2gDZ5+eXhFFMsB2Y3qS9r+Xsd+Uou/v4UG+2sa0zqA
12
+ fSkXahjMc0DD9LizCJCdKgCW0USASpraUXZt6RUPwmhZPvMabOP2q46A6hb8v6Iv
13
+ d/htdFseYCPO1IRlvLzvN/S0HduJHvXNr6KRxt5hGQKBgQD3zMjv79lqpcnHJRMj
14
+ r++DAeo9ImpzQPRh9kWPkyd0ZRde96xvzEYjw8ZkQrKEsjZeLcnNYrQTopTZD3QS
15
+ 6FPOTKGPVa8B6aF/ee3C1A3y/Z26IE9qdqt7Y6x/ukA5ZDSDi3F153BPXlAEDu4J
16
+ Xsci6eQn3O7TPjAhj+HoY2EktwKBgQDMZ1zn3SW6V9FG7qwmQOm7UfPJ/LTPLMsn
17
+ 7HL0+JHOIQdvbTd0stu8xm6Afje3dNWTfcm8z9bgw1GUcEzuhuO87QWRhXBGKBHU
18
+ Us4o1E0qcQmLSfbQfcCNhMhCx7KCfwOtTAfVwl1la3+nvXnjUlQhfogzx/nxm/QR
19
+ 6yHr/a9aewKBgEOInzatEn77QfuxQf8W4tq8ed9BcuuIR1IvcRPJEhapum3aaDdr
20
+ 3629nGMUvlxlyWVvazE7dkJnq9NgX80LXlO6FMngmzqVNrtsOn0/l7Gipwrj5WDp
21
+ iKCvMIL6+qfphFpZdYmhkr0+weXpP7x0BSehwNmQX9JYf3uWIAZal04PAoGBAIoY
22
+ hz8rPNMRg5VtqKbLkl3490EO10VlGPgnGl+BFFj0HabdXesc77IxSfTL0W7Do4vb
23
+ HxHORXli3FnyKTe5sGEyrWFsircLWUhejWQuUtgKuIz/cp3XZ+D0xavAaU0a7OwH
24
+ AwAbKahcoUk9jPzU4XwjlXeOcsIWQCZe+nMK2I7DAoGASrLFEgT3vyUBaGC0T/wy
25
+ O+lK0uHx4BakVLRzpL3c4E7Dv1uyr+wPv0r5R8ta1Ur6JeG/sR2lqIdMZHWC/eYs
26
+ 0r+z8duYu3pO+Y3ncQUOs7xDJKAz+QdhZF7OPNcUV4/eq9yFriB1jXLPnlBk14zK
27
+ s3xzrmV7lPXyzloTldj5FpE=
28
+ -----END PRIVATE KEY-----
@@ -0,0 +1,62 @@
1
+ require_relative "../test_helper"
2
+ require "pry"
3
+
4
+ class SettingsTest < Minitest::Test
5
+
6
+ def setup
7
+ Underway::Settings.reset_configuration!
8
+ end
9
+
10
+ def test_can_set_settings_explicitly
11
+ pem = File.read(File.join(File.dirname(__FILE__), "../fixtures/test.pem"))
12
+
13
+ Underway::Settings.configure do |config|
14
+ config.app_id = "some-app-id"
15
+ config.client_id = "some-client-id"
16
+ config.client_secret = "some-client-secret"
17
+ config.database_url = "/some/db/url"
18
+ config.github_api_host = "https://test.example.com"
19
+ config.webhook_secret = "some-webhook-secret"
20
+ config.private_key = pem
21
+ end
22
+
23
+ config = Underway::Settings.configuration
24
+ assert_equal "some-app-id", config.app_id
25
+ assert_equal "some-client-id", config.client_id
26
+ assert_equal "some-client-secret", config.client_secret
27
+ assert_equal "/some/db/url", config.database_url
28
+ assert_equal "https://test.example.com", config.github_api_host
29
+ assert_equal OpenSSL::PKey::RSA.new(pem).to_pem, config.private_key.to_pem
30
+ assert_equal "some-webhook-secret", config.webhook_secret
31
+ end
32
+
33
+ def test_can_set_settings_from_config_file
34
+ fixture_pem_path = File.absolute_path(File.join(File.dirname(__FILE__), "../fixtures/test.pem"))
35
+
36
+ fixture_config_file_path = File.join(File.dirname(__FILE__), "../fixtures/fixture-cfg.json")
37
+ fixture_config = JSON.parse(File.read(fixture_config_file_path))
38
+ fixture_config["private_key_filename"] = fixture_pem_path
39
+
40
+ # Write the config to a tempfile to update the private_key_filename so it
41
+ # can be read from disk by the settings code.
42
+ test_config = Tempfile.open("config.json") do |f|
43
+ f.write(fixture_config.to_json)
44
+ f
45
+ end
46
+
47
+ Underway::Settings.configure do |config|
48
+ config.config_filename = test_config.path
49
+ end
50
+
51
+ config = Underway::Settings.configuration
52
+
53
+ assert_equal "fixture-app-id", config.app_id
54
+ assert_equal "fixture-client-id", config.client_id
55
+ assert_equal "fixture-client-secret", config.client_secret
56
+ assert_equal "/fixture/db/url", config.database_url
57
+ assert_equal "https://fixture.example.com", config.github_api_host
58
+ fixture_pem = OpenSSL::PKey::RSA.new(File.read(fixture_pem_path))
59
+ assert_equal fixture_pem.to_pem, config.private_key.to_pem
60
+ assert_equal "fixture-webhook-secret", config.webhook_secret
61
+ end
62
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: underway
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Martin
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-05-21 00:00:00.000000000 Z
11
+ date: 2020-07-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -171,6 +171,7 @@ executables: []
171
171
  extensions: []
172
172
  extra_rdoc_files: []
173
173
  files:
174
+ - ".github/workflows/ruby.yml"
174
175
  - ".gitignore"
175
176
  - ".ruby-version"
176
177
  - ".travis.yml"
@@ -193,7 +194,11 @@ files:
193
194
  - lib/underway/sinatra/app_info.rb
194
195
  - lib/underway/token_cache.rb
195
196
  - lib/underway/version.rb
197
+ - test/fixtures/fixture-cfg.json
198
+ - test/fixtures/test-cert.pem
199
+ - test/fixtures/test.pem
196
200
  - test/lib/sawyer_to_json_test.rb
201
+ - test/lib/settings_test.rb
197
202
  - test/lib/token_cache_test.rb
198
203
  - test/sequel_helper.rb
199
204
  - test/test_helper.rb
@@ -217,13 +222,16 @@ required_rubygems_version: !ruby/object:Gem::Requirement
217
222
  - !ruby/object:Gem::Version
218
223
  version: '0'
219
224
  requirements: []
220
- rubyforge_project:
221
- rubygems_version: 2.6.11
225
+ rubygems_version: 3.1.2
222
226
  signing_key:
223
227
  specification_version: 4
224
228
  summary: Quick prototyping helpers for building GitHub Apps.
225
229
  test_files:
230
+ - test/fixtures/fixture-cfg.json
231
+ - test/fixtures/test-cert.pem
232
+ - test/fixtures/test.pem
226
233
  - test/lib/sawyer_to_json_test.rb
234
+ - test/lib/settings_test.rb
227
235
  - test/lib/token_cache_test.rb
228
236
  - test/sequel_helper.rb
229
237
  - test/test_helper.rb