Skip to content

Instantly share code, notes, and snippets.

@glaucocustodio
glaucocustodio / short_variable_name.rb
Created July 10, 2024 14:20
custom rubocop cop for checking if variable names are too short
# frozen_string_literal: true
# put this file at .rubocop/cop/naming/short_variable_name.rb
# then ensure you have the following in .rubocop.yml:
#
# require:
# - .rubocop/cop/naming/short_variable_name.rb
#
# Naming/ShortVariableName:
# Enabled: true
@glaucocustodio
glaucocustodio / redundant_require_rails_helper.rb
Last active July 10, 2024 14:02
custom rubocop cop for checking if spec files include `require 'rails_helper'`
# frozen_string_literal: true
# put this file at .rubocop/cop/rspec/redundant_require_rails_helper.rb
# then ensure you have the following in .rubocop.yml:
#
# require:
# - .rubocop/cop/rspec/redundant_require_rails_helper.rb
#
# RSpec/RedundantRequireRailsHelper:
# Enabled: true
@glaucocustodio
glaucocustodio / job_debouncer.rb
Last active September 15, 2023 20:33
ActiveJob debouncer
# app/jobs/job_debouncer.rb
module JobDebouncer
extend ActiveSupport::Concern
class_methods do
def perform_later_once(*args, wait_time: 15.seconds)
job_key = "job_debouncer_#{self}_#{args}"
return if Rails.cache.exist?(job_key)
@glaucocustodio
glaucocustodio / auto_formatting_changed_ruby_files_with_standard.md
Last active August 8, 2021 19:29
Auto formatting changed Ruby files with Standard

Prerequisites

Create a git pre commit hook and give it permission to execute:

touch .git/hooks/pre-commit && chmod +x .git/hooks/pre-commit
@glaucocustodio
glaucocustodio / fixed_thread_pool_example.rb
Last active March 29, 2022 09:28
FixedThreadPool / Concurrent::Future usage example (concurrent-ruby gem)
# For more: https://github.com/ruby-concurrency/concurrent-ruby
num_threads = Concurrent.processor_count # or whatever you prefer like 4
thread_pool = Concurrent::FixedThreadPool.new(num_threads)
products = Product.all
executors = products.map { |product|
Concurrent::Future.execute({executor: thread_pool}) do
p "processing #{product.id}"
end
@glaucocustodio
glaucocustodio / normalization.rb
Last active June 11, 2021 16:57
Implements 3 types of normalization in ruby
class Array
# Few types of normalizations
# https://developers.google.com/machine-learning/data-prep/transform/normalization
def normalize
return if self.empty?
x_min, x_max = self.minmax
dx = (x_max-x_min).to_f
@glaucocustodio
glaucocustodio / client.rb
Last active December 29, 2020 17:20
Fire and forget http request with em-http-request ruby gem
# You just need to set inactivity_timeout = 0.1 (or any other low number except zero).
# It will trigger the request and wait only 0.1 second for the response. You don't need to define the callbacks as well.
# Example code below:
require 'bundler/inline'
gemfile do
source 'https://rubygems.org'
gem "em-http-request"
end
@glaucocustodio
glaucocustodio / br_money_type.rb
Last active July 31, 2024 12:05
brazilian currency formating (Ruby on Rails - attributes api)
# app/types/br_money_type.rb
class BrMoneyType < ActiveRecord::Type::Decimal
def cast(value)
value.is_a?(String) ? value.clean_money : value
end
def deserialize(value)
value ? value.to_f : value
end
end
@glaucocustodio
glaucocustodio / hash_based.rb
Last active April 20, 2018 18:01
Surrealist gem extension
class HashBased
include Surrealist
extend Schema
attr_reader :hash
def initialize(hash = {})
@hash = hash.deep_symbolize_keys
end
@glaucocustodio
glaucocustodio / cnpj_validator.swift
Last active February 4, 2016 17:19
Swift (1.2) function to validate CNPJ
// Returns true if the given cnpj is valid
func checkIfCNPJIsValid(cnpj: String) -> Bool {
if(cnpj.isEmpty) {
return true
}
// validates format, allowed ones: 38.041.242/0001-04, 38041242000104
var formatRegex = NSRegularExpression(pattern: "^[0-9\\.\\-\\/]*[0-9]$", options: NSRegularExpressionOptions.CaseInsensitive, error: nil)