Module: ActiveStorageDedup

Defined in:
lib/active_storage_dedup.rb,
lib/active_storage_dedup/railtie.rb,
lib/active_storage_dedup/version.rb,
lib/active_storage_dedup/configuration.rb,
lib/active_storage_dedup/changes_extension.rb,
lib/active_storage_dedup/deduplication_job.rb,
lib/active_storage_dedup/attachment_options.rb,
lib/active_storage_dedup/blob_deduplication.rb,
lib/active_storage_dedup/attachment_extension.rb,
lib/generators/active_storage_dedup/install_generator.rb,
sig/active_storage_dedup.rbs

Defined Under Namespace

Modules: AttachmentExtension, AttachmentOptions, BlobDeduplication, ChangesExtension, Generators Classes: Configuration, DeduplicationJob, Railtie

Constant Summary collapse

VERSION =

Returns:

  • (String)
"1.0.0"

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.configurationObject



29
30
31
# File 'lib/active_storage_dedup/configuration.rb', line 29

def configuration
  @configuration ||= Configuration.new
end

Class Method Details

.attachment_settingsObject

Track which attachments have deduplicate disabled



44
45
46
# File 'lib/active_storage_dedup/configuration.rb', line 44

def attachment_settings
  @attachment_settings ||= {}
end

.configure {|configuration| ... } ⇒ Object

Yields:



33
34
35
36
37
# File 'lib/active_storage_dedup/configuration.rb', line 33

def configure
  Rails.logger.debug "[ActiveStorageDedup] Configuring ActiveStorageDedup..." if defined?(Rails)
  yield(configuration)
  Rails.logger.info "[ActiveStorageDedup] Configuration updated: enabled=#{configuration.enabled}, deduplicate_by_default=#{configuration.deduplicate_by_default}, auto_purge_orphans=#{configuration.auto_purge_orphans}" if defined?(Rails)
end

.deduplicate_enabled_for?(record, attachment_name) ⇒ Boolean

Returns:

  • (Boolean)


54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/active_storage_dedup/configuration.rb', line 54

def deduplicate_enabled_for?(record, attachment_name)
  # First check: Is the gem enabled at all?
  unless configuration.enabled
    Rails.logger.debug "[ActiveStorageDedup] Gem is disabled globally (enabled=false)" if defined?(Rails)
    return false
  end

  key = "#{record.class.name}##{attachment_name}"
  settings = attachment_settings[key]

  # Second check: Model-level setting takes precedence over global default
  # If model explicitly sets deduplicate: true/false, use that
  # Otherwise, fall back to configuration.deduplicate_by_default
  if settings.nil?
    result = configuration.deduplicate_by_default
    Rails.logger.debug "[ActiveStorageDedup] Deduplication check for #{key}: #{result} (using deduplicate_by_default)" if defined?(Rails)
  else
    result = settings[:deduplicate]
    Rails.logger.debug "[ActiveStorageDedup] Deduplication check for #{key}: #{result} (model-level override)" if defined?(Rails)
  end

  result
end

.enabled?Boolean

Returns:

  • (Boolean)


39
40
41
# File 'lib/active_storage_dedup/configuration.rb', line 39

def enabled?
  configuration.enabled
end

.register_attachment(model_name, attachment_name, deduplicate:) ⇒ Object



48
49
50
51
52
# File 'lib/active_storage_dedup/configuration.rb', line 48

def register_attachment(model_name, attachment_name, deduplicate:)
  key = "#{model_name}##{attachment_name}"
  attachment_settings[key] = { deduplicate: deduplicate }
  Rails.logger.debug "[ActiveStorageDedup] Registered attachment #{key} with deduplicate=#{deduplicate}" if defined?(Rails)
end