From 0731365b9de9411a937bd786d6e3fd7e10099800 Mon Sep 17 00:00:00 2001 From: Grzegorz Bizon Date: Mon, 13 Mar 2017 13:54:33 +0100 Subject: Add GitLab QA CE strategy and simplify inflector --- qa/qa.rb | 4 +--- qa/qa/ce/strategy.rb | 15 ++++++++++++ qa/qa/runtime/release.rb | 24 ++++--------------- qa/spec/runtime/release_spec.rb | 53 +++++++++++------------------------------ 4 files changed, 35 insertions(+), 61 deletions(-) create mode 100644 qa/qa/ce/strategy.rb diff --git a/qa/qa.rb b/qa/qa.rb index 7fe18676634..58cf615cc9f 100644 --- a/qa/qa.rb +++ b/qa/qa.rb @@ -78,6 +78,4 @@ module QA end end -if QA::Runtime::Release.has_autoloads? - require QA::Runtime::Release.autoloads_file -end +QA::Runtime::Release.extend_autoloads! diff --git a/qa/qa/ce/strategy.rb b/qa/qa/ce/strategy.rb new file mode 100644 index 00000000000..6d1601dfa48 --- /dev/null +++ b/qa/qa/ce/strategy.rb @@ -0,0 +1,15 @@ +module QA + module CE + module Strategy + extend self + + def extend_autoloads! + # noop + end + + def perform_before_hooks + # noop + end + end + end +end diff --git a/qa/qa/runtime/release.rb b/qa/qa/runtime/release.rb index 40d24e8d342..4f83a773645 100644 --- a/qa/qa/runtime/release.rb +++ b/qa/qa/runtime/release.rb @@ -8,34 +8,20 @@ module QA # CE to EE. # class Release - def initialize(variant = nil) - @version = variant || version - - begin - require "qa/#{@version.downcase}/strategy" - rescue LoadError - # noop - end + def initialize + require "qa/#{version.downcase}/strategy" end def version - File.directory?("#{__dir__}/../ee") ? :EE : :CE - end - - def has_strategy? - QA.const_defined?("QA::#{@version}::Strategy") + @version ||= File.directory?("#{__dir__}/../ee") ? :EE : :CE end def strategy - QA.const_get("QA::#{@version}::Strategy") + QA.const_get("QA::#{version}::Strategy") end def self.method_missing(name, *args) - @release ||= self.new - - if @release.has_strategy? - @release.strategy.public_send(name, *args) - end + self.new.strategy.public_send(name, *args) end end end diff --git a/qa/spec/runtime/release_spec.rb b/qa/spec/runtime/release_spec.rb index 5d12315be5b..e6b5a8dc315 100644 --- a/qa/spec/runtime/release_spec.rb +++ b/qa/spec/runtime/release_spec.rb @@ -1,33 +1,25 @@ describe QA::Runtime::Release do context 'when release version has extension strategy' do - subject { described_class.new('VER') } - let(:strategy) { spy('VER::Strategy') } + let(:strategy) { spy('strategy') } before do - stub_const('QA::VER::Strategy', strategy) + stub_const('QA::CE::Strategy', strategy) + stub_const('QA::EE::Strategy', strategy) end - describe '#has_strategy?' do - it 'return true' do - expect(subject.has_strategy?).to be true + describe '#version' do + it 'return either CE or EE version' do + expect(subject.version).to eq(:CE).or eq(:EE) end end describe '#strategy' do it 'return the strategy constant' do - expect(subject.strategy).to eq QA::VER::Strategy + expect(subject.strategy).to eq strategy end end describe 'delegated class methods' do - before do - allow_any_instance_of(described_class) - .to receive(:has_strategy?).and_return(true) - - allow_any_instance_of(described_class) - .to receive(:strategy).and_return(strategy) - end - it 'delegates all calls to strategy class' do described_class.some_method(1, 2) @@ -38,37 +30,20 @@ describe QA::Runtime::Release do end context 'when release version does not have extension strategy' do - subject { described_class.new('NOVER') } - - describe '#has_strategy?' do - it 'returns false' do - expect(subject.has_strategy?).to be false - end + before do + allow_any_instance_of(described_class) + .to receive(:version).and_return('something') end describe '#strategy' do it 'raises error' do - expect { subject.strategy }.to raise_error(NameError) + expect { subject.strategy }.to raise_error(LoadError) end end - describe 'does not delegate class methods' do - before do - allow_any_instance_of(described_class) - .to receive(:has_strategy?).and_return(false) - end - - it 'behaves like a null object and does nothing' do - expect { described_class.some_method(2, 3) }.not_to raise_error - end - - it 'returns nil' do - expect(described_class.something).to be_nil - end - - it 'does not delegate to strategy object' do - expect_any_instance_of(described_class) - .not_to receive(:strategy) + describe 'delegated class methods' do + it 'raises error' do + expect { described_class.some_method(2, 3) }.to raise_error(LoadError) end end end -- cgit v1.2.1