exercism_config 0.2.0 → 0.8.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 +4 -4
- data/.gitignore +2 -0
- data/Gemfile +0 -1
- data/Gemfile.lock +6 -4
- data/README.md +7 -5
- data/exercism_config.gemspec +1 -0
- data/lib/exercism/config.rb +12 -0
- data/lib/exercism_config.rb +6 -2
- data/lib/exercism_config/retrieve.rb +36 -4
- data/lib/exercism_config/version.rb +1 -1
- metadata +17 -3
- data/lib/exercism_config/config.rb +0 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 88b56d3b63a3c39cd0b9fe8fede5ff57d2d3ee12b3fb3450d29cfd1363c94bc7
|
4
|
+
data.tar.gz: b77887786a3687cd111b81609f1a2678a7b4d85155994c3a24365245f3be187b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f3c00254886aa8133307e0fc425623535bedd4cc78d6420deb4b96b12738893891f504fa97a6b501d72d067fe2d66c326b8176c99a1053e6529cea805b55e870
|
7
|
+
data.tar.gz: 03fdb3ffd88cb447ab417c5348b52ebe7793fb92e0e4e3a9f3e559ed98bcd5ff2bfe0bebbad0b8d17260ab13669830db7a168eaf839608c35d1facd1b6af827e
|
data/.gitignore
CHANGED
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
exercism_config (0.
|
4
|
+
exercism_config (0.6.0)
|
5
5
|
aws-sdk-dynamodb (~> 1.0)
|
6
6
|
mandate
|
7
7
|
zeitwerk
|
@@ -10,8 +10,8 @@ GEM
|
|
10
10
|
remote: https://rubygems.org/
|
11
11
|
specs:
|
12
12
|
aws-eventstream (1.1.0)
|
13
|
-
aws-partitions (1.
|
14
|
-
aws-sdk-core (3.104.
|
13
|
+
aws-partitions (1.345.0)
|
14
|
+
aws-sdk-core (3.104.3)
|
15
15
|
aws-eventstream (~> 1, >= 1.0.2)
|
16
16
|
aws-partitions (~> 1, >= 1.239.0)
|
17
17
|
aws-sigv4 (~> 1.1)
|
@@ -24,8 +24,9 @@ GEM
|
|
24
24
|
jmespath (1.4.0)
|
25
25
|
mandate (0.3.0)
|
26
26
|
minitest (5.14.1)
|
27
|
+
mocha (1.11.2)
|
27
28
|
rake (12.3.3)
|
28
|
-
zeitwerk (2.
|
29
|
+
zeitwerk (2.4.0)
|
29
30
|
|
30
31
|
PLATFORMS
|
31
32
|
ruby
|
@@ -34,6 +35,7 @@ DEPENDENCIES
|
|
34
35
|
bundler (~> 2.1)
|
35
36
|
exercism_config!
|
36
37
|
minitest (~> 5.0)
|
38
|
+
mocha
|
37
39
|
rake (~> 12.0)
|
38
40
|
|
39
41
|
BUNDLED WITH
|
data/README.md
CHANGED
@@ -1,15 +1,16 @@
|
|
1
1
|
# Exercism Config
|
2
2
|
|
3
|
-
When terraform creates Exercism's infrastructure, it writes endpoints and DNS entries to DynamoDB.
|
3
|
+
When terraform creates Exercism's infrastructure, it writes endpoints and DNS entries to DynamoDB.
|
4
4
|
This gem allows you to trivially retrieve that data.
|
5
5
|
|
6
|
-
When running on AWS, simply ensure the machine has read-access to the relevant table (currently hardcoded to `config`).
|
6
|
+
When running on AWS, simply ensure the machine has read-access to the relevant table (currently hardcoded to `config`).
|
7
7
|
On a local machine specify the AWS_PROFILE environment variable with the relevant profile stored in your `.aws/credentials`.
|
8
8
|
|
9
|
-
## Usage
|
9
|
+
## Usage
|
10
10
|
|
11
11
|
Simply include this gem in your Gemfile, require it, and then refer to the object:
|
12
|
-
|
12
|
+
|
13
|
+
```ruby
|
13
14
|
# Gemfile
|
14
15
|
gem 'exercism_config'
|
15
16
|
|
@@ -19,6 +20,7 @@ ExercismConfig.config.webservers_alb_dns_name
|
|
19
20
|
```
|
20
21
|
|
21
22
|
To print out all the config from the command-line, you can run:
|
22
|
-
|
23
|
+
|
24
|
+
```bash
|
23
25
|
AWS_PROFILE=exercism_terraform ./bin/run
|
24
26
|
```
|
data/exercism_config.gemspec
CHANGED
data/lib/exercism_config.rb
CHANGED
@@ -2,13 +2,17 @@ require "exercism_config/version"
|
|
2
2
|
require 'aws-sdk-dynamodb'
|
3
3
|
require 'mandate'
|
4
4
|
require "ostruct"
|
5
|
+
require 'json'
|
5
6
|
|
6
7
|
require "zeitwerk"
|
7
8
|
loader = Zeitwerk::Loader.for_gem
|
8
9
|
loader.setup
|
9
10
|
|
10
|
-
module
|
11
|
+
module Exercism
|
12
|
+
class ConfigError < RuntimeError
|
13
|
+
end
|
14
|
+
|
11
15
|
def self.config
|
12
|
-
@config ||= Retrieve.()
|
16
|
+
@config ||= ExercismConfig::Retrieve.()
|
13
17
|
end
|
14
18
|
end
|
@@ -2,22 +2,54 @@ module ExercismConfig
|
|
2
2
|
class Retrieve
|
3
3
|
include Mandate
|
4
4
|
|
5
|
+
def initialize(environment = nil)
|
6
|
+
@environment = environment
|
7
|
+
end
|
8
|
+
|
5
9
|
def call
|
6
|
-
|
10
|
+
aws_settings = GenerateAwsSettings.(environment)
|
11
|
+
client = Aws::DynamoDB::Client.new(aws_settings)
|
12
|
+
|
13
|
+
resp = client.scan({table_name: "config"})
|
7
14
|
items = resp.to_h[:items]
|
8
15
|
data = items.each_with_object({}) do |item, h|
|
9
16
|
h[item['id']] = item['value']
|
10
17
|
end
|
11
18
|
|
12
|
-
Config.new(data)
|
19
|
+
Exercism::Config.new(data, aws_settings)
|
20
|
+
rescue Exercism::ConfigError
|
21
|
+
raise
|
22
|
+
rescue => e
|
23
|
+
raise Exercism::ConfigError, "Exercism Config could not be loaded: #{e.message}"
|
13
24
|
end
|
14
25
|
|
26
|
+
private
|
15
27
|
memoize
|
16
28
|
def aws_client
|
17
|
-
config = {
|
18
|
-
|
29
|
+
config = {
|
30
|
+
region: 'eu-west-2',
|
31
|
+
profile: profile,
|
32
|
+
endpoint: endpoint,
|
33
|
+
access_key_id: aws_access_key_id,
|
34
|
+
secret_access_key: aws_secret_access_key
|
35
|
+
}.select {|k,v|v}
|
36
|
+
|
19
37
|
Aws::DynamoDB::Client.new(config)
|
20
38
|
end
|
39
|
+
|
40
|
+
memoize
|
41
|
+
def environment
|
42
|
+
return @environment.to_sym if @environment
|
43
|
+
|
44
|
+
env = ENV["EXERCISM_ENV"] || ENV["RAILS_ENV"] || ENV["APP_ENV"]
|
45
|
+
raise Exercism::ConfigError, "No environment set - set one of EXERCISM_ENV, RAILS_ENV or APP_ENV" unless env
|
46
|
+
|
47
|
+
unless %w[development test production].include?(env)
|
48
|
+
raise Exercism::ConfigError, "environments must be one of development test production. Got #{env}"
|
49
|
+
end
|
50
|
+
|
51
|
+
env.to_sym
|
52
|
+
end
|
21
53
|
end
|
22
54
|
end
|
23
55
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: exercism_config
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jeremy Walker
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-07-
|
11
|
+
date: 2020-07-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aws-sdk-dynamodb
|
@@ -94,6 +94,20 @@ dependencies:
|
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '5.0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: mocha
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
97
111
|
description:
|
98
112
|
email:
|
99
113
|
- jez.walker@gmail.com
|
@@ -111,8 +125,8 @@ files:
|
|
111
125
|
- bin/run
|
112
126
|
- bin/setup
|
113
127
|
- exercism_config.gemspec
|
128
|
+
- lib/exercism/config.rb
|
114
129
|
- lib/exercism_config.rb
|
115
|
-
- lib/exercism_config/config.rb
|
116
130
|
- lib/exercism_config/retrieve.rb
|
117
131
|
- lib/exercism_config/version.rb
|
118
132
|
homepage: https://exercism.io
|