require "io/wait" namespace :bt do desc "Symlink registered gems in `./tmp/gems` so their views, etc. can be inspected by Tailwind CSS." task link: :environment do if Dir.exist?("tmp/gems") puts "Removing previously linked gems." `rm -f tmp/gems/*` else if File.exist?("tmp/gems") raise "A file named `tmp/gems` already exists? It has to be removed before we can create the required directory." end puts "Creating 'tmp/gems' directory." `mkdir tmp/gems` end `touch tmp/gems/.keep` BulletTrain.linked_gems.each do |linked_gem| target = `bundle show #{linked_gem}`.chomp if target.present? puts "Linking '#{linked_gem}' to '#{target}'." `ln -s #{target} tmp/gems/#{linked_gem}` end end end end namespace :bullet_train do desc "Figure out where something is coming from." task :resolve, [:all_options] => :environment do |t, arguments| ARGV.pop while ARGV.any? arguments[:all_options]&.split&.each do |argument| ARGV.push(argument) end if ARGV.include?("--interactive") puts "\nOK, paste what you've got for us and hit !\n".blue input = $stdin.gets.strip $stdin.getc while $stdin.ready? # Extract absolute paths from annotated views. if input =~ // input = $1 end ARGV.unshift input.strip end if ARGV.first.present? BulletTrain::Resolver.new(ARGV.first).run(eject: ARGV.include?("--eject"), open: ARGV.include?("--open"), force: ARGV.include?("--force"), interactive: ARGV.include?("--interactive")) else warn "\nšŸš… Usage: `bin/resolve [path, partial, or URL] (--eject) (--open)`\n".blue end end end