class DatalackeyProcess
Attributes
executable[R]
exit_code[R]
stderr[R]
stdin[R]
stdout[R]
Public Class Methods
locate_executable(exe_name, dirs_outside_path = [])
click to toggle source
# File lib/datalackeylib.rb, line 72 def DatalackeyProcess.locate_executable(exe_name, dirs_outside_path = []) # Absolute file name or found in current working directory. return exe_name if File.exist?(exe_name) && File.executable?(exe_name) dirs = [] dirs_outside_path = [ dirs_outside_path ] unless dirs_outside_path.is_a? Array dirs.concat dirs_outside_path dirs.concat ENV['PATH'].split(File::PATH_SEPARATOR) dirs.each do |d| exe = File.join(d, exe_name) return exe if File.exist?(exe) && File.executable?(exe) end nil end
new(exe, directory, permissions, memory)
click to toggle source
# File lib/datalackeylib.rb, line 12 def initialize(exe, directory, permissions, memory) @exit_code = 0 if exe.nil? exe = DatalackeyProcess.locate_executable( 'datalackey', [ '/usr/local/libexec', '/usr/libexec' ]) raise ArgumentError, 'datalackey not found' if exe.nil? elsif !File.exist?(exe) || !File.executable?(exe) raise ArgumentError, "Executable not found or not executable: #{exe}" end @executable = exe args = [ exe, '--command-in', 'stdin', 'JSON', '--command-out', 'stdout', 'JSON' ] args.push('--memory') unless memory.nil? args.concat([ '--directory', directory ]) unless directory.nil? args.concat([ '--permissions', permissions ]) unless permissions.nil? @stdin, @stdout, @stderr, @wait_thread = Open3.popen3(*args) end
options_for_OptionParser(parser, separator, exe_callable, mem_callable, dir_callable, perm_callable, echo_callable)
click to toggle source
# File lib/datalackeylib.rb, line 37 def DatalackeyProcess.options_for_OptionParser(parser, separator, exe_callable, mem_callable, dir_callable, perm_callable, echo_callable) unless separator.nil? unless separator.is_a? String separator = 'Options for case where this process runs datalackey:' end parser.separator separator end unless exe_callable.nil? parser.on('-l', '--lackey PROGRAM', 'Use specified datalackey executable.') do |e| exe_callable.call(e) end end unless mem_callable.nil? parser.on('-m', '--memory', 'Store data in memory.') do mem_callable.call(true) end end unless dir_callable.nil? parser.on('-d', '--directory [DIR]', 'Store data under (working) directory.') do |d| dir_callable.call(d || Dir.pwd) end end unless perm_callable.nil? parser.on('-p', '--permissions MODE', %i[user group other], 'File permissions cover (user, group, other).') do |p| perm_callable.call({ user: '600', group: '660', other: '666' }[p]) end end unless echo_callable.nil? parser.on('--echo', 'Echo communication with datalackey.') do echo_callable.call(true) end end end
verify_directory_permissions_memory( directory, permissions, memory)
click to toggle source
# File lib/datalackeylib.rb, line 86 def DatalackeyProcess.verify_directory_permissions_memory( directory, permissions, memory) if !memory.nil? && !(directory.nil? && permissions.nil?) raise ArgumentError, 'Cannot use both memory and directory/permissions.' end if memory.nil? if directory.nil? directory = Dir.pwd elsif !Dir.exist? directory raise ArgumentError, "Given directory does not exist: #{directory}" end if permissions.nil? if (File.umask & 0o77).zero? permissions = '666' elsif (File.umask & 0o70).zero? permissions = '660' else permissions = '600' end elsif permissions != '600' && permissions != '660' && permissions != '666' raise ArgumentError, 'Permissions not in {600, 660, 666}.' end end [ directory, permissions, memory ] end
Public Instance Methods
finish()
click to toggle source
# File lib/datalackeylib.rb, line 30 def finish @stdin.close @wait_thread.join @exit_code = @wait_thread.value.exitstatus end