Class: FileGenerator::FileGenerator

Inherits:
Object
  • Object
show all
Defined in:
lib/file_utils/file_generator/file_generator.rb

Overview

Generates files with random content with random file size according to the given Params

Constant Summary collapse

FILE_EXT =
'txt'

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#one_bytes_stringObject (readonly)

Gets one MB string



43
44
45
# File 'lib/file_utils/file_generator/file_generator.rb', line 43

def one_bytes_string
  @one_bytes_string
end

Instance Method Details

#get_file_bytes_sizeObject

Gets the required file size im MB



73
74
75
76
77
78
79
80
# File 'lib/file_utils/file_generator/file_generator.rb', line 73

def get_file_bytes_size
  if Params['is_use_random_size']
    rand(Params['upper_size_in_bytes'] - Params['down_size_in_bytes']) +
        Params['down_size_in_bytes']
  else
    Params['file_size_in_bytes']
  end
end

#get_new_directory_nameObject

Gets the new directory name



63
64
65
# File 'lib/file_utils/file_generator/file_generator.rb', line 63

def get_new_directory_name
  "#{Params['dir_name_prefix']}_#{get_unique_name}"
end

#get_new_file_nameObject

Gets the new file name



68
69
70
# File 'lib/file_utils/file_generator/file_generator.rb', line 68

def get_new_file_name
  "#{Params['file_name_prefix']}_#{get_unique_name}.#{FILE_EXT}"
end

#get_random_letterObject

Gets the random letter



58
59
60
# File 'lib/file_utils/file_generator/file_generator.rb', line 58

def get_random_letter
  (rand(122-97) + 97).chr
end

#get_small_rand_unique_strObject

Gets the some random string



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

def get_small_rand_unique_str
  rand(36**8).to_s(36)
end

#get_unique_nameObject

Gets the unique name according to current time and random string



53
54
55
# File 'lib/file_utils/file_generator/file_generator.rb', line 53

def get_unique_name
  "#{Time.new.to_i}_#{get_small_rand_unique_str}"
end

#is_generate_dir(dir_counter, total_file_counter) ⇒ Object

Determines whether to generate new directory or not



88
89
90
91
92
93
94
95
96
97
98
99
# File 'lib/file_utils/file_generator/file_generator.rb', line 88

def is_generate_dir(dir_counter, total_file_counter)
  if Params['max_total_files'] > 0 && total_file_counter > Params['max_total_files']
    return false
  end

  if Params['total_created_directories'] < 1 || #Any negative value or zero will be indication for Infinity
      dir_counter < Params['total_created_directories'] then
    return true
  else
    return false
  end
end

#is_generate_file(file_counter, total_file_counter) ⇒ Object

Determines whether to generate new file or not



102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
# File 'lib/file_utils/file_generator/file_generator.rb', line 102

def is_generate_file(file_counter, total_file_counter)
  if Params['max_total_files'] > 0 && total_file_counter > Params['max_total_files']
    return false
  end

  total_files_in_dir = Params['total_files_in_dir']
  if file_counter == 0 && Params['is_tot_files_in_dir_random']  then
    total_files_in_dir =
        rand(Params['upper_limit_4_files_in_dir'] -
                 Params['lower_limit_4_files_in_dir']) +
            Params['lower_limit_4_files_in_dir']
  end

  #When total_files_in_dir < 1 it will be treated as unlimited files creation in directory
  if total_files_in_dir < 1 ||
      file_counter < total_files_in_dir then
    return true
  else
    return false
  end
end

#prepare_one_bytes_stringObject

Generates one MB string with random content



83
84
85
# File 'lib/file_utils/file_generator/file_generator.rb', line 83

def prepare_one_bytes_string
  get_random_letter
end

#runObject

Generates files with random content with random file size according to the given Params



125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
# File 'lib/file_utils/file_generator/file_generator.rb', line 125

def run
  dir_counter = 0
  total_file_count = 0
  if Params['is_clear_target_path']
    target_path_all_regexp = File.expand_path(File.join(Params['target_path'], '*'))
    Dir[target_path_all_regexp].each {|file| FileUtils.rm_rf file}
  end
  while is_generate_dir dir_counter, total_file_count
    new_dir_name = File.expand_path(File.join Params['target_path'], get_new_directory_name)
    ::FileUtils.mkdir_p new_dir_name unless File.directory?(new_dir_name)
    dir_counter += 1
    file_counter = 0

    while is_generate_file file_counter, total_file_count
      new_file_name = get_new_file_name
      File.open(File.join(new_dir_name, new_file_name), "w") do |f|
        get_file_bytes_size.to_i.times { f.write(get_random_letter) }
      end
      file_counter += 1
      total_file_count += 1

      sleep Params['sleep_time_in_seconds'] if Params['sleep_time_in_seconds'] > 0
    end
  end
end