Class: FileMagic

Inherits:
Object
  • Object
show all
Defined in:
lib/filemagic.rb,
lib/filemagic/version.rb

Defined Under Namespace

Modules: Ext, Version

Constant Summary

FLAGS_BY_SYM =

Map flag names to their values (:name => Integer).

[
  :none,               # No flags
  :debug,              # Turn on debugging
  :symlink,            # Follow symlinks
  :compress,           # Check inside compressed files
  :devices,            # Look at the contents of devices
  :mime_type,          # Return only the MIME type
  :continue,           # Return all matches
  :check,              # Print warnings to stderr
  :preserve_atime,     # Restore access time on exit
  :raw,                # Don't translate unprint chars
  :error,              # Handle ENOENT etc as real errors
  :mime_encoding,      # Return only the MIME encoding
  :mime,               # MAGIC_MIME_TYPE | MAGIC_MIME_ENCODING
  :apple,              # Return the Apple creator and type
  :no_check_compress,  # Don't check for compressed files
  :no_check_tar,       # Don't check for tar files
  :no_check_soft,      # Don't check magic entries
  :no_check_apptype,   # Don't check application type
  :no_check_elf,       # Don't check for elf details
  :no_check_text,      # Don't check for text files
  :no_check_cdf,       # Don't check for cdf files
  :no_check_tokens,    # Don't check ascii/tokens
  :no_check_encoding,  # Don't check text encodings
  :no_check_builtin,   # No built-in tests; only consult the magic file

  # Defined for backwards compatibility (renamed)
  :no_check_ascii,     # MAGIC_NO_CHECK_TEXT

  # Defined for backwards compatibility; do nothing
  :no_check_fortran,   # Don't check ascii/fortran
  :no_check_troff      # Don't check ascii/troff
].inject({}) { |flags, flag|
  const = "MAGIC_#{flag.to_s.upcase}"
  flags.update(flag => const_defined?(const) && const_get(const))
}
FLAGS_BY_INT =

Map flag values to their names (Integer => :name).

FLAGS_BY_SYM.invert.update(0 => :none)
SIMPLE_RE =

Extract “simple” MIME type.

%r{([.\w\/-]+)}
VERSION =
Version.to_s

Instance Attribute Summary (collapse)

Class Method Summary (collapse)

Instance Method Summary (collapse)

Instance Attribute Details

- (Object) simplified=(value) (writeonly)

Sets the attribute simplified



118
119
120
# File 'lib/filemagic.rb', line 118

def simplified=(value)
  @simplified = value
end

Class Method Details

+ (Object) clear!

Clear our instance cache.



66
67
68
# File 'lib/filemagic.rb', line 66

def clear!
  @fm.each_value(&:close).clear
end

+ (Object) fm(*flags)

Provide a “magic singleton”.



55
56
57
58
59
60
61
62
63
# File 'lib/filemagic.rb', line 55

def fm(*flags)
  options = flags.last.is_a?(Hash) ? flags.pop : {}

  if fm = @fm[key = [flags = flags(flags), options]]
    return fm unless fm.closed?
  end

  @fm[key] = new(flags, options)
end

+ (Object) magic_version(default = MAGIC_VERSION)



91
92
93
94
95
96
# File 'lib/filemagic.rb', line 91

def magic_version(default = MAGIC_VERSION)
  default != '0' ? default :
    user_magic_version ||
    auto_magic_version ||
    [default, 'unknown']
end

+ (Object) mime(*flags, &block)

Just a short-cut to #open with the mime flag set.



87
88
89
# File 'lib/filemagic.rb', line 87

def mime(*flags, &block)
  open(:mime, *flags, &block)
end

+ (Object) open(*flags)

Just like #new, but takes an optional block, in which case #close is called at the end and the value of the block is returned.



72
73
74
75
76
77
78
79
80
81
82
83
84
# File 'lib/filemagic.rb', line 72

def open(*flags)
  fm = new(*flags)

  if block_given?
    begin
      yield fm
    ensure
      fm.close
    end
  else
    fm
  end
end

Instance Method Details

- (Object) inspect



128
129
130
# File 'lib/filemagic.rb', line 128

def inspect
  super.insert(-2, closed? ? ' (closed)' : '')
end

- (Object) io(io, length = 8)



124
125
126
# File 'lib/filemagic.rb', line 124

def io(io, length = 8)
  buffer(io.read(length))
end

- (Boolean) simplified?



120
121
122
# File 'lib/filemagic.rb', line 120

def simplified?
  @simplified
end