Class: Blockbuster::Delta

Inherits:
Object
  • Object
show all
Includes:
Extractor, Packager
Defined in:
lib/blockbuster/delta.rb

Overview

Delta file objects

Defined Under Namespace

Classes: NotEnabledError

Constant Summary collapse

INITIALIZING_NUMBER =
101_010_101

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Packager

#create_cassette_file, #tar_file, #write_to_disk

Methods included from Extractor

#extract_cassettes, #save_to_disk, #untar_file

Constructor Details

#initialize(file_name, comparator, configuration) ⇒ Delta

Returns a new instance of Delta.

Raises:



47
48
49
50
51
52
53
54
# File 'lib/blockbuster/delta.rb', line 47

def initialize(file_name, comparator, configuration)
  raise NotEnabledError if configuration.deltas_disabled?

  @configuration = configuration
  @comparator    = comparator
  @file_name     = file_name
  @current       = true if file_name_without_timestamp == configuration.current_delta_name
end

Instance Attribute Details

#configurationObject (readonly)

Returns the value of attribute configuration.



7
8
9
# File 'lib/blockbuster/delta.rb', line 7

def configuration
  @configuration
end

#file_nameObject (readonly)

Returns the value of attribute file_name.



7
8
9
# File 'lib/blockbuster/delta.rb', line 7

def file_name
  @file_name
end

Class Method Details

.file_name_without_timestamp(file_name) ⇒ Object



43
44
45
# File 'lib/blockbuster/delta.rb', line 43

def self.file_name_without_timestamp(file_name)
  file_name.sub(/^\d+_/, '')
end

.files(directory) ⇒ Object



18
19
20
# File 'lib/blockbuster/delta.rb', line 18

def self.files(directory)
  Dir.glob("#{directory}/*.tar.gz").sort.map { |file| File.basename(file) }
end

.initialize_for_each(comparator, configuration) ⇒ Object



22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/blockbuster/delta.rb', line 22

def self.initialize_for_each(comparator, configuration)
  setup_directory(configuration.full_delta_directory)

  delta_files = files(configuration.full_delta_directory)

  # If the current delta doesn't exist we want to add it
  current_delta = configuration.current_delta_name
  delta_files << "#{INITIALIZING_NUMBER}_#{current_delta}" unless delta_files.any? { |file| file_name_without_timestamp(file) == current_delta }

  delta_files.map do |file|
    new(file, comparator, configuration)
  end
end

.setup_directory(directory) ⇒ Object



36
37
38
39
40
41
# File 'lib/blockbuster/delta.rb', line 36

def self.setup_directory(directory)
  return if Dir.exist?(directory)

  FileUtils.mkdir_p(directory)
  FileUtils.touch("#{directory}/.keep")
end

Instance Method Details

#currentObject Also known as: current?



60
61
62
# File 'lib/blockbuster/delta.rb', line 60

def current
  @current || false
end

#file_name_without_timestampObject



56
57
58
# File 'lib/blockbuster/delta.rb', line 56

def file_name_without_timestamp
  self.class.file_name_without_timestamp(file_name)
end

#file_pathObject



66
67
68
# File 'lib/blockbuster/delta.rb', line 66

def file_path
  File.join(configuration.full_delta_directory, file_name)
end

#target_pathObject



70
71
72
73
74
# File 'lib/blockbuster/delta.rb', line 70

def target_path
  target = [Time.now.to_i, configuration.current_delta_name].join('_')

  File.join(configuration.full_delta_directory, target)
end