I’ve just released version 4.6.4 of middleman-s3_sync, a gem that synchronizes Middleman-built websites to Amazon S3.
This release completely removes the map gem dependency and replaces it with a native Ruby implementation.
Background
The map gem provides a string/symbol indifferent hash implementation. After being stable at version 6.6.0 for about a decade, the original author unexpectedly released version 8.x, which introduced breaking changes that caused installation failures.
While we temporarily locked the dependency to version 6.6.0 in v4.6.3, it became clear that relying on an unmaintained library was not a sustainable solution.
What Changed
Version 4.6.4 introduces IndifferentHash, a simple native Ruby class that provides the same functionality as the map gem:
- String/symbol indifferent key access
- Dot notation for accessing values
- Zero external dependencies
- Fully tested with the existing test suite
The implementation is straightforward and maintainable, living entirely within the gem’s codebase.
Benefits
- More stable: No dependency on unmaintained external libraries
- Fewer dependencies: One less gem to install and manage
- Better control: The functionality is now part of the gem itself
- No breaking changes: The API remains exactly the same
Upgrading
To upgrade to the latest version, update your Gemfile:
1
| gem 'middleman-s3_sync', '~> 4.6.4'
|
Then run:
1
| bundle update middleman-s3_sync
|
This is a drop-in replacement with no breaking changes—your existing code will continue to work exactly as before.
Acknowledgments
Thanks to Chad Wilson for identifying the issue in PR #165 and proposing the initial workaround.
As always, the source code is available on GitHub, and the gem is available on RubyGems.
I’ve just released version 4.6.3 of middleman-s3_sync, a gem that synchronizes Middleman-built websites to Amazon S3.
This is a maintenance release that addresses a dependency issue. Thanks to Chad Wilson for identifying and fixing the problem in PR #...
Read More... They say it’s like riding a bicycle - once you learn, you never forget. But after nearly 8 years at Amazon, I’m discovering that muscle memory can get pretty rusty when it comes to Ruby gems and the broader open source ecosystem.
Don’t get me wrong - Amazon...
Read More... A whole lot has happened since I last wrote here. I’ve been busy with work, family, hobbies,and personal projects. I’ve also dealt with some personal issues and challenges that have shaped my perspective and priorities. I’ve learned a lot about myself and...
Read More... 
I was mostly on distributed teams when I worked at Sun Microsystems. Sometimes it was on a multi-site team, but more often than not I was on teams where I was one of the few, if not only, members based in Colorado. As a result, I had a well appointed...
Read More...
Image by Toshiyuki IMAI
I measure my mornings in cups of coffee.
The first one is for me. It accompanies breakfast, is savored as I read my Twitter feed and some interesting stories and helps me ease out of sleepiness into awakeness.
The second cup...
Read More... OAuth2 and OpenID Connect both have the notion of a client. In this area, a client is any application or service that relies on the authorization server for authorization.
Clients have their own credentials. They have a client identifier and a secret...
Read More... I am helping my client transition from a few large monoliths hosted on AWS to micro-services hosted on Kubernetes. It is my first experience with Kubernetes and I must say that I am impressed so far.
Of course, micro-services work best when it is easy...
Read More... OAuth2 is fundamentally an authorization protocol. It is not meant to be used for authentication. In general, OAuth2 based authorization services provide an end point that can be used to retrieve user profiles and identifiers. In some cases, they use...
Read More... Let’s continue using the analogies used in my last post and explore the JSON Web Tokens (JWT).
You hand over both your boarding pass and an identity document. The agent scans the boarding pass and examines the identity document to check it’s authenticity...
Read More... Page 1 of 8
Next page