Skip to content

Instantly share code, notes, and snippets.

View aseroff's full-sized avatar

Andrew Seroff aseroff

View GitHub Profile
@aseroff
aseroff / application.rb
Created April 10, 2025 20:35
Modifying an engine using the overrides directory / class_eval approach
# config/application.rb
require_relative "boot"
require "rails/all"
# Require the gems listed in Gemfile, including any gems
# you've limited to :test, :development, or :production.
Bundler.require(*Rails.groups)
@aseroff
aseroff / emoji_flag.rb
Created May 30, 2024 18:41
Emoji flag from country code
# source: https://twitter.com/yarotheslav/status/1793259765902024940
def country_code_to_emoji(country_code)
base_emoji_code = 0x1F1E6
country_code.upcase.each_char.map do |char|
((char.ord - 'A'.ord) + base_emoji_code).chr(Encoding::UTF_8)
end.join
end
@aseroff
aseroff / toggleable_controller.js
Created September 12, 2023 20:50
toggle stimulus controller
import { Controller } from "@hotwired/stimulus"
export default class ToggleableController extends Controller {
static targets = [ 'toggle', 'enableSection', 'disableSection', 'hideSection' ]
toggle() {
let checked = this.toggleTarget.checked
if (this.hasEnableSectionTarget) {
this.enableSectionTarget.disabled = !checked
@aseroff
aseroff / characters.html.haml
Created June 22, 2023 17:26
text with character limit html & stimulus controller
%div{data: {controller: 'text-with-limit'}}
- limit = 1000
%label Message:
= form.text_area :custom_message, value: default_message, maxlength: limit, rows: 9, data: { 'text-with-limit-target': 'field', action: 'keyup->text-with-limit#updateCounter' }
.right
%small
Chars left:
%span{data: {'text-with-limit-target': 'counter'}}= limit - default_message.length
\/
= limit
@aseroff
aseroff / check_column_controller.js
Last active July 5, 2023 17:43
sample check all checkboxes stimulus controller with operator
import { Controller } from '@hotwired/stimulus'
export default class extends Controller {
static targets = [ 'header', 'row', 'operator' ]
headerToggle() {
let switch_status = this.headerTarget.checked
this.rowTargets.forEach(box => {
if (!box.disabled) { box.checked = switch_status; }
})
@aseroff
aseroff / docs.rake
Created June 22, 2023 17:05
rake tasks for versioning
# frozen_string_literal: true
if Rails.env.development?
require 'rails-erd'
require 'yard'
namespace :docs do
desc 'updates documentation'
task all: :environment do
@aseroff
aseroff / mysql2 hoops
Last active March 23, 2025 02:05
The stupid hoops required to install mysql2 gem with brew-installed mysql
mysql_version=$(brew list --versions mysql | tr ' ' '\n' | tail -1)
mysql_path=$(brew --cellar mysql)/$mysql_version
gem install mysql2 -- \
--with-mysql-lib=$mysql_path/lib \
--with-mysql-dir=$mysql_path \
--with-mysql-config=$mysql_path/bin/mysql_config \
--with-mysql-include=$mysql_path/include \
--with-openssl-dir=/usr/local/Cellar/openssl@3/3.1.2
@aseroff
aseroff / roman_numerals.rb
Last active March 6, 2025 19:10
Convert roman numerals into arabic numerals in place
# frozen_string_literal: true
# Enhance string class with roman numeral conversion methods
# To use, put `using RomanNumerals`
# @see https://docs.ruby-lang.org/en/master/syntax/refinements_rdoc.html
module RomanNumerals
refine String do
# Convert a roman numeral string into an arabic numeral
def to_arabic(zero_pad: 0)
result = 0
@aseroff
aseroff / opt5.md
Last active March 28, 2023 20:52
Creating a selectbox for a form using ancestry SECRET OPTION #5

Options 1-4 seen here

Option 5: Directly writing to the Ancestry string field

  • In the form:
    <%= f.select :ancestry, [['- New Primary Category -', '/']] + Category.all.map{ |category| [category.name, "#{category.ancestry}#{category.id}/"] } %>
@aseroff
aseroff / exercise_turbo_frame_request_conditional.rb
Last active March 22, 2023 19:43
Testing rails controllers that change behavior based on "if turbo_frame_request?"
# Based on this code: https://github.com/hotwired/turbo-rails/blob/main/app/controllers/turbo/frames/frame_request.rb
# the response of turbo_frame_request? is based on the presence of a header named "Turbo-Frame".
# Therefore, you can exercise code behind this conditional in your controller tests by specifying that header in your GET requests.
# example controller action
class DashboardController < ApplicationController
# GET dashboard
def index
if turbo_frame_request?
# frame loading behavior