metasploit-version 0.1.2-java

Sign up to get free protection for your applications and to get access to all the features.
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,20 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
7
+
8
+ require 'cucumber'
9
+ require 'cucumber/rake/task'
10
+
11
+ Cucumber::Rake::Task.new do |t|
12
+ t.cucumber_opts = 'features --format pretty'
13
+ end
14
+
15
+ # Use find_all_by_name instead of find_by_name as find_all_by_name will return pre-release versions
16
+ gem_specification = Gem::Specification.find_all_by_name('metasploit-yard').first
17
+
18
+ Dir[File.join(gem_specification.gem_dir, 'lib', 'tasks', '**', '*.rake')].each do |rake|
19
+ load rake
20
+ end
@@ -0,0 +1,215 @@
1
+ Feature: 'Metasploit::Version VERSION constant' shared example
2
+
3
+ The 'Metasploit::Version VERSION constant' shared example will check that the described_class for an RSpec *_spec.rb
4
+ file has a VERSION constant equal to described_class::Version.full, which indicates that VERSION is setup to
5
+ use the full module method.
6
+
7
+ Background:
8
+ Given a file named "lib/my_namespace/my_gem.rb" with:
9
+ """ruby
10
+ require 'my_namespace/my_gem/version'
11
+
12
+ module MyNamespace
13
+ module MyGem
14
+ end
15
+ end
16
+ """
17
+ Given a file named "spec/spec_helper.rb" with:
18
+ """ruby
19
+ require 'metasploit/version'
20
+ require 'my_namespace/my_gem'
21
+
22
+ # Use find_all_by_name instead of find_by_name as find_all_by_name will return pre-release versions
23
+ gem_specification = Gem::Specification.find_all_by_name('metasploit-version').first
24
+
25
+ Dir[File.join(gem_specification.gem_dir, 'spec', 'support', '**', '*.rb')].each do |f|
26
+ require f
27
+ end
28
+ """
29
+ Given a file named "spec/lib/my_namespace/my_gem_spec.rb" with:
30
+ """ruby
31
+ require 'spec_helper'
32
+
33
+ RSpec.describe MyNamespace::MyGem do
34
+ it_should_behave_like 'Metasploit::Version GEM_VERSION constant'
35
+ end
36
+ """
37
+
38
+ Scenario: GEM_VERSION is not defined
39
+ Given a file named "lib/my_namespace/my_gem/version.rb" with:
40
+ """ruby
41
+ require 'metasploit/version'
42
+
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
+ #
63
+ # Module Methods
64
+ #
65
+
66
+ # The full version string, including the {MAJOR}, {MINOR}, {PATCH}, and optionally, the {PRERELEASE} in the
67
+ # {http://semver.org/spec/v2.0.0.html semantic versioning v2.0.0} format.
68
+ #
69
+ # @return [String] '{MAJOR}.{MINOR}.{PATCH}' on master. '{MAJOR}.{MINOR}.{PATCH}-{PRERELEASE}' on any branch
70
+ # other than master.
71
+ def self.full
72
+ version = "#{MAJOR}.#{MINOR}.#{PATCH}"
73
+
74
+ if defined? PRERELEASE
75
+ version = "#{version}-#{PRERELEASE}"
76
+ end
77
+
78
+ version
79
+ end
80
+ end
81
+
82
+ # (see Version.full)
83
+ VERSION = Version.full
84
+ end
85
+ end
86
+ """
87
+ When I run `rspec spec/lib/my_namespace/my_gem_spec.rb --format documentation`
88
+ Then the output should contain "expected MyNamespace::MyGem::GEM_VERSION to be defined"
89
+
90
+ Scenario: GEM_VERSION is not equal to Version.gem
91
+ Given a file named "lib/my_namespace/my_gem/version.rb" with:
92
+ """ruby
93
+ require 'metasploit/version'
94
+
95
+ module MyNamespace
96
+ module MyGem
97
+ module Version
98
+ #
99
+ # CONSTANTS
100
+ #
101
+
102
+ # The major version number
103
+ MAJOR = 1
104
+
105
+ # The minor version number, scoped to the {MAJOR} version number.
106
+ MINOR = 2
107
+
108
+ # The patch number, scoped to the {MINOR} version number.
109
+ PATCH = 3
110
+
111
+ # The prerelease name of the given {MAJOR}.{MINOR}.{PATCH} version number. Will not be defined on master.
112
+ PRERELEASE = 'prerelease'
113
+
114
+ #
115
+ # Module Methods
116
+ #
117
+
118
+ # The full version string, including the {MAJOR}, {MINOR}, {PATCH}, and optionally, the {PRERELEASE} in the
119
+ # {http://semver.org/spec/v2.0.0.html semantic versioning v2.0.0} format.
120
+ #
121
+ # @return [String] '{MAJOR}.{MINOR}.{PATCH}' on master. '{MAJOR}.{MINOR}.{PATCH}-{PRERELEASE}' on any branch
122
+ # other than master.
123
+ def self.full
124
+ version = "#{MAJOR}.#{MINOR}.#{PATCH}"
125
+
126
+ if defined? PRERELEASE
127
+ version = "#{version}-#{PRERELEASE}"
128
+ end
129
+
130
+ version
131
+ end
132
+
133
+ # The full gem version string, including the {MAJOR}, {MINOR}, {PATCH}, and optionally, the {PRERELEASE} in the
134
+ # {http://guides.rubygems.org/specification-reference/#version RubyGems versioning} format.
135
+ #
136
+ # @return [String] '{MAJOR}.{MINOR}.{PATCH}' on master. '{MAJOR}.{MINOR}.{PATCH}.{PRERELEASE}' on any branch
137
+ # other than master.
138
+ def self.gem
139
+ full.gsub('-', '.pre.')
140
+ end
141
+ end
142
+
143
+ # (see Version.full)
144
+ GEM_VERSION = Version.full
145
+
146
+ # (see Version.full)
147
+ VERSION = Version.full
148
+ end
149
+ end
150
+ """
151
+ When I run `rspec spec/lib/my_namespace/my_gem_spec.rb --format documentation`
152
+ Then the output should contain "expected MyNamespace::MyGem::GEM_VERSION to equal MyNamespace::MyGem::Version.gem"
153
+
154
+ Scenario: GEM_VERSION is equal to Version.gem
155
+ Given a file named "lib/my_namespace/my_gem/version.rb" with:
156
+ """ruby
157
+ require 'metasploit/version'
158
+
159
+ module MyNamespace
160
+ module MyGem
161
+ module Version
162
+ #
163
+ # CONSTANTS
164
+ #
165
+
166
+ # The major version number
167
+ MAJOR = 1
168
+
169
+ # The minor version number, scoped to the {MAJOR} version number.
170
+ MINOR = 2
171
+
172
+ # The patch number, scoped to the {MINOR} version number.
173
+ PATCH = 3
174
+
175
+ # The prerelease name of the given {MAJOR}.{MINOR}.{PATCH} version number. Will not be defined on master.
176
+ PRERELEASE = 'prerelease'
177
+
178
+ #
179
+ # Module Methods
180
+ #
181
+
182
+ # The full version string, including the {MAJOR}, {MINOR}, {PATCH}, and optionally, the {PRERELEASE} in the
183
+ # {http://semver.org/spec/v2.0.0.html semantic versioning v2.0.0} format.
184
+ #
185
+ # @return [String] '{MAJOR}.{MINOR}.{PATCH}' on master. '{MAJOR}.{MINOR}.{PATCH}-{PRERELEASE}' on any branch
186
+ # other than master.
187
+ def self.full
188
+ version = "#{MAJOR}.#{MINOR}.#{PATCH}"
189
+
190
+ if defined? PRERELEASE
191
+ version = "#{version}-#{PRERELEASE}"
192
+ end
193
+
194
+ version
195
+ end
196
+
197
+ # The full gem version string, including the {MAJOR}, {MINOR}, {PATCH}, and optionally, the {PRERELEASE} in the
198
+ # {http://guides.rubygems.org/specification-reference/#version RubyGems versioning} format.
199
+ #
200
+ # @return [String] '{MAJOR}.{MINOR}.{PATCH}' on master. '{MAJOR}.{MINOR}.{PATCH}.{PRERELEASE}' on any branch
201
+ # other than master.
202
+ def self.gem
203
+ full.gsub('-', '.pre.')
204
+ end
205
+ end
206
+
207
+ # (see Version.gem)
208
+ GEM_VERSION = Version.gem
209
+
210
+ # (see Version.full)
211
+ VERSION = Version.full
212
+ end
213
+ end
214
+ """
215
+ Then I successfully run `rspec spec/lib/my_namespace/my_gem_spec.rb --format documentation`
@@ -0,0 +1,183 @@
1
+ Feature: 'Metasploit::Version VERSION constant' shared example
2
+
3
+ The 'Metasploit::Version VERSION constant' shared example will check that the described_class for an RSpec *_spec.rb
4
+ file has a VERSION constant equal to described_class::Version.full, which indicates that VERSION is setup to
5
+ use the full module method.
6
+
7
+ Background:
8
+ Given a file named "lib/my_namespace/my_gem.rb" with:
9
+ """ruby
10
+ require 'my_namespace/my_gem/version'
11
+
12
+ module MyNamespace
13
+ module MyGem
14
+ end
15
+ end
16
+ """
17
+ Given a file named "spec/spec_helper.rb" with:
18
+ """ruby
19
+ require 'metasploit/version'
20
+ require 'my_namespace/my_gem'
21
+
22
+ # Use find_all_by_name instead of find_by_name as find_all_by_name will return pre-release versions
23
+ gem_specification = Gem::Specification.find_all_by_name('metasploit-version').first
24
+
25
+ Dir[File.join(gem_specification.gem_dir, 'spec', 'support', '**', '*.rb')].each do |f|
26
+ require f
27
+ end
28
+ """
29
+ Given a file named "spec/lib/my_namespace/my_gem_spec.rb" with:
30
+ """ruby
31
+ require 'spec_helper'
32
+
33
+ RSpec.describe MyNamespace::MyGem do
34
+ it_should_behave_like 'Metasploit::Version VERSION constant'
35
+ end
36
+ """
37
+ Scenario: VERSION is not defined
38
+ Given a file named "lib/my_namespace/my_gem/version.rb" with:
39
+ """ruby
40
+ require 'metasploit/version'
41
+
42
+ module MyNamespace
43
+ module MyGem
44
+ module Version
45
+ #
46
+ # CONSTANTS
47
+ #
48
+
49
+ # The major version number
50
+ MAJOR = 1
51
+
52
+ # The minor version number, scoped to the {MAJOR} version number.
53
+ MINOR = 2
54
+
55
+ # The patch number, scoped to the {MINOR} version number.
56
+ PATCH = 3
57
+
58
+ # The prerelease name of the given {MAJOR}.{MINOR}.{PATCH} version number. Will not be defined on master.
59
+ PRERELEASE = 'prerelease'
60
+ end
61
+ end
62
+ end
63
+ """
64
+ When I run `rspec spec/lib/my_namespace/my_gem_spec.rb --format documentation`
65
+ Then the output should contain "expected MyNamespace::MyGem::VERSION to be defined"
66
+ Scenario: VERSION is not equal to Version.full
67
+ Given a file named "lib/my_namespace/my_gem/version.rb" with:
68
+ """ruby
69
+ require 'metasploit/version'
70
+
71
+ module MyNamespace
72
+ module MyGem
73
+ module Version
74
+ #
75
+ # CONSTANTS
76
+ #
77
+
78
+ # The major version number
79
+ MAJOR = 1
80
+
81
+ # The minor version number, scoped to the {MAJOR} version number.
82
+ MINOR = 2
83
+
84
+ # The patch number, scoped to the {MINOR} version number.
85
+ PATCH = 3
86
+
87
+ # The prerelease name of the given {MAJOR}.{MINOR}.{PATCH} version number. Will not be defined on master.
88
+ PRERELEASE = 'prerelease'
89
+
90
+ #
91
+ # Module Methods
92
+ #
93
+
94
+ # The full version string, including the {MAJOR}, {MINOR}, {PATCH}, and optionally, the {PRERELEASE} in the
95
+ # {http://semver.org/spec/v2.0.0.html semantic versioning v2.0.0} format.
96
+ #
97
+ # @return [String] '{MAJOR}.{MINOR}.{PATCH}' on master. '{MAJOR}.{MINOR}.{PATCH}-{PRERELEASE}' on any branch
98
+ # other than master.
99
+ def self.full
100
+ version = "#{MAJOR}.#{MINOR}.#{PATCH}"
101
+
102
+ if defined? PRERELEASE
103
+ version = "#{version}-#{PRERELEASE}"
104
+ end
105
+
106
+ version
107
+ end
108
+
109
+ # The full gem version string, including the {MAJOR}, {MINOR}, {PATCH}, and optionally, the {PRERELEASE} in the
110
+ # {http://guides.rubygems.org/specification-reference/#version RubyGems versioning} format.
111
+ #
112
+ # @return [String] '{MAJOR}.{MINOR}.{PATCH}' on master. '{MAJOR}.{MINOR}.{PATCH}.{PRERELEASE}' on any branch
113
+ # other than master.
114
+ def self.gem
115
+ full.gsub('-', '.pre.')
116
+ end
117
+ end
118
+
119
+ VERSION = '7.8.9'
120
+ end
121
+ end
122
+ """
123
+ When I run `rspec spec/lib/my_namespace/my_gem_spec.rb --format documentation`
124
+ Then the output should contain "expected MyNamespace::MyGem::VERSION to equal MyNamespace::MyGem::Version.full"
125
+
126
+ Scenario: VERSION is equal to Version.full
127
+ Given a file named "lib/my_namespace/my_gem/version.rb" with:
128
+ """ruby
129
+ require 'metasploit/version'
130
+
131
+ module MyNamespace
132
+ module MyGem
133
+ module Version
134
+ #
135
+ # CONSTANTS
136
+ #
137
+
138
+ # The major version number
139
+ MAJOR = 1
140
+
141
+ # The minor version number, scoped to the {MAJOR} version number.
142
+ MINOR = 2
143
+
144
+ # The patch number, scoped to the {MINOR} version number.
145
+ PATCH = 3
146
+
147
+ # The prerelease name of the given {MAJOR}.{MINOR}.{PATCH} version number. Will not be defined on master.
148
+ PRERELEASE = 'prerelease'
149
+
150
+ #
151
+ # Module Methods
152
+ #
153
+
154
+ # The full version string, including the {MAJOR}, {MINOR}, {PATCH}, and optionally, the {PRERELEASE} in the
155
+ # {http://semver.org/spec/v2.0.0.html semantic versioning v2.0.0} format.
156
+ #
157
+ # @return [String] '{MAJOR}.{MINOR}.{PATCH}' on master. '{MAJOR}.{MINOR}.{PATCH}-{PRERELEASE}' on any branch
158
+ # other than master.
159
+ def self.full
160
+ version = "#{MAJOR}.#{MINOR}.#{PATCH}"
161
+
162
+ if defined? PRERELEASE
163
+ version = "#{version}-#{PRERELEASE}"
164
+ end
165
+
166
+ version
167
+ end
168
+
169
+ # The full gem version string, including the {MAJOR}, {MINOR}, {PATCH}, and optionally, the {PRERELEASE} in the
170
+ # {http://guides.rubygems.org/specification-reference/#version RubyGems versioning} format.
171
+ #
172
+ # @return [String] '{MAJOR}.{MINOR}.{PATCH}' on master. '{MAJOR}.{MINOR}.{PATCH}.{PRERELEASE}' on any branch
173
+ # other than master.
174
+ def self.gem
175
+ full.gsub('-', '.pre.')
176
+ end
177
+ end
178
+
179
+ VERSION = Version.full
180
+ end
181
+ end
182
+ """
183
+ Then I successfully run `rspec spec/lib/my_namespace/my_gem_spec.rb --format documentation`
@@ -0,0 +1,275 @@
1
+ Feature: 'Metasploit::Version Version Module' shared example
2
+
3
+ The 'Metasploit::Version Version Module' shared example will check that the described_class for an RSpec *_spec.rb
4
+ file defined the MAJOR, MINOR, and PATCH constants as Integers; the full module method combines those constants
5
+ (and PRERELEASE when present) into a version string; and
6
+
7
+ Background:
8
+ Given a file named "lib/my_namespace/my_gem.rb" with:
9
+ """ruby
10
+ require 'my_namespace/my_gem/version'
11
+
12
+ module MyNamespace
13
+ module MyGem
14
+ end
15
+ end
16
+ """
17
+ Given a file named "spec/spec_helper.rb" with:
18
+ """ruby
19
+ require 'metasploit/version'
20
+ require 'my_namespace/my_gem'
21
+
22
+ # Use find_all_by_name instead of find_by_name as find_all_by_name will return pre-release versions
23
+ gem_specification = Gem::Specification.find_all_by_name('metasploit-version').first
24
+
25
+ Dir[File.join(gem_specification.gem_dir, 'spec', 'support', '**', '*.rb')].each do |f|
26
+ require f
27
+ end
28
+ """
29
+ Given a file named "spec/lib/my_namespace/my_gem/version_spec.rb" with:
30
+ """ruby
31
+ require 'spec_helper'
32
+
33
+ RSpec.describe MyNamespace::MyGem::Version do
34
+ it_should_behave_like 'Metasploit::Version Version Module'
35
+ end
36
+ """
37
+
38
+ Scenario: With String MAJOR, MINOR, and PATCH
39
+ Given a file named "lib/my_namespace/my_gem/version.rb" with:
40
+ """ruby
41
+ module MyNamespace
42
+ module MyGem
43
+ module Version
44
+ #
45
+ # Constants
46
+ #
47
+
48
+ # The major version number
49
+ MAJOR = '1'
50
+
51
+ # The minor version number, scoped to the {MAJOR} version number.
52
+ MINOR = '2'
53
+
54
+ # The patch number, scoped to the {MINOR} version number
55
+ PATCH = '3'
56
+
57
+ #
58
+ # Module Methods
59
+ #
60
+
61
+ # The full version string, including the {MAJOR}, {MINOR}, {PATCH}, and optionally, the {PRERELEASE} in the
62
+ # {http://semver.org/spec/v2.0.0.html semantic versioning v2.0.0} format.
63
+ #
64
+ # @return [String] '{MAJOR}.{MINOR}.{PATCH}' on master. '{MAJOR}.{MINOR}.{PATCH}-{PRERELEASE}' on any branch
65
+ # other than master.
66
+ def self.full
67
+ version = "#{MAJOR}.#{MINOR}.#{PATCH}"
68
+
69
+ if defined? PRERELEASE
70
+ version = "#{version}-#{PRERELEASE}"
71
+ end
72
+
73
+ version
74
+ end
75
+
76
+ # The full gem version string, including the {MAJOR}, {MINOR}, {PATCH}, and optionally, the {PRERELEASE} in the
77
+ # {http://guides.rubygems.org/specification-reference/#version RubyGems versioning} format.
78
+ #
79
+ # @return [String] '{MAJOR}.{MINOR}.{PATCH}' on master. '{MAJOR}.{MINOR}.{PATCH}.{PRERELEASE}' on any branch
80
+ # other than master.
81
+ def self.gem
82
+ full.gsub('-', '.pre.')
83
+ end
84
+ end
85
+ end
86
+ end
87
+ """
88
+ When I run `rspec spec/lib/my_namespace/my_gem/version_spec.rb --format documentation`
89
+ Then the output should contain:
90
+ """
91
+ expected "1" to be a kind of Integer
92
+ """
93
+ And the output should contain:
94
+ """
95
+ expected "2" to be a kind of Integer
96
+ """
97
+ And the output should contain:
98
+ """
99
+ expected "3" to be a kind of Integer
100
+ """
101
+
102
+ Scenario: Without full method, example implementation is given
103
+ Given a file named "lib/my_namespace/my_gem/version.rb" with:
104
+ """ruby
105
+ module MyNamespace
106
+ module MyGem
107
+ module Version
108
+ #
109
+ # Constants
110
+ #
111
+
112
+ # The major version number
113
+ MAJOR = 1
114
+
115
+ # The minor version number, scoped to the {MAJOR} version number.
116
+ MINOR = 2
117
+
118
+ # The patch number, scoped to the {MINOR} version number
119
+ PATCH = 3
120
+ end
121
+ end
122
+ end
123
+ """
124
+ When I run `rspec spec/lib/my_namespace/my_gem/version_spec.rb --format documentation`
125
+ # Need to break up the expected message due to blank lines in expected output
126
+ Then the output should contain:
127
+ """
128
+ expected MyNamespace::MyGem::Version to define self.full().
129
+ Add the following to MyNamespace::MyGem::Version
130
+ """
131
+ And the output should contain:
132
+ """
133
+ # The full version string, including the {MAJOR}, {MINOR}, {PATCH}, and optionally, the {PRERELEASE} in the
134
+ # {http://semver.org/spec/v2.0.0.html semantic versioning v2.0.0} format.
135
+ #
136
+ # @return [String] '{MAJOR}.{MINOR}.{PATCH}' on master. '{MAJOR}.{MINOR}.{PATCH}-{PRERELEASE}' on any branch
137
+ # other than master.
138
+ def self.full
139
+ version = "#{MAJOR}.#{MINOR}.#{PATCH}"
140
+ """
141
+ And the output should contain:
142
+ """
143
+ if defined? PRERELEASE
144
+ version = "#{version}-#{PRERELEASE}"
145
+ end
146
+ """
147
+ And the output should contain:
148
+ """
149
+ version
150
+ end
151
+ """
152
+
153
+ Scenario: Without gem method, example implementation is given
154
+ Given a file named "lib/my_namespace/my_gem/version.rb" with:
155
+ """ruby
156
+ module MyNamespace
157
+ module MyGem
158
+ module Version
159
+ #
160
+ # Constants
161
+ #
162
+
163
+ # The major version number
164
+ MAJOR = 1
165
+
166
+ # The minor version number, scoped to the {MAJOR} version number.
167
+ MINOR = 2
168
+
169
+ # The patch number, scoped to the {MINOR} version number
170
+ PATCH = 3
171
+
172
+ #
173
+ # Module Methods
174
+ #
175
+
176
+ # The full version string, including the {MAJOR}, {MINOR}, {PATCH}, and optionally, the {PRERELEASE} in the
177
+ # {http://semver.org/spec/v2.0.0.html semantic versioning v2.0.0} format.
178
+ #
179
+ # @return [String] '{MAJOR}.{MINOR}.{PATCH}' on master. '{MAJOR}.{MINOR}.{PATCH}-{PRERELEASE}' on any branch
180
+ # other than master.
181
+ def self.full
182
+ version = "#{MAJOR}.#{MINOR}.#{PATCH}"
183
+
184
+ if defined? PRERELEASE
185
+ version = "#{version}-#{PRERELEASE}"
186
+ end
187
+
188
+ version
189
+ end
190
+ end
191
+ end
192
+ end
193
+ """
194
+ When I run `rspec spec/lib/my_namespace/my_gem/version_spec.rb --format documentation`
195
+ Then the output should contain "Add the following to MyNamespace::MyGem::Version:"
196
+ And the output should contain:
197
+ """
198
+ # The full gem version string, including the {MAJOR}, {MINOR}, {PATCH}, and optionally, the {PRERELEASE} in the
199
+ # {http://guides.rubygems.org/specification-reference/#version RubyGems versioning} format.
200
+ #
201
+ # @return [String] '{MAJOR}.{MINOR}.{PATCH}' on master. '{MAJOR}.{MINOR}.{PATCH}.{PRERELEASE}' on any branch
202
+ # other than master.
203
+ def self.gem
204
+ full.gsub('-', '.pre.')
205
+ end
206
+ """
207
+ Scenario: With integer MAJOR, MINOR, PATCH and both full and gem methods
208
+ Given a file named "lib/my_namespace/my_gem/version.rb" with:
209
+ """ruby
210
+ module MyNamespace
211
+ module MyGem
212
+ module Version
213
+ #
214
+ # Constants
215
+ #
216
+
217
+ # The major version number
218
+ MAJOR = 1
219
+ # The minor version number, scoped to the {MAJOR} version number.
220
+ MINOR = 2
221
+ # The patch number, scoped to the {MINOR} version number
222
+ PATCH = 3
223
+
224
+ #
225
+ # Module Methods
226
+ #
227
+
228
+ # The full version string, including the {MAJOR}, {MINOR}, {PATCH}, and optionally, the {PRERELEASE} in the
229
+ # {http://semver.org/spec/v2.0.0.html semantic versioning v2.0.0} format.
230
+ #
231
+ # @return [String] '{MAJOR}.{MINOR}.{PATCH}' on master. '{MAJOR}.{MINOR}.{PATCH}-{PRERELEASE}' on any branch
232
+ # other than master.
233
+ def self.full
234
+ version = "#{MAJOR}.#{MINOR}.#{PATCH}"
235
+
236
+ if defined? PRERELEASE
237
+ version = "#{version}-#{PRERELEASE}"
238
+ end
239
+
240
+ version
241
+ end
242
+
243
+ # The full gem version string, including the {MAJOR}, {MINOR}, {PATCH}, and optionally, the {PRERELEASE} in the
244
+ # {http://guides.rubygems.org/specification-reference/#version RubyGems versioning} format.
245
+ #
246
+ # @return [String] '{MAJOR}.{MINOR}.{PATCH}' on master. '{MAJOR}.{MINOR}.{PATCH}.{PRERELEASE}' on any branch
247
+ # other than master.
248
+ def self.gem
249
+ full.gsub('-', '.pre.')
250
+ end
251
+ end
252
+ end
253
+ end
254
+ """
255
+ When I run `rspec spec/lib/my_namespace/my_gem/version_spec.rb --format documentation`
256
+ Then the output should contain:
257
+ """
258
+ CONSTANTS
259
+ MAJOR
260
+ should be a kind of Integer
261
+ MINOR
262
+ should be a kind of Integer
263
+ PATCH
264
+ should be a kind of Integer
265
+ """
266
+ And the output should contain:
267
+ """
268
+ full
269
+ with PRERELEASE defined
270
+ is <MAJOR>.<MINOR>.<PATCH>-<PRERELEASE>
271
+ without PRERELEASE defined
272
+ is <MAJOR>.<MINOR>.<PATCH>
273
+ gem
274
+ replaces '-' with '.pre.' to be compatible with rubygems 1.8.6
275
+ """