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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

Debug Ruby code

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

OpenAI TTS: How to generate audio samples with more than 4096 characters

OpenAI TTS requests are capped at 4096 characters, so longer text needs chunking and MP3 merging to generate complete audio.

How to open files from better_errors with RubyMine on Linux

RubyMine rubymine:// links can fail on GNOME/Linux, blocking better_errors from opening source files in the editor. A custom desktop handler and BETTER_ERRORS_EDITOR_URL make file jumping work.

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.

Jasmine: Mocking API requests in an Angular service spec

Angular service specs can hit real routes unless uiRouter startup is disabled; ngMock and $httpBackend let API requests be intercepted and asserted in Jasmine.

Speed up RSpec by deferring garbage collection

Deferred Ruby garbage collection can speed up RSpec examples by reducing GC overhead, though gains vary and may be negligible in newer Ruby versions.

RSpec: Tagging examples and example groups

Tagging RSpec examples and groups lets you filter slow or special cases, assign values, and trigger hooks or module includes by metadata.

RSpec matcher to compare two HTML fragments

Compare two HTML snippets in RSpec while ignoring whitespace, comment nodes, quote style, and attribute order.

Managing Rails locale files with i18n-tasks

i18n-tasks helps keep Rails locale files complete by finding missing and unused translation keys and reducing manual YAML bookkeeping.

Run Chrome in a specific resolution or user agent with Selenium

Testing web apps at mobile-like sizes or with a custom browser identity reveals layout and behavior bugs before release.