I hereby claim:
- I am nepalez on github.
- I am andrew_kozin (https://keybase.io/andrew_kozin) on keybase.
- I have a public key ASCpUHtPalt3lyLebHEZjp5OvZwgUpdZONdVxYOESKLJUQo
To claim this, I am signing this object:
I hereby claim:
To claim this, I am signing this object:
# 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 |
## События | |
[Первым коммитом][order_received_event] я добавил новое событие `orderReceived`. Событие хранит **сырой** заказ (новый или ранее зарегистрированный -- не важно) скачанный с ибея. | |
Основная идея тут вот в чем. Когда мы скачиваем заказы, их может быть пачка. Я проверил через консоль -- у пользователя с наибольшим числом заказов, за сутки их бывает около 300 штук. | |
Сохранять всю эту тонну информации в модель `Order` и связанные (строки, посылки, адреса) -- это тяжело и больно. Вместо этого мы быстро генерируем события с тем, чтобы их потом обработать и создать/обновить заказы. | |
Ивент -- надежнее, чем таска в сайдкике, потому что по завершении скачивания (см. ниже) мы сдвигаем отметку времени, до которой скачали обновления. Если мы какую-то из задачек потеряем, то больше мы этот заказ можем и не увидеть, т.к. будем скачивать только более поздние. | |
В отличие от сайдкика, ивенты -- хранимые. Т.е. нам _гарантировано_, что если мы сдвинули время в аккаунте, то все обновленные заказы лежат в стопке ивентов, ж |
I hereby claim:
To claim this, I am signing this object:
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 |
# 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 |