Skip to content

Instantly share code, notes, and snippets.

@TylerRick
TylerRick / gist:2510696
Created April 27, 2012 16:45
composite_primary_keys: association.build for has_many should populate newly built child record with owner's PK values
The FK attributes in the new record used to be set by set_belongs_to_association_for
(which the composite_primary_keys was overriding to work with CPK in its AR 3.0 series),
until this change in ActiveRecord:
commit e8ada11aac28f0850f0e485acacf34e7eb81aa19
Author: Jon Leighton <j@jonathanleighton.com>
Date: Fri Dec 24 00:29:04 2010 +0000
Associations: DRY up the code which is generating conditions, and make it all use arel rather than SQL strings
> rake cucumber
WARNING: Possible conflict with Rake extension: String#ext already exists
WARNING: Possible conflict with Rake extension: String#pathmap already exists
/home/tyler/.rvm/rubies/ruby-1.9.3-p125/bin/ruby -S bundle exec cucumber --profile default
Using the default profile...
Feature: Cucumber step definitions
@javascript
Scenario: When I do a capybara search that triggers the nested synchronize bug # features/reproduce_bug.feature:3
0 retries=40 e=#<Capybara::ElementNotFound: Unable to find css ".some_div_that_doesnt_exist">
> rake cucumber
WARNING: Possible conflict with Rake extension: String#ext already exists
WARNING: Possible conflict with Rake extension: String#pathmap already exists
/home/tyler/.rvm/rubies/ruby-1.9.3-p125/bin/ruby -S bundle exec cucumber --profile default
Using the default profile...
Feature: Cucumber step definitions
@javascript
Scenario: When I do a capybara search that triggers the nested synchronize bug # features/reproduce_bug.feature:3
====================================================================================================
These are the 3 places that together caused the nested calls to synchronize:
/home/tyler/.rvm/gems/ruby-1.9.3-p125/bundler/gems/capybara-555008c74751/lib/capybara/node/finders.rb:29:in `find'
def find(*args)
query = query(*args)
query.find = true
synchronize do
results = resolve(query)
query.verify!(results)
results.first
> bundle exec rspec --backtrace spec/rspec/core/subject_spec.rb
Run options:
include {:focus=>true}
exclude {:ruby=>#<Proc:./spec/spec_helper.rb:84>}
All examples were filtered out; ignoring {:focus=>true}
...FF.........................
Failures:
@TylerRick
TylerRick / nested_attributes_setter_can_be_overridden.rb
Created August 17, 2012 01:05
Monkey patch for Rails 3.2 that allows Nested attribute setters to be overridden
module ActiveRecord
module NestedAttributes #:nodoc:
ClassMethods.class_eval do
def accepts_nested_attributes_for(*attr_names)
options = { :allow_destroy => false, :update_only => false }
options.update(attr_names.extract_options!)
options.assert_valid_keys(:allow_destroy, :reject_if, :limit, :update_only)
options[:reject_if] = REJECT_ALL_BLANK_PROC if options[:reject_if] == :all_blank
attr_names.each do |association_name|
@TylerRick
TylerRick / enumerable_extensions.rb
Created January 15, 2013 02:43
ranges_of_contiguous
module Enumerable
# Returns an array of arrays, each inner array containing a cluster of contiguous elements from
# self.
#
# [-1, 0, 1, 3, 4, 7, 8].clusters_of_contiguous
# => [[-1, 0, 1], [3, 4], [7, 8]]
#
# Based off of Enumerable#cluster (from facets gem)
#
def clusters_of_contiguous
@TylerRick
TylerRick / open_txmt_link_in_vim.desktop
Last active December 13, 2015 18:29
For opening links from better_error and RailsPanel in vim on Ubuntu
@TylerRick
TylerRick / form_helper_extensions.rb
Last active December 18, 2015 03:39
date_field helper for HTML5 type="date" inputs! And a version of value_before_type_cast that returns a string in ISO-8601 format as the value for Dates, as specified by http://www.whatwg.org/specs/web-apps/current-work/multipage/states-of-the-type-attribute.html#date-state-(type=date)
# Extensions to gems/actionpack-3.2.13/lib/action_view/helpers/form_helper.rb
=begin
A version of InstanceTag.value_before_type_cast that returns a string in ISO-8601 format for Date columns.
The original behavior of value_before_type_cast was to return the Date object itself. But the default to_s on a Date returns a string like "June 5, 2013".
However, HTML5 date input fields expect their values to be in ISO-8601 format ("2013-06-05") and won't recognize the value if it is in some other format.
This makes it so you can simply do this:
@TylerRick
TylerRick / reduce_precision_of_datetime_columns.rb
Last active December 20, 2015 10:31
Change all datetime columns to have a precision of 0, to match the default precision of these columns in MySQL. This is useful if you migrate a database from MySQL to PostgreSQL and don't need the extra microsecond precision (precision: 6) that is the default in PostgreSQL (see http://www.postgresql.org/docs/9.2/static/datatype-datetime.html).
# Change all datetime columns to have a precision of 0, to match the default precision of these
# columns in MySQL.
#
# This is useful if you migrate a database from MySQL to PostgreSQL and don't need the extra
# microsecond precision (precision: 6) that is the default in PostgreSQL
# (see http://www.postgresql.org/docs/9.2/static/datatype-datetime.html).
#
# Before:
# > some_record.created_at.strftime('%Y-%m-%d %H:%M:%S.%N')
# => "2013-07-25 11:49:33.270032000"