Consul 0.9 lets you optimize records checks

Record-level permission checks can be optimized by replacing scope lookups with a direct predicate, avoiding database ID scans for large collections.

How to set up SMTP email delivery with a Gmail account

Rails applications can send mail through Gmail’s SMTP server with smtp_settings; Google app passwords enable delivery when two-factor authentication is enabled.

Cucumber may complain about cucumber.yml being invalid when it is valid

Cucumber can report cucumber.yml as invalid even when it parses correctly; an invalid rerun file like tmp/rerun.txt may trigger the error.

Ruby: A short summary of available hooks in Cucumber

Cucumber Ruby offers scenario-level, step-level, and global lifecycle hooks, plus tag filtering and World modules for reusable helper methods.

Inspecting the page content in Capybara

Debugging Capybara page output often requires inspecting visible text, raw HTML, or parsing page.body with Nokogiri when matcher failures are hard to interpret.

BrowserStack has browser plugins for local testing

Private and internal servers can be tested through the BrowserStack cloud without exposing them publicly, even behind firewalls, proxies, or Active Directory.

How to fix: Bundler 1.13 breaks parallel_tests

Upgrading to Bundler 1.13.x can break parallel_tests with a LoadError when loading Gherkin formatters. Setting bundle config --local disable_exec_load true restores the old behavior.

RSpec: Increase readability with super_diff

Hard-to-read RSpec diffs for nested hashes and collections can be improved with super_diff, which formats expectation mismatches more clearly.

Output of ParallelTests::Cucumber::FailuresLogger was fixed in 4.9.1

ParallelTests::Cucumber::FailuresLogger now emits valid rerun arguments in version 4.9.1, so patched custom loggers can be removed and the default logger restored.

Fix a spec that only runs when called directly

RSpec examples that run only when invoked directly often need a proper _spec.rb filename; a plain .rb file may be skipped in the full suite.

SSHKit 1.9.0 failure for Capistrano deploy

Capistrano deploys can crash in sshkit-1.9.0 with NoMethodError in pretty.rb; upgrading SSHKit to 1.21.0 resolves the failure.

Cucumber features as documentation

Natural-language Cucumber features and scenarios can capture intent and context beyond one-line labels, helping future developers understand application behavior quickly.

Quick HTML testing with RubyMine

Quickly preview embed code or other HTML in RubyMine without creating a project file by using an HTML scratch file and opening it in a browser.

How to install packages from newer Ubuntu releases

Install newer Ubuntu release packages on an LTS system when new hardware or software needs them, while minimizing dependency conflicts and upgrade risk.

RCov: The difference between "code coverage" and "total coverage"

Code coverage can look misleading when blank lines and comments count against the ratio; RCov total coverage ignores them for a more useful metric.

Understanding the Selenium error "Modal Dialog Present" (aka Selenium::WebDriver::Error::UnhandledAlertError)

Intermittent Cucumber failures can come from a leftover browser alert blocking Selenium commands after an unfinished AJAX request.

Minify Font Awesome fonts with webpack

Reduce Font Awesome icon font size by subsetting unused glyphs with fontmin-webpack, keeping low CPU usage and no JavaScript while avoiding oversized font downloads.

Heads up: RSpec's diffs may not tell the truth

RSpec diffs can mislead when matchers print like failures or when Time.now values differ only by milliseconds.

Ruby object equality

Ruby equality methods differ by purpose: == for value comparison, eql? and hash for hash keys, === for case matching, equal? for identity.

How to: Validate dynamic attributes / JSON in ActiveRecord

JSONB columns can hold dynamic attributes in ActiveRecord, but validation and strict defaults are easy to lose. JSON Schema keeps evolving hashes predictable.

Show the character set and the collation of your MySQL tables

MySQL table collation and default character set are available through SHOW TABLE STATUS and SHOW CREATE TABLE; individual columns can still use different encodings.

Rails: How to write custom email interceptors

Global mail interception in Rails can prefix subjects by environment and redirect staging mail to a fallback address unless recipients are allowlisted.

Check that a Range covers an element in both Ruby 1.9 and 1.8.7

Range#include? becomes slow for non-numeric ranges in Ruby 1.9, while Range#cover? is unavailable in 1.8.7. A compatibility method keeps one check working across both versions.

Embed Google Analytics code for some environments only

Google Analytics should run only in production to avoid polluting visitor statistics. Rails environment checks can gate the tracking snippet.