Class: JekyllImgFlow::FilenameGenerator
- Inherits:
-
Object
- Object
- JekyllImgFlow::FilenameGenerator
- Defined in:
- lib/jekyll-imgflow/filename_generator.rb
Overview
Generates unique filenames for processed images Compatible with Jekyll Picture Tag format
Instance Method Summary collapse
-
#file_digest(original_path) ⇒ String
Get file digest for manifest tracking.
-
#generate_cache_key(operations) ⇒ String
Generate cache key for operations (SHA256 for manifest tracking).
-
#generate_filename(original_name, operations) ⇒ String
Generate filename for processed image (Jekyll Picture Tag compatible).
-
#parse_filename(filename) ⇒ Hash
Parse filename to extract width and hash.
Instance Method Details
#file_digest(original_path) ⇒ String
Get file digest for manifest tracking
37 38 39 |
# File 'lib/jekyll-imgflow/filename_generator.rb', line 37 def file_digest(original_path) Digest::SHA256.file(original_path).hexdigest end |
#generate_cache_key(operations) ⇒ String
Generate cache key for operations (SHA256 for manifest tracking)
28 29 30 31 32 |
# File 'lib/jekyll-imgflow/filename_generator.rb', line 28 def generate_cache_key(operations) # Sort keys to ensure consistent hashing sorted_operations = operations.sort.to_h Digest::SHA256.hexdigest(sorted_operations.to_json) end |
#generate_filename(original_name, operations) ⇒ String
Generate filename for processed image (Jekyll Picture Tag compatible)
14 15 16 17 18 19 20 21 22 23 |
# File 'lib/jekyll-imgflow/filename_generator.rb', line 14 def generate_filename(original_name, operations) base_name = File.basename(original_name, ".*") width = operations[:width] format = operations[:format] || File.extname(original_name).delete(".") # Generate hash using Jekyll Picture Tag approach hash = generate_jpt_hash(original_name, operations) "#{base_name}-#{width}-#{hash}.#{format}" end |
#parse_filename(filename) ⇒ Hash
Parse filename to extract width and hash
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/jekyll-imgflow/filename_generator.rb', line 44 def parse_filename(filename) # Parse pattern: basename-width-hash.format - simple string operations # Find last dot to separate format last_dot = filename.rindex(".") return {} unless last_dot format = filename[(last_dot + 1)..] name_part = filename[0...last_dot] # Find last dash to separate hash last_dash = name_part.rindex("-") return {} unless last_dash hash = name_part[(last_dash + 1)..] name_without_hash = name_part[0...last_dash] # Find second-to-last dash to separate width second_last_dash = name_without_hash.rindex("-") return {} unless second_last_dash width_str = name_without_hash[(second_last_dash + 1)..] base_name = name_without_hash[0...second_last_dash] # Validate components return {} unless hash.match?(/^[a-f0-9]+$/) return {} unless width_str.match?(/^\d+$/) { base_name: base_name, width: width_str.to_i, hash: hash, format: format } end |