class Google::Apis::Generator::Updater
Matches generated files against current files and decides what to update @private
Public Class Methods
new()
click to toggle source
# File lib/google/apis/generator/updater.rb, line 23 def initialize @gems_client = nil @current_rubygems_versions = {} end
Public Instance Methods
analyze(base_dir, generator_result)
click to toggle source
# File lib/google/apis/generator/updater.rb, line 28 def analyze(base_dir, generator_result) modified_files = {} version_content = changelog_content = nil generator_result.files.each do |path, content| full_path = File.join(base_dir, path) old_content = File.read(full_path) if File.readable?(full_path) if path == generator_result.version_path version_content = old_content || content elsif path == generator_result.changelog_path changelog_content = old_content || content else modified_files[path] = content unless content == old_content end end unless modified_files.empty? desired_gem_version = next_rubygems_version(generator_result.gem_name) version_content, generator_version_change, revision_change = update_version_content(version_content, desired_gem_version, generator_result.revision) changelog_content = update_changelog_content(changelog_content, desired_gem_version, generator_version_change, revision_change) modified_files[generator_result.version_path] = version_content modified_files[generator_result.changelog_path] = changelog_content end modified_files end
assemble_changelog_entry(lines, desired_gem_version)
click to toggle source
@private
# File lib/google/apis/generator/updater.rb, line 121 def assemble_changelog_entry(lines, desired_gem_version) entry_lines = lines.join("\n") date = Time.now.strftime("%Y-%m-%d") "\n\n### v#{desired_gem_version} (#{date})\n\n#{entry_lines}\n\n" end
current_rubygems_version(gem_name)
click to toggle source
@private
# File lib/google/apis/generator/updater.rb, line 59 def current_rubygems_version(gem_name) @current_rubygems_versions[gem_name] ||= begin gems_client.info(gem_name)["version"] rescue Gems::NotFound "0.0.0" end end
gems_client()
click to toggle source
@private
# File lib/google/apis/generator/updater.rb, line 54 def gems_client @gems_client ||= Gems::Client.new end
modify_changelog_lines(lines, generator_version_change, revision_change)
click to toggle source
@private
# File lib/google/apis/generator/updater.rb, line 108 def modify_changelog_lines(lines, generator_version_change, revision_change) if generator_version_change lines.reject! { |line| line =~ /^\* Regenerated using generator version \d[\w\.]+/ } lines.unshift("* Regenerated using generator version #{generator_version_change}") end if revision_change lines.reject! { |line| line =~ /^\* Regenerated from discovery document revision \d+/ } lines.unshift("* Regenerated from discovery document revision #{revision_change}") end lines << "* Unspecified changes" if lines.empty? end
next_rubygems_version(gem_name)
click to toggle source
@private
# File lib/google/apis/generator/updater.rb, line 68 def next_rubygems_version(gem_name) major, minor = current_rubygems_version(gem_name).split(".") "#{major.to_i}.#{minor.to_i + 1}.0" end
parse_existing_changelog_entry(content, desired_gem_version)
click to toggle source
@private
# File lib/google/apis/generator/updater.rb, line 100 def parse_existing_changelog_entry(content, desired_gem_version) quoted_gem_version = Regexp.quote(desired_gem_version) match = /\n+### v#{quoted_gem_version} \([\d-]+\)\n+((?:[^#][^\n]*\n+)*)(?=#|$)/.match content return [] unless match match[1].split("\n") end
replace_changelog_entry(content, desired_gem_version, entry)
click to toggle source
@private
# File lib/google/apis/generator/updater.rb, line 128 def replace_changelog_entry(content, desired_gem_version, entry) quoted_gem_version = Regexp.quote(desired_gem_version) modified_content = content.dup modified_content.sub!(/\n+### v#{quoted_gem_version} \([\d-]+\)\n+(?:[^#][^\n]*\n+)*(?=#|$)/, entry) or modified_content.sub!(/^(\n*# [^\n]+)\n+(?=#|$)/, "\\1#{entry}") or raise "CHANGELOG doesn't seem to have the expected header" modified_content end
update_changelog_content(content, desired_gem_version, generator_version_change, revision_change)
click to toggle source
@private
# File lib/google/apis/generator/updater.rb, line 92 def update_changelog_content(content, desired_gem_version, generator_version_change, revision_change) lines = parse_existing_changelog_entry(content, desired_gem_version) modify_changelog_lines(lines, generator_version_change, revision_change) entry = assemble_changelog_entry(lines, desired_gem_version) replace_changelog_entry(content, desired_gem_version, entry) end
update_version_content(content, desired_gem_version, new_revision)
click to toggle source
@private
# File lib/google/apis/generator/updater.rb, line 74 def update_version_content(content, desired_gem_version, new_revision) generator_version_change = revision_change = nil modified_content = content.dup modified_content.sub!(/GEM_VERSION = "([\w\.]*)"/) do |*| "GEM_VERSION = \"#{desired_gem_version}\"" end or raise "gem_version.rb is missing GEM_VERSION" modified_content.sub!(/GENERATOR_VERSION = "([\w\.]*)"/) do |*| generator_version_change = Generator::VERSION unless Regexp.last_match[1] == Generator::VERSION "GENERATOR_VERSION = \"#{Generator::VERSION}\"" end or raise "gem_version.rb is missing GENERATOR_VERSION" modified_content.sub!(/REVISION = "([\w\.]*)"/) do |*| revision_change = new_revision unless Regexp.last_match[1] == new_revision "REVISION = \"#{new_revision}\"" end or raise "gem_version.rb is missing REVISION" [modified_content, generator_version_change, revision_change] end