Class: Rake::GemMaintenance::GemPublisher
- Inherits:
-
Object
- Object
- Rake::GemMaintenance::GemPublisher
- Defined in:
- lib/rake/gem/maintenance/gem_publisher.rb
Overview
Publishes gems to multiple gem repositories, with version checking and warning handling.
Instance Attribute Summary collapse
-
#failed_repositories ⇒ Object
readonly
Returns the value of attribute failed_repositories.
-
#repositories ⇒ Object
readonly
Returns the value of attribute repositories.
-
#successful_repos ⇒ Object
readonly
Returns the value of attribute successful_repos.
-
#warnings ⇒ Object
readonly
Returns the value of attribute warnings.
Instance Method Summary collapse
- #any_available? ⇒ Boolean
- #available_repositories ⇒ Object
- #check_all_repositories(gem_name) ⇒ Object
- #default_repositories ⇒ Object
-
#initialize(repositories = default_repositories) ⇒ GemPublisher
constructor
A new instance of GemPublisher.
- #next_version(gem_name, current_version) ⇒ Object
- #publish(gem_file) ⇒ Object
- #versions_on_repository(gem_name, repository) ⇒ Object
Constructor Details
#initialize(repositories = default_repositories) ⇒ GemPublisher
Returns a new instance of GemPublisher.
12 13 14 15 16 17 18 19 |
# File 'lib/rake/gem/maintenance/gem_publisher.rb', line 12 def initialize(repositories = default_repositories) @repositories = repositories @warnings = [] @failed_pushes = [] @failed_repositories = [] @published_files = [] @successful_repos = [] end |
Instance Attribute Details
#failed_repositories ⇒ Object (readonly)
Returns the value of attribute failed_repositories.
10 11 12 |
# File 'lib/rake/gem/maintenance/gem_publisher.rb', line 10 def failed_repositories @failed_repositories end |
#repositories ⇒ Object (readonly)
Returns the value of attribute repositories.
10 11 12 |
# File 'lib/rake/gem/maintenance/gem_publisher.rb', line 10 def repositories @repositories end |
#successful_repos ⇒ Object (readonly)
Returns the value of attribute successful_repos.
10 11 12 |
# File 'lib/rake/gem/maintenance/gem_publisher.rb', line 10 def successful_repos @successful_repos end |
#warnings ⇒ Object (readonly)
Returns the value of attribute warnings.
10 11 12 |
# File 'lib/rake/gem/maintenance/gem_publisher.rb', line 10 def warnings @warnings end |
Instance Method Details
#any_available? ⇒ Boolean
66 67 68 |
# File 'lib/rake/gem/maintenance/gem_publisher.rb', line 66 def any_available? @failed_repositories.size < repositories.size end |
#available_repositories ⇒ Object
62 63 64 |
# File 'lib/rake/gem/maintenance/gem_publisher.rb', line 62 def available_repositories repositories.map { |r| r[:name] } - @failed_repositories end |
#check_all_repositories(gem_name) ⇒ Object
32 33 34 35 36 37 |
# File 'lib/rake/gem/maintenance/gem_publisher.rb', line 32 def check_all_repositories(gem_name) @failed_repositories = [] repositories.each do |repo| versions_on_repository(gem_name, repo) end end |
#default_repositories ⇒ Object
21 22 23 |
# File 'lib/rake/gem/maintenance/gem_publisher.rb', line 21 def default_repositories [{ name: "rubygems", url: "https://rubygems.org" }] end |
#next_version(gem_name, current_version) ⇒ Object
51 52 53 54 55 56 57 58 59 60 |
# File 'lib/rake/gem/maintenance/gem_publisher.rb', line 51 def next_version(gem_name, current_version) return current_version unless current_version ver = Gem::Version.new(current_version) loop do return ver.to_s unless version_exists_on_all_repos?(gem_name, ver) ver = ver.bump end end |
#publish(gem_file) ⇒ Object
25 26 27 28 29 30 |
# File 'lib/rake/gem/maintenance/gem_publisher.rb', line 25 def publish(gem_file) @failed_pushes = [] @published_files = [] build_and_push(gem_file) print_warnings end |
#versions_on_repository(gem_name, repository) ⇒ Object
39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/rake/gem/maintenance/gem_publisher.rb', line 39 def versions_on_repository(gem_name, repository) url = "#{repository[:url]}/api/v1/gems/#{gem_name}.json" uri = URI.parse(url) response = uri.read(accept: "application/json") data = JSON.parse(response) data["versions"].map { |v| v["number"] } rescue StandardError => e @failed_repositories << repository[:name] @warnings << { repository: repository[:name], error: "Cannot fetch versions: #{e.}" } [] end |