Skip to content

Instantly share code, notes, and snippets.

View davydovanton's full-sized avatar
:shipit:
Working from home

Anton Davydov davydovanton

:shipit:
Working from home
View GitHub Profile
@davydovanton
davydovanton / Grafana Alert Template.md
Created November 21, 2023 15:36 — forked from gelldur/Grafana Alert Template.md
How to use Grafana Alerts with the Telegram
  • Template name: telegram.message
  • Content:
    {{- /* Telegram message to use: {{ template "telegram.message2" . }} */ -}}
    {{ define "__alerts_list" -}}
    {{ range . }}
    {{if ne (index .Labels "alertname") "" -}}
    {{ if eq .Status "firing" }}🔴{{ else }}🟢{{ end }}
        {{- if ne (index .Labels "severity") "" -}}
            <u><b>P{{ index .Labels "severity" }}</b></u> {{ end -}}
@davydovanton
davydovanton / text.md
Last active August 11, 2023 13:33
Рефакторинг сервис объекта с монадами и AR

https://t.me/pepegramming

Сегодня попался рельсовый код, в котором используются монады, сервисы и прочее. Решил сделать обзор с объяснением того, что в коде не нравится и что можно исправить.

Данный разбор основан только на личном опыте и избегает попытку написать самый идеальный код на свете. К сожалению пошарить ссылку на код не могу, потому что автор попросил опубликовать анонимно.

Исходные данные

Главная операция, которая вызывается из контроллера выглядит следующим образом:

require 'dry/monads'
require 'dry/monads/right_biased'
require 'dry/monads/result'
require 'dry/monads/maybe'
module Dry
module Monads
module RightBiased
module Right
def deconstruct
Hello!
Some information about hanami workshop.
Requirements:
* ruby 2.5+ (and bundler)
* postgresql (9.6.2+)
Before start workshop please install hanami gem to your system

смотри, я посмотрел в старом рабочем проекте

вот все тесты из проекта

Finished in 2 seconds (files took 2.78 seconds to load)
250 examples, 0 failures, 3 pending

Coverage report generated for RSpec to /Users/anton/work/job/old_projects/coverage. 439 / 439 LOC (100.0%) covered.
@davydovanton
davydovanton / bench.rb
Last active October 4, 2018 11:14
||= vs unless
require "benchmark/ips"
def fast
test = nil
test = 'test' unless test
test = 'new test' unless test
end
def slow
module Post
class AnonymousAbilities
include Kan::Abilities
role(:anonymous) do |user, _|
user.id.nil?
end
register(:read) { [] }
end
@davydovanton
davydovanton / dry_monads_with_handler.rb
Last active February 20, 2019 13:06
dry_monads_with_handler
def result_handler(result)
case result
when Success, Some
puts 'success, user created'
when Failure { |message, _| message == :http_error }
puts "HTTP request error, #{result.failure[2]}"
when Failure { |message, _| message == :validation_error }
puts "validation error, #{result.failure[2]}"
when Failure(ROM::Error)
puts 'User not created'

ситуация, есть приложение, которое создает пользователя, а потом хочет сделать кучу разной работы в бэкграунде (послать данные пользователю, отправить аналитику в сегмент, сделать какие-то модели в БД, выкачать дамп данных, etc)

вариант первый, взять сайдкик:

class CreatedUserNotificationWorker
  # ...
end
require_relative './container'
module Dry
module AutoInject
class Strategies
class Kwargs
def included(klass)
included_items
super
end