- 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 -}}
Сегодня попался рельсовый код, в котором используются монады, сервисы и прочее. Решил сделать обзор с объяснением того, что в коде не нравится и что можно исправить.
Данный разбор основан только на личном опыте и избегает попытку написать самый идеальный код на свете. К сожалению пошарить ссылку на код не могу, потому что автор попросил опубликовать анонимно.
Главная операция, которая вызывается из контроллера выглядит следующим образом:
| 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.
| 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 |
| 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 |