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,5 @@
1
+ require 'spec_helper'
2
+
3
+ describe Metasploit::Version::Version do
4
+ it_should_behave_like 'Metasploit::Version Version Module'
5
+ end
@@ -0,0 +1,6 @@
1
+ require 'spec_helper'
2
+
3
+ describe Metasploit::Version do
4
+ it_should_behave_like 'Metasploit::Version GEM_VERSION constant'
5
+ it_should_behave_like 'Metasploit::Version VERSION constant'
6
+ end
@@ -0,0 +1,13 @@
1
+ $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
2
+
3
+ # require before 'metasploit/version' so coverage is shown for files required by 'metasploit/version'
4
+ require 'simplecov'
5
+
6
+ require 'metasploit/version'
7
+
8
+ # Use find_all_by_name instead of find_by_name as find_all_by_name will return pre-release versions
9
+ gem_specification = Gem::Specification.find_all_by_name('metasploit-version').first
10
+
11
+ Dir[File.join(gem_specification.gem_dir, 'spec', 'support', '**', '*.rb')].each do |f|
12
+ require f
13
+ end
@@ -0,0 +1,17 @@
1
+ shared_examples_for 'Metasploit::Version GEM_VERSION constant' do
2
+ context 'CONSTANTS' do
3
+ context 'GEM_VERSION' do
4
+ subject(:version) {
5
+ described_class::GEM_VERSION
6
+ }
7
+
8
+ it 'is defined' do
9
+ expect(defined? described_class::GEM_VERSION).not_to be_nil, "expected #{described_class}::GEM_VERSION to be defined"
10
+ end
11
+
12
+ it 'is Version.gem' do
13
+ expect(version).to eq(described_class::Version.gem), "expected #{described_class}::GEM_VERSION to equal #{described_class}::Version.gem"
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ shared_examples_for 'Metasploit::Version VERSION constant' do
2
+ context 'CONSTANTS' do
3
+ context 'VERSION' do
4
+ subject(:version) {
5
+ described_class::VERSION
6
+ }
7
+
8
+ it 'is defined' do
9
+ expect(defined? described_class::VERSION).not_to be_nil, "expected #{described_class}::VERSION to be defined"
10
+ end
11
+
12
+ it 'is Version.full' do
13
+ expect(version).to eq(described_class::Version.full), "expected #{described_class}::VERSION to equal #{described_class}::Version.full"
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,226 @@
1
+ shared_examples_for 'Metasploit::Version Version Module' do
2
+ context 'CONSTANTS' do
3
+ context 'MAJOR' do
4
+ subject(:major) {
5
+ described_class::MAJOR
6
+ }
7
+
8
+ it { should be_an Integer }
9
+ end
10
+
11
+ context 'MINOR' do
12
+ subject(:minor) {
13
+ described_class::MINOR
14
+ }
15
+
16
+ it { should be_a Integer }
17
+ end
18
+
19
+ context 'PATCH' do
20
+ subject(:patch) {
21
+ described_class::PATCH
22
+ }
23
+
24
+ it { should be_a Integer }
25
+ end
26
+
27
+ pull_request = ENV['TRAVIS_PULL_REQUEST']
28
+ example_options = {}
29
+
30
+ if !pull_request.nil? && pull_request != 'false'
31
+ example_options = {
32
+ pending: "PRERELEASE can only be set appropriately for a merge by merging to the target branch and then " \
33
+ "updating PRERELEASE on the target branch before committing and/or pushing to github and travis-ci."
34
+ }
35
+ end
36
+
37
+ context 'PRERELEASE' do
38
+ subject(:prerelease) {
39
+ described_class::PRERELEASE
40
+ }
41
+
42
+ branch = Metasploit::Version::Branch.current
43
+ parsed_branch = Metasploit::Version::Branch.parse(branch)
44
+
45
+ #
46
+ # Methods
47
+ #
48
+
49
+ # use define_method to capture `parsed_branch`
50
+ define_method(:expect_prerelease_to_be_defined) do
51
+ expect(defined? described_class::PRERELEASE).not_to(
52
+ be_nil,
53
+ # lambda so error string is only calculated on failures
54
+ ->() {
55
+ "expected #{described_class}::PRERELEASE to be defined.\n" \
56
+ "Add the following to #{described_class}:\n" \
57
+ "\n" \
58
+ " # The prerelease version, scoped to the {PATCH} version number.\n" \
59
+ " PRERELEASE = #{parsed_branch[:prerelease]}"
60
+ }
61
+ )
62
+ end
63
+
64
+ # unknown format
65
+ if parsed_branch.nil?
66
+ # unknown format is still wrong, even on a pull request, so don't use `example_options`
67
+ it 'has an abbreviated reference that can be parsed for prerelease' do
68
+ fail "Do not know how to parse #{branch.inspect} for PRERELEASE"
69
+ end
70
+ # detached HEAD in git
71
+ elsif parsed_branch == 'HEAD'
72
+ it 'has an abbreviated reference that can be parsed for prerelease',
73
+ pending: 'Cannot determine branch name in detached HEAD state. Set TRAVIS_BRANCH to supply branch name' do
74
+ fail "Do not know how to parse #{branch.inspect} for PRERELEASE"
75
+ end
76
+ # master
77
+ elsif parsed_branch == 'master'
78
+ it 'is not defined', example_options do
79
+ expect(defined? described_class::PRERELEASE).to(
80
+ be_nil,
81
+ "expected #{described_class}::PRERELEASE not to be defined on master"
82
+ )
83
+ end
84
+ # non-master branches
85
+ elsif parsed_branch.has_key? :type
86
+ it "matches the #{parsed_branch[:type]} branch's name", example_options do
87
+ expect_prerelease_to_be_defined
88
+ expect(prerelease).to eq(parsed_branch[:prerelease])
89
+ end
90
+ # tags
91
+ else
92
+ # pre-release tag
93
+ if parsed_branch[:prerelease]
94
+ it 'matches the tag prerelease converted from a gem version to a VERSION', example_options do
95
+ expect_prerelease_to_be_defined
96
+ expect(prerelease).to eq(parsed_branch[:prerelease])
97
+ end
98
+ # master tag
99
+ else
100
+ it 'is not defined', example_options do
101
+ expect(defined? described_class::PRERELEASE).to(
102
+ be_nil,
103
+ "expected #{described_class}::PRERELEASE not to be defined on master"
104
+ )
105
+ end
106
+ end
107
+ end
108
+ end
109
+ end
110
+
111
+ context 'full' do
112
+ subject(:full) {
113
+ described_class.full
114
+ }
115
+
116
+ #
117
+ # Methods
118
+ #
119
+
120
+ def expect_method_defined
121
+ expect(defined? described_class.full).to(
122
+ eq('method'),
123
+ # lambda so expensive message calculation only happens on failure
124
+ ->() {
125
+ "expected #{described_class} to define self.full().\n" \
126
+ "Add the following to #{described_class}\n" \
127
+ "\n" \
128
+ " # The full version string, including the {MAJOR}, {MINOR}, {PATCH}, and optionally, the {PRERELEASE} in the\n" \
129
+ " # {http://semver.org/spec/v2.0.0.html semantic versioning v2.0.0} format.\n" \
130
+ " #\n" \
131
+ " # @return [String] '{MAJOR}.{MINOR}.{PATCH}' on master. '{MAJOR}.{MINOR}.{PATCH}-{PRERELEASE}' on any branch\n" \
132
+ " # other than master.\n" \
133
+ " def self.full\n" \
134
+ " version = \"\#{MAJOR}.\#{MINOR}.\#{PATCH}\"\n" \
135
+ "\n" \
136
+ " if defined? PRERELEASE\n" \
137
+ " version = \"\#{version}-\#{PRERELEASE}\"\n" \
138
+ " end\n" \
139
+ "\n" \
140
+ " version\n" \
141
+ " end"
142
+ }
143
+ )
144
+ end
145
+
146
+ #
147
+ # Callbacks
148
+ #
149
+
150
+ before(:each) do
151
+ expect_method_defined
152
+ end
153
+
154
+ context 'with PRERELEASE defined' do
155
+ #
156
+ # lets
157
+ #
158
+
159
+ let(:prerelease) {
160
+ 'prerelease'
161
+ }
162
+
163
+ #
164
+ # Callbacks
165
+ #
166
+
167
+ before(:each) do
168
+ stub_const("#{described_class}::PRERELEASE", prerelease)
169
+ end
170
+
171
+ it 'is <MAJOR>.<MINOR>.<PATCH>-<PRERELEASE>' do
172
+ expect(full).to eq("#{described_class::MAJOR}.#{described_class::MINOR}.#{described_class::PATCH}-#{prerelease}")
173
+ end
174
+ end
175
+
176
+ context 'without PRERELEASE defined' do
177
+ before(:each) do
178
+ hide_const("#{described_class}::PRERELEASE")
179
+ end
180
+
181
+ it 'is <MAJOR>.<MINOR>.<PATCH>' do
182
+ expect(full).to eq("#{described_class::MAJOR}.#{described_class::MINOR}.#{described_class::PATCH}")
183
+ end
184
+ end
185
+ end
186
+
187
+ context 'gem' do
188
+ subject(:gem) {
189
+ described_class.gem
190
+ }
191
+
192
+ before(:each) do
193
+ expect(described_class).to receive(:full).and_return('1.2.3-multiword-prerelease')
194
+ end
195
+
196
+ it "replaces '-' with '.pre.' to be compatible with rubygems 1.8.6" do
197
+ gem_method = described_class.method(:gem)
198
+ method_arity = gem_method.arity
199
+
200
+ expect(method_arity).to(
201
+ eq(0),
202
+ # lambda so expensive message calculation only happens on failure
203
+ ->() {
204
+ method_location = gem_method.source_location
205
+ method_file = method_location[0]
206
+ method_line = method_location[1]
207
+
208
+ "expected #{described_class} to define self.gem(), but method defined by #{gem_method.owner} in " \
209
+ "#{method_file} on line #{method_line} with arity #{method_arity}.\n" \
210
+ "Add the following to #{described_class}:\n" \
211
+ "\n" \
212
+ " # The full gem version string, including the {MAJOR}, {MINOR}, {PATCH}, and optionally, the {PRERELEASE} in the\n" \
213
+ " # {http://guides.rubygems.org/specification-reference/#version RubyGems versioning} format.\n" \
214
+ " #\n" \
215
+ " # @return [String] '{MAJOR}.{MINOR}.{PATCH}' on master. '{MAJOR}.{MINOR}.{PATCH}.{PRERELEASE}' on any branch\n" \
216
+ " # other than master.\n" \
217
+ " def self.gem\n" \
218
+ " full.gsub('-', '.pre.')\n" \
219
+ " end"
220
+ }
221
+ )
222
+
223
+ expect(gem).to eq('1.2.3.pre.multiword.pre.prerelease')
224
+ end
225
+ end
226
+ end
metadata ADDED
@@ -0,0 +1,173 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: metasploit-version
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.2
5
+ platform: java
6
+ authors:
7
+ - Luke Imhoff
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-09-18 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ version_requirements: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '1.5'
20
+ requirement: !ruby/object:Gem::Requirement
21
+ requirements:
22
+ - - ~>
23
+ - !ruby/object:Gem::Version
24
+ version: '1.5'
25
+ prerelease: false
26
+ type: :development
27
+ - !ruby/object:Gem::Dependency
28
+ name: metasploit-yard
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '1.0'
34
+ requirement: !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - ~>
37
+ - !ruby/object:Gem::Version
38
+ version: '1.0'
39
+ prerelease: false
40
+ type: :development
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ version_requirements: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ requirement: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - '>='
51
+ - !ruby/object:Gem::Version
52
+ version: '0'
53
+ prerelease: false
54
+ type: :development
55
+ - !ruby/object:Gem::Dependency
56
+ name: kramdown
57
+ version_requirements: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ requirement: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - '>='
65
+ - !ruby/object:Gem::Version
66
+ version: '0'
67
+ prerelease: false
68
+ type: :development
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec
71
+ version_requirements: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ requirement: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - '>='
79
+ - !ruby/object:Gem::Version
80
+ version: '0'
81
+ prerelease: false
82
+ type: :runtime
83
+ description: 'Metasploit::Version::Full for deriving String VERSION from constants
84
+ in Version module and shared examples: ''Metasploit::Version VERSION constant''
85
+ to check VERSION and ''Metasploit::Version Version Module'' to check Version.'
86
+ email:
87
+ - luke_imhoff@rapid7.com
88
+ executables: []
89
+ extensions: []
90
+ extra_rdoc_files: []
91
+ files:
92
+ - .coveralls.yml
93
+ - .gitignore
94
+ - .simplecov
95
+ - .travis.yml
96
+ - .yardopts
97
+ - CONTRIBUTING.md
98
+ - Gemfile
99
+ - LICENSE.txt
100
+ - README.md
101
+ - Rakefile
102
+ - features/shared/examples/metasploit/version/gem_version_constant.feature
103
+ - features/shared/examples/metasploit/version/version_constant.feature
104
+ - features/shared/examples/metasploit/version/version_module.feature
105
+ - features/shared/examples/metasploit/version/version_module/prerelease/git/branch.feature
106
+ - features/shared/examples/metasploit/version/version_module/prerelease/git/detached_head.feature
107
+ - features/shared/examples/metasploit/version/version_module/prerelease/git/master.feature
108
+ - features/shared/examples/metasploit/version/version_module/prerelease/git/step_definitions/environment_variable_steps.rb
109
+ - features/shared/examples/metasploit/version/version_module/prerelease/git/step_definitions/git_steps.rb
110
+ - features/shared/examples/metasploit/version/version_module/prerelease/travis_ci/branch.feature
111
+ - features/shared/examples/metasploit/version/version_module/prerelease/travis_ci/master.feature
112
+ - features/shared/examples/metasploit/version/version_module/prerelease/travis_ci/pull_request.feature
113
+ - features/shared/examples/metasploit/version/version_module/prerelease/travis_ci/tag.feature
114
+ - features/support/env.rb
115
+ - features/support/simplecov_setup.rb
116
+ - lib/metasploit/version.rb
117
+ - lib/metasploit/version/branch.rb
118
+ - lib/metasploit/version/version.rb
119
+ - metasploit-version.gemspec
120
+ - spec/lib/metasploit/version/branch_spec.rb
121
+ - spec/lib/metasploit/version/version_spec.rb
122
+ - spec/lib/metasploit/version_spec.rb
123
+ - spec/spec_helper.rb
124
+ - spec/support/shared/examples/metasploit/version/gem_version_constant.rb
125
+ - spec/support/shared/examples/metasploit/version/version_constant.rb
126
+ - spec/support/shared/examples/metasploit/version/version_module.rb
127
+ homepage: https://github.com/rapid7/metasploit-version
128
+ licenses:
129
+ - MIT
130
+ metadata: {}
131
+ post_install_message:
132
+ rdoc_options: []
133
+ require_paths:
134
+ - lib
135
+ required_ruby_version: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - '>='
138
+ - !ruby/object:Gem::Version
139
+ version: '0'
140
+ required_rubygems_version: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - '>='
143
+ - !ruby/object:Gem::Version
144
+ version: '0'
145
+ requirements: []
146
+ rubyforge_project:
147
+ rubygems_version: 2.1.9
148
+ signing_key:
149
+ specification_version: 4
150
+ summary: Semantic versioning helpers and shared examples
151
+ test_files:
152
+ - features/shared/examples/metasploit/version/gem_version_constant.feature
153
+ - features/shared/examples/metasploit/version/version_constant.feature
154
+ - features/shared/examples/metasploit/version/version_module.feature
155
+ - features/shared/examples/metasploit/version/version_module/prerelease/git/branch.feature
156
+ - features/shared/examples/metasploit/version/version_module/prerelease/git/detached_head.feature
157
+ - features/shared/examples/metasploit/version/version_module/prerelease/git/master.feature
158
+ - features/shared/examples/metasploit/version/version_module/prerelease/git/step_definitions/environment_variable_steps.rb
159
+ - features/shared/examples/metasploit/version/version_module/prerelease/git/step_definitions/git_steps.rb
160
+ - features/shared/examples/metasploit/version/version_module/prerelease/travis_ci/branch.feature
161
+ - features/shared/examples/metasploit/version/version_module/prerelease/travis_ci/master.feature
162
+ - features/shared/examples/metasploit/version/version_module/prerelease/travis_ci/pull_request.feature
163
+ - features/shared/examples/metasploit/version/version_module/prerelease/travis_ci/tag.feature
164
+ - features/support/env.rb
165
+ - features/support/simplecov_setup.rb
166
+ - spec/lib/metasploit/version/branch_spec.rb
167
+ - spec/lib/metasploit/version/version_spec.rb
168
+ - spec/lib/metasploit/version_spec.rb
169
+ - spec/spec_helper.rb
170
+ - spec/support/shared/examples/metasploit/version/gem_version_constant.rb
171
+ - spec/support/shared/examples/metasploit/version/version_constant.rb
172
+ - spec/support/shared/examples/metasploit/version/version_module.rb
173
+ has_rdoc: