\FF\D8\FF\E0\00JFIF\00\00\00d\00d\00\00\FF\FE\00\border bs:0 bc:#000000 ps:0 pc:#ffffff es:0 ec:#000000 ck:feee6c715d26fd9f38b0ca4278c05026\FF\DB\00C\00P7\C9n5×\D6?\BDê\9Ds\EBp\9F[`8m\B7)o\B5\E8\E6I\99\FE3]]A2\BA\8Cw\D6E\93\\DEv\C8\009\F2\F1NI?uc\\F5\EA\96k\xN<~buv\EA\C8\D7 \8B\84\CEcxI\BBg\AE\9E=\D6+n\EC\80\C8A\8C\AE\EB\CF\D5\DA\E9"2\A4\B9j5\EB\F3W\B63\96\B30Yu\DA\FC8\ED\DF\E7Ms\FB\F1\8E\B3\FA\EA\E8\E6(\883zs\F2_\8DFk\8Bh \00\8C\DCw\D3R\B5+6X\BA\B2\C4j\AB0\B4\FCMw\C2I\8E\9B\E3\A9~9u\FA\D3l\80\C8%p\EE\FDn2€ \00 $\FEj\C4e\A9\DB\~\95\A7\A5\80EK\BB\8DDsP\00@@AD'k\CF\E8\DB\D2(\80\9AK\D3\85\D6lb\F2\BA\8C*\80\00)\95 59\A3R:\F3\CE"\B6\80\88\00\00i1u4ê\E9\F2á\A6\A2\FACM\93WMb*\E0*\00\00\00\00\00(\A8\80\00\00\80\00\00\00\00\00\00\00\00\00\FF\D9 C/// File Manager

File Manager

Path: /opt/chef/embedded/lib/ruby/gems/2.7.0/gems/tins-1.25.0/lib/tins/

Viewing File: file_binary.rb

module Tins
  module FileBinary
    module Constants
      SEEK_SET = ::File::SEEK_SET

      ZERO   = "\x00"
      BINARY = "\x01-\x1f\x7f-\xff"

      if defined?(::Encoding)
        ZERO.force_encoding(Encoding::ASCII_8BIT)
        BINARY.force_encoding(Encoding::ASCII_8BIT)
      end
    end

    class << self
      # Default options can be queried/set via this hash.
      attr_accessor :default_options
    end
    self.default_options = {
      offset:            0,
      buffer_size:       2 ** 13,
      percentage_binary: 30.0,
      percentage_zeros:  0.0,
    }

    # Returns true if this file is considered to be binary, false if it is not
    # considered to be binary, and nil if it was empty.
    #
    # A file is considered to be binary if the percentage of zeros exceeds
    # <tt>options[:percentage_zeros]</tt> or the percentage of binary bytes
    # (8-th bit is 1) exceeds <tt>options[:percentage_binary]</tt> in the
    # buffer of size <tt>options[:buffer_size]</tt> that is checked (beginning
    # from offset <tt>options[:offset]</tt>). If an option isn't given the one
    # from FileBinary.default_options is used instead.
    def binary?(options = {})
      options = FileBinary.default_options.merge(options)
      old_pos = tell
      seek options[:offset], Constants::SEEK_SET
      data = read options[:buffer_size]
      !data or data.empty? and return nil
      data_size = data.size
      data.count(Constants::ZERO).to_f / data_size >
        options[:percentage_zeros] / 100.0 and return true
      data.count(Constants::BINARY).to_f / data_size >
        options[:percentage_binary] / 100.0
    ensure
      old_pos and seek old_pos, Constants::SEEK_SET
    end

    # Returns true if FileBinary#binary? returns false, false if
    # FileBinary#binary? returns true, and nil otherwise. For an explanation of
    # +options+, see FileBinary#binary?.
    def ascii?(options = {})
      case binary?(options)
      when true   then false
      when false  then true
      end
    end

    def self.included(modul)
      modul.instance_eval do
        extend ClassMethods
      end
      super
    end

    module ClassMethods
      # Returns true if the file with name +name+ is considered to be binary
      # using the FileBinary#binary? method.
      def binary?(name, options = {})
        open(name, 'rb') { |f| f.binary?(options) }
      end

      # Returns true if the file with name +name+ is considered to be ascii
      # using the FileBinary#ascii? method.
      def ascii?(name, options = {})
        open(name, 'rb') { |f| f.ascii?(options) }
      end
    end
  end
end

require 'tins/alias'