namespace :rails do

desc "Run rails console"
task console: :'deploy:set_rails_env' do
  on roles(:app) do
    within current_path do
      with rails_env: fetch(:rails_env) do
        execute_with_tty "bin/rails", "c"
      end
    end
  end
end

task c: :console

# Ex: cap production rake:invoke TASK=db:migrate TRACE=true ENV=FOO=bar,BAZ=boo"
desc "Run rails rake task"
task rake: :'deploy:set_rails_env' do
  on roles(:app) do
    within current_path do
      with rails_env: fetch(:rails_env) do
        # Build environment variables that we need
        # to pass in
        env = (ENV.delete('ENV') || "")
        env_hash = env.split(',').each_with_object({}) do |pair, hash|
          key, value = pair.split('=')

          hash[key.downcase.to_sym] = value
        end

        with env_hash do
          args = ["bin/rake", ENV['TASK']]
          args << "--trace" if ENV['TRACE']

          execute(*args)
        end
      end
    end
  end
end

desc "Run rails runner"
task runner: 'deploy:set_rails_env' do
  on roles(:app) do
    within current_path do
      with rails_env: fetch(:rails_env) do
        execute "bin/rails", "runner", ENV['FILE']
      end
    end
  end
end

desc "View rails log"
task log: 'deploy:set_rails_env' do
  on roles(:app) do
    within current_path do
      with rails_env: fetch(:rails_env) do
        execute_with_tty "vi", "log/#{fetch(:stage)}.log"
      end
    end
  end
end

desc "Tail rails log"
task tail: 'deploy:set_rails_env' do
  on roles(:app) do
    within current_path do
      with rails_env: fetch(:rails_env) do
        execute "tail", "-f", "log/#{fetch(:stage)}.log"
      end
    end
  end
end

end