class Object

Public Instance Methods

capture_stdout() click to toggle source
# File lib/experiment_arguments_log.rb, line 67
def capture_stdout
  $ruby_experiment_arguments_log = StringIO.new

  def $stdout.write string
    ($ruby_experiment_arguments_log.write string) if $ruby_experiment_arguments_log.size < 1048576
    super
  end
end
experiment_arguments_log() click to toggle source
# File lib/experiment_arguments_log.rb, line 4
def experiment_arguments_log
  if ENV['RUBY_EXPERIMENT_LOG']
    path = ENV['RUBY_EXPERIMENT_LOG']
  else
    path = 'ruby_experiment_log.txt'
  end

  File.open(path, 'a') do |output|

    date=Time.now.strftime("%Y-%m-%d %H:%M:%S")
    working_directory = ENV["PWD"]
    script_relative_path = $PROGRAM_NAME
    script_absolute_path = File.expand_path($PROGRAM_NAME)
    arguments = ARGV

    output.puts '    _  __  __  __  __  __  __  __  __  __  __  __  __  __  __  _'
    output.puts '     )(  )(  )(  )(  )(  )(  )(  )(  )(  )(  )(  )(  )(  )(  )( '
    output.puts '    (__)(__)(__)(__)(__)(__)(__)(__)(__)(__)(__)(__)(__)(__)(__)'
    output.puts
    output.puts "%s %s$ %s %s" % [date, working_directory, script_relative_path, arguments.map { |argument| argument.include?(' ') ? '"%s"'%[argument] : argument }.join(' ')]
    output.puts 'Date: %s' % [date]
    output.puts 'Working directory: %s' % [working_directory]
    output.puts 'Script path: %s' % [script_relative_path]
    output.puts 'Script absolute path: %s' % [script_absolute_path]
    output.puts 'Script access time: %s' % [File.ctime(script_absolute_path)]
    output.puts 'Script modification time: %s' % [File.mtime(script_absolute_path)]
    output.puts 'Arguments: %s' % arguments.to_s
    output.puts 'Git:'
    output.puts `git log -1 2>/dev/null`
    output.puts

    ARGV.each do |argument|
      begin
        File.open(argument) do |argument_file|
          output.puts 'File path: %s' % [argument]
          output.puts 'File absolute path: %s' % [File.expand_path(argument)]
          output.puts 'File access time: %s' % [argument_file.atime]
          output.puts 'File modification time: %s' % [argument_file.mtime]
          output.puts 'File size: %s' % [argument_file.size]
          if File.file?(argument)
            output.puts 'Content:'
            5.times do
              output.puts argument_file.gets(1024) || break
            end
          end

          output.puts
        end
      rescue Errno::ENOENT
      end
    end

    output.puts

    if defined? $ruby_experiment_arguments_log
      output.puts 'STDOUT:'
      output.puts $ruby_experiment_arguments_log.string
      output.puts
    end
  end
end