Module: ArchiveStorage

Defined in:
lib/archive_storage.rb,
lib/archive_storage/model.rb,
lib/archive_storage/errors.rb,
lib/archive_storage/policy.rb,
lib/archive_storage/planner.rb,
lib/archive_storage/railtie.rb,
lib/archive_storage/storage.rb,
lib/archive_storage/version.rb,
lib/archive_storage/enqueuer.rb,
lib/archive_storage/migrator.rb,
lib/archive_storage/registry.rb,
lib/archive_storage/verifier.rb,
lib/archive_storage/scheduler.rb,
lib/archive_storage/adapters/s3.rb,
lib/archive_storage/plan_result.rb,
lib/archive_storage/stored_file.rb,
lib/archive_storage/mount_config.rb,
lib/archive_storage/storage_rule.rb,
lib/archive_storage/configuration.rb,
lib/archive_storage/jobs/queue_job.rb,
lib/archive_storage/migration_rate.rb,
lib/archive_storage/policy_builder.rb,
lib/archive_storage/storage_config.rb,
lib/archive_storage/adapters/memory.rb,
lib/archive_storage/duration_parser.rb,
lib/archive_storage/schedule_config.rb,
lib/archive_storage/adapters/metadata.rb,
lib/archive_storage/jobs/migration_job.rb,
lib/archive_storage/models/file_record.rb,
lib/archive_storage/adapters/filesystem.rb,
lib/archive_storage/verification_result.rb,
lib/archive_storage/jobs/sidekiq_queue_worker.rb,
lib/generators/archive_storage/install_generator.rb,
lib/archive_storage/jobs/sidekiq_migration_worker.rb

Defined Under Namespace

Modules: Adapters, CarrierWave, Jobs, Model, Models Classes: Candidate, Configuration, DurationParser, Enqueuer, InstallGenerator, MigrationRate, Migrator, MountConfig, PlanResult, Planner, Policy, PolicyBuilder, Railtie, Registry, ScheduleConfig, Storage, StorageConfig, StorageRule, StoredFile, VerificationResult, Verifier

Constant Summary collapse

Error =
Class.new(StandardError)
ConfigurationError =
Class.new(Error)
NotFoundError =
Class.new(Error)
VerificationError =
Class.new(Error)
RegistryUnavailableError =
Class.new(Error)
VERSION =
"0.1.0"

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.configurationObject



27
28
29
# File 'lib/archive_storage.rb', line 27

def configuration
  @configuration ||= Configuration.new
end

.registryObject



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

def registry
  @registry ||= Registry.new
end

Class Method Details

.adapter(name) ⇒ Object



40
41
42
# File 'lib/archive_storage.rb', line 40

def adapter(name)
  configuration.adapter(name)
end

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

Yields:



31
32
33
# File 'lib/archive_storage.rb', line 31

def configure
  yield configuration
end

.good_job_cronObject



81
82
83
84
85
# File 'lib/archive_storage.rb', line 81

def good_job_cron
  configuration.schedules.each_with_object({}) do |schedule, entries|
    entries[schedule.entry_name] = schedule.good_job_entry
  end
end

.install_good_job_cron!(rails_config: nil) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
# File 'lib/archive_storage/scheduler.rb', line 15

def install_good_job_cron!(rails_config: nil)
  entries = good_job_cron
  return false if entries.empty?

  config = rails_config || rails_application_config
  return false unless config&.respond_to?(:good_job)

  good_job_config = config.good_job
  good_job_config.cron = cron_hash(good_job_config.cron).merge(entries)
  true
end

.install_scheduled_jobs!(rails_config: nil) ⇒ Object



5
6
7
8
9
10
11
12
13
# File 'lib/archive_storage/scheduler.rb', line 5

def install_scheduled_jobs!(rails_config: nil)
  if configuration.job_backend.to_sym == :sidekiq
    install_sidekiq_schedules!
  else
    return false unless good_job_available?

    install_good_job_cron!(rails_config: rails_config)
  end
end

.install_sidekiq_cron!Object



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/archive_storage/scheduler.rb', line 31

def install_sidekiq_cron!
  require "sidekiq"
  require "sidekiq-cron"
  require_relative "jobs/sidekiq_queue_worker"

  ::Sidekiq.configure_server do |config|
    config.on(:startup) do
      entries = ArchiveStorage.sidekiq_cron
      ::Sidekiq::Cron::Job.load_from_hash(entries) if entries.any?
    end
  end

  true
rescue LoadError
  false
end

.install_sidekiq_scheduler!Object



48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/archive_storage/scheduler.rb', line 48

def install_sidekiq_scheduler!
  require "sidekiq"
  require "sidekiq-scheduler"
  require_relative "jobs/sidekiq_queue_worker"

  ::Sidekiq.configure_server do |config|
    config.on(:startup) do
      entries = ArchiveStorage.sidekiq_cron
      entries.each { |name, entry| ::Sidekiq.set_schedule(name, entry) }
      reload_sidekiq_scheduler if entries.any?
    end
  end

  true
rescue LoadError
  false
end

.install_sidekiq_schedules!Object



27
28
29
# File 'lib/archive_storage/scheduler.rb', line 27

def install_sidekiq_schedules!
  install_sidekiq_cron! || install_sidekiq_scheduler!
end

.policy_for_mount(model, mounted_as) ⇒ Object



68
69
70
71
# File 'lib/archive_storage.rb', line 68

def policy_for_mount(model, mounted_as)
  configuration.find_mount(model, mounted_as)&.policy ||
    model_policy(model, mounted_as)
end

.policy_for_record(record_type, mounted_as) ⇒ Object



73
74
75
# File 'lib/archive_storage.rb', line 73

def policy_for_record(record_type, mounted_as)
  policy_for_mount(record_type, mounted_as)
end

.policy_for_uploader(uploader) ⇒ Object



63
64
65
66
# File 'lib/archive_storage.rb', line 63

def policy_for_uploader(uploader)
  mount_policy_for_uploader(uploader) ||
    (uploader.class.archive_storage_policy if uploader.class.respond_to?(:archive_storage_policy))
end

.register_mount(model, mounted_as, uploader:, policy:) ⇒ Object



52
53
54
# File 'lib/archive_storage.rb', line 52

def register_mount(model, mounted_as, uploader:, policy:)
  configuration.mount(model, mounted_as, uploader: uploader, policy: policy)
end

.register_uploader(uploader_class) ⇒ Object



48
49
50
# File 'lib/archive_storage.rb', line 48

def register_uploader(uploader_class)
  uploaders << uploader_class
end

.reset_configuration!Object



35
36
37
38
# File 'lib/archive_storage.rb', line 35

def reset_configuration!
  @configuration = Configuration.new
  @registry = Registry.new
end

.sidekiq_cronObject



87
88
89
90
91
# File 'lib/archive_storage.rb', line 87

def sidekiq_cron
  configuration.schedules.each_with_object({}) do |schedule, entries|
    entries[schedule.entry_name.to_s] = schedule.sidekiq_cron_entry
  end
end

.uploadersObject



77
78
79
# File 'lib/archive_storage.rb', line 77

def uploaders
  @uploaders ||= []
end

.wire_carrierwave_uploader!(uploader_class) ⇒ Object



56
57
58
59
60
61
# File 'lib/archive_storage.rb', line 56

def wire_carrierwave_uploader!(uploader_class)
  return unless uploader_class

  uploader_class.include(CarrierWave) unless uploader_class < CarrierWave
  uploader_class.storage(:archive_storage) if uploader_class.respond_to?(:storage)
end