Skip to content

Instantly share code, notes, and snippets.

View Genkilabs's full-sized avatar
😸
Writing software...

Alex Genkilabs

😸
Writing software...
View GitHub Profile
@Genkilabs
Genkilabs / custom_utils.rb
Created October 5, 2023 16:00
Interpolate Sting Using Hash or Rails Model
module CustomUtils
# This should look for hash keys, or ActiveModel::Base attributes within the string
# while also safeguarding from typing errors.
# Interpolation symbols not provided in the hash should be left unchanged.
# This does NOT support "deep interpolation" eg. "my %{%{nested_key}} string"
#@param String with %{key} interpolation fields
#@param Hash with symbolic keys OR Object with 'attributes' method eg. ActiveModel
#@returns String original with any keys replaced if they are in the hash, others ignored
def self.interpolate str, obj
#For the hash, we need to re-key the hash to be sure, and add default to skip missing interpolations
@Genkilabs
Genkilabs / any_es6_module.js
Created February 18, 2021 22:39
Workaround for running pdf.js on Rails 6.1 Ruby 3.0 with webpacker
//app/assets/js/any_es6_module.js
//Use globally in any es6 module you are requiring through application.js
var render_pdf_thumbnail = function(pdfData, $canvas) {
//This is the sauce. We instantiate a new Worker from our globally scoped worker-loader f()
pdfjsLib.GlobalWorkerOptions.workerPort = new pdfjsWorker();
// In my case, using DocumentInitParameters object to load binary data.
var loadingTask = pdfjsLib.getDocument({data: pdfData});
loadingTask.promise.then(function(doc) {
@Genkilabs
Genkilabs / application.js
Created June 15, 2020 17:48
JS Pattern for Organizing Selectors and Function Reuse After Load
// Your main application js. We will include jQuery first, then everything else
//= require jquery
//
//= require_tree .
// You can choose to DRY common selectors perhaps used system wide.
const SELECTORS = {
RESULTS: () => $("#results-box")
}
@Genkilabs
Genkilabs / application_controller.rb
Created July 11, 2018 17:52
How to dynamically select rails views for specific model instances (ie. a specific user)
#An overly complex example of dynamically micro-managing which templates are shown..
class ApplicationController < ActionController::Base
# In this example we assume a using Devise so user_signed_in? and current_user are provided.
# Note: the value returned here could very well be a user's uuid if you needed to provide
# one specific different view for a single or small collection of specific users.
# @returns String || nil
def get_custom_view_name
#This doesn't need to be lazy, but it can be.
@custom_view_name ||= begin
@Genkilabs
Genkilabs / inflections.rb
Created June 29, 2017 17:40
How to use Devise inside of a Versionist scope without the version-name in the model's path prefix
#/config/initializers/inflections.rb
# This is a nice-to-have so API doesn't keep showing up as Api
ActiveSupport::Inflector.inflections(:en) do |inflect|
inflect.acronym 'API'
end
@Genkilabs
Genkilabs / user.rb
Created November 23, 2016 20:53
Rolify: Remove all roles for a resource and enforce only one role per resource (singleton pattern)
class User < ApplicationRecord
rolify :strict => true, :before_add => :before_add_role
#Helper method to remove any existing role this user has for a resource
def remove_all_roles resource
# README: This syntax relies on changes on the following PR
# https://github.com/RolifyCommunity/rolify/pull/427
# Or include the source of this directly:
# gem 'rolify', :git => "git://github.com/Genkilabs/rolify.git"
remove_role nil, resource
@Genkilabs
Genkilabs / to_bool.rb
Created November 23, 2015 20:31
Add a 'to_bool' method to every Ruby / Rails class with initializer
#Alias the default boolean? operator of ruby for everything so all objects responds_to? :to_bool
#...then further refine it for specific classes later
class Object
def to_bool
return !!self
end
end
#Lets give String a custom to_bool that is in line with the meaning for our specific program
class String
@Genkilabs
Genkilabs / build.sh
Last active August 29, 2015 14:07
Localhost developing in Coalesce for Ember CLI based apps
#!/bin/bash
cd ../../coalesce;
npm run-script build;
cd ../coalesce-ember;
# Hack to use the latest version of Coalesce
cp ../coalesce/dist/* bower_components/coalesce/
npm run-script build;
cd ../ember-cli-coalesce-todos/client;
mkdir -p vendor/coalesce-ember
@Genkilabs
Genkilabs / simple-auth-config.js
Created August 25, 2014 20:29
ember-cli-simple-auth-devise initializer for setting endpoint. Lets you run on Rails localhost without proxy.
// app/initializers/simple-auth-config.js
export default {
name: 'simple-auth-config',
before: 'simple-auth',
initialize: function() {
var tokenEndpoint = '/users/sign_in';
MyAppnameENV['simple-auth'] = {
authorizer: 'simple-auth-authorizer:devise',
crossOriginWhitelist:[
@Genkilabs
Genkilabs / any_controller.rb
Last active August 31, 2020 14:45
Rails 4 Ransacker to build subquery for searching across multiple fields in multiple polymorphic classes.
#This is how it might be used. Create your instance which could be polymorphic or just a class.
#Search using the predicate 'in' because the subquery find_term will return an ID of every record that matches.
@profile_instance = either a PetProfile or an OwnerProfile
@profile_instance.search( { :find_term_in => "has fleas", :other_ransack_term_eq => "foobar" } ).results()