class LibyearBundler::Report

Responsible presenting data from the `::LibyearBundler::Models`. Should only be concerned with presentation, nothing else.

Constants

FMT_LIBYEARS_COLUMN
FMT_RELEASES_COLUMN
FMT_SUMMARY_COLUMNS
FMT_VERSIONS_COLUMN

Public Class Methods

new(gems, ruby, options) click to toggle source

`gems` - Array of `::LibyearBundler::Models::Gem` instances `options` - Instance of `::LibyearBundler::Options`

# File lib/libyear_bundler/report.rb, line 12
def initialize(gems, ruby, options)
  @gems = gems
  @ruby = ruby
  @options = options
end

Public Instance Methods

to_h() click to toggle source
# File lib/libyear_bundler/report.rb, line 30
def to_h
  @_to_h ||=
    begin
      summary = {
        gems: @gems,
        sum_libyears: 0.0
      }
      @gems.each { |gem| increment_metrics_summary(gem, summary) }

      begin
        increment_metrics_summary(@ruby, summary) if @ruby.outdated?
      rescue StandardError => e
        warn "Unable to calculate libyears for ruby itself: #{e}"
      end

      summary
    end
end
to_s() click to toggle source
# File lib/libyear_bundler/report.rb, line 18
def to_s
  to_h[:gems].each { |gem| put_line_summary(gem) }

  begin
    put_line_summary(@ruby) if @ruby.outdated?
  rescue StandardError => e
    warn "Unable to calculate libyears for ruby itself: #{e} (line summary)"
  end

  put_summary(to_h)
end

Private Instance Methods

increment_libyears(model, memo) click to toggle source
# File lib/libyear_bundler/report.rb, line 131
def increment_libyears(model, memo)
  memo[:sum_libyears] += model.libyears
end
increment_metrics_summary(model, summary) click to toggle source
# File lib/libyear_bundler/report.rb, line 51
def increment_metrics_summary(model, summary)
  increment_libyears(model, summary) if @options.libyears?
  increment_version_deltas(model, summary) if @options.versions?
  increment_seq_deltas(model, summary) if @options.releases?
end
increment_seq_deltas(model, memo) click to toggle source
# File lib/libyear_bundler/report.rb, line 135
def increment_seq_deltas(model, memo)
  memo[:sum_seq_delta] ||= 0
  memo[:sum_seq_delta] += model.version_sequence_delta
end
increment_version_deltas(model, memo) click to toggle source
# File lib/libyear_bundler/report.rb, line 140
def increment_version_deltas(model, memo)
  memo[:sum_major_version] ||= 0
  memo[:sum_major_version] += model.version_number_delta[0]
  memo[:sum_minor_version] ||= 0
  memo[:sum_minor_version] += model.version_number_delta[1]
  memo[:sum_patch_version] ||= 0
  memo[:sum_patch_version] += model.version_number_delta[2]
end
meta_line_summary(gem_or_ruby) click to toggle source
# File lib/libyear_bundler/report.rb, line 78
def meta_line_summary(gem_or_ruby)
  format(
    FMT_SUMMARY_COLUMNS,
    gem_or_ruby.name,
    gem_or_ruby.installed_version.to_s,
    gem_or_ruby.installed_version_release_date,
    gem_or_ruby.newest_version.to_s,
    gem_or_ruby.newest_version_release_date
  )
end
put_libyear_summary(sum_libyears) click to toggle source
# File lib/libyear_bundler/report.rb, line 89
def put_libyear_summary(sum_libyears)
  puts format("System is %.1f libyears behind", sum_libyears)
end
put_line_summary(gem_or_ruby) click to toggle source
# File lib/libyear_bundler/report.rb, line 57
def put_line_summary(gem_or_ruby)
  meta = meta_line_summary(gem_or_ruby)

  if @options.releases?
    releases = format(FMT_RELEASES_COLUMN, gem_or_ruby.version_sequence_delta)
    meta << releases
  end

  if @options.versions?
    versions = format(FMT_VERSIONS_COLUMN, gem_or_ruby.version_number_delta)
    meta << versions
  end

  if @options.libyears?
    libyears = format(FMT_LIBYEARS_COLUMN, gem_or_ruby.libyears)
    meta << libyears
  end

  puts meta
end
put_sum_seq_delta_summary(sum_seq_delta) click to toggle source
# File lib/libyear_bundler/report.rb, line 102
def put_sum_seq_delta_summary(sum_seq_delta)
  puts format(
    "Total releases behind: %<seq_delta>d",
    seq_delta: sum_seq_delta || 0
  )
end
put_summary(summary) click to toggle source
# File lib/libyear_bundler/report.rb, line 109
def put_summary(summary)
  if [:libyears?, :releases?, :versions?].all? { |opt| @options.send(opt) }
    put_libyear_summary(summary[:sum_libyears])
    put_sum_seq_delta_summary(summary[:sum_seq_delta])
    put_version_delta_summary(
      summary[:sum_major_version],
      summary[:sum_minor_version],
      summary[:sum_patch_version]
    )
  elsif @options.versions?
    put_version_delta_summary(
      summary[:sum_major_version],
      summary[:sum_minor_version],
      summary[:sum_patch_version]
    )
  elsif @options.releases?
    put_sum_seq_delta_summary(summary[:sum_seq_delta])
  elsif @options.libyears?
    put_libyear_summary(summary[:sum_libyears])
  end
end
put_version_delta_summary(sum_major_version, sum_minor_version, sum_patch_version) click to toggle source
# File lib/libyear_bundler/report.rb, line 93
def put_version_delta_summary(sum_major_version, sum_minor_version, sum_patch_version)
  puts format(
    "Major, minor, patch versions behind: %<major>d, %<minor>d, %<patch>d",
    major: sum_major_version || 0,
    minor: sum_minor_version || 0,
    patch: sum_patch_version || 0
  )
end