Skip to content

Instantly share code, notes, and snippets.

View RStankov's full-sized avatar
🤖
👨‍💻

Radoslav Stankov RStankov

🤖
👨‍💻
View GitHub Profile
batch = AngryBatch.new label: 'BulkWithdraw'
# check inherits from ActiveJob::Base
batch.on_complete Finance::WithdrawBulkCompleteJob, bulk_withdraw
zerod_fees do |fee|
# check inherits from ActiveJob::Base
# check job includes AngryJob::Batchable
batch.enqueue Taxation::MaintenanceTaxAutoAdjustmentJob, bulk_withdraw, fee: fee, amount: 0
end
# frozen_string_literal: true
require 'net/http'
require 'json'
module OpenAI
extend self
API_KEY = ENV.fetch('openai_api_key')
@RStankov
RStankov / detectUnusedFields.ts
Created September 23, 2024 13:12
Detects unused GraphQL fields
import * as glob from 'glob';
import difference from 'lodash/difference';
import startCase from 'lodash/startCase';
import union from 'lodash/union';
import uniq from 'lodash/uniq';
import { CodeFileLoader } from '@graphql-tools/code-file-loader';
import { DocumentNode, DefinitionNode, OperationDefinitionNode } from 'graphql';
import { GraphQLFileLoader } from '@graphql-tools/graphql-file-loader';
import { loadDocuments } from '@graphql-tools/load';
import { visit } from 'graphql/language/visitor';
# frozen_string_literal: true
module ErrorReporting
extend self
def assign_user(user)
return unless Rails.env.production?
Sentry.set_user(
id: user.id,
module AngrySupport::BelongsToPolymorphic
def belongs_to_polymorphic(name, allowed_classes:, **options)
belongs_to name, polymorphic: true, **options
validates "#{name}_type", inclusion: { in: allowed_classes.map(&:name), allow_nil: !!options[:optional] }
define_singleton_method(:"#{name}_types") { allowed_classes }
define_singleton_method(:"with_#{name}") do |type|
type = case type
@RStankov
RStankov / application_component.rb
Created April 25, 2024 11:56
ViewComponent Tips
class ApplicationComponent < ViewComponent::Base
private
def fetch_with_fallback(hash, key, fallback)
hash.fetch(key) do
ErrorReporting.capture_exception(%(key not found: "#{key}"))
fallback
end
end
@RStankov
RStankov / counter_cache.sql
Created April 4, 2024 13:05
Counter Cache in SQL
CREATE OR REPLACE FUNCTION comments_count_update()
RETURNS TRIGGER AS $$
BEGIN
-- Increase count on insert
IF (TG_OP = 'INSERT') THEN
UPDATE posts SET comments_count = comments_count + 1
WHERE posts.id = NEW.post_id;
RETURN NEW;
-- Decrease count on delete
ELSIF (TG_OP = 'DELETE') THEN
@RStankov
RStankov / emergency_kit.md
Created March 7, 2024 19:38
⛑️ Emergency Kit

⛑️ Emergency Kit

🎥 Video walkthrough of emergency handling `[VIDEO IN TOOL LIKE LOOM]`

Tools

@RStankov
RStankov / template_postmortem.md
Created March 7, 2024 17:26
Post postmortem template

[REPLACE TITLE] Postmortem

Summary:

[TLD of what happened]

Responders:

[who handled the issue]

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="viewport" content="width=device-width" />
<title>Menu</title>
<style>
.wrapper {
margin-left: auto;
margin-right: auto;