Issues with has_select?
The handy method has_select?(field, :selected => text)
does not behave as expected with Cucumber 0.10.2, Capybara 0.4.1.2 and Selenium 0.2.2. It may not recognize a select field if the selected option
with the text
has no value. If you don't have the possibility to upgrade these Gems, probably the best way to go is to distinguish the current Capybara driver:
Then /^"([^"]*)" should be selected for "([^"]*)"(?: within "([^\"]*)")?$/ do |value, field, selector|
with_scope(selector) do
# currently needed due to different behav...
Convert Virtualbox .ova Image to .ovf
The .ova file format is a tar file with a .ovf file inside.
tar xvf virtualboximage.ova
Nicer alternatives to def_delegator or def_delegators
Delegating methods to other objects is often helpful but the syntax of both def_delegators
and def_delegator
is a complete mess that makes your code hard to read.
Consider these classes:
class Topic < ActiveRecord::Base
def title
"A title"
end
def category
"Topic category"
end
end
class Post < ActiveRecord::Base
belongs_to :topic
def_delegato...
Moment.js - A lightweight javascript date library
A lightweight javascript date library for parsing, manipulating, and formatting dates.
Run your own code before specific RSpec examples
You probably know about the possibility to tag scenarios in Cucumber to run your own piece of code before the actual scenario is run which looks like that:
@foo
Scenario: Do something
...
and you place the following snippet into support/env.rb
:
Before('@foo') do
puts "This is run every time a @foo tagged scenario is hit"
end
You can tag RSpec examples like this:
it 'does something', :foo => true do
...
end
What you need is the following within the RSpec.configure do |config|
block wit...
Fix YAML::Syck::DefaultKey:0x1083b59f8
When your gems complain about invalid gemspecs and illformed requirements, it is most probably an error resulting from the transition from Syck
to psych
. To fix this:
- go to your gemspec directory (e.g.
/Library/Ruby/Gems/1.8/specifications/
) - change
#<Syck::DefaultKey:0x00000100e779e8>
to=
(equals sign) in each file that's complaining
CSS: Change text selection color
You can change the color for text selection via CSS, using the ::selection
and ::-moz-selection
pseudo-elements.
Adding this to your Sass will make all text selections use a red background:
::selection
background-color: #f00
::-moz-selection
background-color: #f00
Unfortunately, those can't be combined into "::selection, ::-moz-selection
". Doing so will have no effect.
RestClient sends XML Accept header by default
REST Client is a nice, simple HTTP client library for Ruby.
When you do a simple GET request like that:
RestClient.get 'http://example.com/'
it will result in this request beeing sent to www.example.com:
GET / HTTP/1.1
Accept: */*; q=0.5, application/xml
Accept-Encoding: gzip, deflate
Host: www.example.com
The application/xml
accept header might lead to unexpected results on your server. You can force REST Client to ask the server for default text/html
that way:
RestC...
Auto-generate Cucumber navigation paths
Don't you just hate to write Cucumber path helpers to be able to say this?
When I go to the user form for "foo@bar.de" # goes to edit_user_path(User.find_by_anything!('foo@bar.de'))
When I go to the form for the user "foo@bar.de" # goes to edit_user_path(User.find_by_anything!('foo@bar.de'))
When I go to the form for the user above" # goes to edit_user_path(User.last)
When I go to the project page for "World Domination" # goes to project_path(Project.find_by_anything!('World Domination')
...
High-level Javascript frameworks: Backbone vs. Ember vs. Knockout
This is a very general introduction to MV* Javascript frameworks. This card won't tell you anything new if you are already familiar with the products mentioned in the title.
As web applications move farther into the client, Javascript frameworks have sprung up that operate on a higher level of abstraction than DOM manipulation frameworks like jQuery and Prototype. Such high-level frameworks typically offer support for client-side view rendering, routing, data bindings, etc. This is useful, and when you write a moderately complex Javascript ...
Ruby: Indent a string
Copy the attached file to config/initializers/indent_string.rb
and you can say
"foo".indent(4) # " foo"
Note you will find many simpler implementations of this method on the Interweb. They probably won't do what you want in edge cases, fuck up trailing whitespace, etc. The implementation in this card has the following behavior:
describe '#indent' do
it 'should indent the string by the given number of spaces' do
"foo".indent(2).should == " foo"
end
it 'should indent multiple lines line by line' do
...
New cards feature: Cite other cards
We've made it easier to link other cards:
- You can now find a button Cite other card above the main text area
- Clicking this button lets you search for another card
- Clicking on a search result will paste a Markdown link into the text area
New cards feature: Github-style code blocks
You can now add code blocks without indentation, by using triple-backticks:
```
Code block goes here.
```
Make Capistrano use SSH Key Forwarding
When deploying code with Capistrano (depending on your configuration) at some point Capistrano tries to check out code from your repository. In order to do so, Capistrano connects to your repository server from the application server you're deploying to with SSH. For this connection you can use two SSH keys:
- the user's
~/.ssh/id_rsa
[default] - the very same key you used for connecting to the application server - forwarded automatically to the git repository.
If you prefer the second way, add this to deploy.rb:
ssh_options[:forwar...
Git: Retrieve a file from a different branch or commit
To access files from another branch or past commit without doing a complete checkout, you can either use
git show branch:file
git show commit:file
to display, or check out the file into your working directory with
git checkout branch -- file
git checkout commit -- file
Fix ActionController::Session::CookieStore::CookieOverflow
This error simply means you've overloaded a cookie. Hints for fixing:
Check if you're putting too much (e.g. @some_object.inspect
) into
- the
session
- the
flash
, as it is stored in the session
Use the "retry" keyword to process a piece of Ruby code again.
Imagine you have a piece of code that tries to send a request to a remote server. Now the server is temporarily not available and raises an exception. In order to re-send the request you could use the following snippet:
def remote_request
begin
response = RestClient.get my_request_url
rescue RestClient::ResourceNotFound => error
@retries ||= 0
if @retries < @max_retries
@retries += 1
retry
else
raise error
end
end
response
end
This sni...
Cucumber step to test that a tooltip text exists in the HTML
Tooltips that are delivered through HTML attributes are encoded. Decode entities before checking for their presence.
Capybara:
Then /^there should( not)? be a(n encoded)? tooltip "([^"]*)"$/ do |negate, encoded, tooltip|
tooltip = HTMLEntities.new.encode(tooltip) if encoded
Then "I should#{negate} see \"#{tooltip}\" in the HTML"
end
Note
This step uses the htmlentities gem described in another card.
Ma...
Look up a gem's version history
Sometimes it might be helpful to have a version history for a gem, e.g. when you want to see if there is a newer Rails 2 version of your currently used gem.
At first you should search your gem at RubyGems. Example: will_paginate version history.
The "Tags" tab at GitHub might be helpful as well.
Fixing Graticule's "distance" for edge cases
Ever seen this error when using Graticule?
Numerical argument out of domain - acos
Similarly to the to_sql
problem for some edge cases, Graticule::Distance::Spherical.distance
(and possibly those of Graticule's other distance computation classes) is subject to Float
rounding errors.
This can cause the above error, when the arc cosine of something slightly more than 1.0 is to be computed, e.g. for the (zero) distance b...
How to customize CKEditor dialogs
The article gives a very short tutorial how to customize tabs and fields of CKEditor's dialogs.
How to fix a corrupt git index
If your git index for some reason becomes invalid, no need to worry.
Your index is corrupt when you see this error running usual git commands like git pull
, git status
, etc.:
error: bad index file sha1 signature
fatal: index file corrupt
Though it sounds bad, your changes are still there. Fix it by first removing the index file, then resetting the branch:
rm .git/index
git reset
You should be all good now.
To be safe, make a backup of .git/index
before you delete it.
Mac OS X Lion (10.7.2) screws host resolution
As Justin Carmony points out, Mac OS Lion changed its behavior towards DNS and the usage of /etc/hosts (it quite disregards this file).
This has several ugly effects, including:
- no matter how many Apache Virtual Hosts you've set up, you will only get the first (that is, the implicit default), and only by typing
localhost
into your browser - the Passenger pref pane won't work any more (actually it does, but it has no effect)