class Jets::Commands::Sequence

def self.source_root

def self.source_root
  File.expand_path("templates/skeleton", File.dirname(__FILE__))
end

def clone_project

def clone_project
  unless git_installed?
    abort "Unable to detect git installation on your system. Git needs to be installed in order to use the --repo option."
  end
  if File.exist?(project_folder)
    abort "The folder #{project_folder} already exists."
  else
    run "git clone https://github.com/#{options[:repo]} #{project_folder}"
  end
  confirm_jets_project
end

def confirm_jets_project

def confirm_jets_project
  jets_project = File.exist?("#{project_folder}/config/application.rb")
  unless jets_project
    puts "#{options[:repo]} does not look like a Jets project. Double check your repo!".color(:red)
    exit 1
  end
end

def copy_options

def copy_options
  excludes = case @options[:mode]
  when 'job'
    # For job mode: list of words to include in the exclude pattern and will not be generated.
    %w[
      Procfile
      controllers
      helpers
      javascript
      models/application_
      views
      config.ru
      database.yml
      dynamodb.yml
      routes
      db/
      spec
      yarn
      public
    ]
  when 'api'
    %w[
      views
    ]
  else # html
    []
  end
  unless @database
    # Do not even generate the config/database.yml because
    # Jets webpacker:install bombs and tries to load the db since it sees a
    # config/database.yml but there's no database pg gem configured.
    excludes += %w[
      database.yml
      models/application_record
    ]
  end
  if excludes.empty?
    {}
  else
    pattern = Regexp.new(excludes.join('|'))
    {exclude_pattern: pattern }
  end
end

def copy_project

def copy_project
  puts "Creating a new Jets project called #{@project_name}."
  directory ".", project_folder, copy_options
end

def git_credentials_set?

the user needs to have their credentials set
In order to automatically create first commit
def git_credentials_set?
  configs = `git config --list`.split("\n")
  configs.any? { |c| c.start_with? 'user.name=' } && configs.any? { |c| c.start_with? 'user.email=' }
end

def git_installed?

def git_installed?
  system("type git > /dev/null 2>&1")
end

def jets_minor_version

def jets_minor_version
  md = Jets::VERSION.match(/(\d+)\.(\d+)\.\d+/)
  major, minor = md[1], md[2]
  [major, minor, '0'].join('.')
end

def yarn_installed?

def yarn_installed?
  system("type yarn > /dev/null 2>&1")
end