exercism_config 0.2.0 → 0.8.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: fee2df61d61880133f0297ad0c397ab0983e60b9ee30010f25f86fe134fe826f
4
- data.tar.gz: 912a33534b352a99da24df6498084cb8cbec01a260d466f7a3d7719cec484aa4
3
+ metadata.gz: 88b56d3b63a3c39cd0b9fe8fede5ff57d2d3ee12b3fb3450d29cfd1363c94bc7
4
+ data.tar.gz: b77887786a3687cd111b81609f1a2678a7b4d85155994c3a24365245f3be187b
5
5
  SHA512:
6
- metadata.gz: bde7ce345965e04e922aae0abe6536b07ab33e5c28d5ae31f12c4096e591c6b548d074a5490b0e1b49457e63a856f247efbce8932596b71b065fa9528657ad9c
7
- data.tar.gz: 85d76e1c6bddaef37d5ff9ec96a3c7319fcf6ef1727546198d919f2d7578948b01f56c74c27f6c91f9d99bdb5921f313915947138ba10b09f58eacbc81cdda6a
6
+ metadata.gz: f3c00254886aa8133307e0fc425623535bedd4cc78d6420deb4b96b12738893891f504fa97a6b501d72d067fe2d66c326b8176c99a1053e6529cea805b55e870
7
+ data.tar.gz: 03fdb3ffd88cb447ab417c5348b52ebe7793fb92e0e4e3a9f3e559ed98bcd5ff2bfe0bebbad0b8d17260ab13669830db7a168eaf839608c35d1facd1b6af827e
data/.gitignore CHANGED
@@ -6,3 +6,5 @@
6
6
  /pkg/
7
7
  /spec/reports/
8
8
  /tmp/
9
+
10
+ exercism_config-*.gem
data/Gemfile CHANGED
@@ -4,4 +4,3 @@ source "https://rubygems.org"
4
4
  gemspec
5
5
 
6
6
  gem "rake", "~> 12.0"
7
- gem "minitest", "~> 5.0"
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- exercism_config (0.1.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.343.0)
14
- aws-sdk-core (3.104.1)
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.3.0)
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
  ```
@@ -29,4 +29,5 @@ Gem::Specification.new do |spec|
29
29
  spec.add_development_dependency "bundler", "~> 2.1"
30
30
  spec.add_development_dependency "rake", "~> 12.3"
31
31
  spec.add_development_dependency "minitest", "~> 5.0"
32
+ spec.add_development_dependency "mocha"
32
33
  end
@@ -0,0 +1,12 @@
1
+ module Exercism
2
+ class Config < OpenStruct
3
+ def initialize(data, aws_settings)
4
+ super(data)
5
+ self.aws_settings = aws_settings
6
+ end
7
+
8
+ def to_json
9
+ to_h.to_json
10
+ end
11
+ end
12
+ end
@@ -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 ExercismConfig
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
- resp = aws_client.scan({table_name: "config"})
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 = {region: 'eu-west-2'}
18
- config[:profile] = ENV["AWS_PROFILE"] if ENV["AWS_PROFILE"]
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
 
@@ -1,3 +1,3 @@
1
1
  module ExercismConfig
2
- VERSION = "0.2.0"
2
+ VERSION = "0.8.0"
3
3
  end
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.2.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-22 00:00:00.000000000 Z
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
@@ -1,7 +0,0 @@
1
- module ExercismConfig
2
- class Config < SimpleDelegator
3
- def to_json
4
- to_h.to_json
5
- end
6
- end
7
- end