module MIME::Types::Columnar
MIME::Types::Columnar
is used to extend a MIME::Types
container to load data by columns instead of from JSON or YAML. Column loads of MIME
types loaded through the columnar store are synchronized with a Mutex.
MIME::Types::Columnar
is not intended to be used directly, but will be added to an instance of MIME::Types
when it is loaded with MIME::Types::Loader#load_columnar
.
Private Instance Methods
arr(line)
click to toggle source
# File lib/mime/types/_columnar.rb, line 169 def arr(line) if line == "-" [] else line.split("|").flatten.compact.uniq end end
dict(line, transform: nil)
click to toggle source
# File lib/mime/types/_columnar.rb, line 136 def dict(line, transform: nil) if line == "-" {} else line.split("|").each_with_object({}) { |l, h| k, v = l.split("^") v = nil if v.empty? if transform send(:"dict_#{transform}", h, k, v) else h[k] = v end } end end
dict_array(h, k, v)
click to toggle source
# File lib/mime/types/_columnar.rb, line 165 def dict_array(h, k, v) h[k] = Array(v) end
dict_extension_priority(h, k, v)
click to toggle source
# File lib/mime/types/_columnar.rb, line 153 def dict_extension_priority(h, k, v) return if v.nil? v = v.to_i if v.is_a?(String) v = v.trunc if v.is_a?(Float) v = [[-20, v].max, 20].min return if v.zero? h[k] = v end
each_file_byte(name) { |type, byte| ... }
click to toggle source
# File lib/mime/types/_columnar.rb, line 70 def each_file_byte(name) LOAD_MUTEX.synchronize do next if @__files__.include?(name) i = -1 filename = File.join(@__root__, "mime.#{name}.column") next unless File.exist?(filename) IO.binread(filename).unpack("C*").each do |byte| (type = @__mime_data__[i += 1]) || next yield type, byte end @__files__ << name end end
each_file_line(name, lookup = true) { |type, line| ... }
click to toggle source
# File lib/mime/types/_columnar.rb, line 48 def each_file_line(name, lookup = true) LOAD_MUTEX.synchronize do next if @__files__.include?(name) i = -1 column = File.join(@__root__, "mime.#{name}.column") IO.readlines(column, encoding: "UTF-8").each do |line| line.chomp! if lookup (type = @__mime_data__[i += 1]) || next yield type, line else yield line end end @__files__ << name end end
flag(line)
click to toggle source
# File lib/mime/types/_columnar.rb, line 181 def flag(line) line == "1" end
load_docs()
click to toggle source
# File lib/mime/types/_columnar.rb, line 96 def load_docs each_file_line("docs") do |type, line| type.instance_variable_set(:@docs, opt(line)) end end
load_encoding()
click to toggle source
# File lib/mime/types/_columnar.rb, line 89 def load_encoding each_file_line("encoding") do |type, line| pool ||= {} type.instance_variable_set(:@encoding, pool[line] ||= line) end end
load_flags()
click to toggle source
# File lib/mime/types/_columnar.rb, line 108 def load_flags each_file_line("flags") do |type, line| line = line.split type.instance_variable_set(:@obsolete, flag(line.shift)) type.instance_variable_set(:@registered, flag(line.shift)) type.instance_variable_set(:@signature, flag(line.shift)) type.instance_variable_set(:@provisional, flag(line.shift)) end end
load_friendly()
click to toggle source
# File lib/mime/types/_columnar.rb, line 124 def load_friendly each_file_line("friendly") { |type, line| type.instance_variable_set(:@friendly, dict(line)) } end
load_preferred_extension()
click to toggle source
# File lib/mime/types/_columnar.rb, line 102 def load_preferred_extension each_file_line("pext") do |type, line| type.instance_variable_set(:@preferred_extension, opt(line)) end end
load_use_instead()
click to toggle source
# File lib/mime/types/_columnar.rb, line 130 def load_use_instead each_file_line("use_instead") do |type, line| type.instance_variable_set(:@use_instead, opt(line)) end end
load_xrefs()
click to toggle source
# File lib/mime/types/_columnar.rb, line 118 def load_xrefs each_file_line("xrefs") { |type, line| type.instance_variable_set(:@xrefs, dict(line, transform: :array)) } end
opt(line)
click to toggle source
# File lib/mime/types/_columnar.rb, line 177 def opt(line) line unless line == "-" end