Skip to content

Instantly share code, notes, and snippets.

View rbmrclo's full-sized avatar
Coffee 👨‍💻Code 🍸Cocktails

Robbie Marcelo rbmrclo

Coffee 👨‍💻Code 🍸Cocktails
View GitHub Profile
@rbmrclo
rbmrclo / minify.rb
Created December 9, 2013 08:52
Minify javascript using uglifier
require 'uglifier'
File.open("outfile.min.js", "w") do |file|
file.write Uglifier.compile(File.read("infile.js"))
end
# Or with a one liner from the Terminal
ruby -e "require 'uglifier'; puts Uglifier.compile(File.read('infile.js'))" > outfile.min.js
@rbmrclo
rbmrclo / age.rb
Last active January 2, 2016 11:09
Calculate age by birthday - compatible with leap year.
module Age
class << self
def today
Time.now.utc.to_date
end
# Formats the date as mm/dd/yyyy
def formatted_bday(bday)
@rbmrclo
rbmrclo / routes.rb
Last active March 29, 2018 14:34
Rails Best Practices: Routing Concerns in Rails 4
# Routing Concerns is an attempt to DRY up your config/routes.rb.
# The basic idea is to define common sub-resources (like comments)
# as concerns and include them in other resources/routes.
# Here’s the obvious example:
concern :commentable do
resources :comments
end
concern :remarkable do
@rbmrclo
rbmrclo / slugable.rb
Last active August 29, 2015 13:56
An simple way to find an object by slug
module Slugable
module ClassMethods
def find_by_slug(param)
if to_return = where("lower(name) LIKE ?", "#{patternify(param)}")
to_return.first
else
nil
end
end
@rbmrclo
rbmrclo / gist:9888023
Created March 31, 2014 08:41
Ignore concerns for rails_admin
# config/rails_admin.rb
config.excluded_models = Dir.glob(Rails.root.join('app/models/concerns/**.rb')).map {|p| 'Concerns::' + File.basename(p, '.rb').camelize }
require 'resque'
require 'resque_scheduler'
require 'resque/server'
require 'resque_scheduler/server'
schedules = YAML.load_file(Rails.root.join('config', 'schedules.yml'))
$redis = Resque.redis = Redis.current = Redis.new( url: ENV['REDIS_URI'] )
Resque.schedule = schedules

Status

Resque.info
Resque.queues
Resque.redis
Resque.size(queue_name)

# check out what's coming next in the queue
#    Resque.peek(archive_queue)
@rbmrclo
rbmrclo / email_validator.rb
Created May 22, 2014 05:57
Email validatior
class EmailValidator < ActiveModel::EachValidator
def validate_each(record, attribute, value)
unless value =~ /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i
record.errors[attribute] << (options[:message] || 'is not an email')
end
end
end
@rbmrclo
rbmrclo / gist:e4df82f1a8f04b11a325
Last active August 29, 2015 14:18
SHA1Generator
require 'digest/sha1'
#
# A wrapper for generating SHA1 hash value
# Simply done by concatenating all values using the colon symbol for delimiter.
# This algorithm is mostly used by payment gateways.
#
# Usage:
#
# SHA1Generator.digest('foo', 'bar', 'fizz', 'buzz')
# => "e723e86a6000fc8462142eb4821672de107535c1" # 40 chars
@rbmrclo
rbmrclo / datetime_cheatsheet.md
Last active May 4, 2017 14:52
DateTime Cheatsheet

DOs

2.hours.ago # => Thu, 27 Aug 2015 14:39:36 AFT +04:30
1.day.from_now # => Fri, 28 Aug 2015 16:39:36 AFT +04:30
Time.zone.parse("2015-08-27T12:09:36Z") # => Thu, 27 Aug 2015 16:39:36 AFT +04:30
Time.current # => Thu, 27 Aug 2015 16:39:36 AFT +04:30
Time.current.utc.iso8601 # When suppliyng an API ("2015-08-27T12:09:36Z")
Time.strptime("2015-08-27T12:09:36Z", "%Y-%m-%dT%H:%M:%S%z").in_time_zone # If you can't use Time.zone.parse (Thu, 27 Aug 2015 16:39:36 AFT +04:30)
Date.current # If you really can't have a Time or DateTime for some reason (Thu, 27 Aug 2015)