diff --git a/config/environments/development.rb b/config/environments/development.rb index 03eb9d6529..d633043d05 100644 --- a/config/environments/development.rb +++ b/config/environments/development.rb @@ -71,6 +71,9 @@ Bullet.bullet_logger = true Bullet.rails_logger = true end + + # load WIP features flag + config.deploy_wip_pipelines = true end Rack::MiniProfiler.config.position = 'right' diff --git a/config/environments/test.rb b/config/environments/test.rb index 1cd73956ed..b118bfe8c2 100644 --- a/config/environments/test.rb +++ b/config/environments/test.rb @@ -50,4 +50,7 @@ # Raises error for missing translations. # config.action_view.raise_on_missing_translations = true + + # load WIP features flag + config.deploy_wip_pipelines = true end diff --git a/lib/record_loader/application_record_loader.rb b/lib/record_loader/application_record_loader.rb index b96a6a14e4..961a9c07c6 100644 --- a/lib/record_loader/application_record_loader.rb +++ b/lib/record_loader/application_record_loader.rb @@ -1,4 +1,5 @@ # frozen_string_literal: true +require 'find' # This file was automatically generated by `rails g record_loader` module RecordLoader @@ -9,5 +10,23 @@ class ApplicationRecordLoader < RecordLoader::Base # Uses the standard RailsAdapter # @see https://rubydoc.info/github/sanger/record_loader/RecordLoader/Adapter adapter RecordLoader::Adapter::Rails.new + + def wip_list + # return a list of WIP files name as features if deploy_wip_pipelines is set to true, or return empty list + deploy_wip_pipelines = Rails.application.config.try(:deploy_wip_pipelines) || false + return [] unless deploy_wip_pipelines + + wip_files = [] + # @path returns 'config/default_records' directory + # see https://github.com/sanger/record_loader/blob/master/lib/record_loader/base.rb + wip_files_path = @path + Find.find(wip_files_path) do |path| + if path.match?(/\wip\.yml$/) + file_name = File.basename(path, '.wip.yml') + wip_files << file_name + end + end + wip_files + end end end diff --git a/spec/data/record_loader/application_record_loader/example.wip.yml b/spec/data/record_loader/application_record_loader/example.wip.yml new file mode 100644 index 0000000000..51074a83b0 --- /dev/null +++ b/spec/data/record_loader/application_record_loader/example.wip.yml @@ -0,0 +1,4 @@ +# Test record loader records +--- +Test Record: + test_attribute: "A Value" diff --git a/spec/lib/record_loader/application_record_loader_spec.rb b/spec/lib/record_loader/application_record_loader_spec.rb new file mode 100644 index 0000000000..8f55825505 --- /dev/null +++ b/spec/lib/record_loader/application_record_loader_spec.rb @@ -0,0 +1,41 @@ +# frozen_string_literal: true + +require 'rails_helper' +require 'record_loader/application_record_loader' + +RSpec.describe RecordLoader::ApplicationRecordLoader, :loader, type: :model do + def a_new_record_loader + described_class.new(directory: test_directory) + end + + subject(:record_loader) { a_new_record_loader } + + let(:test_directory) { Rails.root.join('spec/data/record_loader/application_record_loader') } + + context 'when deploy_wip_pipelines is false' do + before { allow(Rails.application.config).to receive(:deploy_wip_pipelines).and_return(false) } + + it 'returns an empty array' do + expect(record_loader.wip_list).to eq([]) + end + end + + context 'when deploy_wip_pipelines is true' do + before do + allow(Rails.application.config).to receive(:deploy_wip_pipelines).and_return(true) + allow(Find).to receive(:find).with(test_directory).and_yield("#{test_directory}/example.wip.yml") + end + + it 'returns a list of WIP features' do + expect(record_loader.wip_list).to eq(['example']) + end + end + + context 'when deploy_wip_pipelines is not set' do + before { allow(Rails.application.config).to receive(:deploy_wip_pipelines).and_return(nil) } + + it 'returns an empty array' do + expect(record_loader.wip_list).to eq([]) + end + end +end