Jasmine: Testing if two arrays contain the same elements

Array comparisons in Jasmine need different matchers for exact order, unordered equality, or subset checks when testing collections.

Video transcoding: Web and native playback overview (April 2020)

Browser video playback depends on container and codec support; MP4 with H.264 and AAC works broadly, while WebM can serve modern clients and downloads need native playback support.

Five years of "Today I Learned" from Josh Branchaud

A curated set of 900+ personal programming tips spans Ruby, Rails, Git, Unix, Chrome, and JavaScript, with many small shortcuts for daily development work.

Use CSS "text-overflow" to truncate long texts

Single-line text can overflow its container in Rails views; text-overflow: ellipsis and white-space: nowrap produce cleaner truncation in supported browsers.

Custom RSpec matcher for allowed values (or assignable_values)

Custom RSpec matcher for checking allowed association values, useful when validating assignable_values on model associations.

RSpec's hash_including matcher does not support nesting

hash_including cannot match nested hashes reliably; use nested matchers such as include or another hash_including for partial hash checks.

Cucumber: Clear localStorage after each scenario

Client-side storage can persist between Cucumber scenarios even when cookies are cleared, causing test leakage in Selenium-driven browser runs.

Geordi 1.3 released

Geordi 1.3 adds Cucumber support with @solo handling, Capistrano 2/3 deployment fixes, and updated Firefox setup for selenium testing.

Why preloading associations "randomly" uses joined tables or multiple queries

ActiveRecord :include can switch between separate queries and SQL joins, causing ambiguous ORDER BY clauses and hidden production bugs when associations are preloaded.

Debug SAML in development using a local keycloak server

Local Keycloak can emulate a SAML identity provider for development, letting SSO flows and attribute mapping be tested without waiting on an external IDP.

Sass: How to get rid of deprecation warnings in dependencies

Sass 1.35.0 can suppress dependency deprecation warnings with quietDeps and limit warnings in your own code with silenceDeprecations.

Imperative vs Declarative Scenarios in User Stories

Imperative and declarative user-story scenarios suit different situations; declarative phrasing offers advantages in RSpec Story Runner and Cucumber testing.

What we know about PDFKit

PDF generation from Rails uses a WebKit-based wrapper around wkhtmltopdf, with print styling, headers, footers, and binary-version pitfalls.

Run a POP3 server on a directory of mail files with popthis

Serve a directory of generated mail files as a local POP3 mailbox for testing clients and inaction_mailer output.

Rspec 3: what to do when `describe` is undefined

RSpec 3 can raise undefined method 'describe' for main:Object when DSL methods are not exposed globally; disable_monkey_patching! turns them off, and expose_dsl_globally = true restores them.

Using before(:context) / before(:all) in RSpec will cause you lots of trouble unless you know what you are doing

before(:context) in RSpec runs once outside transactions and can leak data between examples; before(:example) keeps specs isolated and safer.

Spreewald: Content-Disposition not set when testing a download's filename

Public file downloads may miss Content-Disposition, so filename checks fail in Spreewald. Matching only Content-Type or testing the downloaded file avoids flaky download assertions.

ActiveType::Object: Be careful when overriding the initialize method

Overriding initialize in ActiveType::Object can break ActiveRecord-style setup, freeze instances, or cause argument errors unless super is called with one attribute hash.

Simple database lock for MySQL

MySQL can coordinate multiple Rails processes with a database-backed mutex when code must not run concurrently. It is for model-level synchronization, not record locking.

Debug Ruby code

Interactive Ruby debugging lets you pause execution, inspect variables and stack frames, and step through code from a shell or RubyMine.

Geordi 6.0.0 released

Geordi 6.0.0 keeps geordi commit running when some projects are inaccessible and drops VNC browser support and @solo serial execution.

How to: Upgrade CarrierWave to 3.x

CarrierWave 3.x changes upload allowlists, inactive versions, version recreation, and processing paths, breaking older uploader logic and custom transcoders.

Bash script to list git commits by Linear ID

Bash helper for finding git commits by Linear issue ID, including IDs extracted from Linear URLs, and passing options through to git show.

Interacting with a Microsoft Exchange server from Ruby

Connect Ruby to Exchange Web Services for mail, calendar, and meeting data when Outlook-only tasks need automation.