gem_publisher 0.0.1 → 0.0.2
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.
- data/lib/gem_publisher/publisher.rb +4 -3
- data/lib/gem_publisher/version.rb +1 -1
- data/lib/gem_publisher.rb +17 -0
- data/test/gem_publisher_test.rb +6 -6
- data/test/integration_test.rb +1 -1
- metadata +62 -27
@@ -16,9 +16,10 @@ module GemPublisher
|
|
16
16
|
|
17
17
|
def publish_if_updated(method)
|
18
18
|
return unless version_bumped?
|
19
|
-
|
20
|
-
|
21
|
-
|
19
|
+
@builder.build(@gemspec).tap { |gem|
|
20
|
+
@pusher.push gem, method
|
21
|
+
@git_remote.add_tag "v#@version"
|
22
|
+
}
|
22
23
|
end
|
23
24
|
|
24
25
|
private
|
data/lib/gem_publisher.rb
CHANGED
@@ -2,6 +2,23 @@ require "gem_publisher/publisher"
|
|
2
2
|
require "gem_publisher/version"
|
3
3
|
|
4
4
|
module GemPublisher
|
5
|
+
|
6
|
+
# Publish a gem based on the supplied gemspec and version via
|
7
|
+
# method, iff this version has not already been released and tagged
|
8
|
+
# in the origin Git repository.
|
9
|
+
#
|
10
|
+
# If a remote tag matching the version already exists, nothing is done.
|
11
|
+
# Otherwise, the gem is built, pushed, and tagged.
|
12
|
+
#
|
13
|
+
# Version should be a string of the form "1.2.3". Tags are expected to
|
14
|
+
# be of the form "v1.2.3", and generated tags follow this pattern.
|
15
|
+
#
|
16
|
+
# Method should be one of :rubygems or :gemfury, and the requisite
|
17
|
+
# credentials for the corresponding push command line tools must exist.
|
18
|
+
#
|
19
|
+
# Returns the gem file name if a gem was published; nil otherwise. A
|
20
|
+
# CliFacade::Error will be raised if a command fails.
|
21
|
+
#
|
5
22
|
def self.publish_if_updated(gemspec, version, method=:rubygems)
|
6
23
|
Publisher.new(gemspec, version).publish_if_updated(method)
|
7
24
|
end
|
data/test/gem_publisher_test.rb
CHANGED
@@ -3,7 +3,7 @@ require "gem_publisher/publisher"
|
|
3
3
|
|
4
4
|
module GemPublisher
|
5
5
|
class PublisherTest < MiniTest::Unit::TestCase
|
6
|
-
def
|
6
|
+
def test_should_not_do_anything_and_return_nil_if_version_has_not_changed
|
7
7
|
p = Publisher.new("foo.gemspec", "0.0.2")
|
8
8
|
p.builder = mock
|
9
9
|
p.builder.expects(:build).never
|
@@ -12,10 +12,10 @@ module GemPublisher
|
|
12
12
|
p.git_remote = mock
|
13
13
|
p.git_remote.stubs(:tags).returns(%w[v0.0.1 v0.0.2])
|
14
14
|
p.git_remote.expects(:add_tag).never
|
15
|
-
p.publish_if_updated(:bogus)
|
15
|
+
assert_nil p.publish_if_updated(:bogus)
|
16
16
|
end
|
17
17
|
|
18
|
-
def
|
18
|
+
def test_should_build_and_tag_and_publish_and_return_gem_name_if_version_has_changed
|
19
19
|
p = Publisher.new("foo.gemspec", "0.0.3")
|
20
20
|
p.builder = mock
|
21
21
|
p.builder.expects(:build).
|
@@ -26,10 +26,10 @@ module GemPublisher
|
|
26
26
|
p.git_remote = mock
|
27
27
|
p.git_remote.stubs(:tags).returns(%w[v0.0.1 v0.0.2])
|
28
28
|
p.git_remote.expects(:add_tag).with("v0.0.3")
|
29
|
-
p.publish_if_updated(:method)
|
29
|
+
assert_equal "foo-0.0.3.gem", p.publish_if_updated(:method)
|
30
30
|
end
|
31
31
|
|
32
|
-
def
|
32
|
+
def test_should_build_and_tag_and_publish_and_return_gem_name_if_there_is_no_released_version
|
33
33
|
p = Publisher.new("foo.gemspec", "0.0.3")
|
34
34
|
p.builder = mock
|
35
35
|
p.builder.expects(:build).returns("foo-0.0.3.gem")
|
@@ -38,7 +38,7 @@ module GemPublisher
|
|
38
38
|
p.git_remote = mock
|
39
39
|
p.git_remote.stubs(:tags).returns([])
|
40
40
|
p.git_remote.expects(:add_tag).with("v0.0.3")
|
41
|
-
p.publish_if_updated(:method)
|
41
|
+
assert_equal "foo-0.0.3.gem", p.publish_if_updated(:method)
|
42
42
|
end
|
43
43
|
end
|
44
44
|
end
|
data/test/integration_test.rb
CHANGED
@@ -16,10 +16,10 @@ module GemPublisher
|
|
16
16
|
def test_should_build_and_tag_and_publish
|
17
17
|
expect_cli "git ls-remote --tags origin", data_file("tags")
|
18
18
|
expect_cli "gem build example.gemspec", data_file("gem_build")
|
19
|
+
expect_cli "gem push test_gem-0.0.2.gem"
|
19
20
|
expect_cli "git rev-parse HEAD", "1234abcd"
|
20
21
|
expect_cli "git update-ref refs/tags/v1.0.0 1234abcd"
|
21
22
|
expect_cli "git push origin tag v1.0.0"
|
22
|
-
expect_cli "gem push test_gem-0.0.2.gem"
|
23
23
|
GemPublisher.publish_if_updated "example.gemspec", "1.0.0"
|
24
24
|
end
|
25
25
|
end
|
metadata
CHANGED
@@ -1,60 +1,95 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: gem_publisher
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.1
|
3
|
+
version: !ruby/object:Gem::Version
|
5
4
|
prerelease:
|
5
|
+
version: 0.0.2
|
6
6
|
platform: ruby
|
7
|
-
authors:
|
7
|
+
authors:
|
8
8
|
- Paul Battley
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
|
13
|
-
|
12
|
+
|
13
|
+
date: 2012-05-11 00:00:00 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: mocha
|
17
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
18
|
+
none: false
|
19
|
+
requirements:
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: "0"
|
23
|
+
type: :development
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: *id001
|
26
|
+
- !ruby/object:Gem::Dependency
|
27
|
+
name: rake
|
28
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
29
|
+
none: false
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: "0"
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: *id002
|
14
37
|
description: Automatically build, tag, and push a gem when its version has been updated.
|
15
38
|
email: pbattley@gmail.com
|
16
39
|
executables: []
|
40
|
+
|
17
41
|
extensions: []
|
42
|
+
|
18
43
|
extra_rdoc_files: []
|
19
|
-
|
20
|
-
|
44
|
+
|
45
|
+
files:
|
21
46
|
- lib/gem_publisher/builder.rb
|
22
|
-
- lib/gem_publisher/cli_facade.rb
|
23
47
|
- lib/gem_publisher/pusher.rb
|
48
|
+
- lib/gem_publisher/cli_facade.rb
|
24
49
|
- lib/gem_publisher/publisher.rb
|
50
|
+
- lib/gem_publisher/git_remote.rb
|
25
51
|
- lib/gem_publisher/version.rb
|
26
52
|
- lib/gem_publisher.rb
|
27
|
-
- test/
|
53
|
+
- test/common.rb
|
28
54
|
- test/git_remote_test.rb
|
55
|
+
- test/gem_publisher_test.rb
|
56
|
+
- test/cli_facade_test.rb
|
57
|
+
- test/builder_test.rb
|
29
58
|
- test/data/tags
|
30
59
|
- test/data/gem_build
|
31
|
-
- test/cli_facade_test.rb
|
32
|
-
- test/gem_publisher_test.rb
|
33
60
|
- test/integration_test.rb
|
34
|
-
|
35
|
-
homepage: http://github.com/threedaymonk/gem_publisher
|
61
|
+
homepage: http://github.com/alphagov/gem_publisher
|
36
62
|
licenses: []
|
63
|
+
|
37
64
|
post_install_message:
|
38
65
|
rdoc_options: []
|
39
|
-
|
66
|
+
|
67
|
+
require_paths:
|
40
68
|
- lib
|
41
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
69
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
42
70
|
none: false
|
43
|
-
requirements:
|
44
|
-
- -
|
45
|
-
- !ruby/object:Gem::Version
|
46
|
-
|
47
|
-
|
71
|
+
requirements:
|
72
|
+
- - ">="
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
hash: 1427601280392416500
|
75
|
+
segments:
|
76
|
+
- 0
|
77
|
+
version: "0"
|
78
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
48
79
|
none: false
|
49
|
-
requirements:
|
50
|
-
- -
|
51
|
-
- !ruby/object:Gem::Version
|
52
|
-
|
80
|
+
requirements:
|
81
|
+
- - ">="
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
hash: 1427601280392416500
|
84
|
+
segments:
|
85
|
+
- 0
|
86
|
+
version: "0"
|
53
87
|
requirements: []
|
88
|
+
|
54
89
|
rubyforge_project:
|
55
|
-
rubygems_version: 1.8.
|
90
|
+
rubygems_version: 1.8.12
|
56
91
|
signing_key:
|
57
92
|
specification_version: 3
|
58
93
|
summary: Automatically build, tag, and push gems
|
59
94
|
test_files: []
|
60
|
-
|
95
|
+
|