puppet-blacksmith 3.1.1 → 3.2.0

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.
checksums.yaml CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- MjI2ZGE0MjZiNzVlMDhmMjI2NDVkMTk5NTRkZWI1OWFkZmUzY2JkOA==
5
- data.tar.gz: !binary |-
6
- MGQ5ZjA4ODM1M2ZkY2ZhY2M4ZTIyOTc5NGU4MDllYjA3ODU0YzczMA==
2
+ SHA1:
3
+ metadata.gz: a8de434a181f1a14aa9077c263e96d7d03981f47
4
+ data.tar.gz: 2a6ce31ae7e5bc58c2b48f0eefc5a89aeeb16bcb
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- YjQxMGEzZjdkYTUxNjFhYWJiZDE0OTRjYzJlYTE4MTUxZmM5NDliODRmNDdj
10
- ZjZhODBmZjQ4ZGRkZTYzZGRjYjI3Y2I5MzU5NDNkZWU3OGE0M2QwMjMyNTNl
11
- ZGFiMzNjZTk0OGY2NjM0OTcyNmRiYTU3MWNhMTg3MTk2MTJjMGM=
12
- data.tar.gz: !binary |-
13
- YjUxMWZkNjgzOWI5ZDVhNTk0YjFjNzk4N2I2MzJhYjU1OGI3NjQ3YTlmZTZi
14
- Y2FmOWNlMWUyNjU2YWM1NGExNmNiOTFlMGM2MThiNDMzNjQzNzkzZDYwYzkw
15
- ZWU0Y2FkY2YzZTk1ODc5YzU1OTJkZjA0OWUzYTY3NTgyMWEzNjA=
6
+ metadata.gz: 39e36ebfbb8a9579b2618bfa08185b547b0612aa392b42e776b4171d4ce0e4826ed396e59ea8737581c465e95b95e72949c3edc9a21690390e8ba244580d9cd0
7
+ data.tar.gz: 8e4d2d9837ff3154cb0e16e137c50f7082a30692ec542a4da9edf02d011509e9cef2c90527f14ef463547f837c68c7386096c05cf67207eee3e6259f607414fd
@@ -11,6 +11,7 @@
11
11
  # require 'puppet/module_tool'
12
12
  require 'puppet'
13
13
  require 'puppet/module_tool'
14
+ require 'puppet_blacksmith/version_helper'
14
15
 
15
16
  Puppet[:confdir] = "."
16
17
 
@@ -51,14 +52,18 @@ module Blacksmith
51
52
  metadata['version']
52
53
  end
53
54
 
54
- def bump!
55
- new_version = increase_version(version)
55
+ def bump!(level = :patch)
56
+ new_version = increase_version(version, level)
56
57
  text = File.read(path)
57
58
  text = replace_version(text, new_version)
58
59
  File.open(path, "w") {|file| file.puts text}
59
60
  new_version
60
61
  end
61
62
 
63
+ [:major, :minor, :patch].each do |level|
64
+ define_method("bump_#{level}!") { bump!(level) }
65
+ end
66
+
62
67
  def bump_dep!(module_name, version)
63
68
  text = File.read(path)
64
69
  text = replace_dependency_version(text, module_name, version)
@@ -75,10 +80,9 @@ module Blacksmith
75
80
  end
76
81
  end
77
82
 
78
- def increase_version(version)
79
- v = Gem::Version.new("#{version}.0")
80
- raise Blacksmith::Error, "Unable to increase prerelease version #{version}" if v.prerelease?
81
- v.bump.to_s
83
+ def increase_version(version, level = :patch)
84
+ v = VersionHelper::Version.new(version)
85
+ v.send("#{level}!").to_s
82
86
  end
83
87
 
84
88
  def replace_dependency_version(text, module_name, version)
@@ -18,16 +18,38 @@ module Blacksmith
18
18
  task_block.call(*[self, args].slice(0, task_block.arity)) if task_block
19
19
 
20
20
  # clear any (auto-)pre-existing task
21
- [:bump, :tag, :bump_commit, :push, :clean, :release, :dependency].each do |t|
21
+ [
22
+ :bump,
23
+ :bump_major,
24
+ :bump_minor,
25
+ :bump_patch,
26
+ :tag,
27
+ :bump_commit,
28
+ :push,
29
+ :clean,
30
+ :release,
31
+ :dependency
32
+ ].each do |t|
22
33
  Rake::Task.task_defined?("module:#{t}") && Rake::Task["module:#{t}"].clear
23
34
  end
24
35
 
25
36
  namespace :module do
26
37
 
27
- desc "Bump module version to the next minor"
38
+ namespace :bump do
39
+ [:major, :minor, :patch].each do |level|
40
+ desc "Bump module version to the next #{level.upcase} version"
41
+ task level do
42
+ m = Blacksmith::Modulefile.new
43
+ v = m.send("bump_#{level}!")
44
+ puts "Bumping version from #{m.version} to #{v}"
45
+ end
46
+ end
47
+ end
48
+
49
+ desc "Bump module version to the next patch"
28
50
  task :bump do
29
51
  m = Blacksmith::Modulefile.new
30
- v = m.bump!
52
+ v = m.bump_patch!
31
53
  puts "Bumping version from #{m.version} to #{v}"
32
54
  end
33
55
 
@@ -1,3 +1,3 @@
1
1
  module Blacksmith
2
- VERSION = '3.1.1'
2
+ VERSION = '3.2.0'
3
3
  end
@@ -0,0 +1,170 @@
1
+ # Need to vendor the 'semantic' gem because Puppet hasn't appropriately
2
+ # encapsulated their vendored implementation.
3
+ #
4
+ # For the original implementation see https://github.com/jlindsey/semantic
5
+ #
6
+ module Blacksmith
7
+ module VersionHelper
8
+ # See: http://semver.org
9
+ class Version
10
+ SemVerRegexp = /\A(\d+\.\d+\.\d+)(-([0-9A-Za-z-]+(\.[0-9A-Za-z-]+)*))?(\+([0-9A-Za-z-]+(\.[0-9A-Za-z-]+)*))?\Z/
11
+ attr_accessor :major, :minor, :patch, :pre, :build
12
+
13
+ def initialize version_str
14
+ raise ArgumentError.new("#{version_str} is not a valid SemVer Version (http://semver.org)") unless version_str =~ SemVerRegexp
15
+
16
+ version, parts = version_str.split '-'
17
+ if not parts.nil? and parts.include? '+'
18
+ @pre, @build = parts.split '+'
19
+ elsif version.include? '+'
20
+ version, @build = version.split '+'
21
+ else
22
+ @pre = parts
23
+ end
24
+
25
+
26
+ @major, @minor, @patch = version.split('.').map(&:to_i)
27
+ end
28
+
29
+ def to_a
30
+ [@major, @minor, @patch, @pre, @build]
31
+ end
32
+
33
+ def to_s
34
+ str = [@major, @minor, @patch].join '.'
35
+ str << '-' << @pre unless @pre.nil?
36
+ str << '+' << @build unless @build.nil?
37
+
38
+ str
39
+ end
40
+
41
+ def to_h
42
+ keys = [:major, :minor, :patch, :pre, :build]
43
+ Hash[keys.zip(self.to_a)]
44
+ end
45
+
46
+ alias to_hash to_h
47
+ alias to_array to_a
48
+ alias to_string to_s
49
+
50
+ def <=> other_version
51
+ other_version = Version.new(other_version) if other_version.is_a? String
52
+
53
+ v1 = self.dup
54
+ v2 = other_version.dup
55
+
56
+ # The build must be excluded from the comparison, so that e.g. 1.2.3+foo and 1.2.3+bar are semantically equal.
57
+ # "Build metadata SHOULD be ignored when determining version precedence".
58
+ # (SemVer 2.0.0-rc.2, paragraph 10 - http://www.semver.org)
59
+ v1.build = nil
60
+ v2.build = nil
61
+
62
+ compare_recursively(v1.to_a, v2.to_a)
63
+ end
64
+
65
+ def > other_version
66
+ (self <=> other_version) == 1
67
+ end
68
+
69
+ def < other_version
70
+ (self <=> other_version) == -1
71
+ end
72
+
73
+ def >= other_version
74
+ (self <=> other_version) >= 0
75
+ end
76
+
77
+ def <= other_version
78
+ (self <=> other_version) <= 0
79
+ end
80
+
81
+ def == other_version
82
+ (self <=> other_version) == 0
83
+ end
84
+
85
+ def satisfies other_version
86
+ return true if other_version.strip == '*'
87
+ parts = other_version.split(/(\d(.+)?)/, 2)
88
+ comparator, other_version_string = parts[0].strip, parts[1].strip
89
+
90
+ begin
91
+ Version.new other_version_string
92
+ comparator.empty? && comparator = '=='
93
+ satisfies_comparator? comparator, other_version_string
94
+ rescue ArgumentError
95
+ if ['<', '>', '<=', '>='].include?(comparator)
96
+ satisfies_comparator? comparator, pad_version_string(other_version_string)
97
+ else
98
+ tilde_matches? other_version_string
99
+ end
100
+ end
101
+ end
102
+
103
+ [:major, :minor, :patch].each do |term|
104
+ define_method("#{term}!") { increment!(term) }
105
+ end
106
+
107
+ def increment!(term)
108
+ new_version = clone
109
+ new_value = send(term) + 1
110
+
111
+ new_version.send("#{term}=", new_value)
112
+ new_version.minor = 0 if term == :major
113
+ new_version.patch = 0 if term == :major || term == :minor
114
+ new_version.build = new_version.pre = nil
115
+
116
+ new_version
117
+ end
118
+
119
+ private
120
+
121
+ def pad_version_string version_string
122
+ parts = version_string.split('.').reject {|x| x == '*'}
123
+ while parts.length < 3
124
+ parts << '0'
125
+ end
126
+ parts.join '.'
127
+ end
128
+
129
+ def tilde_matches? other_version_string
130
+ this_parts = to_a.collect(&:to_s)
131
+ other_parts = other_version_string.split('.').reject {|x| x == '*'}
132
+ other_parts == this_parts[0..other_parts.length-1]
133
+ end
134
+
135
+ def satisfies_comparator? comparator, other_version_string
136
+ if comparator == '~'
137
+ tilde_matches? other_version_string
138
+ else
139
+ self.send comparator, other_version_string
140
+ end
141
+ end
142
+
143
+ def compare_recursively ary1, ary2
144
+ # Short-circuit the recursion entirely if they're just equal
145
+ return 0 if ary1 == ary2
146
+
147
+ a = ary1.shift; b = ary2.shift
148
+
149
+ # Reached the end of the arrays, equal all the way down
150
+ return 0 if a.nil? and b.nil?
151
+
152
+ # Mismatched types (ie. one has a pre and the other doesn't)
153
+ if a.nil? and not b.nil?
154
+ return 1
155
+ elsif not a.nil? and b.nil?
156
+ return -1
157
+ end
158
+
159
+ if a < b
160
+ return -1
161
+ elsif a > b
162
+ return 1
163
+ end
164
+
165
+ # Versions are equal thus far, so recurse down to the next part.
166
+ compare_recursively ary1, ary2
167
+ end
168
+ end
169
+ end
170
+ end
@@ -153,9 +153,27 @@ eos
153
153
  end
154
154
 
155
155
  describe 'increase_version' do
156
- it { expect(subject.increase_version("1.0")).to eql("1.1") }
157
156
  it { expect(subject.increase_version("1.0.0")).to eql("1.0.1") }
158
157
  it { expect(subject.increase_version("1.0.1")).to eql("1.0.2") }
158
+ it { expect { subject.increase_version("1.0") }.to raise_error }
159
159
  it { expect { subject.increase_version("1.0.12qwe") }.to raise_error }
160
160
  end
161
+
162
+ describe 'bump patch version' do
163
+ it { expect(subject.increase_version("1.0.0", :patch)).to eql("1.0.1") }
164
+ it { expect(subject.increase_version("1.1.0", :patch)).to eql("1.1.1") }
165
+ it { expect(subject.increase_version("1.1.1", :patch)).to eql("1.1.2") }
166
+ end
167
+
168
+ describe 'bump minor version' do
169
+ it { expect(subject.increase_version("1.0.0", :minor)).to eql("1.1.0") }
170
+ it { expect(subject.increase_version("1.1.0", :minor)).to eql("1.2.0") }
171
+ it { expect(subject.increase_version("1.1.1", :minor)).to eql("1.2.0") }
172
+ end
173
+
174
+ describe 'bump major version' do
175
+ it { expect(subject.increase_version("1.0.0", :major)).to eql("2.0.0") }
176
+ it { expect(subject.increase_version("1.1.0", :major)).to eql("2.0.0") }
177
+ it { expect(subject.increase_version("1.1.1", :major)).to eql("2.0.0") }
178
+ end
161
179
  end
metadata CHANGED
@@ -1,125 +1,125 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: puppet-blacksmith
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.1.1
4
+ version: 3.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - MaestroDev
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-03 00:00:00.000000000 Z
11
+ date: 2015-02-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rest-client
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ! '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ! '>='
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: puppet
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ! '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: 2.7.16
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ! '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: 2.7.16
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ! '>='
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ! '>='
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: puppetlabs_spec_helper
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ! '>='
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ! '>='
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: cucumber
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ! '>='
73
+ - - ">="
74
74
  - !ruby/object:Gem::Version
75
75
  version: '0'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - ! '>='
80
+ - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: aruba
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - ! '>='
87
+ - - ">="
88
88
  - !ruby/object:Gem::Version
89
89
  version: '0'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - ! '>='
94
+ - - ">="
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: rspec
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - ! '>='
101
+ - - ">="
102
102
  - !ruby/object:Gem::Version
103
103
  version: 3.0.0
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - ! '>='
108
+ - - ">="
109
109
  - !ruby/object:Gem::Version
110
110
  version: 3.0.0
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: webmock
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - ! '>='
115
+ - - ">="
116
116
  - !ruby/object:Gem::Version
117
117
  version: '0'
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
- - - ! '>='
122
+ - - ">="
123
123
  - !ruby/object:Gem::Version
124
124
  version: '0'
125
125
  description: Puppet module tools for development and Puppet Forge management
@@ -138,6 +138,7 @@ files:
138
138
  - lib/puppet_blacksmith/modulefile.rb
139
139
  - lib/puppet_blacksmith/rake_tasks.rb
140
140
  - lib/puppet_blacksmith/version.rb
141
+ - lib/puppet_blacksmith/version_helper.rb
141
142
  - spec/data/Modulefile
142
143
  - spec/data/maestrodev-test/metadata.json
143
144
  - spec/data/metadata.json
@@ -157,28 +158,28 @@ require_paths:
157
158
  - lib
158
159
  required_ruby_version: !ruby/object:Gem::Requirement
159
160
  requirements:
160
- - - ! '>='
161
+ - - ">="
161
162
  - !ruby/object:Gem::Version
162
163
  version: '0'
163
164
  required_rubygems_version: !ruby/object:Gem::Requirement
164
165
  requirements:
165
- - - ! '>='
166
+ - - ">="
166
167
  - !ruby/object:Gem::Version
167
168
  version: '0'
168
169
  requirements: []
169
170
  rubyforge_project:
170
- rubygems_version: 2.2.2
171
+ rubygems_version: 2.4.3
171
172
  signing_key:
172
173
  specification_version: 4
173
174
  summary: Tasks to manage Puppet module builds
174
175
  test_files:
176
+ - spec/data/maestrodev-test/metadata.json
175
177
  - spec/data/metadata.json
176
- - spec/data/response.json
177
178
  - spec/data/Modulefile
178
- - spec/data/maestrodev-test/metadata.json
179
- - spec/puppet_blacksmith/modulefile_spec.rb
180
- - spec/puppet_blacksmith/git_spec.rb
179
+ - spec/data/response.json
180
+ - spec/puppet_blacksmith/forge_live_spec.rb
181
181
  - spec/puppet_blacksmith/forge_shared.rb
182
182
  - spec/puppet_blacksmith/forge_spec.rb
183
- - spec/puppet_blacksmith/forge_live_spec.rb
183
+ - spec/puppet_blacksmith/git_spec.rb
184
+ - spec/puppet_blacksmith/modulefile_spec.rb
184
185
  - spec/spec_helper.rb