Search_spinner Cross_grey Magnifier
help

Search syntax

  • Search for repeating cards with repeats:yes
  • Search for unfinished cards with unfinished:yes
  • Search for cards in a certain topic with topic:"name"
  • Search for phrases with "a phrase"
  • Exclude a word from search: -word
  • Exclude a phrase from search: -"a phrase"
  • Exclude a topic from search: -topic:"name"

Consul 0.4.0 released

Consul 0.4.0 comes with some new features.

Dependencies

  • Consul no longer requires assignable_values, it's optional for when you want to use the authorize_values_for macro.
  • Consul no longer uses ActiveSupport::Memoizable because that's deprecated in newer Railses. Consul now uses Memoizer for this.

Temporarily change the current power

When you set Power.current to a power in an RS…

Use the "paper_trail" gem to track versions of records

paper_trail is an excellent gem to track record versions and changes.

You almost never want to reimplement something like it yourself. If you need to log some extra information, you can add them on top.

It comes with a really good README file that holds lots of examples. I'll show you only some of its features here:

  • Setting up a model to track changes
    Just add has_paper_trail to it:
    class User < ActiveRecord::Base
    has_paper_trail
    end
  • Accessing a previous version
    Saying user.previous_version gi…

How to change will_paginate's "per_page" in Cucumber features

The will_paginate gem will show a default of 30 records per page.\
If you want to test pagination in a Cucumber feature, you don't want to create 31 records just for that.

Instead, you probably want to modify the number if items shown, by saying something like this:

Given we paginate after 2 users

Using the following step definition, you now can! :)

Given /^we paginate after (\d+) (.*)$/ do |number, model_name|
  model = model_name.singularize.gsub(/[^A-z]+/, '_').camelize.constan...

When Date.today and Date.tomorrow return the same day...

… you probably have a time zone issue.

When you get

Timecop.travel(Date.parse("2011-11-11 00:00") do
  Time.current   => Thu, 10 Nov 2011 23:00:01 UTC +00:00
  Time.now       => Fri Nov 11 00:00:02 +0100 2011
  Date.today     => Fri, 11 Nov 2011
  Date.tomorrow  => Fri, 11 Nov 2011
end

you probably haven't defined a zime zone yet.

So might fix this by adding the following lines to your application.rb:

class Application < Rails::Application
  config.time_zone = 'Berlin' # or whatever your time zone
end   ...

MySQL operator precedence

Take care in queries where multiple AND or OR operators are used. In doubt, always use braces to enforce precedence.

External content

PhoneGap Build

Write your app using HTML, CSS or JavaScript, upload it to the PhoneGap Build service and get back app-store ready apps for Apple iOS, Google Android, Windows Phone 7, Palm, Symbian, BlackBerry and more.

By compiling in the cloud with PhoneGap Build, you get all the benefits of cross-platform development but can still build apps just the way you like.

Market share of web browsers

The usage shares of your site highly depends on your target audience. E.g. no Internet Explorer has ever seen hollyapp.com, but that's because of its tech-savvy audience. Distribution will also differ by other factors, such as region. See this Wikipedia article for details.

If you don't know your audience, you can use the stats of tracking tools, which see a lot of traffic go by a wide variety of sites. Some of these are:

  • [W3Counter](http://www.w3counter…

Updated: Remove quotes from Sass mixin arguments

When we looked at this card together a year ago, we were no longer sure if unquote is actually useful. I now found a good example for when you need unquote, and rewrote the card accordingly.

Maximum size of a MySQL query

Unless you changed the default, this will be 16 MB:

mysql> SHOW VARIABLES WHERE Variable_name="max_allowed_packet";
+--------------------+----------+
| Variable_name      | Value    |
+--------------------+----------+
| max_allowed_packet | 16777216 |
+--------------------+----------+
External content

Asset pipeline for Rails 2

The asset pipeline from Rails 3.1 packported to 2.3. By Michael Grosser from parallel_tests fame.

Drag'n'drop in trees: I went to town

For my Gem Session project Holly I ran the Ironman of drag'n'drop implementations:

  • Dragging in nested lists
  • User-definable order of items
  • Complicated item elements with super-custom CSS and other Javascript functionality
  • Items that can be both leaves and containers of other items
  • has_ancestry on the server side

Things I learned:

  • Be ready to write a lot of CSS. You need to indicate what is being dragged, where it will be dropped, if it is dropped above, below o…

Check if an object is an ActiveRecord scope

Don't say is_a?(ActiveRecord::NamedScope::Scope) because that is no longer true in Rails 3 and also doesn't match unscoped ActiveRecord classes themselves (which we consider scopes for all practical purposes).

A good way is to say this instead:

object.respond_to?(:scoped)

Updated: assignable_values can now humanize any given value, even if it's not the current attribute

You've always been able to access the humanized version for the current value like this:

song = Song.new(:genre => 'pop')
song.humanized_genre # => 'Pop music'

You can now also retrieve the humanized version of any given value by passing it as an argument:

song.humanized_genre('rock') # => 'Rock music'
External content

Using the Rake Build Language

Rake (like make) allows you to add dependencies to a task after you've
initially declared it. Indeed it allows you to continue to talk
about a task in multiple places. This way I can decide to add
dependencies close to the pre-requisite task

When connecting to a second database, take care not to overwrite existing connections

Sometimes, you may want to open up a second database connection, to a read slave or another database. When doing that, you must make sure you don't overwrite an existing connection.

The problem

While this may look good, it will actually cause all kinds of trouble:

def with_other_database
  ActiveRecord::Base.establish_connection(slave_settings)
  yield
ensure
  ActiveRecord::Base.establish_connection(master_settings)
end

Putting aside that you are setting the general connection here (not generally a …

Request limit of graph.facebook.com

The facebook API allows up to 600 requests per 600 seconds.
If you poll more often, you'll get no or malformed answers.

Nice way to set data attributes when creating elements with Rails helpers

You can say this in helpers like link_to and content_tag:

= link_to 'Label', root_url, :data => { :foo => 'bar', :bam => 'baz' }

This will produce:

<a href="/" data-foo="bar" data-bam="baz">Label</a>

Only works in Rails 3. In Rails 2 you do

= link_to 'Label', root_url, 'data-foo' => 'bar', 'data-bam' => 'baz' }
3064 cards