← Extractions

Webmock unmocked — Bartosz Blimke at wroclove.rb 2024

Bartosz Blimke, sole maintainer of the WebMock Ruby gem, presents the gem's features, explains its internal architecture (adapters, monkey-patched HTTP client classes, global stub and callback registries), and closes with a tribute to the New Bamboo team where he created it. Q&A covers contract testing and tracking HTTP-client library changes.

Model
claude-opus-4-7
Ingestion
3d479920
Input tokens
492,280
fresh
386,980
cached
98,859
cache write
6,441
Output tokens
12,634
Duration
215.5s
Roundtrips
10
Tool calls
26
Cost
$0.00
Nodes/edges extracted
15 / 31
Read set (nodes/edges)
159 / 2

Nodes (15)

create Net::HTTP tool
kind (empty) → tool
name (empty) → Net::HTTP
slug (empty) → net-http
attrs (empty) → {"category" => "library", "language" => "Ruby"}
description (empty) → Ruby standard library HTTP client. The only HTTP client supported by FakeWeb; called out in the talk as having a comp...
short_description (empty) → Ruby standard-library HTTP client.
create New Bamboo company
kind (empty) → company
name (empty) → New Bamboo
slug (empty) → new-bamboo
attrs (empty) → {"industry" => "Ruby consultancy", "location" => "London, UK"}
description (empty) → London-based Ruby development company where Bartosz Blimke worked in 2009. Self-described team of very passionate dev...
short_description (empty) → London Ruby consultancy where WebMock was created during a company hackathon.
create Stub Execute Verify concept
kind (empty) → concept
name (empty) → Stub Execute Verify
slug (empty) → stub-execute-verify
attrs (empty) → {"category" => "pattern"}
description (empty) → Testing paradigm WebMock borrows from the Java Mockito framework. The stubbing phase (declaring fake responses) is ke...
short_description (empty) → Testing paradigm that separates stubbing from verification into distinct phases.
create WebMock tool
kind (empty) → tool
name (empty) → WebMock
slug (empty) → webmock
attrs (empty) → {"created" => "2009", "license" => "open-source", "category" => "library", "language" => "Ruby", "downloads" => "250M...
description (empty) → Ruby gem created by Bartosz Blimke during a one-day company hackathon at New Bamboo in 2009 to address his own needs ...
short_description (empty) → Ruby gem for stubbing HTTP requests and verifying HTTP calls in tests.
create FakeWeb tool
kind (empty) → tool
name (empty) → FakeWeb
slug (empty) → fakeweb
attrs (empty) → {"category" => "library", "language" => "Ruby"}
description (empty) → Ruby gem for stubbing HTTP requests that predated WebMock. Bartosz Blimke tried to use FakeWeb but found its request-...
short_description (empty) → Earlier Ruby HTTP stubbing gem that predated WebMock.
create VCR tool
kind (empty) → tool
name (empty) → VCR
slug (empty) → vcr
attrs (empty) → {"category" => "library", "language" => "Ruby"}
description (empty) → Ruby gem for recording HTTP requests and replaying them later in tests. Uses WebMock's request callbacks under the ho...
short_description (empty) → Ruby gem that records HTTP interactions and replays them in tests.
create Mockito tool
kind (empty) → tool
name (empty) → Mockito
slug (empty) → mockito
attrs (empty) → {"category" => "framework", "language" => "Java"}
description (empty) → Java framework for testing. Bartosz Blimke borrowed Mockito's stub–execute–verify paradigm when designing WebMock, wh...
short_description (empty) → Java mocking framework for unit tests.
create HTTP gem tool
kind (empty) → tool
name (empty) → HTTP gem
slug (empty) → http-gem
attrs (empty) → {"category" => "library", "language" => "Ruby"}
description (empty) → Ruby HTTP client gem (http.rb). Blimke contrasts its clean DSL with Net::HTTP's complicated interface as a reason to ...
short_description (empty) → Ruby HTTP client gem with a chainable DSL for making requests.
update Bartosz Blimke person
attrs (empty) → {"location" => "Wrocław, Poland", "ruby_since" => "2006", "nationality" => "Polish", "employer_history" => "New Bambo...
description Conference speaker. → Polish Ruby developer, living in Wrocław and working remotely since before it was trendy. Writing software for over 2...
short_description Conference speaker. → Polish Ruby developer; creator and sole maintainer of the WebMock gem.
update Webmock unmocked talk
attrs {"type" => "talk"} → {"date" => "2024-03-22", "type" => "talk"}
description Talk at wroclove.rb 2024. → Bartosz Blimke's wroclove.rb 2024 talk — his second public presentation about WebMock (the first was in London 15 yea...
short_description Talk at wroclove.rb 2024. → Bartosz Blimke's wroclove.rb 2024 talk on WebMock features and internals.
create Publish solutions that work for you takeaway
kind (empty) → takeaway
name (empty) → Publish solutions that work for you
slug (empty) → publish-solutions-that-work-for-you
attrs (empty) → {"type" => "recommendation"}
description (empty) → Encouragement Blimke echoed from another speaker at the conference: when you have a solution that works for you, publ...
short_description (empty) → If you have a solution that works for you, publish it — others may find it useful.
create Enable WebMock on legacy apps takeaway
kind (empty) → takeaway
name (empty) → Enable WebMock on legacy apps
slug (empty) → enable-webmock-on-legacy-apps
attrs (empty) → {"type" => "recommendation"}
description (empty) → One of the first things to do when taking over a legacy Ruby application: import WebMock and enable it. From then on,...
short_description (empty) → Drop WebMock into a legacy Ruby app to catch unexpected third-party HTTP calls.
create Stub third-party APIs to unblock development takeaway
kind (empty) → takeaway
name (empty) → Stub third-party APIs to unblock development
slug (empty) → stub-third-party-apis-to-unblock-development
attrs (empty) → {"type" => "recommendation"}
description (empty) → WebMock lets teams start building against a third-party API before they have access to it. Read the documentation/spe...
short_description (empty) → Use WebMock stubs to build and demo features before the third-party API is available.
create WebMock contract testing integration question
kind (empty) → question
name (empty) → WebMock contract testing integration
slug (empty) → webmock-contract-testing-integration
attrs (empty) → {"answer_summary" => "No built-in contract testing; scope/validation of stubs is a known limitation because WebMock u...
description (empty) → Audience member thanked Blimke for WebMock (which they had used since the first version) and asked whether he has con...
short_description (empty) → Does WebMock support contract testing so mocks invalidate when upstream APIs change?
create Tracking HTTP client library changes question
kind (empty) → question
name (empty) → Tracking HTTP client library changes
slug (empty) → tracking-http-client-library-changes
attrs (empty) → {"answer_summary" => "No automated system. WebMock's test suite runs against latest gem versions, so CI surfaces regr...
description (empty) → Audience asked how Blimke follows changes in the HTTP-client libraries WebMock cooperates with. Answer: WebMock's Gem...
short_description (empty) → How does WebMock keep up with changes in the HTTP-client libraries it monkey-patches?

Edges (31)

update Bartosz Blimke → authored → Webmock unmocked
context (empty) → Speaker and sole maintainer of WebMock presenting his second-ever WebMock talk at wroclove.rb 2024.
update Webmock unmocked → presented_at → wroclove.rb 2024
context (empty) → Talk delivered as the final slot of wroclove.rb 2024 on 2024-03-22.
create Bartosz Blimke → attended → wroclove.rb 2024
context (empty) → Speaker at the conference; also references seeing other talks during the event.
relation (empty) → attended
source_node_id (empty) → 5ab52188-4211-4e8f-991f-9556865ff494
target_node_id (empty) → 748e0524-a102-41d4-97dc-575881583d91
create Bartosz Blimke → works_on → WebMock
attrs (empty) → {"role" => "author and sole maintainer"}
context (empty) → Author and single maintainer of WebMock for 15 years.
relation (empty) → works_on
source_node_id (empty) → 5ab52188-4211-4e8f-991f-9556865ff494
target_node_id (empty) → 39888955-d08a-430e-baf1-5a3e5150c1ad
create Bartosz Blimke → works_at → New Bamboo
attrs (empty) → {"since" => "2009"}
context (empty) → Worked at New Bamboo in London in 2009 when he created WebMock during a company hackathon.
relation (empty) → works_at
source_node_id (empty) → 5ab52188-4211-4e8f-991f-9556865ff494
target_node_id (empty) → 1af87c59-8a04-4f18-8f3c-5e58cbad4ddd
create Webmock unmocked → about → WebMock
context (empty) → Entire talk covers WebMock's features and internal architecture.
relation (empty) → about
source_node_id (empty) → 6a6dec59-7cea-47e4-9f06-56a980cfe50a
target_node_id (empty) → 39888955-d08a-430e-baf1-5a3e5150c1ad
create Webmock unmocked → about → FakeWeb
context (empty) → Blimke explains he tried FakeWeb first but its matching capabilities and Net::HTTP-only scope motivated him to create...
relation (empty) → about
source_node_id (empty) → 6a6dec59-7cea-47e4-9f06-56a980cfe50a
target_node_id (empty) → bd7d288e-85a6-4587-8488-71c2782000d6
create Webmock unmocked → about → VCR
context (empty) → VCR is mentioned as a gem that records HTTP requests and uses WebMock's callbacks under the hood.
relation (empty) → about
source_node_id (empty) → 6a6dec59-7cea-47e4-9f06-56a980cfe50a
target_node_id (empty) → 2bfac9e2-008e-45e4-9477-b001da71cd49
create Webmock unmocked → about → Mockito
context (empty) → WebMock's stub–execute–verify paradigm is borrowed from the Java Mockito framework.
relation (empty) → about
source_node_id (empty) → 6a6dec59-7cea-47e4-9f06-56a980cfe50a
target_node_id (empty) → fb32d0c7-efa3-42f3-81a4-7ffcd7d05857
create Webmock unmocked → about → Stub Execute Verify
context (empty) → The talk explains how WebMock separates stubbing from verification — the stub–execute–verify paradigm.
relation (empty) → about
source_node_id (empty) → 6a6dec59-7cea-47e4-9f06-56a980cfe50a
target_node_id (empty) → 1945f528-f4dd-4d29-9bd6-94299f39ff1f
create Webmock unmocked → about → Monkey Patching
context (empty) → WebMock adapters work by subclassing HTTP-client classes and monkey-patching request handling; Blimke calls monkey pa...
relation (empty) → about
source_node_id (empty) → 6a6dec59-7cea-47e4-9f06-56a980cfe50a
target_node_id (empty) → 055158a7-01d0-407c-b292-1ce630c6341a
create Webmock unmocked → about → Test Driven Development
context (empty) → Blimke recommends WebMock for TDD — define the expected HTTP behavior in the test first, worry about the HTTP client ...
relation (empty) → about
source_node_id (empty) → 6a6dec59-7cea-47e4-9f06-56a980cfe50a
target_node_id (empty) → 1c2ff90e-39e6-496e-b94d-6234d545033e
create Webmock unmocked → about → HTTP gem
context (empty) → Talk example contrasts Net::HTTP's complicated interface with the HTTP gem's clean DSL when rewriting a test under We...
relation (empty) → about
source_node_id (empty) → 6a6dec59-7cea-47e4-9f06-56a980cfe50a
target_node_id (empty) → 6172b152-1074-4ee3-9044-55e521d3f52b
create Webmock unmocked → about → Net::HTTP
context (empty) → Talk mentions Net::HTTP as FakeWeb's only supported client and as the verbose legacy client that WebMock lets you swa...
relation (empty) → about
source_node_id (empty) → 6a6dec59-7cea-47e4-9f06-56a980cfe50a
target_node_id (empty) → 706c33c7-d3a7-42b1-8809-f86d936666ec
create Webmock unmocked → about → curl
context (empty) → Talk notes WebMock can replay raw responses previously recorded with curl.
relation (empty) → about
source_node_id (empty) → 6a6dec59-7cea-47e4-9f06-56a980cfe50a
target_node_id (empty) → c24eebf8-1c00-4d2a-bdc0-28eddc3eb4d1
create Webmock unmocked → about → New Bamboo
context (empty) → Talk closes with a personal tribute to the New Bamboo team ('Bambinos') where WebMock was created.
relation (empty) → about
source_node_id (empty) → 6a6dec59-7cea-47e4-9f06-56a980cfe50a
target_node_id (empty) → 1af87c59-8a04-4f18-8f3c-5e58cbad4ddd
create WebMock → related_to → FakeWeb
context (empty) → WebMock was inspired by and designed to overcome the limitations of FakeWeb (limited request matching, Net::HTTP only).
relation (empty) → related_to
source_node_id (empty) → 39888955-d08a-430e-baf1-5a3e5150c1ad
target_node_id (empty) → bd7d288e-85a6-4587-8488-71c2782000d6
create VCR → uses → WebMock
context (empty) → VCR uses WebMock's request callbacks under the hood to record HTTP traffic.
relation (empty) → uses
source_node_id (empty) → 2bfac9e2-008e-45e4-9477-b001da71cd49
target_node_id (empty) → 39888955-d08a-430e-baf1-5a3e5150c1ad
create WebMock → related_to → Mockito
context (empty) → WebMock's stub–execute–verify paradigm was borrowed from Mockito.
relation (empty) → related_to
source_node_id (empty) → 39888955-d08a-430e-baf1-5a3e5150c1ad
target_node_id (empty) → fb32d0c7-efa3-42f3-81a4-7ffcd7d05857
create Bartosz Blimke → has_skill → Ruby
attrs (empty) → {"level" => "expert"}
context (empty) → Professional Ruby developer since 2007; previously a Java developer.
relation (empty) → has_skill
source_node_id (empty) → 5ab52188-4211-4e8f-991f-9556865ff494
target_node_id (empty) → c7f25b33-06c9-460e-aca7-fe993123ebee
create Andrzej Krzywda → related_to → Bartosz Blimke
context (empty) → In 2006, Andrzej Krzywda introduced Bartosz Blimke (then a Java developer) to Ruby.
relation (empty) → related_to
source_node_id (empty) → 337ffd2c-5847-4b23-9ef7-e8f70aa4c66a
target_node_id (empty) → 5ab52188-4211-4e8f-991f-9556865ff494
create Publish solutions that work for you → from_talk → Webmock unmocked
context (empty) → Blimke urged the audience to publish solutions that work for them, using WebMock as his example.
relation (empty) → from_talk
source_node_id (empty) → adfca79e-c6b2-4557-b2cb-49321d88d897
target_node_id (empty) → 6a6dec59-7cea-47e4-9f06-56a980cfe50a
create Enable WebMock on legacy apps → from_talk → Webmock unmocked
context (empty) → Recommendation from the talk for taking over legacy Ruby apps.
relation (empty) → from_talk
source_node_id (empty) → 050c412d-600e-40f7-b72f-7381370c0edc
target_node_id (empty) → 6a6dec59-7cea-47e4-9f06-56a980cfe50a
create Stub third-party APIs to unblock development → from_talk → Webmock unmocked
context (empty) → Pattern Blimke described for building and demoing features before third-party API access is granted.
relation (empty) → from_talk
source_node_id (empty) → 8883e78f-90b3-48ed-962b-306f8ad6b6f4
target_node_id (empty) → 6a6dec59-7cea-47e4-9f06-56a980cfe50a
create Enable WebMock on legacy apps → about → WebMock
context (empty) → Takeaway specifically about using WebMock as a safety net on legacy applications.
relation (empty) → about
source_node_id (empty) → 050c412d-600e-40f7-b72f-7381370c0edc
target_node_id (empty) → 39888955-d08a-430e-baf1-5a3e5150c1ad
create Stub third-party APIs to unblock development → about → WebMock
context (empty) → Takeaway is about using WebMock stubs as a stand-in for unreleased or unavailable third-party APIs.
relation (empty) → about
source_node_id (empty) → 8883e78f-90b3-48ed-962b-306f8ad6b6f4
target_node_id (empty) → 39888955-d08a-430e-baf1-5a3e5150c1ad
create WebMock contract testing integration → asked_at → Webmock unmocked
context (empty) → Asked during Q&A at the end of Blimke's wroclove.rb 2024 talk.
relation (empty) → asked_at
source_node_id (empty) → 4309cff0-ca97-4b5a-9507-95ef827b24dd
target_node_id (empty) → 6a6dec59-7cea-47e4-9f06-56a980cfe50a
create Tracking HTTP client library changes → asked_at → Webmock unmocked
context (empty) → Asked during Q&A at the end of Blimke's wroclove.rb 2024 talk.
relation (empty) → asked_at
source_node_id (empty) → ca467cc2-caea-4a8e-bf47-233da53e0db0
target_node_id (empty) → 6a6dec59-7cea-47e4-9f06-56a980cfe50a
create WebMock contract testing integration → about → WebMock
context (empty) → Question asks whether WebMock supports contract testing.
relation (empty) → about
source_node_id (empty) → 4309cff0-ca97-4b5a-9507-95ef827b24dd
target_node_id (empty) → 39888955-d08a-430e-baf1-5a3e5150c1ad
create Tracking HTTP client library changes → about → WebMock
context (empty) → Question asks how WebMock keeps up with changes in the HTTP-client libraries it monkey-patches.
relation (empty) → about
source_node_id (empty) → ca467cc2-caea-4a8e-bf47-233da53e0db0
target_node_id (empty) → 39888955-d08a-430e-baf1-5a3e5150c1ad
create Webmock unmocked → related_to → One machine please, make it Turing
context (empty) → Blimke references David Halasz's talk the day before about formal languages as inspiration for adding a university sl...
relation (empty) → related_to
source_node_id (empty) → 6a6dec59-7cea-47e4-9f06-56a980cfe50a
target_node_id (empty) → 5f6c6de7-3590-4026-92bb-6ef9cea6b7f4

Read set

159 nodes

talk Webmock unmocked search_nodes+get_node_edges concept Mock Third-Party Services Locally search_nodes tool Mimic search_nodes tool Capybara search_nodes tool Requestly search_nodes tool Faker search_nodes tool FactoryBot search_nodes concept Time.current Testing Trap search_nodes concept Stubs over Mocks search_nodes question Diagnostic Substitutes Are Not Mock Objects search_nodes person Bartosz Blimke search_nodes+get_node_edges company Planuj Wesele search_nodes concept AI Agent search_nodes person Adam Okoń search_nodes takeaway Name Things To Find Their Properties search_nodes concept GraphQL max_depth search_nodes tool RealtimeBoard search_nodes project Check search_nodes concept Retrieval Augmented Generation search_nodes tool Speaker Deck search_nodes event wroclove.rb 2023 search_nodes+list_nodes_by_kind event wroclove.rb 2019 search_nodes+list_nodes_by_kind event wroclove.rb 2018 search_nodes+list_nodes_by_kind event wroclove.rb 2024 search_nodes+list_nodes_by_kind event wroclove.rb 2025 search_nodes+list_nodes_by_kind event wroclove.rb 2022 search_nodes+list_nodes_by_kind event wroclove.rb 2026 search_nodes+list_nodes_by_kind talk Performance Panel wroclove.rb 2024 search_nodes talk Building LLM powered applications in Ruby search_nodes talk How wroclove.rb impacts developers and companies search_nodes event Advent of Code list_nodes_by_kind event Brighton Ruby list_nodes_by_kind event EmberConf list_nodes_by_kind event Eventide Summit 2023 list_nodes_by_kind event Hacktoberfest list_nodes_by_kind event KanDDDinsky list_nodes_by_kind event Rails World list_nodes_by_kind concept Fake Object search_nodes tool streamio-ffmpeg search_nodes tool carrierwave-video search_nodes question VNC↔WebSocket frame translation search_nodes talk Orchestrating video transcoding in ruby search_nodes takeaway Paperclip Disable Convert Trick search_nodes talk How to hijack search_nodes tool CarrierWave search_nodes tool langchainrb search_nodes project Ruby Romania search_nodes takeaway Port Python Libraries With ChatGPT search_nodes resource Short Ruby Newsletter search_nodes tool rbspy search_nodes project Ruby News search_nodes tool ruby-openai search_nodes project Nerds and Threads search_nodes tool Bootsnap search_nodes project monolith framework search_nodes question Should fake implementations live with production code? search_nodes question Are fake-dice tests enough, or should the real dice be tested too? search_nodes talk Testing Randomness search_nodes takeaway Avoid logic in tests search_nodes person David Halasz search_nodes concept Backus-Naur Form search_nodes talk One machine please, make it Turing search_nodes concept Petri Nets search_nodes tool OHA search_nodes tool heapy search_nodes project gemcheck search_nodes tool methods gem search_nodes tool Ruby Browser Detection Gem search_nodes tool RequestStore search_nodes talk Methods Gem for Ruby Method References search_nodes concept Cynefin Framework search_nodes tool Sidekiq search_nodes talk Under The Hood And On The Surface Of Sidekiq search_nodes question Scaling Sidekiq Elastically search_nodes takeaway Keep Sidekiq Job Parameters Simple search_nodes takeaway Prefer Small Sidekiq Jobs search_nodes concept Sidekiq Batches search_nodes talk Sidekiq Batches Lightning Talk search_nodes question Application-Level Back Pressure For Sidekiq search_nodes question Wrapper Job vs Logic In Job search_nodes question Sidekiq And Redis Cluster search_nodes takeaway Read the Ruby standard library search_nodes talk Ruby Standard Library Hidden Gems Lightning Talk search_nodes tool Distributed Ruby search_nodes tool Standard RB search_nodes tool IronRuby search_nodes tool Rack search_nodes tool Matrix (Ruby stdlib) search_nodes tool Prime (Ruby stdlib) search_nodes tool HTTP/2 search_nodes concept Smart Contract search_nodes tool ruby-contracts search_nodes concept Logic in Tests search_nodes concept Rails Testing Pyramid (Ivan's version) search_nodes tool Faker.js search_nodes tool Deface search_nodes project Grazer search_nodes concept Monkey Patching search_nodes concept Refinements search_nodes concept Ruby Module Customization Mechanics search_nodes concept ActiveSupport Core Extensions search_nodes takeaway Look outside Ruby for better patterns search_nodes takeaway Use Refinements for Coordinated Modernization search_nodes person Akira Matsuda search_nodes person Andrzej Krzywda search_nodes person Paweł Pokrywka search_nodes talk How to Be Top 10% in Ruby Lightning Talk search_nodes person Julik Tarkhanov search_nodes talk Scientific Ruby Lightning Talk search_nodes person Matz search_nodes person DHH search_nodes tool mruby search_nodes person Charles Nutter search_nodes tool Ruby search_nodes person Arturo Herrero search_nodes person Sandi Metz search_nodes person Shugo Maeda search_nodes tool TestBench search_nodes tool minitest search_nodes tool test-prof search_nodes tool power_assert search_nodes tool parallel_tests search_nodes takeaway Rails Tests Are Mostly Integration Tests search_nodes tool Crystal Ball search_nodes company GitHub search_nodes takeaway Open Source Maintainer Lessons search_nodes takeaway Pay the open-source maintainers you depend on search_nodes resource awesome-ddd search_nodes takeaway Publish a roadmap to align contributors search_nodes takeaway Be kind and build useful things search_nodes tool GitHub Releases search_nodes tool reviewdog search_nodes tool Codecov search_nodes tool Release Drafter search_nodes concept Test Driven Development search_nodes concept Params-Driven Development search_nodes takeaway TDD Is Process And Philosophy, Not Mechanics search_nodes concept Axiom-Driven Development search_nodes takeaway Avoid params-driven development search_nodes talk Ever shorter feedback loop search_nodes concept DDD Whirlpool search_nodes talk Development with axioms search_nodes takeaway Cut Test Suites Under 15 Minutes search_nodes concept Command Handler search_nodes tool curl search_nodes concept Command Bus search_nodes concept Bot Fight Mode search_nodes tool dry-cli search_nodes tool jq search_nodes talk Build Your Own Internal CLI Tools Lightning Talk search_nodes tool fish shell search_nodes person Paweł Dąbrowski search_nodes person Michał Bronikowski search_nodes person Jakub Rodzik search_nodes person Łukasz Szydło search_nodes person Mike Perham search_nodes talk International cooperation in IT teams search_nodes person Martin Gamsjaeger search_nodes talk Fix Production Bugs 20x Faster search_nodes

2 edges