metasploit-version 0.1.2-java → 0.1.3-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 (55) hide show
  1. checksums.yaml +4 -4
  2. data/.rspec +2 -0
  3. data/.travis.yml +10 -3
  4. data/CHANGELOG.md +6 -0
  5. data/CONTRIBUTING.md +10 -44
  6. data/Gemfile +12 -8
  7. data/RELEASING.md +86 -0
  8. data/Rakefile +5 -4
  9. data/UPGRADING.md +1 -0
  10. data/app/templates/.rspec.tt +2 -0
  11. data/app/templates/CHANGELOG.md.tt +18 -0
  12. data/app/templates/CONTRIBUTING.md.tt +122 -0
  13. data/app/templates/RELEASING.md.tt +99 -0
  14. data/app/templates/Rakefile.tt +7 -0
  15. data/app/templates/UPGRADING.md.tt +1 -0
  16. data/app/templates/lib/versioned/version.rb.tt +64 -0
  17. data/app/templates/spec/lib/versioned/version_spec.rb.tt +3 -0
  18. data/app/templates/spec/lib/versioned_spec.rb.tt +4 -0
  19. data/app/templates/spec/spec_helper.rb.tt +76 -0
  20. data/bin/metasploit-version +12 -0
  21. data/config/cucumber.yml +3 -0
  22. data/features/metasploit-version/install/add_development_dependency.feature +68 -0
  23. data/features/metasploit-version/install/bundle_install.feature +24 -0
  24. data/features/metasploit-version/install/changelog.feature +29 -0
  25. data/features/metasploit-version/install/conflict.feature +45 -0
  26. data/features/metasploit-version/install/contributing.feature +139 -0
  27. data/features/metasploit-version/install/namespace_spec/gem_version_constant.feature +154 -0
  28. data/features/metasploit-version/install/namespace_spec/namespace.feature +33 -0
  29. data/features/metasploit-version/install/namespace_spec/version_constant.feature +179 -0
  30. data/features/metasploit-version/install/rake_spec.feature +27 -0
  31. data/features/metasploit-version/install/releasing/ruby_versions.feature +50 -0
  32. data/features/metasploit-version/install/releasing/versioning.feature +138 -0
  33. data/features/metasploit-version/install/steps/gemspec_steps.rb +19 -0
  34. data/features/metasploit-version/install/upgrading.feature +19 -0
  35. data/features/metasploit-version/install/version.feature +11 -0
  36. data/features/metasploit-version/install/version/namespace.feature +157 -0
  37. data/features/metasploit-version/install/version/prerelease.feature +154 -0
  38. data/features/metasploit-version/install/version_spec/namespace.feature +32 -0
  39. data/features/metasploit-version/install/version_spec/testing/branch_from_master.feature +40 -0
  40. data/features/metasploit-version/install/version_spec/testing/branching_from_branch.feature +161 -0
  41. data/features/metasploit-version/install/version_spec/testing/merge_branch_to_master.feature +97 -0
  42. data/features/{shared/examples/metasploit/version/version_module/prerelease/git/step_definitions → step_definitions}/environment_variable_steps.rb +1 -1
  43. data/features/{shared/examples/metasploit/version/version_module/prerelease/git/step_definitions → step_definitions}/git_steps.rb +11 -3
  44. data/features/support/env.rb +15 -11
  45. data/lib/metasploit/version.rb +1 -0
  46. data/lib/metasploit/version/cli.rb +321 -0
  47. data/lib/metasploit/version/version.rb +2 -2
  48. data/metasploit-version.gemspec +2 -2
  49. data/spec/lib/metasploit/version/branch_spec.rb +1 -3
  50. data/spec/lib/metasploit/version/cli_spec.rb +514 -0
  51. data/spec/lib/metasploit/version/version_spec.rb +2 -4
  52. data/spec/lib/metasploit/version_spec.rb +2 -4
  53. data/spec/spec_helper.rb +63 -1
  54. data/spec/support/shared/examples/metasploit/version/version_module.rb +3 -1
  55. metadata +81 -7
@@ -3,7 +3,7 @@ module Metasploit
3
3
  # Holds components of {VERSION} as defined by {http://semver.org/spec/v2.0.0.html semantic versioning v2.0.0}.
4
4
  module Version
5
5
  #
6
- # Constants
6
+ # CONSTANTS
7
7
  #
8
8
 
9
9
  # The major version number.
@@ -11,7 +11,7 @@ module Metasploit
11
11
  # The minor version number, scoped to the {MAJOR} version number.
12
12
  MINOR = 1
13
13
  # The patch number, scoped to the {MINOR} version number.
14
- PATCH = 2
14
+ PATCH = 3
15
15
 
16
16
  #
17
17
  # Module Methods
@@ -24,7 +24,6 @@ Gem::Specification.new do |spec|
24
24
  spec.add_development_dependency 'metasploit-yard', '~> 1.0'
25
25
  spec.add_development_dependency "rake"
26
26
 
27
-
28
27
  if RUBY_PLATFORM =~ /java/
29
28
  # markdown library for YARD to enable proper parsing of README.md and CONTRIBUTING.md
30
29
  spec.add_development_dependency 'kramdown'
@@ -37,5 +36,6 @@ Gem::Specification.new do |spec|
37
36
  spec.platform = Gem::Platform::RUBY
38
37
  end
39
38
 
40
- spec.add_runtime_dependency 'rspec'
39
+ spec.add_runtime_dependency 'rspec', '~> 3.1'
40
+ spec.add_runtime_dependency 'thor'
41
41
  end
@@ -1,6 +1,4 @@
1
- require 'spec_helper'
2
-
3
- describe Metasploit::Version::Branch do
1
+ RSpec.describe Metasploit::Version::Branch do
4
2
  context 'CONSTANTS' do
5
3
  context 'JENKINS_PREFIX_REGEXP' do
6
4
  subject(:jenkins_prefix_regexp) {
@@ -0,0 +1,514 @@
1
+ RSpec.describe Metasploit::Version::CLI do
2
+ subject(:cli) {
3
+ described_class.new
4
+ }
5
+
6
+ context 'CONSTANTS' do
7
+ context 'GEM_NAME' do
8
+ subject(:gem_name) {
9
+ described_class::GEM_NAME
10
+ }
11
+
12
+ it { is_expected.to eq('metasploit-version') }
13
+ end
14
+
15
+ context 'DEVELOPMENT_DEPENDENCY_REGEXP' do
16
+ subject(:development_dependency_regexp) {
17
+ described_class::DEVELOPMENT_DEPENDENCY_REGEXP
18
+ }
19
+
20
+ it { is_expected.to match(%q{spec.add_development_dependency 'metasploit-version'}) }
21
+ it { is_expected.to match(%q{spec.add_development_dependency "metasploit-version"}) }
22
+ end
23
+ end
24
+
25
+ context 'commands' do
26
+ context '#install' do
27
+ subject(:install) {
28
+ cli.install
29
+ }
30
+
31
+ before(:each) do
32
+ allow(cli).to receive(:ensure_development_dependency)
33
+ allow(cli).to receive(:template)
34
+ allow(cli).to receive(:install_bundle)
35
+ allow(cli).to receive(:setup_rspec)
36
+ end
37
+
38
+ it 'calls #ensure_development_dependency' do
39
+ expect(cli).to receive(:ensure_development_dependency)
40
+
41
+ install
42
+ end
43
+
44
+ it 'generates version.rb from a template' do
45
+ expect(cli).to receive(:template).with('lib/versioned/version.rb.tt', 'lib/metasploit/version/version.rb')
46
+
47
+ install
48
+ end
49
+
50
+ it 'installs bundle' do
51
+ expect(cli).to receive(:install_bundle)
52
+
53
+ install
54
+ end
55
+
56
+ it 'generates CHANGELOG.md from a template' do
57
+ expect(cli).to receive(:template).with('CHANGELOG.md.tt', 'CHANGELOG.md')
58
+
59
+ install
60
+ end
61
+
62
+ it 'generates CONTRIBUTING.md from a template' do
63
+ expect(cli).to receive(:template).with('CONTRIBUTING.md.tt', 'CONTRIBUTING.md')
64
+
65
+ install
66
+ end
67
+
68
+ it 'generates RELEASING.md from a template' do
69
+ expect(cli).to receive(:template).with('RELEASING.md.tt', 'RELEASING.md')
70
+
71
+ install
72
+ end
73
+
74
+ it 'generates UPGRADING.md from a template' do
75
+ expect(cli).to receive(:template).with('UPGRADING.md.tt', 'UPGRADING.md')
76
+
77
+ install
78
+ end
79
+
80
+ it 'setups up rspec' do
81
+ expect(cli).to receive(:setup_rspec)
82
+
83
+ install
84
+ end
85
+ end
86
+ end
87
+
88
+ context '#capitalize' do
89
+ subject(:capitalize) {
90
+ cli.send(:capitalize, word)
91
+ }
92
+
93
+ context 'with single character' do
94
+ let(:word) {
95
+ 'a'
96
+ }
97
+
98
+ it 'capitalizes letter' do
99
+ expect(capitalize).to eq('A')
100
+ end
101
+ end
102
+
103
+ context 'with multiple characters' do
104
+ context 'with multiple capitals' do
105
+ let(:word) {
106
+ 'hTML'
107
+ }
108
+
109
+ it 'does not change capitalization of other characters' do
110
+ expect(capitalize).to eq('HTML')
111
+ end
112
+ end
113
+
114
+ context 'with underscored' do
115
+ let(:word) {
116
+ 'underscored_words'
117
+ }
118
+
119
+ it 'uppercases first letter of first word' do
120
+ expect(capitalize).to eq('Underscored_words')
121
+ end
122
+ end
123
+
124
+ context 'with hyphenated' do
125
+ let(:word) {
126
+ 'hyphenated-words'
127
+ }
128
+
129
+ it 'uppercases first letter of the first word' do
130
+ expect(capitalize).to eq('Hyphenated-words')
131
+ end
132
+ end
133
+ end
134
+ end
135
+
136
+ context '#development_dependency_line' do
137
+ subject(:development_dependency_line) {
138
+ cli.send(:development_dependency_line)
139
+ }
140
+
141
+ it 'calls #version_requirement' do
142
+ expect(cli).to receive(:version_requirement)
143
+
144
+ development_dependency_line
145
+ end
146
+ end
147
+
148
+ context '#ensure_development_dependency' do
149
+ subject(:ensure_development_dependency) {
150
+ cli.send(:ensure_development_dependency)
151
+ }
152
+
153
+ #
154
+ # lets
155
+ #
156
+
157
+ let(:gemspec) {
158
+ Tempfile.new(['gem', '.gemspec']).tap { |tempfile|
159
+ tempfile.write(
160
+ <<EOS
161
+ Gem::Specification.new do |spec|
162
+ #{line}
163
+ end
164
+ EOS
165
+ )
166
+ tempfile.flush
167
+ }
168
+ }
169
+
170
+ #
171
+ # Callbacks
172
+ #
173
+
174
+ before(:each) do
175
+ expect(cli).to receive(:gemspec_path).and_return(gemspec.path)
176
+ end
177
+
178
+ context "with `spec.add_development_dependency 'metasploit-version'`" do
179
+ let(:line) {
180
+ " spec.add_development_dependency 'metasploit-version'"
181
+ }
182
+
183
+ it 'adds semantic version requirement' do
184
+ ensure_development_dependency
185
+
186
+ gemspec_after = File.read(gemspec.path)
187
+
188
+ expect(gemspec_after.scan('metasploit-version').length).to eq(1)
189
+ expect(gemspec_after).to match(/spec\.add_development_dependency 'metasploit-version', '#{cli.send(:version_requirement)}'/)
190
+ end
191
+ end
192
+
193
+ context "with `spec.add_development_dependency 'metasploit-version', <requirements>`" do
194
+ let(:line) {
195
+ " spec.add_development_dependency 'metasploit-version', '~> 0.0.0'"
196
+ }
197
+
198
+ it 'changes semantic version requirement' do
199
+ ensure_development_dependency
200
+
201
+ gemspec_after = File.read(gemspec.path)
202
+
203
+ expect(gemspec_after.scan('metasploit-version').length).to eq(1)
204
+ expect(gemspec_after).to match(/spec\.add_development_dependency 'metasploit-version', '#{cli.send(:version_requirement)}'/)
205
+ end
206
+ end
207
+
208
+ context "without `spec.add_development_dependency 'metasploit-version'`" do
209
+ let(:line) {
210
+ ''
211
+ }
212
+
213
+ it 'adds metaspoit-version as a development dependency' do
214
+ ensure_development_dependency
215
+
216
+ gemspec_after = File.read(gemspec.path)
217
+
218
+ expect(gemspec_after.scan('metasploit-version').length).to eq(1)
219
+ expect(gemspec_after).to match(/spec\.add_development_dependency 'metasploit-version', '#{cli.send(:version_requirement)}'/)
220
+ end
221
+ end
222
+ end
223
+
224
+ context '#gemspec_path' do
225
+ subject(:gemspec_path) {
226
+ cli.send(:gemspec_path)
227
+ }
228
+
229
+ #
230
+ # lets
231
+ #
232
+
233
+ let(:name) {
234
+ 'newgem'
235
+ }
236
+
237
+ #
238
+ # Callbacks
239
+ #
240
+
241
+ around(:each) do |example|
242
+ Dir.mktmpdir do |directory|
243
+ Dir.chdir(directory) do
244
+ Dir.mkdir(name)
245
+
246
+ Dir.chdir(name) do
247
+ example.run
248
+ end
249
+ end
250
+ end
251
+ end
252
+
253
+ context 'with 0 gemspecs' do
254
+ it 'print that no gemspecs were found' do
255
+ expect(cli.shell).to receive(:say).with('No gemspec found')
256
+
257
+ expect {
258
+ gemspec_path
259
+ }.to raise_error(SystemExit)
260
+ end
261
+
262
+ it 'exits with non-zero status' do
263
+ expect {
264
+ gemspec_path
265
+ }.to raise_error(SystemExit) { |error|
266
+ expect(error.status).not_to eq(0)
267
+ }
268
+ end
269
+ end
270
+
271
+ context 'with 1 gemspec' do
272
+ #
273
+ # lets
274
+ #
275
+
276
+ let(:expected_path) {
277
+ "#{name}.gemspec"
278
+ }
279
+
280
+ #
281
+ # Callbacks
282
+ #
283
+
284
+ before(:each) do
285
+ File.write(expected_path, '')
286
+ end
287
+
288
+ it 'is relative path to gemspec' do
289
+ expect(gemspec_path).to eq(expected_path)
290
+ end
291
+ end
292
+ end
293
+
294
+ context '#name' do
295
+ subject(:name) do
296
+ cli.send(:name)
297
+ end
298
+
299
+ #
300
+ # lets
301
+ #
302
+
303
+ let(:expected_name) {
304
+ 'expected-name'
305
+ }
306
+
307
+ #
308
+ # Callbacks
309
+ #
310
+
311
+ around(:each) do |example|
312
+ Dir.mktmpdir do |directory|
313
+ Dir.chdir(directory) do
314
+ Dir.mkdir(expected_name)
315
+
316
+ Dir.chdir(expected_name) {
317
+ example.run
318
+ }
319
+ end
320
+ end
321
+ end
322
+
323
+ it 'is the basename of the pwd' do
324
+ expect(name).to eq(expected_name)
325
+ end
326
+ end
327
+
328
+ context 'namespace_name' do
329
+ subject(:namespace_name) {
330
+ cli.send(:namespace_name)
331
+ }
332
+
333
+ #
334
+ # lets
335
+ #
336
+
337
+ let(:namespaces) {
338
+ %w{First Second Third}
339
+ }
340
+
341
+ #
342
+ # Callbacks
343
+ #
344
+
345
+ before(:each) do
346
+ expect(cli).to receive(:namespaces).and_return([namespaces])
347
+ end
348
+
349
+ it 'joins namespaces together with Module separator' do
350
+ expect(namespace_name).to eq('First::Second::Third')
351
+ end
352
+ end
353
+
354
+ context '#namespaces' do
355
+ subject(:namespaces) {
356
+ cli.send(:namespaces)
357
+ }
358
+
359
+ #
360
+ # Callbacks
361
+ #
362
+
363
+ before(:each) do
364
+ expect(cli).to receive(:name).and_return(name)
365
+ end
366
+
367
+ context 'with single word' do
368
+ let(:name) {
369
+ 'yard'
370
+ }
371
+
372
+ it 'is array with capitalized word' do
373
+ expect(namespaces).to eq(%w{Yard})
374
+ end
375
+ end
376
+
377
+ context 'with multiple words' do
378
+ context 'separated by dashes' do
379
+ let(:name) {
380
+ 'metasploit-version'
381
+ }
382
+
383
+ it 'is array with each word capitalized' do
384
+ expect(namespaces).to eq(%w{Metasploit Version})
385
+ end
386
+ end
387
+
388
+ context 'separated by underscores' do
389
+ let(:name) {
390
+ 'metasploit_data_models'
391
+ }
392
+
393
+ it 'is array with single word camelized' do
394
+ expect(namespaces).to eq(%w{MetasploitDataModels})
395
+ end
396
+ end
397
+
398
+ context 'separated by dashes and underscores' do
399
+ let(:name) {
400
+ 'debugger-ruby_core_source'
401
+ }
402
+
403
+ it 'is array with underscored words camelized and a separate word for each pair of hyphenated separated words' do
404
+ expect(namespaces).to eq(%w{Debugger RubyCoreSource})
405
+ end
406
+ end
407
+ end
408
+ end
409
+
410
+ context '#namespaced_path' do
411
+ subject(:namespaced_path) {
412
+ cli.send(:namespaced_path)
413
+ }
414
+
415
+ #
416
+ # lets
417
+ #
418
+
419
+ let(:name) {
420
+ 'debugger-ruby_core_source'
421
+ }
422
+
423
+ #
424
+ # Callbacks
425
+ #
426
+
427
+ before(:each) do
428
+ expect(cli).to receive(:name).and_return(name)
429
+ end
430
+
431
+ it "converts '-' to '/" do
432
+ expect(namespaced_path).not_to include('-')
433
+ expect(namespaced_path).to include('_')
434
+ expect(namespaced_path).to eq('debugger/ruby_core_source')
435
+ end
436
+ end
437
+
438
+ context '#version_requirement' do
439
+ subject(:version_requirement) {
440
+ cli.send(:version_requirement)
441
+ }
442
+
443
+ #
444
+ # lets
445
+ #
446
+
447
+ let(:major) {
448
+ 1
449
+ }
450
+
451
+ let(:minor) {
452
+ 2
453
+ }
454
+
455
+ let(:patch) {
456
+ 3
457
+ }
458
+
459
+ #
460
+ # Callbacks
461
+ #
462
+
463
+ before(:each) do
464
+ stub_const('Metasploit::Version::Version::MAJOR', major)
465
+ stub_const('Metasploit::Version::Version::MINOR', minor)
466
+ stub_const('Metasploit::Version::Version::PATCH', patch)
467
+
468
+ if prerelease.nil?
469
+ hide_const('Metasploit::Version::Version::PRERELEASE')
470
+ else
471
+ stub_const('Metasploit::Version::Version::PRERELEASE', prerelease)
472
+ end
473
+
474
+ # Regenerate GEM_VERSION to use stub_const and remove_const values
475
+ stub_const('Metasploit::Version::GEM_VERSION', Metasploit::Version::Version.gem)
476
+ end
477
+
478
+ context 'with Metasploit::Version::Version::PRERELEASE' do
479
+ let(:prerelease) {
480
+ 'super-cool'
481
+ }
482
+
483
+ it "is '= <GEM_VERSION>'" do
484
+ expect(version_requirement).to eq('= 1.2.3.pre.super.pre.cool')
485
+ end
486
+ end
487
+
488
+ context 'without Metasploit::Version::Version::PRERELEASE' do
489
+ let(:prerelease) {
490
+ nil
491
+ }
492
+
493
+ context 'with Metasploit::Version::Version::MAJOR < 1' do
494
+ let(:major) {
495
+ 0
496
+ }
497
+
498
+ it "is '~> <MAJOR>.<MINOR>.<PATCH>'" do
499
+ expect(version_requirement).to eq('~> 0.2.3')
500
+ end
501
+ end
502
+
503
+ context 'with Metasploit::Version::Version::MAJOR >= 1' do
504
+ let(:major) {
505
+ 1
506
+ }
507
+
508
+ it "is '~> <MAJOR>.<MINOR>'" do
509
+ expect(version_requirement).to eq('~> 1.2')
510
+ end
511
+ end
512
+ end
513
+ end
514
+ end