Skip to content

Instantly share code, notes, and snippets.

View nepalez's full-sized avatar

Andrew Kozin nepalez

  • Evil Martians
  • Lisbon, Portugal
View GitHub Profile
# Clean the database
DROP TABLE IF EXISTS _orders CASCADE;
DROP TABLE IF EXISTS _users CASCADE;
DROP TABLE IF EXISTS orders CASCADE;
DROP TABLE IF EXISTS users CASCADE;
# Build the database (for hard deletion)
CREATE TABLE users (
id integer PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
name text NOT NULL
@nepalez
nepalez / gist:65875c2c0b8686ce28c00cc4217faa2e
Created March 1, 2019 14:54
Скачивание заказов и синхронизация
## События
[Первым коммитом][order_received_event] я добавил новое событие `orderReceived`. Событие хранит **сырой** заказ (новый или ранее зарегистрированный -- не важно) скачанный с ибея.
Основная идея тут вот в чем. Когда мы скачиваем заказы, их может быть пачка. Я проверил через консоль -- у пользователя с наибольшим числом заказов, за сутки их бывает около 300 штук.
Сохранять всю эту тонну информации в модель `Order` и связанные (строки, посылки, адреса) -- это тяжело и больно. Вместо этого мы быстро генерируем события с тем, чтобы их потом обработать и создать/обновить заказы.
Ивент -- надежнее, чем таска в сайдкике, потому что по завершении скачивания (см. ниже) мы сдвигаем отметку времени, до которой скачали обновления. Если мы какую-то из задачек потеряем, то больше мы этот заказ можем и не увидеть, т.к. будем скачивать только более поздние.
В отличие от сайдкика, ивенты -- хранимые. Т.е. нам _гарантировано_, что если мы сдвинули время в аккаунте, то все обновленные заказы лежат в стопке ивентов, ж
@nepalez
nepalez / keybase.md
Created July 5, 2017 15:16
Keybase verification

Keybase proof

I hereby claim:

  • I am nepalez on github.
  • I am nepalez (https://keybase.io/nepalez) on keybase.
  • I have a public key ASAP4n7AyvpMPae1X_9Tk4FokqkCx-UbJ_QlXbGYtjrOtQo

To claim this, I am signing this object:

@nepalez
nepalez / stock.md
Last active December 6, 2016 11:42

Структуры данных

Общая схема связей

                              site
                                ^
                                |
                                *
account <-------------------* showcase <---------------------.
@nepalez
nepalez / reform_ext.rb
Last active July 15, 2016 14:29
Reform monkey-patching
require 'reform'
require 'reform/form/coercion'
require 'hashie/mash'
module Reform
module DryTypes
def property(name, type: nil, **options, &block)
super(name, **options, &block).tap do
if type
# Tries to coerce value to the necessary type
@nepalez
nepalez / martian_anniversaries.rb
Created March 31, 2016 22:57
Martian anniversaries
# Happy birthday to you...
#
# @example
# dates = MartianAnniversaries.from '2015-01-01'
# dates.take(2)
# # => ['2016-11-17', '2018-10-05']
#
class MartianAnniversaries
include Enumerable
require "rspec"
require "mustermann"
require "delegate"
# Gem-speficic RSpec mocks and expectations
#
# @example
# allow(client)
# .to receive_request(:get, '/users/1')
# .where { |req| req[:query].include? "auth" => "foobar" }
require "rspec"
require "mustermann"
# Checks whether client condition has received given request
#
# @example
# allow(client)
# .to receive_request(:get, "example.com/users/:id/bills")
# .and_return({ id: 1, price: 100, currency: "RUR" })
#
require 'fiddle'
A = Class.new
B = Class.new
C = Class.new A
p C.superclass # => A
(Fiddle::Pointer[Fiddle.dlwrap C] + 16)[0, 8] = Fiddle::Pointer[Fiddle.dlwrap B].ref
p C.superclass # => B
@nepalez
nepalez / ruby_challenges.rb
Last active August 29, 2015 14:25
ruby challenges
# identity
id = -> v { v }
# composition
composition = -> g, f { -> v { g[f[v]] } }
# testing for id
g = -> v { v * 2 }
composition(g, id)[3] == g[3] # true
composition(id, g)[3] == g[3] # true