Class: Fontisan::Utilities::BrotliWrapper
- Inherits:
-
Object
- Object
- Fontisan::Utilities::BrotliWrapper
- Defined in:
- lib/fontisan/utilities/brotli_wrapper.rb
Overview
Wrapper for Brotli compression with consistent settings
BrotliWrapper provides
a consistent interface for Brotli compression with configurable quality
and error handling. Used primarily for WOFF2 encoding.
Brotli compression is significantly more effective than zlib (used in WOFF), typically achieving 20-30% better compression ratios on font data.
Constant Summary collapse
- DEFAULT_QUALITY =
Default compression quality (0-11, higher = better but slower) Quality 11 gives best compression for WOFF2
11- MIN_QUALITY =
Minimum quality level
0- MAX_QUALITY =
Maximum quality level
11
Class Method Summary collapse
-
.compress(data, quality: DEFAULT_QUALITY, mode: :font) ⇒ String
Compress data using Brotli.
-
.compression_percentage(original_size, compressed_size) ⇒ Float
Calculate compression percentage.
-
.compression_ratio(original_size, compressed_size) ⇒ Float
Calculate compression ratio.
-
.decompress(data) ⇒ String
Decompress Brotli-compressed data.
Class Method Details
.compress(data, quality: DEFAULT_QUALITY, mode: :font) ⇒ String
Compress data using Brotli
46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/fontisan/utilities/brotli_wrapper.rb', line 46 def self.compress(data, quality: DEFAULT_QUALITY, mode: :font) validate_quality!(quality) validate_data!(data) begin # Use Brotli gem with specified quality # The brotli gem doesn't expose mode constants, only quality Brotli.deflate(data, quality: quality) rescue StandardError => e raise Fontisan::Error, "Brotli compression failed: #{e.}" end end |
.compression_percentage(original_size, compressed_size) ⇒ Float
Calculate compression percentage
103 104 105 106 107 |
# File 'lib/fontisan/utilities/brotli_wrapper.rb', line 103 def self.compression_percentage(original_size, compressed_size) return 0.0 if original_size.zero? ((original_size - compressed_size).to_f / original_size * 100).round(1) end |
.compression_ratio(original_size, compressed_size) ⇒ Float
Calculate compression ratio
88 89 90 91 92 |
# File 'lib/fontisan/utilities/brotli_wrapper.rb', line 88 def self.compression_ratio(original_size, compressed_size) return 0.0 if original_size.zero? compressed_size.to_f / original_size end |
.decompress(data) ⇒ String
Decompress Brotli-compressed data
68 69 70 71 72 73 74 75 76 77 |
# File 'lib/fontisan/utilities/brotli_wrapper.rb', line 68 def self.decompress(data) validate_data!(data) begin Brotli.inflate(data) rescue StandardError => e raise Fontisan::Error, "Brotli decompression failed: #{e.}" end end |