Skip to content

Instantly share code, notes, and snippets.

View alexshapalov's full-sized avatar
🎯
Focusing

Alex Shapalov alexshapalov

🎯
Focusing
View GitHub Profile
Test Task: Bookstore Rails Application
Objective:
Develop a Rails web application for a bookstore.
Requirements:
Models:
Create the following models with the specified fields and associations:
@alexshapalov
alexshapalov / test.rb
Last active September 13, 2023 17:41
Shared example in Rails with RSpec and Capybara
# Shared stuff for logging in
RSpec.shared_context 'logged in user' do
before do
visit '/login'
fill_in 'username', with: 'test_user'
fill_in 'password', with: 'test_password'
click_button 'Login'
end
end
def accept
authorize!(:admin_affiliates, org)
service = AffiliateApplicationService.new(@campaign)
if service.accept_affiliate_application(affiliate_application_id: params[:id])
flash[:success] = "Accepted #{service.application.user.name}"
else
flash[:error] = "Application was not accepted. Please try again"
end
class Ziprecruiter
def start
session = Capybara::Session.new(:selenium_chrome_headless)
p "Start...."
begin
job_link = "https://www.ziprecruiter.com/browse/titles/A"
session.visit(job_link)
Write a parser for this page:
https://www.remotely.jobs/lead-geotechnical-engineer-job-wood-thilsted
The program should be able to parse:
1. Title
2. Description
3. Apply Now (link)
4. Current page (link)
5. Company Name
# This is a Service Object for generating special PDF with a list of countries.
# country_pdf_list.rb
# I prefer to use Sendi Matz rule
# Classes can be no longer than one hundred lines of code.
# Methods can be no longer than five lines of code.
# Pass no more than four parameters into a method. Hash options are parameters.
# Controllers can instantiate only one object
# Example of refactoring long method.
def self.get_troubled_reasons(where_cond, session_country)
reasons = (1..18).map { |e| "TR#{e.to_s.rjust(3, '0')}" }
query = reasons.map do |reason|
"SUM(CASE WHEN reason_code LIKE '%#{reason}%' THEN 1 ELSE 0 END) AS #{reason}"
end.join(',')
TroubledOrder.joins(:order).select(query).where(orders: { country_code: session_country }).where(where_cond).first
end
# Дано: массив случайных натуральных чисел X в случайном порядке, среди которых могут быть дубликаты. Целое число C.
# Вопрос: может ли число C быть сформировано суммой двух элементов массива? Другими словами, существуют ли такие i, j,
# что X[i] + X[j] == C? Знать нам эти числа не обязательно, достаточно знать, что такие числа есть.
# Очевидным способом ответ ищется за O(n^2). Требуется найти более быстрое асимптотически решение.
# Исходный массив (X) записан в файл построчно, целевая сумма (C) либо передаётся параметром, либо жёстко забита в код.
# В помощь предлагается специально подготовленный файл на 100 000 чисел и ниже перечислено несколько тестовых чисел с
# правильными ответами - тут можно проверять решение. Кстати, квадратичные решения на 100 000 на моём компьютере в Руби
# работают порядка 40 минут, так что стимул решить правильно вроде бы есть.
# Тестовые примеры с ответами. Файл на 100 000 чисел в аттаче.
var call1, call2, data;
VoxEngine.addEventListener(AppEvents.Started, handleScenarioStart);
function handleScenarioStart(e) {
// в сценарий можно передать данные с помощью механизма customData,
// параметр script_custom_data в HTTP-запросе StartScenarios
// передадим в нем номера в виде строки номер1:номер2
data = VoxEngine.customData();
data = data.split(":");
RSpec.describe 'Authenticated admin can write meta tags', type: :feature, js: true do
let!(:user) { create :user, :admin, email: 'admin@new.com' }
let!(:city) { create :city, name: 'loddgy' }
let!(:property) { create :property }
describe 'Authenticated adnin' do
specify 'Admin Can create new post' do
visit '/home'