Skip to content

Conversation

@rubionic
Copy link

@rubionic rubionic commented Feb 3, 2026

Summary

This PR inlines the palm_civet gem into the cloud_controller codebase to eliminate an external dependency that hasn't been updated in several years.

Changes

  • Added lib/cloud_controller/palm_civet.rb - Inlined implementation of the palm_civet byte conversion utilities
  • Added spec/unit/lib/cloud_controller/palm_civet_spec.rb - Complete test suite from the original gem
  • Updated lib/cloud_controller/app_manifest/byte_converter.rb - Changed require from 'palm_civet' to 'cloud_controller/palm_civet'
  • Removed palm_civet gem from Gemfile

Implementation Details

The inlined code is wrapped in the VCAP::CloudController::PalmCivet module to maintain proper namespacing and avoid conflicts. The implementation includes:

  • Byte size constants (BYTE, KILOBYTE, MEGABYTE, GIGABYTE, TERABYTE)
  • byte_size - Converts bytes to human-readable format
  • to_bytes - Parses human-readable byte strings to integer bytes
  • to_megabytes - Parses human-readable byte strings to megabytes
  • InvalidByteQuantityError exception class

All original functionality and tests have been preserved.

Testing

The complete test suite from the palm_civet gem has been integrated and should pass in CI. The tests cover:

  • Byte size formatting with various units
  • Parsing of different byte unit formats (B, K/KB/KiB, M/MB/MiB, G/GB/GiB, T/TB/TiB)
  • Float and integer handling
  • Negative values
  • Error cases for invalid inputs

Fixes rubionic#1

The palm_civet dependency has not seen any releases for a long time.
Given its small complexity, this commit inlines it into the cloud_controller
codebase to reduce external dependencies.

Changes:
- Added lib/cloud_controller/palm_civet.rb with the inlined implementation
- Added spec/unit/lib/cloud_controller/palm_civet_spec.rb with all tests
- Updated ByteConverter to use the inlined VCAP::CloudController::PalmCivet
- Removed palm_civet gem from Gemfile

Fixes #1
@sethboyles
Copy link
Member

I think if we inline this gem, we should rename the module to something more descriptive as to its purpose.

(ByteConverter might have been a good choice :))

@tcdowney
Copy link
Member

tcdowney commented Feb 3, 2026

@XenoPhex do you want to save Palm Civet from Rubin Bot?

🐒 vs 🤖

@Gerg
Copy link
Member

Gerg commented Feb 3, 2026

Here is a technical diagram to assist with understanding.
palm_civet_rb

Please confirm the implementation conforms to this architecture @rubionic.

@XenoPhex
Copy link
Contributor

XenoPhex commented Feb 3, 2026

Y’all just want to take it over? I could transfer it to y’all. I’ll just need to figure out the best way to do that in both GH and RubyGems.

Also, hi everyone!! Hope y’all are doing well!!

@philippthun
Copy link
Member

I'm also in favor of renaming it.

And we should add a header to the two files added to the cloud controller repo. Something like:

# Derived from the palm_civet library
# Copyright (c) 2013 Anand Gaitonde
# Licensed under the MIT License
# https://github.com/goodmustache/palm_civet

MIT License ... requiring preservation of copyright and license notices.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Inline palm_civet

6 participants