Skip to content

Instantly share code, notes, and snippets.

@rafasoares
Last active May 26, 2020 21:56
Show Gist options
  • Save rafasoares/61f48ce5c33eae5e58e02cb2dc5d561d to your computer and use it in GitHub Desktop.
Save rafasoares/61f48ce5c33eae5e58e02cb2dc5d561d to your computer and use it in GitHub Desktop.
Updates old, flat media/ webpacker paths to use the proper nested path, from manifest.json
require 'json'
regex = /(?<quote>['"])media\/(?<name>.*?)\k<quote>/
manifest = JSON.load File.read('./public/packs/manifest.json')
glob = File.join 'app', '**', '*.*'
Dir[glob].each do |filename|
next unless filename =~ /^app\/.*\.(erb|rb|js|css|sass|scss|coffee|es6|jsx)$/
content = File.foreach(filename).map do |line|
match = regex.match line
next line unless match
path = match[0]
name = match[:name]
puts "\n#{filename}"
escaped = Regexp.escape(name).gsub(/\\#\\{.*?\\}/, '.*?')
pattern = /^media\/(?<path>.*?)\/#{escaped}$/
target = manifest.keys.lazy
.map { |k| pattern.match k }
.find(&:itself)&.[](:path)
final_path = path.gsub('media/', "media/#{target}/")
puts "#{path} -> #{final_path}"
line.gsub(path, final_path)
end
File.open(filename, 'w') do |file|
content.each { |line| file << line }
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment