Skip to content

Instantly share code, notes, and snippets.

View rondy's full-sized avatar

Rondy Sousa rondy

  • Plataformatec
  • São Paulo, SP
View GitHub Profile
@rondy
rondy / README.txt
Created April 14, 2012 14:39
Rails Assert pipeline changes for controller-specific assets
By default, Rails 3.2 loads everything in app/javascripts and everything in app/stylesheets on
every page, despite controller-specific file naming. If you want to load controller-specific
files only on views from their respective controllers, you need to change the manifests and the
layout. The basic idea is to NOT require the entire trees, but only specific subfolders, in the
manifests, and then load the controller-specific files separately in the layout.
Any file you DO want loaded on every page should be placed in app/assets/javascripts/general or
app/assets/stylesheets/general.
For this to work in production, you also need to ensure that the individual files are precompiled by modifying your production.rb file, listing all of the controller-specific files.
@rondy
rondy / gist:2256526
Created March 30, 2012 22:32
Prompt branch name to deploy on Capistrano (OOP way)
namespace :deploy do
task :set_branch do
set :branch, prompt_branch_name
end
before "deploy:update" , "deploy:set_branch"
end
def prompt_branch_name
BranchedDeploy.new.prompt
end
Article.all(
:select => "articles.id, articles.title, slugs.name",
:joins => "INNER JOIN slugs
ON slugs.sluggable_type = 'Article' AND
slugs.sluggable_id = articles.id AND
slugs.id = (SELECT id
FROM slugs
WHERE slugs.sluggable_type = 'Article' AND
slugs.sluggable_id = articles.id
ORDER BY slugs.created_at DESC
@rondy
rondy / paginator.rb
Created October 26, 2011 21:08
Paginator for Enumerable
class Paginator
DEFAULT_PAGE = 1
DEFAULT_PER_PAGE = 5
attr_reader :page
attr_reader :per_page
def paginate(collection, options={})
setup(options)
require "active_support/inflector"
module Modularizable
def modularize(target, params={})
ancestors = params[:in] || []
ancestors << target
ancestors.collect { |item| item.to_s.camelize }.join("::").constantize
end
module WhereOr
def where_or(*scopes)
conditions = scopes.inject(self) { |scoped, scope| scoped.send(scope) }
conditions = conditions.where_values.map { |where_value| where_value.respond_to?(:to_sql) ? where_value.to_sql : where_value }
conditions = conditions.join(" OR ")
where(conditions)
end
ActiveRecord::Base.send :extend, self
module HasStatuses
def has_statuses(*statuses)
self.const_set "Statuses", Module.new
statuses.each { |status| self::Statuses.const_set status.to_s.upcase, status }
self.const_set "ALL_STATUSES", self::Statuses.constants.collect { |constant| self::Statuses.const_get(constant) }
end
Object.send :extend, self
module ActsAsClassMethod
unless respond_to? :metaclass
define_method :metaclass do
class << self; self; end
end
end
def acts_as_class_method(*methods)
methods.each do |method|
@rondy
rondy / 1_books_controller.rb
Created October 18, 2011 01:47
Scoped filters
class BooksController < ApplicationController
def index
# params = { filters: { genre: "Westerns", sold_out: 1 } }
@books = Book.filtered(params[:filters])
end
end
@rondy
rondy / gist:1287061
Created October 14, 2011 13:16
Dynamic scopes injection
module BookScopes
def self.extended(base)
base.instance_exec &scope_definitions
end
def self.included(base)
base.class_exec &scope_definitions
end