Skip to content

Instantly share code, notes, and snippets.

class SalesDashboardYTDByCustomer < ActiveRecord::Base
include Tablelessable
column :user_id
column :customer_id
column :customer_name
column :actual_sales
column :planned_sales
column :sales_difference
column :actual_profit
AllCops:
Exclude:
- 'spec/dummy/**/*'
- 'tmp/**/*'
Lint/HandleExceptions:
Exclude:
- 'spec/support/database.rb'
Style/TrailingCommaInArguments:
Enabled: false
Metrics/BlockLength:
@wycleffsean
wycleffsean / gist:cc12c4dbc872bb77fea4a00c33d72fa8
Last active May 28, 2019 21:56 — forked from unnitallman/gist:944011
sqlite with activerecord outside rails
require 'active_record'
ActiveRecord::Base.logger = Logger.new(STDERR)
ActiveRecord::Base.colorize_logging = false
ActiveRecord::Base.establish_connection(
:adapter => "sqlite3",
:dbfile => ":memory:"
)
class Peach
private_class_method :new
def self.enum_for(*args)
new(*args)
end
def initialize(list, pool_size = 5)
@queue = list.inject(Queue.new, :<<)
@pool_size = pool_size
@wycleffsean
wycleffsean / activerecord_graphviz.rb
Created August 23, 2019 16:49
Generate Entity Relationship Model for ActiveRecord with GraphViz
namespace :graph do
desc 'build graph of AR models'
task models: :environment do
require 'graphviz'
Rails.application.eager_load!
g = GraphViz.new('Models', path: Rails.root.join('tmp').to_s)
nodes = ObjectSpace.each_object(Class)
@wycleffsean
wycleffsean / arel_activerecord_extensions.rb
Created September 24, 2019 07:02
Arel ActiveRecord extensions
module DatabaseOperations
module Function
module_function
def coalesce(*args)
Arel::Nodes::NamedFunction.new('COALESCE', args)
end
end
module Atomic
def atomic_increment(name, count = 1)
@wycleffsean
wycleffsean / docker-compose.yml
Created December 23, 2019 23:49
Faster test runs in CircleCI
services:
# run db on tmpfs to speed up test runs
mysql:
image: mysql:5.7
tmpfs:
- /var/lib/mysql
@wycleffsean
wycleffsean / advisory_lock.rb
Created January 9, 2020 22:55
ActiveRecord Advisory Lock
module AdvisoryLock
class LockUnavailableError < StandardError; end
def with_advisory_lock(name = nil, timeout, &block)
raise LocalJumpError, 'no block given (yield)' unless block_given?
name ||= lock_name
args = {
name: ActiveRecord::Base.sanitize(name),
timeout: ActiveRecord::Base.sanitize(timeout),
}
@wycleffsean
wycleffsean / tcp_proxy.sh
Created February 12, 2020 23:01
TCP Proxy
#!/bin/sh -e
if [ $# != 3 ]
then
echo "usage: $0 <src-port> <dst-host> <dst-port>"
exit 0
fi
TMP=`mktemp -d`
BACK=$TMP/pipe.back
@wycleffsean
wycleffsean / deferred_connection_handling.rb
Last active July 15, 2020 18:53
Defer class code until a db connection is established
# Enable class level code to lazily access database information.
# Often ActiveRecord class definitions will rely upon the table schema
# information. For example the following snippets would acquire a database
# connection:
# ignore_columns :foo
# # or
# attribute_names.each ...
# This results in rails accessing the database when booting, resulting in
# ridiculous behavior like this:
# bin/rake db:setup