Module: Wso2Toolbox::TokenManager::Adapters::LockFile

Included in:
LocalFileAdapter
Defined in:
lib/wso2_toolbox/token_manager/adapters/lock_file.rb

Constant Summary collapse

FileLockedError =
Class.new(StandardError)
ATTEMPTS =
5
TIME_INTERVAL =
1
FILE_PATH =
'tmp/localstorage.json'

Instance Method Summary collapse

Instance Method Details

#lock_fileObject



25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/wso2_toolbox/token_manager/adapters/lock_file.rb', line 25

def lock_file
  File.open(FILE_PATH, 'a+') do |file|
    lock_status = file.flock(File::LOCK_EX | File::LOCK_NB)

    if lock_status
      block_value = yield(file)

      file.flock(File::LOCK_UN)
      block_value
    end
  end
end

#with_free_localstorageObject



13
14
15
16
17
18
19
20
21
22
23
# File 'lib/wso2_toolbox/token_manager/adapters/lock_file.rb', line 13

def with_free_localstorage
  ATTEMPTS.times do |i|
    locked_file = lock_file do |localstorage|
      yield(localstorage)
    end

    raise FileLockedError if !locked_file && i == (ATTEMPTS - 1)

    !locked_file ? sleep(TIME_INTERVAL) : break
  end
end