class Dato::Cli

Public Instance Methods

check() click to toggle source
# File lib/dato/cli.rb, line 55
def check
  exit 0 if ENV["DATO_API_TOKEN"]

  say "Site token is not specified!"
  token = ask "Please paste your DatoCMS site read-only API token:\n>"

  if !token || token.empty?
    puts "Missing token"
    exit 1
  end

  File.open(".env", "a") do |file|
    file.puts "DATO_API_TOKEN=#{token}"
  end

  say "Token added to .env file."

  exit 0
end
dump() click to toggle source
# File lib/dato/cli.rb, line 18
def dump
  config_file = File.expand_path(options[:config])
  watch_mode = options[:watch]
  preview_mode = options[:preview]

  client = Dato::Site::Client.new(
    options[:token],
    environment: options[:environment],
    extra_headers: {
      "X-Reason" => "dump",
      "X-SSG" => Dump::SsgDetector.new(Dir.pwd).detect,
    },
  )
  loader = Dato::Local::Loader.new(client, preview_mode)
  print "Fetching content from DatoCMS... "
  loader.load

  if watch_mode
    semaphore = Mutex.new

    thread_safe_dump(semaphore, config_file, client, preview_mode, loader)

    loader.watch do
      thread_safe_dump(semaphore, config_file, client, preview_mode, loader)
    end

    watch_config_file(config_file) do
      thread_safe_dump(semaphore, config_file, client, preview_mode, loader)
    end

    sleep
  else
    Dump::Runner.new(config_file, client, preview_mode, loader).run
  end
end
thread_safe_dump(semaphore, config_file, client, preview_mode, loader) click to toggle source
# File lib/dato/cli.rb, line 84
def thread_safe_dump(semaphore, config_file, client, preview_mode, loader)
  semaphore.synchronize do
    Dump::Runner.new(config_file, client, preview_mode, loader).run
  end
end
watch_config_file(config_file, &block) click to toggle source
# File lib/dato/cli.rb, line 76
def watch_config_file(config_file, &block)
  Listen.to(
    File.dirname(config_file),
    only: /#{Regexp.quote(File.basename(config_file))}/,
    &block
  ).start
end