Skip to content

Instantly share code, notes, and snippets.

@jnunemaker
jnunemaker / database.yml
Created November 12, 2009 14:59
mongo initializer to load config from database.yml, authenticate if needed and ensure indexes are created
development: &global_settings
database: textual_development
host: 127.0.0.1
port: 27017
test:
database: textual_test
<<: *global_settings
production:
@jnunemaker
jnunemaker / active_job_checkins.rb
Created September 28, 2023 14:31
Automatic honey badger check ins for active job. Just setup the check in with honey badger and configure an env var to the identifier they provide.
# Set HONEYBADGER_FOO_BAR_JOB=asdf where asdf is the check in value Honeybadger gives you.
class ApplicationJob < ActiveJob::Base
after_perform { |job| job.honeybadger_checkin }
# Check in with Honeybadger to let us know that the job was performed
# if there is an identifier configured for the job.
def honeybadger_checkin
identifier = honeybadger_checkin_identifier
return unless identifier.present?
@jnunemaker
jnunemaker / levenshtein.sql
Created September 11, 2023 13:02
Some example usage of levenshtein to calculate the difference between two strings.
-- https://www.postgresql.org/docs/current/fuzzystrmatch.html#id-1.11.7.26.7
-- Calculates the distance between two strings.
SELECT levenshtein('New York', 'New York'); -- 0
SELECT levenshtein('New York', 'New Jersey'); -- 5
SELECT levenshtein('New York', 'Dallas'); -- 8
-- find the opponent with the name closest to 'New York'
SELECT * FROM opponents WHERE team_id = 1
ORDER BY levenshtein(name, 'New York')
@jnunemaker
jnunemaker / partition_by_day.rb
Created December 2, 2021 19:42
Ruby class to partition by day using native declarative partitioning in postgres
# https://www.postgresql.org/docs/13/ddl-partitioning.html#DDL-PARTITIONING-DECLARATIVE
class PartitionByDay
class Row
include Virtus.model
attribute :name, String
attribute :expression, String
end
def self.all(table)
@jnunemaker
jnunemaker / initializer.rb
Created December 3, 2021 15:16
github-ds postgres version of GitHub::KV
module BoxOutSports
def self.kv
@kv ||= KeyValueJsonb.new(use_local_time: Rails.env.test?) {
ActiveRecord::Base.connection
}
end
end
@jnunemaker
jnunemaker / mongomapper $where examples
Created October 11, 2009 02:25 — forked from royw/mongomapper $where examples
mongo $where stuff and a bunch of db eval examples
require 'mongo_mapper'
require 'spec'
require 'log4r'
require 'versionomy'
# Logger used for logging MongoDB database commands
Log4r::Logger.new('TMP')
Log4r::Logger['TMP'].outputters = Log4r::StdoutOutputter.new(:console)
Log4r::Outputter[:console].formatter = Log4r::PatternFormatter.new(:pattern => "%m")
Log4r::Logger['TMP'].level = Log4r::DEBUG
diff --git a/Gemfile b/Gemfile
index e3a71e1..34ba75c 100644
--- a/Gemfile
+++ b/Gemfile
@@ -107,3 +107,4 @@ gem "pundit"
gem "rack-canonical-host"
gem "ruby-readability"
gem "rinku", require: "rails_rinku"
+gem "virtus"
diff --git a/app/controllers/articles_controller.rb b/app/controllers/articles_controller.rb
@jnunemaker
jnunemaker / github_sql_patches.rb
Last active January 7, 2022 15:15
Hack GitHub sql to work with postgres cast operator
# Shorcut because typing GitHub everywhere gets old
SQL = GitHub::SQL
module GitHub
class SQL
private
# Overwrite interpolate to be ok with postgres casting (::regclass, etc.).
def interpolate(sql, extras = nil)
sql.gsub(/(:?):([a-z][a-z0-9_]*)/) do |match|
@jnunemaker
jnunemaker / gist:4495290
Created January 9, 2013 18:00
Web And Mobile Revenue Models
@jnunemaker
jnunemaker / harmony.rb
Created November 10, 2009 01:20
simple app configuration
module Harmony
# Allows accessing config variables from harmony.yml like so:
# Harmony[:domain] => harmonyapp.com
def self.[](key)
unless @config
raw_config = File.read(RAILS_ROOT + "/config/harmony.yml")
@config = YAML.load(raw_config)[RAILS_ENV].symbolize_keys
end
@config[key]
end