Refactor CodeOcean::Config class
The new architecture memorizes settings (which we mostly did after reading the config so far) and also exposes the resulting file path as well as further settings. This change is a prerequisite to define a dependency with Sprockets.
This commit is contained in:

committed by
Sebastian Serth

parent
dcaedfa9fe
commit
336519b21d
@ -27,7 +27,7 @@ var CodeOceanEditor = {
|
||||
|
||||
lastCopyText: null,
|
||||
|
||||
<% @config ||= CodeOcean::Config.new(:code_ocean).read(erb: false) %>
|
||||
<% @config ||= CodeOcean::Config.new(:code_ocean, erb: false).read %>
|
||||
// Important notice: Changing the config values requires any content-wise
|
||||
// modification for this file in the development environment. Lacking to do so
|
||||
// will result in the old, server-side cached serving of this file even across
|
||||
|
@ -2,12 +2,16 @@
|
||||
|
||||
module CodeOcean
|
||||
class Config
|
||||
def initialize(filename)
|
||||
@filename = filename
|
||||
attr_reader :path, :read
|
||||
|
||||
def initialize(filename, options = {})
|
||||
@path = Rails.root.join('config', "#{filename}.yml#{options[:erb] ? '.erb' : ''}")
|
||||
@read = parse(options)
|
||||
end
|
||||
|
||||
def read(options = {})
|
||||
path = Rails.root.join('config', "#{@filename}.yml#{options[:erb] ? '.erb' : ''}")
|
||||
private
|
||||
|
||||
def parse(options)
|
||||
if ::File.exist?(path)
|
||||
yaml_content = ::File.new(path, 'r').read || ''
|
||||
yaml_content = ERB.new(yaml_content).result if options[:erb]
|
||||
|
@ -146,7 +146,7 @@ class Runner::Strategy::DockerContainerPool < Runner::Strategy
|
||||
def self.config
|
||||
@config ||= begin
|
||||
# Since the docker configuration file contains code that must be executed, we use ERB templating.
|
||||
docker_config = CodeOcean::Config.new(:docker).read(erb: true)
|
||||
docker_config = CodeOcean::Config.new(:docker, erb: true).read
|
||||
codeocean_config = CodeOcean::Config.new(:code_ocean).read[:runner_management] || {}
|
||||
# All keys in `docker_config` take precedence over those in `codeocean_config`
|
||||
docker_config.merge codeocean_config
|
||||
|
@ -30,7 +30,7 @@ RSpec.describe CodeOcean::Config do
|
||||
|
||||
context 'with a .yml.erb file' do
|
||||
let(:path) { Rails.root.join('config', "#{filename}.yml.erb") }
|
||||
let(:read) { described_class.new(filename).read(erb: true) }
|
||||
let(:read) { described_class.new(filename, erb: true).read }
|
||||
|
||||
context 'when the file is present' do
|
||||
before { File.write(path, {Rails.env.to_s => content}.to_yaml) }
|
||||
|
Reference in New Issue
Block a user