underway 1.1.0 → 2.0.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 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