Class: Papers::ManifestUpdater

Inherits:
ManifestCommand show all
Defined in:
lib/papers/manifest_updater.rb

Instance Method Summary collapse

Methods inherited from ManifestCommand

#blank?, #build_header, #ensure_valid_url, #gem_entry, #gem_name_and_version, #get_installed_bower_components, #get_installed_gems, #get_installed_javascripts, #get_installed_npm_packages, #initialize, #manifest_exists?

Constructor Details

This class inherits a constructor from Papers::ManifestCommand

Instance Method Details

#delete_gems(result_gems, manifest_names) ⇒ Object



89
90
91
92
93
94
95
96
# File 'lib/papers/manifest_updater.rb', line 89

def delete_gems(result_gems, manifest_names)
  # Find removed gems
  manifest_names.each do |(gem_name, gem_key)|
    if gemspecs.none? { |gem| gem.name == gem_name }
      result_gems.delete(gem_key)
    end
  end
end

#gemspecsObject



109
110
111
# File 'lib/papers/manifest_updater.rb', line 109

def gemspecs
  @gemspecs ||= Bundler.load.specs.dup
end

#manifest_names(result_gems) ⇒ Object



102
103
104
105
106
107
# File 'lib/papers/manifest_updater.rb', line 102

def manifest_names(result_gems)
  result_gems.reduce({}) do |hash, (key, _)|
    hash[name_from_key(key)] = key
    hash
  end
end

#name_from_key(key) ⇒ Object



98
99
100
# File 'lib/papers/manifest_updater.rb', line 98

def name_from_key(key)
  key.include?("-") ? key.rpartition("-").first : key
end

#new_gem(result_gems, gemspec) ⇒ Object



85
86
87
# File 'lib/papers/manifest_updater.rb', line 85

def new_gem(result_gems, gemspec)
  result_gems[gem_name_and_version(gemspec)] = gem_entry(gemspec)
end

#updateObject



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

def update
  raise Papers::FileMissingError.new(@manifest_path) unless manifest_exists?

  original_content = File.read(@manifest_path)
  result = YAML.load(original_content)

  update_gems(result)
  update_javascript(result, "javascripts", get_installed_javascripts)
  update_javascript(result, "bower_components", get_installed_bower_components)
  update_javascript(result, "npm_packages", get_installed_npm_packages)

  build_header + YAML.dump(result)
end

#update!Object



14
15
16
17
18
19
20
21
# File 'lib/papers/manifest_updater.rb', line 14

def update!
  updated_content = update
  File.open(@manifest_path, 'w') do |file|
    file.write(updated_content)
  end

  puts "Updated #{@manifest_path}! Run your tests and check your diffs!"
end

#update_gem(result_gems, gemspec, manifest_gem_key) ⇒ Object



70
71
72
73
74
75
76
77
78
79
80
81
82
83
# File 'lib/papers/manifest_updater.rb', line 70

def update_gem(result_gems, gemspec, manifest_gem_key)
  manifest_gem = result_gems.delete(manifest_gem_key)
  if gemspec.license && gemspec.license != manifest_gem["license"]
    new_licenses = gemspec.licenses || []
    new_licenses << gemspec.license
    new_licenses.uniq!

    manifest_gem["license"] = "License Change! Was '#{manifest_gem["license"]}', is now #{new_licenses}"
  end

  name = gem_name_and_version(gemspec)
  name = gemspec.name if gemspec.name == manifest_gem_key
  result_gems[name] = manifest_gem
end

#update_gems(result) ⇒ Object



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/papers/manifest_updater.rb', line 37

def update_gems(result)
  result_gems = result["gems"]
  return unless result_gems

  manifest_names = manifest_names(result_gems)
  gemspecs.each do |gemspec|
    if manifest_gem_key = manifest_names[gemspec.name]
      update_gem(result_gems, gemspec, manifest_gem_key)
    else
      new_gem(result_gems, gemspec)
    end
  end

  delete_gems(result_gems, manifest_names)
end

#update_javascript(result, key, installed) ⇒ Object



53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/papers/manifest_updater.rb', line 53

def update_javascript(result, key, installed)
  existing = result[key]
  return unless existing && installed

  removed = existing.keys - installed.keys

  # Merge over new results from existing to keep edits
  installed.merge!(existing)

  # Remove things that aren't installed anymore
  removed.each do |remove|
    installed.delete(remove)
  end

  result[key] = installed
end