class Spoom::Coverage::D3::Timeline::Versions

def initialize(id, snapshots)

def initialize(id, snapshots)
  data = snapshots.map do |snapshot|
    {
      timestamp: snapshot.commit_timestamp,
      commit: snapshot.commit_sha,
      static: snapshot.version_static,
      runtime: snapshot.version_runtime,
    }
  end
  super(id, data, [])
end

def plot

def plot
  <<~JS
    #{x_scale}
    #{y_scale(
      min: "d3.min([d3.min(data_#{id}, (d) => parseVersion(d.static)),
                    d3.min(data_#{id}, (d) => parseVersion(d.runtime))]) - 0.01",
      max: "d3.max([d3.max(data_#{id}, (d) => parseVersion(d.static)),
                    d3.max(data_#{id}, (d) => parseVersion(d.runtime))]) + 0.01",
      ticks: "ticks(8)",
    )}
    #{line(y: "parseVersion(d.runtime)", color: "#e83e8c", curve: "curveStepAfter")}
    #{line(y: "parseVersion(d.static)", color: "#007bff", curve: "curveStepAfter")}
    #{points(y: "parseVersion(d.static)")}
    #{x_ticks}
    #{y_ticks(ticks: "ticks(4)", format: "'v0.' + d.toFixed(2)", padding: 50)}
  JS
end

def tooltip

def tooltip
  <<~JS
    function tooltip_#{id}(d) {
      moveTooltip(d)
        .html("commit <b>" + d.commit + "</b><br>"
          + d3.timeFormat("%y/%m/%d")(parseDate(d.timestamp)) + "<br><br>"
          + "static: v<b>" + d.static + "</b><br>"
          + "runtime: v<b>" + d.runtime + "</b><br><br>"
          + "versions from<br>Gemfile.lock")
    }
  JS
end