exercism_config 0.7.0 → 0.12.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: 620afb9bb7623f6ed560ad3e6431b4466ad985379c4e0af174b8a635fc4b19df
4
- data.tar.gz: ad2d2b64388d893da5099aa3d3827a706c5ec98de2e1ca5e0f2802d0e79d41a8
3
+ metadata.gz: dd0b7e2733cf6504836725513ee9249452432e16744c87a498294c9bf607f565
4
+ data.tar.gz: a86ee6db78ade29db5385811b66785b8ab78e9dbd572d2eb063dcfc954c34e1c
5
5
  SHA512:
6
- metadata.gz: 105e94188dbcd307eba148de2107912e1bb35431181f0ee1399b49553a1420d2db946ee467a0a12d81ad784138f68c785905b3ae349b63a9592f65e8cd5b5641
7
- data.tar.gz: 9c2bb195adf603c26c9d0236f21b35c1bdef5b57ebbca7ccc3f91c8c0b4ec21d9cc28a379314ed04813c1f40a9b6f4cfc257b292a46330e924cdef58e477f962
6
+ metadata.gz: 21890667a1426ec324fc6b32b8cfb07c7f38825313141ab92dfc4ed4800c90021f6dfcb95c2b212e99eea55dafa5e59be08845e5a5a11662f42689d781fc6add
7
+ data.tar.gz: fc540dfe23e6e75c6861f07c5bf0871954241836a5d81e88cc1dc8aa23540309fb074622ef9730fa21a4f764766255ca986ec6a8845de40bf8fa8ddfff5ae8bd
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- exercism_config (0.6.0)
4
+ exercism_config (0.11.0)
5
5
  aws-sdk-dynamodb (~> 1.0)
6
6
  mandate
7
7
  zeitwerk
@@ -1,14 +1,20 @@
1
- require "exercism_config/version"
2
1
  require 'aws-sdk-dynamodb'
3
2
  require 'mandate'
4
3
  require "ostruct"
5
4
  require 'json'
6
5
 
7
- require "zeitwerk"
8
- loader = Zeitwerk::Loader.for_gem
9
- loader.setup
6
+ require_relative 'exercism_config/generate_aws_settings'
7
+ require_relative 'exercism_config/setup_dynamodb_client.rb'
8
+ require_relative 'exercism_config/retrieve'
9
+ require_relative 'exercism_config/generate_aws_settings'
10
+ require_relative "exercism_config/version"
11
+
12
+ require_relative 'exercism/config'
10
13
 
11
14
  module Exercism
15
+ class ConfigError < RuntimeError
16
+ end
17
+
12
18
  def self.config
13
19
  @config ||= ExercismConfig::Retrieve.()
14
20
  end
@@ -0,0 +1,60 @@
1
+ module ExercismConfig
2
+ class GenerateAwsSettings
3
+ include Mandate
4
+
5
+ def initialize(environment)
6
+ @environment = environment
7
+ end
8
+
9
+ def call
10
+ {
11
+ region: 'eu-west-2',
12
+ profile: profile,
13
+ access_key_id: aws_access_key_id,
14
+ secret_access_key: aws_secret_access_key
15
+ }.select {|k,v|v}
16
+ end
17
+
18
+ memoize
19
+ def aws_access_key_id
20
+ case environment
21
+ when :development, :test
22
+ "FAKE"
23
+ else
24
+ nil
25
+ end
26
+ end
27
+
28
+ memoize
29
+ def aws_secret_access_key
30
+ case environment
31
+ when :development, :test
32
+ "FAKE"
33
+ else
34
+ nil
35
+ end
36
+ end
37
+
38
+ memoize
39
+ def profile
40
+ case environment
41
+ when :production
42
+ "exercism_staging"
43
+ end
44
+ end
45
+
46
+ memoize
47
+ def environment
48
+ return @environment.to_sym if @environment
49
+
50
+ env = ENV["EXERCISM_ENV"] || ENV["RAILS_ENV"] || ENV["APP_ENV"]
51
+ raise Exercism::ConfigError, "No environment set - set one of EXERCISM_ENV, RAILS_ENV or APP_ENV" unless env
52
+
53
+ unless %w[development test production].include?(env)
54
+ raise Exercism::ConfigError, "environments must be one of development test production. Got #{env}"
55
+ end
56
+
57
+ env.to_sym
58
+ end
59
+ end
60
+ end
@@ -7,8 +7,7 @@ module ExercismConfig
7
7
  end
8
8
 
9
9
  def call
10
- aws_settings = GenerateAwsSettings.(environment)
11
- client = Aws::DynamoDB::Client.new(aws_settings)
10
+ client = SetupDynamodbClient.(environment)
12
11
 
13
12
  resp = client.scan({table_name: "config"})
14
13
  items = resp.to_h[:items]
@@ -16,6 +15,7 @@ module ExercismConfig
16
15
  h[item['id']] = item['value']
17
16
  end
18
17
 
18
+ aws_settings = GenerateAwsSettings.(environment)
19
19
  Exercism::Config.new(data, aws_settings)
20
20
  rescue Exercism::ConfigError
21
21
  raise
@@ -0,0 +1,35 @@
1
+ module ExercismConfig
2
+ class SetupDynamodbClient
3
+ include Mandate
4
+
5
+ def initialize(environment)
6
+ @environment = environment
7
+ end
8
+
9
+ def call
10
+ aws_settings = GenerateAwsSettings.(environment).merge(
11
+ endpoint: config_endpoint,
12
+
13
+ # We don't want a profile for this AWS service
14
+ # as we run it locally. But we do normally, so
15
+ # we locally override this here.
16
+ profile: nil
17
+ ).select {|k,v|v}
18
+ Aws::DynamoDB::Client.new(aws_settings)
19
+ end
20
+
21
+ private
22
+ attr_reader :environment
23
+
24
+ memoize
25
+ def config_endpoint
26
+ case environment
27
+ when :development, :test
28
+ host = ENV["EXERCISM_DOCKER"] ? "dynamodb" : "localhost"
29
+ "http://#{host}:3039"
30
+ else
31
+ nil
32
+ end
33
+ end
34
+ end
35
+ end
@@ -1,3 +1,3 @@
1
1
  module ExercismConfig
2
- VERSION = "0.7.0"
2
+ VERSION = "0.12.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: exercism_config
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.12.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeremy Walker
@@ -127,7 +127,9 @@ files:
127
127
  - exercism_config.gemspec
128
128
  - lib/exercism/config.rb
129
129
  - lib/exercism_config.rb
130
+ - lib/exercism_config/generate_aws_settings.rb
130
131
  - lib/exercism_config/retrieve.rb
132
+ - lib/exercism_config/setup_dynamodb_client.rb
131
133
  - lib/exercism_config/version.rb
132
134
  homepage: https://exercism.io
133
135
  licenses: []