Class: JekyllImgFlow::BuildTimeProcessor
- Inherits:
-
Object
- Object
- JekyllImgFlow::BuildTimeProcessor
- Defined in:
- lib/jekyll-imgflow/build_time_processor.rb
Overview
BuildTimeProcessor - processes images during Jekyll build Generates default image versions for all originals
Instance Method Summary collapse
-
#initialize(site) ⇒ BuildTimeProcessor
constructor
A new instance of BuildTimeProcessor.
-
#process_changed_images ⇒ Object
Process all changed images in originals folder.
Constructor Details
#initialize(site) ⇒ BuildTimeProcessor
Returns a new instance of BuildTimeProcessor.
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/jekyll-imgflow/build_time_processor.rb', line 7 def initialize(site) @site = site @config = Config.new(site) @manifest = ManifestManager.new(site) @path_resolver = PathResolver.new(@config) @registry = ProviderRegistry.new(@config) # Initialize operation processor with current provider provider = @registry.current_provider @operation_processor = OperationProcessor.new(provider, @path_resolver, @manifest, @config) if provider # Initialize batch manager @batch_manager = BatchManager.new(@operation_processor) # Store all components in site for sharing with ImgFlow tag @filename_generator = JekyllImgFlow::FilenameGenerator.new @site.imgflow_components = { config: @config, manifest: @manifest, path_resolver: @path_resolver, filename_generator: @filename_generator, registry: @registry, provider: provider, operation_processor: @operation_processor, stats: @operation_processor&.stats, preset_manager: JekyllImgFlow::PresetManager.new(@site, @config) } end |
Instance Method Details
#process_changed_images ⇒ Object
Process all changed images in originals folder
38 39 40 41 42 43 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 78 79 80 81 82 83 84 85 86 87 |
# File 'lib/jekyll-imgflow/build_time_processor.rb', line 38 def process_changed_images return { completed: 0, failed: 0 } unless @operation_processor Jekyll.logger.info "🔄 BuildTimeProcessor: Processing changed images" # Get all original images original_paths = find_original_images Jekyll.logger.info "📸 Found #{original_paths.length} original images" originals_dir = File.join(@site.source, @config.originals) # Clean up manifest entries for deleted originals current_originals = original_paths.map { |path| path.sub("#{originals_dir}/", "") } @manifest.cleanup_deleted_originals(current_originals) @manifest.cleanup_obsolete_defaults(expected_default_operations) @manifest.reset_page_usage unless incremental_build? # Build tasks for each original image original_paths.reject { |path| AnimatedGifDetector.animated?(path) }.each do |path| original_name = path.sub("#{originals_dir}/", "") file_digest = @filename_generator.file_digest(path) # Check if needs processing (file changed or provider changed) if needs_processing?(original_name, path, file_digest) Jekyll.logger.info "🔧 Queuing default versions for: #{original_name}" # Build default tasks tasks = BatchManager.build_default_tasks( original_name, path, @config, @site, file_digest: file_digest ) force_processing = source_digest_changed?(original_name, file_digest) tasks.each { |task| task[:force_processing] = force_processing } @batch_manager.add_tasks(tasks) else expected_default_operations.length.times { @operation_processor.stats.record_cache_hit } Jekyll.logger.debug "⏭️ Skipping #{original_name} - already up-to-date" end end # Process all queued tasks results = @batch_manager.process_all register_skipped_tasks(@batch_manager.completed) # Save manifest so it's available when ImgflowTag runs @manifest.save Jekyll.logger.info "✅ BuildTimeProcessor complete: #{results[:completed]} completed, #{results[:failed]} failed" results end |