Options 1-4 seen here
- In the form:
<%= f.select :ancestry, [['- New Primary Category -', '/']] + Category.all.map{ |category| [category.name, "#{category.ancestry}#{category.id}/"] } %>
# 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 |
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 |
%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 |
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; } | |
}) |
# frozen_string_literal: true | |
if Rails.env.development? | |
require 'rails-erd' | |
require 'yard' | |
namespace :docs do | |
desc 'updates documentation' | |
task all: :environment do |
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 |
class String | |
def to_arabic | |
result = 0 | |
str = self | |
roman_mapping.each_value do |roman| | |
while str.start_with?(roman) | |
result += roman_mapping.invert[roman] | |
str = str.slice(roman.length, str.length) | |
end |
Options 1-4 seen here
<%= f.select :ancestry, [['- New Primary Category -', '/']] + Category.all.map{ |category| [category.name, "#{category.ancestry}#{category.id}/"] } %>
# 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 |
For a while, my org was using Wordpress to manage a public-facing website, which was reverse-proxied on my Rails application's server to share its DNS (a fairly common setup). However, the cost of supporting Wordpress and the proxy became too great to justify, and we looked into replacing Wordpress with another CMS option. I came across SpinaCMS, an open-source, Rails-powered CMS, which offered a lot of upside to proxying to a seperate server running a separate application. However, there were several gotchas that took some navigating, that I want to share in one place, considering I believe these would all be common situations to anyone trying to accomplish a similar goal. This guide will assume you have completed the basic setup of gem installation and setup rake tasks.
If your application is already running on MySQL, you probably don't want to go through the hurdles of moving to a Postgres database. Fortunately, unless you are using the e-commer