metasploit-version 0.1.2-java

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. checksums.yaml +7 -0
  2. data/.coveralls.yml +1 -0
  3. data/.gitignore +32 -0
  4. data/.simplecov +60 -0
  5. data/.travis.yml +26 -0
  6. data/.yardopts +7 -0
  7. data/CONTRIBUTING.md +156 -0
  8. data/Gemfile +17 -0
  9. data/LICENSE.txt +22 -0
  10. data/README.md +133 -0
  11. data/Rakefile +20 -0
  12. data/features/shared/examples/metasploit/version/gem_version_constant.feature +215 -0
  13. data/features/shared/examples/metasploit/version/version_constant.feature +183 -0
  14. data/features/shared/examples/metasploit/version/version_module.feature +275 -0
  15. data/features/shared/examples/metasploit/version/version_module/prerelease/git/branch.feature +234 -0
  16. data/features/shared/examples/metasploit/version/version_module/prerelease/git/detached_head.feature +97 -0
  17. data/features/shared/examples/metasploit/version/version_module/prerelease/git/master.feature +94 -0
  18. data/features/shared/examples/metasploit/version/version_module/prerelease/git/step_definitions/environment_variable_steps.rb +13 -0
  19. data/features/shared/examples/metasploit/version/version_module/prerelease/git/step_definitions/git_steps.rb +30 -0
  20. data/features/shared/examples/metasploit/version/version_module/prerelease/travis_ci/branch.feature +173 -0
  21. data/features/shared/examples/metasploit/version/version_module/prerelease/travis_ci/master.feature +90 -0
  22. data/features/shared/examples/metasploit/version/version_module/prerelease/travis_ci/pull_request.feature +99 -0
  23. data/features/shared/examples/metasploit/version/version_module/prerelease/travis_ci/tag.feature +277 -0
  24. data/features/support/env.rb +41 -0
  25. data/features/support/simplecov_setup.rb +12 -0
  26. data/lib/metasploit/version.rb +19 -0
  27. data/lib/metasploit/version/branch.rb +172 -0
  28. data/lib/metasploit/version/version.rb +57 -0
  29. data/metasploit-version.gemspec +41 -0
  30. data/spec/lib/metasploit/version/branch_spec.rb +660 -0
  31. data/spec/lib/metasploit/version/version_spec.rb +5 -0
  32. data/spec/lib/metasploit/version_spec.rb +6 -0
  33. data/spec/spec_helper.rb +13 -0
  34. data/spec/support/shared/examples/metasploit/version/gem_version_constant.rb +17 -0
  35. data/spec/support/shared/examples/metasploit/version/version_constant.rb +17 -0
  36. data/spec/support/shared/examples/metasploit/version/version_module.rb +226 -0
  37. metadata +173 -0
@@ -0,0 +1,173 @@
1
+ Feature: 'Metasploit::Version Version Module' shared example in branch build on Travis-CI
2
+
3
+ The 'Metasploit::Version Version Module' shared example will check that the described_class for an RSpec *_spec.rb
4
+ file defines PRERELEASE to match the relative name of branch.
5
+
6
+ Background:
7
+ Given I set the environment variables to:
8
+ | variable | value |
9
+ | TRAVIS_PULL_REQUEST | false |
10
+ Given a file named "lib/my_namespace/my_gem.rb" with:
11
+ """ruby
12
+ require 'my_namespace/my_gem/version'
13
+
14
+ module MyNamespace
15
+ module MyGem
16
+ end
17
+ end
18
+ """
19
+ Given a file named "spec/spec_helper.rb" with:
20
+ """ruby
21
+ require 'metasploit/version'
22
+ require 'my_namespace/my_gem'
23
+
24
+ # Use find_all_by_name instead of find_by_name as find_all_by_name will return pre-release versions
25
+ gem_specification = Gem::Specification.find_all_by_name('metasploit-version').first
26
+
27
+ Dir[File.join(gem_specification.gem_dir, 'spec', 'support', '**', '*.rb')].each do |f|
28
+ require f
29
+ end
30
+ """
31
+ Given a file named "spec/lib/my_namespace/my_gem/version_spec.rb" with:
32
+ """ruby
33
+ require 'spec_helper'
34
+
35
+ RSpec.describe MyNamespace::MyGem::Version do
36
+ it_should_behave_like 'Metasploit::Version Version Module'
37
+ end
38
+ """
39
+
40
+ Scenario Outline: PRERELEASE defined as branch relative name
41
+ Given a file named "lib/my_namespace/my_gem/version.rb" with:
42
+ """ruby
43
+ module MyNamespace
44
+ module MyGem
45
+ module Version
46
+ #
47
+ # CONSTANTS
48
+ #
49
+
50
+ # The major version number
51
+ MAJOR = 1
52
+
53
+ # The minor version number, scoped to the {MAJOR} version number.
54
+ MINOR = 2
55
+
56
+ # The patch number, scoped to the {MINOR} version number
57
+ PATCH = 3
58
+
59
+ # The prerelease name of the given {MAJOR}.{MINOR}.{PATCH} version number. Will not be defined on master.
60
+ PRERELEASE = '<prerelease>'
61
+
62
+ # The full version string, including the {MAJOR}, {MINOR}, {PATCH}, and optionally, the {PRERELEASE} in the
63
+ # {http://semver.org/spec/v2.0.0.html semantic versioning v2.0.0} format.
64
+ #
65
+ # @return [String] '{MAJOR}.{MINOR}.{PATCH}' on master. '{MAJOR}.{MINOR}.{PATCH}-{PRERELEASE}' on any branch
66
+ # other than master.
67
+ def self.full
68
+ version = "#{MAJOR}.#{MINOR}.#{PATCH}"
69
+
70
+ if defined? PRERELEASE
71
+ version = "#{version}-#{PRERELEASE}"
72
+ end
73
+
74
+ version
75
+ end
76
+
77
+ # The full gem version string, including the {MAJOR}, {MINOR}, {PATCH}, and optionally, the {PRERELEASE} in the
78
+ # {http://guides.rubygems.org/specification-reference/#version RubyGems versioning} format.
79
+ #
80
+ # @return [String] '{MAJOR}.{MINOR}.{PATCH}' on master. '{MAJOR}.{MINOR}.{PATCH}.{PRERELEASE}' on any branch
81
+ # other than master.
82
+ def self.gem
83
+ full.gsub('-', '.pre.')
84
+ end
85
+ end
86
+ end
87
+ end
88
+ """
89
+ Given I set the environment variables to:
90
+ | variable | value |
91
+ | TRAVIS_BRANCH | <branch> |
92
+ When I run `rspec spec/lib/my_namespace/my_gem/version_spec.rb --format documentation`
93
+ Then the output should contain:
94
+ """
95
+ PRERELEASE
96
+ matches the <type> branch's name
97
+ """
98
+
99
+ Examples:
100
+ | type | prerelease | branch |
101
+ | bug | nasty | bug/MSP-1234/nasty |
102
+ | feature | super-cool | feature/MSP-1234/super-cool |
103
+ | staging | rocket-motor | staging/rocket-motor |
104
+
105
+ Scenario Outline: PRERELEASE not defined
106
+ Given a file named "lib/my_namespace/my_gem/version.rb" with:
107
+ """ruby
108
+ module MyNamespace
109
+ module MyGem
110
+ module Version
111
+ #
112
+ # CONSTANTS
113
+ #
114
+
115
+ # The major version number
116
+ MAJOR = 1
117
+
118
+ # The minor version number, scoped to the {MAJOR} version number.
119
+ MINOR = 2
120
+
121
+ # The patch number, scoped to the {MINOR} version number
122
+ PATCH = 3
123
+
124
+ # The full version string, including the {MAJOR}, {MINOR}, {PATCH}, and optionally, the {PRERELEASE} in the
125
+ # {http://semver.org/spec/v2.0.0.html semantic versioning v2.0.0} format.
126
+ #
127
+ # @return [String] '{MAJOR}.{MINOR}.{PATCH}' on master. '{MAJOR}.{MINOR}.{PATCH}-{PRERELEASE}' on any branch
128
+ # other than master.
129
+ def self.full
130
+ version = "#{MAJOR}.#{MINOR}.#{PATCH}"
131
+
132
+ if defined? PRERELEASE
133
+ version = "#{version}-#{PRERELEASE}"
134
+ end
135
+
136
+ version
137
+ end
138
+
139
+ # The full gem version string, including the {MAJOR}, {MINOR}, {PATCH}, and optionally, the {PRERELEASE} in the
140
+ # {http://guides.rubygems.org/specification-reference/#version RubyGems versioning} format.
141
+ #
142
+ # @return [String] '{MAJOR}.{MINOR}.{PATCH}' on master. '{MAJOR}.{MINOR}.{PATCH}.{PRERELEASE}' on any branch
143
+ # other than master.
144
+ def self.gem
145
+ full.gsub('-', '.pre.')
146
+ end
147
+ end
148
+ end
149
+ end
150
+ """
151
+ Given I set the environment variables to:
152
+ | variable | value |
153
+ | TRAVIS_BRANCH | <branch> |
154
+ When I run `rspec spec/lib/my_namespace/my_gem/version_spec.rb --format documentation`
155
+ Then the output should contain "MyNamespace::MyGem::Version it should behave like Metasploit::Version Version Module CONSTANTS PRERELEASE matches the <type> branch's name"
156
+ And the output should contain:
157
+ """
158
+ expected MyNamespace::MyGem::Version::PRERELEASE to be defined.
159
+ Add the following to MyNamespace::MyGem::Version:
160
+ """
161
+ # Can't do a continuous multiline string because editors will truncate whitespace in blank line and it won't match
162
+ # whitespace in rspec output.
163
+ And the output should contain:
164
+ """
165
+ # The prerelease version, scoped to the {PATCH} version number.
166
+ PRERELEASE = <prerelease>
167
+ """
168
+
169
+ Examples:
170
+ | type | prerelease | branch |
171
+ | bug | nasty | bug/MSP-1234/nasty |
172
+ | feature | super-cool | feature/MSP-1234/super-cool |
173
+ | staging | rocket-motor | staging/rocket-motor |
@@ -0,0 +1,90 @@
1
+ Feature: 'Metasploit::Version Version Module' shared example in master build on Travis-CI
2
+
3
+ The 'Metasploit::Version Version Module' shared example will check that the described_class for an RSpec *_spec.rb
4
+ file does not define PRERELEASE.
5
+
6
+ Background:
7
+ Given a file named "lib/my_namespace/my_gem.rb" with:
8
+ """ruby
9
+ require 'my_namespace/my_gem/version'
10
+
11
+ module MyNamespace
12
+ module MyGem
13
+ end
14
+ end
15
+ """
16
+ Given a file named "spec/spec_helper.rb" with:
17
+ """ruby
18
+ require 'metasploit/version'
19
+ require 'my_namespace/my_gem'
20
+
21
+ # Use find_all_by_name instead of find_by_name as find_all_by_name will return pre-release versions
22
+ gem_specification = Gem::Specification.find_all_by_name('metasploit-version').first
23
+
24
+ Dir[File.join(gem_specification.gem_dir, 'spec', 'support', '**', '*.rb')].each do |f|
25
+ require f
26
+ end
27
+ """
28
+ Given a file named "spec/lib/my_namespace/my_gem/version_spec.rb" with:
29
+ """ruby
30
+ require 'spec_helper'
31
+
32
+ RSpec.describe MyNamespace::MyGem::Version do
33
+ it_should_behave_like 'Metasploit::Version Version Module'
34
+ end
35
+ """
36
+ Given I set the environment variables to:
37
+ | variable | value |
38
+ | TRAVIS_BRANCH | master |
39
+ | TRAVIS_PULL_REQUEST | false |
40
+ Scenario: PRERELEASE defined
41
+ Given a file named "lib/my_namespace/my_gem/version.rb" with:
42
+ """ruby
43
+ module MyNamespace
44
+ module MyGem
45
+ module Version
46
+ #
47
+ # CONSTANTS
48
+ #
49
+
50
+ # The major version number
51
+ MAJOR = 1
52
+
53
+ # The minor version number, scoped to the {MAJOR} version number.
54
+ MINOR = 2
55
+
56
+ # The patch number, scoped to the {MINOR} version number
57
+ PATCH = 3
58
+
59
+ # The prerelease name of the given {MAJOR}.{MINOR}.{PATCH} version number. Will not be defined on master.
60
+ PRERELEASE = 'source-branch-relative-name'
61
+ end
62
+ end
63
+ end
64
+ """
65
+ When I run `rspec spec/lib/my_namespace/my_gem/version_spec.rb --format documentation`
66
+ Then the output should contain "expected MyNamespace::MyGem::Version::PRERELEASE not to be defined on master"
67
+ Scenario: PRERELEASE undefined
68
+ Given a file named "lib/my_namespace/my_gem/version.rb" with:
69
+ """ruby
70
+ module MyNamespace
71
+ module MyGem
72
+ module Version
73
+ #
74
+ # CONSTANTS
75
+ #
76
+
77
+ # The major version number
78
+ MAJOR = 1
79
+
80
+ # The minor version number, scoped to the {MAJOR} version number.
81
+ MINOR = 2
82
+
83
+ # The patch number, scoped to the {MINOR} version number
84
+ PATCH = 3
85
+ end
86
+ end
87
+ end
88
+ """
89
+ When I run `rspec spec/lib/my_namespace/my_gem/version_spec.rb --format documentation`
90
+ Then the output should not contain "expected MyNamespace::MyGem::Version::PRERELEASE not to be defined on master"
@@ -0,0 +1,99 @@
1
+ Feature: 'Metasploit::Version Version Module' shared example in pull request build on Travis-CI
2
+
3
+ The 'Metasploit::Version Version Module' shared example won't check PRERELEASE for pull request builds on Travis-CI
4
+ because the code is expected to have PRERELEASE set to the value appropriate to the source branch and not the
5
+ destination branch being built by the pull request build.
6
+
7
+ Background:
8
+ Given I unset the environment variable "TRAVIS_BRANCH"
9
+ Given a file named "lib/my_namespace/my_gem.rb" with:
10
+ """ruby
11
+ require 'my_namespace/my_gem/version'
12
+
13
+ module MyNamespace
14
+ module MyGem
15
+ end
16
+ end
17
+ """
18
+ Given a file named "spec/spec_helper.rb" with:
19
+ """ruby
20
+ require 'metasploit/version'
21
+ require 'my_namespace/my_gem'
22
+
23
+ # Use find_all_by_name instead of find_by_name as find_all_by_name will return pre-release versions
24
+ gem_specification = Gem::Specification.find_all_by_name('metasploit-version').first
25
+
26
+ Dir[File.join(gem_specification.gem_dir, 'spec', 'support', '**', '*.rb')].each do |f|
27
+ require f
28
+ end
29
+ """
30
+ Given a file named "spec/lib/my_namespace/my_gem/version_spec.rb" with:
31
+ """ruby
32
+ require 'spec_helper'
33
+
34
+ RSpec.describe MyNamespace::MyGem::Version do
35
+ it_should_behave_like 'Metasploit::Version Version Module'
36
+ end
37
+ """
38
+ Given I set the environment variables to:
39
+ | variable | value |
40
+ | TRAVIS_BRANCH | master |
41
+
42
+ Scenario: PRERELEASE set to source branch relative name
43
+ Given a file named "lib/my_namespace/my_gem/version.rb" with:
44
+ """ruby
45
+ module MyNamespace
46
+ module MyGem
47
+ module Version
48
+ #
49
+ # CONSTANTS
50
+ #
51
+
52
+ # The major version number
53
+ MAJOR = 1
54
+
55
+ # The minor version number, scoped to the {MAJOR} version number.
56
+ MINOR = 2
57
+
58
+ # The patch number, scoped to the {MINOR} version number
59
+ PATCH = 3
60
+
61
+ # The prerelease name of the given {MAJOR}.{MINOR}.{PATCH} version number. Will not be defined on master.
62
+ PRERELEASE = 'source-branch-relative-name'
63
+
64
+ # The full version string, including the {MAJOR}, {MINOR}, {PATCH}, and optionally, the {PRERELEASE} in the
65
+ # {http://semver.org/spec/v2.0.0.html semantic versioning v2.0.0} format.
66
+ #
67
+ # @return [String] '{MAJOR}.{MINOR}.{PATCH}' on master. '{MAJOR}.{MINOR}.{PATCH}-{PRERELEASE}' on any branch
68
+ # other than master.
69
+ def self.full
70
+ version = "#{MAJOR}.#{MINOR}.#{PATCH}"
71
+
72
+ if defined? PRERELEASE
73
+ version = "#{version}-#{PRERELEASE}"
74
+ end
75
+
76
+ version
77
+ end
78
+
79
+ # The full gem version string, including the {MAJOR}, {MINOR}, {PATCH}, and optionally, the {PRERELEASE} in the
80
+ # {http://guides.rubygems.org/specification-reference/#version RubyGems versioning} format.
81
+ #
82
+ # @return [String] '{MAJOR}.{MINOR}.{PATCH}' on master. '{MAJOR}.{MINOR}.{PATCH}.{PRERELEASE}' on any branch
83
+ # other than master.
84
+ def self.gem
85
+ full.gsub('-', '.pre.')
86
+ end
87
+ end
88
+ end
89
+ end
90
+ """
91
+ Given I set the environment variables to:
92
+ | variable | value |
93
+ | TRAVIS_PULL_REQUEST | true |
94
+ When I run `rspec spec/lib/my_namespace/my_gem/version_spec.rb --format documentation`
95
+ Then the output should contain:
96
+ """
97
+ PRERELEASE
98
+ is not defined (PENDING: PRERELEASE can only be set appropriately for a merge by merging to the target branch and then updating PRERELEASE on the target branch before committing and/or pushing to github and travis-ci.)
99
+ """
@@ -0,0 +1,277 @@
1
+ Feature: 'Metasploit::Version Version Module' shared example in tag build on Travis-CI
2
+
3
+ The 'Metasploit::Version Version Module' shared example will check that the described_class for an RSpec *_spec.rb
4
+ file defines PRERELEASE to match the prerelease part of the tag converted from the gem prerelease format.
5
+
6
+ Background:
7
+ Given I set the environment variables to:
8
+ | variable | value |
9
+ | TRAVIS_PULL_REQUEST | false |
10
+ Given a file named "lib/my_namespace/my_gem.rb" with:
11
+ """ruby
12
+ require 'my_namespace/my_gem/version'
13
+
14
+ module MyNamespace
15
+ module MyGem
16
+ end
17
+ end
18
+ """
19
+ Given a file named "spec/spec_helper.rb" with:
20
+ """ruby
21
+ require 'metasploit/version'
22
+ require 'my_namespace/my_gem'
23
+
24
+ # Use find_all_by_name instead of find_by_name as find_all_by_name will return pre-release versions
25
+ gem_specification = Gem::Specification.find_all_by_name('metasploit-version').first
26
+
27
+ Dir[File.join(gem_specification.gem_dir, 'spec', 'support', '**', '*.rb')].each do |f|
28
+ require f
29
+ end
30
+ """
31
+ Given a file named "spec/lib/my_namespace/my_gem/version_spec.rb" with:
32
+ """ruby
33
+ require 'spec_helper'
34
+
35
+ RSpec.describe MyNamespace::MyGem::Version do
36
+ it_should_behave_like 'Metasploit::Version Version Module'
37
+ end
38
+ """
39
+
40
+ Scenario Outline: PRERELEASE defined as tag relative name
41
+ Given a file named "lib/my_namespace/my_gem/version.rb" with:
42
+ """ruby
43
+ module MyNamespace
44
+ module MyGem
45
+ module Version
46
+ #
47
+ # CONSTANTS
48
+ #
49
+
50
+ # The major version number
51
+ MAJOR = 1
52
+
53
+ # The minor version number, scoped to the {MAJOR} version number.
54
+ MINOR = 2
55
+
56
+ # The patch number, scoped to the {MINOR} version number
57
+ PATCH = 3
58
+
59
+ # The prerelease name of the given {MAJOR}.{MINOR}.{PATCH} version number. Will not be defined on master.
60
+ PRERELEASE = '<prerelease>'
61
+
62
+ # The full version string, including the {MAJOR}, {MINOR}, {PATCH}, and optionally, the {PRERELEASE} in the
63
+ # {http://semver.org/spec/v2.0.0.html semantic versioning v2.0.0} format.
64
+ #
65
+ # @return [String] '{MAJOR}.{MINOR}.{PATCH}' on master. '{MAJOR}.{MINOR}.{PATCH}-{PRERELEASE}' on any branch
66
+ # other than master.
67
+ def self.full
68
+ version = "#{MAJOR}.#{MINOR}.#{PATCH}"
69
+
70
+ if defined? PRERELEASE
71
+ version = "#{version}-#{PRERELEASE}"
72
+ end
73
+
74
+ version
75
+ end
76
+
77
+ # The full gem version string, including the {MAJOR}, {MINOR}, {PATCH}, and optionally, the {PRERELEASE} in the
78
+ # {http://guides.rubygems.org/specification-reference/#version RubyGems versioning} format.
79
+ #
80
+ # @return [String] '{MAJOR}.{MINOR}.{PATCH}' on master. '{MAJOR}.{MINOR}.{PATCH}.{PRERELEASE}' on any branch
81
+ # other than master.
82
+ def self.gem
83
+ full.gsub('-', '.pre.')
84
+ end
85
+ end
86
+ end
87
+ end
88
+ """
89
+ Given I set the environment variables to:
90
+ | variable | value |
91
+ | TRAVIS_BRANCH | <tag> |
92
+ When I run `rspec spec/lib/my_namespace/my_gem/version_spec.rb --format documentation`
93
+ Then the output should contain:
94
+ """
95
+ PRERELEASE
96
+ matches the tag prerelease converted from a gem version to a VERSION
97
+ """
98
+
99
+ Examples:
100
+ | prerelease | tag |
101
+ | nasty | v1.2.3.pre.nasty |
102
+ | super-cool | v1.2.3.pre.super.pre.cool |
103
+
104
+ Scenario Outline: PRERELEASE not defined as tag relative name
105
+ Given a file named "lib/my_namespace/my_gem/version.rb" with:
106
+ """ruby
107
+ module MyNamespace
108
+ module MyGem
109
+ module Version
110
+ #
111
+ # CONSTANTS
112
+ #
113
+
114
+ # The major version number
115
+ MAJOR = 1
116
+
117
+ # The minor version number, scoped to the {MAJOR} version number.
118
+ MINOR = 2
119
+
120
+ # The patch number, scoped to the {MINOR} version number
121
+ PATCH = 3
122
+
123
+ # The full version string, including the {MAJOR}, {MINOR}, {PATCH}, and optionally, the {PRERELEASE} in the
124
+ # {http://semver.org/spec/v2.0.0.html semantic versioning v2.0.0} format.
125
+ #
126
+ # @return [String] '{MAJOR}.{MINOR}.{PATCH}' on master. '{MAJOR}.{MINOR}.{PATCH}-{PRERELEASE}' on any branch
127
+ # other than master.
128
+ def self.full
129
+ version = "#{MAJOR}.#{MINOR}.#{PATCH}"
130
+
131
+ if defined? PRERELEASE
132
+ version = "#{version}-#{PRERELEASE}"
133
+ end
134
+
135
+ version
136
+ end
137
+
138
+ # The full gem version string, including the {MAJOR}, {MINOR}, {PATCH}, and optionally, the {PRERELEASE} in the
139
+ # {http://guides.rubygems.org/specification-reference/#version RubyGems versioning} format.
140
+ #
141
+ # @return [String] '{MAJOR}.{MINOR}.{PATCH}' on master. '{MAJOR}.{MINOR}.{PATCH}.{PRERELEASE}' on any branch
142
+ # other than master.
143
+ def self.gem
144
+ full.gsub('-', '.pre.')
145
+ end
146
+ end
147
+ end
148
+ end
149
+ """
150
+ Given I set the environment variables to:
151
+ | variable | value |
152
+ | TRAVIS_BRANCH | <tag> |
153
+ When I run `rspec spec/lib/my_namespace/my_gem/version_spec.rb --format documentation`
154
+ Then the output should contain "MyNamespace::MyGem::Version it should behave like Metasploit::Version Version Module CONSTANTS PRERELEASE matches the tag prerelease converted from a gem version to a VERSION"
155
+ And the output should contain:
156
+ """
157
+ expected MyNamespace::MyGem::Version::PRERELEASE to be defined.
158
+ Add the following to MyNamespace::MyGem::Version:
159
+ """
160
+ # Can't do a continuous multiline string because editors will truncate whitespace in blank line and it won't match
161
+ # whitespace in rspec output.
162
+ And the output should contain:
163
+ """
164
+ # The prerelease version, scoped to the {PATCH} version number.
165
+ PRERELEASE = <prerelease>
166
+ """
167
+
168
+ Examples:
169
+ | prerelease | tag |
170
+ | nasty | v1.2.3.pre.nasty |
171
+ | super-cool | v1.2.3.pre.super.pre.cool |
172
+
173
+ Scenario: PRERELEASE defined on release tag
174
+ Given a file named "lib/my_namespace/my_gem/version.rb" with:
175
+ """ruby
176
+ module MyNamespace
177
+ module MyGem
178
+ module Version
179
+ #
180
+ # CONSTANTS
181
+ #
182
+
183
+ # The major version number
184
+ MAJOR = 1
185
+
186
+ # The minor version number, scoped to the {MAJOR} version number.
187
+ MINOR = 2
188
+
189
+ # The patch number, scoped to the {MINOR} version number
190
+ PATCH = 3
191
+
192
+ # The prerelease name of the given {MAJOR}.{MINOR}.{PATCH} version number. Will not be defined on master.
193
+ PRERELEASE = 'left-over-from-branch'
194
+
195
+ # The full version string, including the {MAJOR}, {MINOR}, {PATCH}, and optionally, the {PRERELEASE} in the
196
+ # {http://semver.org/spec/v2.0.0.html semantic versioning v2.0.0} format.
197
+ #
198
+ # @return [String] '{MAJOR}.{MINOR}.{PATCH}' on master. '{MAJOR}.{MINOR}.{PATCH}-{PRERELEASE}' on any branch
199
+ # other than master.
200
+ def self.full
201
+ version = "#{MAJOR}.#{MINOR}.#{PATCH}"
202
+
203
+ if defined? PRERELEASE
204
+ version = "#{version}-#{PRERELEASE}"
205
+ end
206
+
207
+ version
208
+ end
209
+
210
+ # The full gem version string, including the {MAJOR}, {MINOR}, {PATCH}, and optionally, the {PRERELEASE} in the
211
+ # {http://guides.rubygems.org/specification-reference/#version RubyGems versioning} format.
212
+ #
213
+ # @return [String] '{MAJOR}.{MINOR}.{PATCH}' on master. '{MAJOR}.{MINOR}.{PATCH}.{PRERELEASE}' on any branch
214
+ # other than master.
215
+ def self.gem
216
+ full.gsub('-', '.pre.')
217
+ end
218
+ end
219
+ end
220
+ end
221
+ """
222
+ Given I set the environment variables to:
223
+ | variable | value |
224
+ | TRAVIS_BRANCH | v1.2.3 |
225
+ When I run `rspec spec/lib/my_namespace/my_gem/version_spec.rb --format documentation`
226
+ Then the output should contain "expected MyNamespace::MyGem::Version::PRERELEASE not to be defined on master"
227
+
228
+ Scenario: PRERELEASE not defined on release tag
229
+ Given a file named "lib/my_namespace/my_gem/version.rb" with:
230
+ """ruby
231
+ module MyNamespace
232
+ module MyGem
233
+ module Version
234
+ #
235
+ # CONSTANTS
236
+ #
237
+
238
+ # The major version number
239
+ MAJOR = 1
240
+
241
+ # The minor version number, scoped to the {MAJOR} version number.
242
+ MINOR = 2
243
+
244
+ # The patch number, scoped to the {MINOR} version number
245
+ PATCH = 3
246
+
247
+ # The full version string, including the {MAJOR}, {MINOR}, {PATCH}, and optionally, the {PRERELEASE} in the
248
+ # {http://semver.org/spec/v2.0.0.html semantic versioning v2.0.0} format.
249
+ #
250
+ # @return [String] '{MAJOR}.{MINOR}.{PATCH}' on master. '{MAJOR}.{MINOR}.{PATCH}-{PRERELEASE}' on any branch
251
+ # other than master.
252
+ def self.full
253
+ version = "#{MAJOR}.#{MINOR}.#{PATCH}"
254
+
255
+ if defined? PRERELEASE
256
+ version = "#{version}-#{PRERELEASE}"
257
+ end
258
+
259
+ version
260
+ end
261
+
262
+ # The full gem version string, including the {MAJOR}, {MINOR}, {PATCH}, and optionally, the {PRERELEASE} in the
263
+ # {http://guides.rubygems.org/specification-reference/#version RubyGems versioning} format.
264
+ #
265
+ # @return [String] '{MAJOR}.{MINOR}.{PATCH}' on master. '{MAJOR}.{MINOR}.{PATCH}.{PRERELEASE}' on any branch
266
+ # other than master.
267
+ def self.gem
268
+ full.gsub('-', '.pre.')
269
+ end
270
+ end
271
+ end
272
+ end
273
+ """
274
+ Given I set the environment variables to:
275
+ | variable | value |
276
+ | TRAVIS_BRANCH | v1.2.3 |
277
+ Then I successfully run `rspec spec/lib/my_namespace/my_gem/version_spec.rb --format documentation`