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 |