Class: JekyllImgFlow::FilenameGenerator

Inherits:
Object
  • Object
show all
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

Instance Method Details

#file_digest(original_path) ⇒ String

Get file digest for manifest tracking

Parameters:

  • original_path (String)

    Path to original image

Returns:

  • (String)

    SHA256 digest of file



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)

Parameters:

  • operations (Hash)

    Operations hash

Returns:

  • (String)

    Cache key



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)

Parameters:

  • original_name (String)

    Original image filename

  • operations (Hash)

    Operations applied to image

Returns:

  • (String)

    Generated filename (without path)



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

Parameters:

  • filename (String)

    Generated filename

Returns:

  • (Hash)

    Parsed components width, hash, format



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