Skip to content

Instantly share code, notes, and snippets.

View emdeeeks's full-sized avatar

Gareth Griffiths emdeeeks

View GitHub Profile
@monochromer
monochromer / ComponentHelper.rb
Last active April 24, 2023 16:31
Ruby on Rails view component helpers
# https://www.innoq.com/en/blog/rails-frontend-components/
# app/helpers
module ComponentHelper
def component(name, data: {}, &block)
render_component("#{name}/#{name}", { data: data }, &block)
end
private
def render_component(name, locals, &block)
@furaji
furaji / application_form.rb
Last active June 29, 2023 07:50
Rails Base Object
class ApplicationForm
include ActiveModel::Model
include ActiveModel::Attributes
def self.copy_validations_from(model)
attribute_types.keys.each do |key|
model.validators_on(key).each do |validator|
validates(key, validator.kind => validator.options)
end
end
@krtschmr
krtschmr / gist:9e7b297763901efbe6cf02b4cb13ae5f
Last active August 29, 2024 16:43
qrcode with css helper
module QrCodeHelper
def qr_code(string, options={})
base_size = options.fetch(:width, 200)
@qr_logo = options.fetch(:logo, "qr_code_logo.png")
@qr_logo_size = options.fetch(:logo_size, 48)
level = options.fetch(:level, :l)
@qr_data = RQRCode::QRCode.new(string, level: level).to_s.split("\n").collect(&:chars)
@qr_size = @qr_data.size
@amirrajan
amirrajan / main.rb
Last active March 25, 2025 16:57
DragonRuby Game Toolkit Sprite Sheet Example
def tick args
args.labels << [640, 689, "Asset Presenter", 0, 1]
args.sprites << tile(0, 0, 100, 100)
args.sprites << tile(1, 0, 200, 200)
args.sprites << tile(2, 0, 300, 300)
10.map_with_index do |x|
10.map_with_index do |y|
args.sprites << tile(x, y, 30 + x * 64, 30 + y * 64)
end
@scmx
scmx / extract-objects-from-rails-models-and-controllers.md
Last active February 17, 2023 11:28
7 Patterns to Refactor Rails Models 7 years later #rails #model #refactor #valueobject #serviceobject #formobject #queryobject #viewobject #policyobject #decorator

7 Patterns to Refactor Rails Models 7 years later

You may have read the following excellent blogpost by Brian Helmkamp of CodeClimate. It nicely describes 7 types of objects that can be extracted from models and controllers in a Rails-app.

7 Patterns to Refactor Fat ActiveRecord Models https://codeclimate.com/blog/7-ways-to-decompose-fat-activerecord-models/ Brian Helmkamp on Oct 17, 2012.

Here are my thoughts on it, reading it as an experienced rails developer, 7 years later 😅 👴

@amirrajan
amirrajan / main.rb
Last active March 25, 2025 16:56
dragonruby gtk faux 3D
def cos v
Math.cos v
end
def flr n
n.floor
end
def sin v
Math.sin v
@0x263b
0x263b / archive_dm.rb
Last active September 25, 2021 13:28
Archive a discord DM and all attachments
#!/usr/bin/env ruby
# encoding: utf-8
Encoding.default_external = "UTF-8"
Encoding.default_internal = "UTF-8"
require "open-uri"
require "json"
require "net/https"
require "uri"
require "date"
@obelisk68
obelisk68 / tetris_for_Ruby2D.rb
Last active December 15, 2024 14:50
Ruby2D を使ったテトリス
require "ruby2d"
include Ruby2D::DSL
Wait = 18
class Tetromino
def initialize
@pat = Array.new(4)
pats = [["1111"], ["11", "11"], ["011", "110"], ["110", "011"],
["100", "111"], ["001", "111"], ["010", "111"]]
@dorzepowski
dorzepowski / clockify.sh
Last active November 18, 2019 18:16
Clockify simple CLI
#!/bin/bash
########################################################################################################################
########################################################################################################################
# README:
#
# This script is currently prepared to add work log entries (time entries) to clockify from command line.
# Currently supported parameters for time entry are:
# - Project Name (project will be searched in clockify by name case sensitive)
# - Tag Name (tag will be searched in clockify by name case sensitive [only one tag can be provided currently])
@dvinciguerra
dvinciguerra / simple_event_broker.rb
Created March 15, 2019 11:29
Ultra simple event broker made using Ruby
class Action
attr_reader :name, :payload, :callback
def initialize(**args, &block)
@name = args[:name]
@payload = args[:payload] || {}
@callback = block || proc {}
end
def process(payload)