Module: Pray::Plan

Defined in:
lib/pray/plan.rb

Defined Under Namespace

Classes: MaterializationPreview

Class Method Summary collapse

Class Method Details

.build_materialization_preview(project, rendered, lockfile, lockfile_path, previous_lockfile) ⇒ Object



13
14
15
16
17
18
19
20
21
# File 'lib/pray/plan.rb', line 13

def build_materialization_preview(project, rendered, lockfile, lockfile_path, previous_lockfile)
  MaterializationPreview.new(
    package_lines: package_summary_lines(previous_lockfile, lockfile, project),
    lockfile: lockfile_change_status(lockfile_path, lockfile),
    targets: rendered.map { |target| target_change(project, target) },
    provisioned: Render.planned_provisioned_files(project).map { |file| provisioned_change(project, file) },
    warnings: []
  )
end

.lockfile_change_status(lockfile_path, lockfile) ⇒ Object



52
53
54
55
56
57
# File 'lib/pray/plan.rb', line 52

def lockfile_change_status(lockfile_path, lockfile)
  return "create" unless File.exist?(lockfile_path)

  existing = Pray.read_lockfile(lockfile_path)
  Pray.lockfiles_equivalent?(lockfile, existing) ? "unchanged" : "update"
end

.package_summary_lines(previous_lockfile, lockfile, _project) ⇒ Object



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/pray/plan.rb', line 36

def package_summary_lines(previous_lockfile, lockfile, _project)
  if previous_lockfile.nil?
    lockfile.package.map do |entry|
      "Package #{entry.name} #{entry.version} (new)"
    end
  else
    lockfile.package.filter_map do |entry|
      previous = previous_lockfile.package.find { |package| package.name == entry.name }
      next "Package #{entry.name} #{entry.version} (new)" unless previous
      next if previous.version == entry.version && previous.tree_hash == entry.tree_hash

      "Package #{entry.name} #{previous.version} -> #{entry.version}"
    end
  end
end


23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/pray/plan.rb', line 23

def print_materialization_report(preview, mode)
  puts (mode == :plan) ? "Plan" : "Install"
  preview.package_lines.each { |line| puts line }
  puts "Lockfile: #{preview.lockfile}"
  preview.targets.each do |path, change|
    puts "Target #{path}: #{change}"
  end
  preview.provisioned.each do |path, change|
    puts "Provisioned #{path}: #{change}"
  end
  preview.warnings.each { |warning| puts "Warning: #{warning}" }
end

.provisioned_change(project, file) ⇒ Object



71
72
73
74
75
76
77
78
79
80
81
# File 'lib/pray/plan.rb', line 71

def provisioned_change(project, file)
  destination = File.join(project.project_root, file.path)
  change = if !File.exist?(destination)
    "write"
  elsif FileUtils.compare_file(destination, file.source)
    "unchanged"
  else
    "update"
  end
  [file.path, change]
end

.target_change(project, target) ⇒ Object



59
60
61
62
63
64
65
66
67
68
69
# File 'lib/pray/plan.rb', line 59

def target_change(project, target)
  path = File.join(project.project_root, target.path)
  change = if !File.exist?(path)
    "write"
  elsif File.read(path) == target.content
    "unchanged"
  else
    "update"
  end
  [target.path, change]
end