Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gitlab-ce
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Jérome Perrin
gitlab-ce
Commits
5becdf01
Commit
5becdf01
authored
Mar 09, 2017
by
Grzegorz Bizon
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Implement GitLab QA release inflection strategy
parent
2ae578c6
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
110 additions
and
0 deletions
+110
-0
qa/qa.rb
qa/qa.rb
+3
-0
qa/qa/runtime/release.rb
qa/qa/runtime/release.rb
+45
-0
qa/spec/runtime/release_spec.rb
qa/spec/runtime/release_spec.rb
+62
-0
No files found.
qa/qa.rb
View file @
5becdf01
...
...
@@ -5,6 +5,7 @@ module QA
# GitLab QA runtime classes, mostly singletons.
#
module
Runtime
autoload
:Release
,
'qa/runtime/release'
autoload
:User
,
'qa/runtime/user'
autoload
:Namespace
,
'qa/runtime/namespace'
end
...
...
@@ -81,3 +82,5 @@ module QA
autoload
:Runner
,
'qa/specs/runner'
end
end
QA
::
Runtime
::
Release
.
autoloads
qa/qa/runtime/release.rb
0 → 100644
View file @
5becdf01
module
QA
module
Runtime
##
# Class that is responsible for plugging CE/EE extensions in, depending on
# environment variable GITLAB_RELEASE that should be present in the runtime
# environment.
#
# We need that to reduce the probability of conflicts when merging
# CE to EE.
#
class
Release
UnspecifiedReleaseError
=
Class
.
new
(
StandardError
)
def
initialize
(
version
=
ENV
[
'GITLAB_RELEASE'
])
@version
=
version
.
to_s
.
upcase
unless
%w[CE EE]
.
include?
(
@version
)
raise
UnspecifiedReleaseError
,
'GITLAB_RELEASE env not defined!'
end
begin
require
"
#{
version
.
downcase
}
/strategy"
rescue
LoadError
# noop
end
end
def
has_strategy?
QA
.
const_defined?
(
"
#{
@version
}
::Strategy"
)
end
def
strategy
QA
.
const_get
(
"
#{
@version
}
::Strategy"
)
end
def
self
.
method_missing
(
name
,
*
args
)
@release
||=
self
.
new
if
@release
.
has_strategy?
@release
.
strategy
.
public_send
(
name
,
*
args
)
end
end
end
end
end
qa/spec/runtime/release_spec.rb
0 → 100644
View file @
5becdf01
describe
QA
::
Runtime
::
Release
do
context
'when release version has extension strategy'
do
subject
{
described_class
.
new
(
'CE'
)
}
let
(
:strategy
)
{
spy
(
'CE::Strategy'
)
}
before
do
stub_const
(
'QA::CE::Strategy'
,
strategy
)
end
describe
'#has_strategy?'
do
it
'return true'
do
expect
(
subject
.
has_strategy?
).
to
be
true
end
end
describe
'#strategy'
do
it
'return the strategy constant'
do
expect
(
subject
.
strategy
).
to
eq
QA
::
CE
::
Strategy
end
end
describe
'delegated class methods'
do
it
'delegates all calls to strategy class'
do
described_class
.
some_method
(
1
,
2
)
expect
(
strategy
).
to
have_received
(
:some_method
)
.
with
(
1
,
2
)
end
end
end
context
'when release version does not have extension strategy'
do
subject
{
described_class
.
new
(
'CE'
)
}
describe
'#has_strategy?'
do
it
'returns false'
do
expect
(
subject
.
has_strategy?
).
to
be
false
end
end
describe
'#strategy'
do
it
'raises error'
do
expect
{
subject
.
strategy
}.
to
raise_error
(
NameError
)
end
end
describe
'delegated class methods'
do
it
'behaves like a null object and does nothing'
do
expect
{
described_class
.
some_method
(
2
,
3
)
}.
not_to
raise_error
end
end
end
context
'when release version is invalid or unspecified'
do
describe
'#new'
do
it
'raises an exception'
do
expect
{
described_class
.
new
(
nil
)
}
.
to
raise_error
(
described_class
::
UnspecifiedReleaseError
)
end
end
end
end
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment