Skip to content

Instantly share code, notes, and snippets.

View jphenow's full-sized avatar
💻
👋🏻 :octocat:

Jon Phenow jphenow

💻
👋🏻 :octocat:
View GitHub Profile
@jphenow
jphenow / active_record_mongoid_query_differences.rb
Created December 23, 2013 17:00
ActiveRecord/Mongoid query combing differences
##################
# Mongoid #
##################
League.org_id(1)
#=> #<Mongoid::Criteria
# selector: {:org=>{"$in"=>[1]}},
# options: {},
# class: League,
# embedded: false>
@jphenow
jphenow / venue_scopes.rb
Created November 20, 2013 19:31
Scope confusion
# Tried on Rails 3.2.{11,12} so far
class Venue < ActiveRecord::Base
scope :org_id, ->(ids) { where org_id: Array(ids) }
end
Venue.org_id(1).org_id(2)
# => Venue Load (0.3ms) SELECT `venues`.* FROM `venues` WHERE `venues`.`org_id` IN (2)
Venue.where(org_id: [1]).where(org_id: [2])
# => Venue Load (0.5ms) SELECT `venues`.* FROM `venues` WHERE `venues`.`org_id` IN (1) AND `venues`.`org_id` IN (2)
@jphenow
jphenow / rtest.zsh
Last active December 28, 2015 21:49
Run a single Rails (or Ruby) unit test, with some globby goodness
#!/usr/bin/env zsh
test_loc="./test/**/$1_test.rb"
eval "ruby -I'lib:test' $test_loc"
# Now you can:
# rtest user
# rtest user_controller
@jphenow
jphenow / hash_default.rb
Created November 15, 2013 22:18
WTF default value hash
2.0.0p247 :021 > h = Hash.new([])
# => {}
2.0.0p247 :022 > h[:test]
# => []
2.0.0p247 :023 > h[:test] << "h"
# => ["h"]
2.0.0p247 :024 > h
# => {}
2.0.0p247 :025 > h.values
# => []
@jphenow
jphenow / deep-fetch.rb
Created October 15, 2013 19:30
Fancy deep fetching
module ApplicationHelper
def fetch_param(*key_names)
result = key_names.reduce(params) { |fetchable, param|
fetchable.fetch(param, {})
}
result.is_a?(Hash) && result.empty? ? nil : result
end
end
@jphenow
jphenow / data-size.rb
Created September 9, 2013 14:33
For collecting size of your DB in Megabytes
User.find_by_sql(
%q{
SELECT table_schema 'table', sum( data_length + index_length ) / 1024 / 1024 'size'
FROM information_schema.TABLES GROUP BY table_schema;
}
).each { |u| puts "#{u.table}: #{u.size} MB" }
# This option has the most clarity, but I generally hate local variables in a
# method, preferring to use tap.
def calculated_foo
available_foos = []
available_foos << bar
available_foos << baz.qux if baz
available_foos.max
end
# It's a little less clear, unless you know what tap is, and `end.max` is
@jphenow
jphenow / heredoc.rb
Last active December 20, 2015 10:19
Possible Heredocs
execute(<<-STR)
SELECT *
FROM *
STR
execute(<<-STR.gsub(/*/, ";DROP *;"), now: true)
SELECT *
FROM *
STR
class Persona < Foundation::ServiceResource::Base
route "/users/:user_id/personas", :by_user
end
id = 1
Persona.by_user id
Persona.by_user user_id: id
@jphenow
jphenow / rails_config_file.rb
Created July 3, 2013 21:15
Rails config file Object I like to use
class ConfigFile
attr_reader :config_name
attr_reader :context
def self.read_with_env(*args)
new(*args).read_with_env
end
def self.read(*args)
new(*args).read