Skip to content

Instantly share code, notes, and snippets.

View Mayurifag's full-sized avatar
🗨️
I may be slow to respond.

Mayurifag

🗨️
I may be slow to respond.
View GitHub Profile
@Mayurifag
Mayurifag / has_many_attached.rb
Created October 26, 2023 06:19 — forked from fractaledmind/has_many_attached.rb
Vanilla Rails isomorphic attachment validations
# /app/models/concerns/has_many_attached.rb
module HasManyAttached
extend ActiveSupport::Concern
class_methods do
def has_many_attached(name, dependent: :purge_later, service: nil, strict_loading: false, **options)
super(name, dependent: :purge_later, service: nil, strict_loading: false)
if options[:file_types].any?
validate "validate_#{name}_file_types".to_sym
@Mayurifag
Mayurifag / preload_first_n_records_of_association.rb
Created September 28, 2023 17:32 — forked from Envek/preload_first_n_records_of_association.rb
Preload first N records of an association in ActiveRecord (Ruby on Rails)
# Collection has and belongs to many Projects through CollectionProject
# Usage
@collections = current_user.collections.page(1)
ActiveRecord::Associations::Preloader.new.preload(@collections, :projects, limited_projects(3))
# Now @collections.first.projects will have only first 3 projects accessible
# Constructs SQL like this to preload limited number of recent projects along with collections:
# SELECT * FROM (
# SELECT "projects".*, row_number() OVER (PARTITION BY collection_projects.collection_id ORDER BY collection_projects.created_at) AS collection_position
@Mayurifag
Mayurifag / rescue-from-git-push-force.md
Created September 28, 2023 17:31 — forked from Envek/rescue-from-git-push-force.md
Откат ошибочной команды git push --force

Откат ошибочной команды git push --force

Иногда при работе с несколькими удалёнными репозиториями в git, может произойти страшное: git push --force в не тот remote и/или не в ту ветку.

Такое может случиться, например, если вы используете [Deis], в котором деплой запускается при git push нужного коммита в сборщик, когда при отладке деплоя после очередного git commit --amend по запарке вместо git push deis master --force делается просто git push --force. Упс.

Как результат, последние коммиты коллег безвозвратно потеряны, и вы чувствуете неотвратимость их ярости…

Но это git, а значит всё можно починить!

#!/bin/sh
set -eu
AGGRESSIVE=0
PARAMS=""
while [ "$#" -gt 0 ]; do
case "$1" in
--aggressive)
WITH table_scans as (
SELECT relid,
tables.idx_scan + tables.seq_scan as all_scans,
( tables.n_tup_ins + tables.n_tup_upd + tables.n_tup_del ) as writes,
pg_relation_size(relid) as table_size
FROM pg_stat_user_tables as tables
),
all_writes as (
SELECT sum(writes) as total_writes
FROM table_scans
# Makes git push and creates Merge Request at the same time
# If you follow branch naming convention like "ucp-123/new-authorization", MR title will be "UCP-123 New authorization", which will be cross-linked to Jira
# Make sure to replace "ucp" with your shortcut.
# IMPORTANT PREREQUISITE: to run `git config committer.name <your_gitlab_username>` once, so that it gets used for `make publish!` to assign MR to you
USERNAME := $(shell git config committer.name)
BRANCH := $(shell git rev-parse --abbrev-ref HEAD)
ticket_pattern := ucp-[0-9][0-9][0-9]
TICKET := $(shell git rev-parse --abbrev-ref HEAD | grep -o '$(ticket_pattern)' | tr [:lower:] [:upper:])
@Mayurifag
Mayurifag / test_helper.rb
Created January 26, 2022 14:10 — forked from DavertMik/test_helper.rb
Better debugging for rails tests: logs and custom output to stdout
# run it as DEBUG=true rails test
if ENV['DEBUG']
Rails.logger = Logger.new(STDOUT)
Rails.logger.level = Logger::INFO
Rails.logger.datetime_format = ""
Rails.logger.formatter = proc do |severity, _time, _progname, msg|
"#{severity.green}: #{msg}\n"
end
@Mayurifag
Mayurifag / application.rb
Created January 16, 2022 20:27 — forked from KELiON/application.rb
Compile all assets from roots
# Precompile all JS/CSS in root of app/assets/stylesheets and app/assets/javascripts
config.assets.precompile +=
Dir[::Rails.root.join('app/assets/*/*.{js,css,coffee,sass,scss}*')].
map { |i| File.basename(i).sub(/(\.js)?\.coffee$/, '.js') }.
map { |i| File.basename(i).sub(/(\.css)?\.(sass|scss)$/, '.css') }.
reject { |i| i =~ /^application\.(js|css)$/ }
@Mayurifag
Mayurifag / shit.ahk
Created August 10, 2021 14:43
shit.ahk
; Rbutton related
#SingleInstance Force
SendMode Input
Process, Priority, , High
SetBatchLines, -1
; ahk Mozilla...
SetTitleMatchMode, Regex
; Capslock related
SetCapsLockState, AlwaysOff
@Mayurifag
Mayurifag / config.yml
Created June 7, 2020 15:54 — forked from hmcfletch/config.yml
An example Circle CI workflow for a Ruby on Rails app
version: 2
jobs:
checkout_and_deps:
docker:
- image: circleci/ruby:2.5.1-node-browsers
steps:
- checkout
- run: