Class: Libis::Format::TypeDatabaseImpl

Inherits:
Object
  • Object
show all
Includes:
Tools::Logger, Singleton
Defined in:
lib/libis/format/type_database_impl.rb

Instance Method Summary collapse

Instance Method Details

#ext_infos(ext) ⇒ Object



51
52
53
54
55
56
# File 'lib/libis/format/type_database_impl.rb', line 51

def ext_infos(ext)
  ext = ext.gsub /^\./, ''
  @types.select do |_, v|
    v[:EXTENSIONS].include?(ext) rescue false
  end.values
end

#ext_types(ext) ⇒ Object



58
59
60
61
62
63
# File 'lib/libis/format/type_database_impl.rb', line 58

def ext_types(ext)
  ext = ext.gsub /^\./, ''
  @types.select do |_, v|
    v[:EXTENSIONS].include?(ext) rescue false
  end.keys
end

#group_types(group) ⇒ Object



21
22
23
24
25
# File 'lib/libis/format/type_database_impl.rb', line 21

def group_types(group)
  @types.select do |_, v|
    v[:GROUP] == group.to_sym
  end.keys
end

#known_mime?(mime) ⇒ Boolean

Returns:

  • (Boolean)


72
73
74
75
76
77
# File 'lib/libis/format/type_database_impl.rb', line 72

def known_mime?(mime)
  @types.each do |_, v|
    return true if v[:MIME].include? mime
  end
  false
end

#load_types(file_or_hash = {}, append = true) ⇒ Object



79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
# File 'lib/libis/format/type_database_impl.rb', line 79

def load_types(file_or_hash = {}, append = true)
  hash = file_or_hash.is_a?(Hash) ? file_or_hash : YAML::load_file(file_or_hash)
  # noinspection RubyResolve
  hash.each do |group, type_info|
    type_info.each do |type_name, info|
      type_key = type_name.to_sym
      info.symbolize_keys!
      info[:TYPE] = type_key
      info[:GROUP] = group.to_sym
      info[:MIME] = info[:MIME].strip.split(/[\s,]+/).map(&:strip) rescue []
      info[:EXTENSIONS] = info[:EXTENSIONS].strip.split(/[\s,]+/).map { |v| v.strip } rescue []
      info[:PUID] = info[:PUID].strip.split(/[\s,]+/).map { |v| v.strip } if info[:PUID]
      if @types.has_key?(type_key)
        warn 'Type %s already defined; merging with info from %s.', type_name.to_s, file_or_hash
        info.merge!(@types[type_key]) do |_,v_new,v_old|
          case v_old
          when Array
            append ? v_old + v_new : v_new + v_old
          when Hash
            append ? v_new.merge(v_old) : v_old.merge(v_new)
          else
            append ? v_old : v_new
          end
        end
      end
      @types[type_key] = info
    end
  end
end

#mime_infos(mime) ⇒ Object



39
40
41
42
43
# File 'lib/libis/format/type_database_impl.rb', line 39

def mime_infos(mime)
  @types.select do |_, v|
    v[:MIME].include? mime rescue false
  end.values
end

#mime_types(mime) ⇒ Object



45
46
47
48
49
# File 'lib/libis/format/type_database_impl.rb', line 45

def mime_types(mime)
  @types.select do |_, v|
    v[:MIME].include? mime rescue false
  end.keys
end

#puid_infos(puid) ⇒ Object



27
28
29
30
31
# File 'lib/libis/format/type_database_impl.rb', line 27

def puid_infos(puid)
  @types.select do |_, v|
    v[:PUID].include? puid rescue false
  end.values
end

#puid_typeinfo(puid) ⇒ Object



65
66
67
68
69
70
# File 'lib/libis/format/type_database_impl.rb', line 65

def puid_typeinfo(puid)
  @types.each do |_, v|
    return v if v[:PUID] and v[:PUID].include?(puid)
  end
  nil
end

#puid_types(puid) ⇒ Object



33
34
35
36
37
# File 'lib/libis/format/type_database_impl.rb', line 33

def puid_types(puid)
  @types.select do |_, v|
    v[:PUID].include? puid rescue false
  end.keys
end

#typeinfo(t) ⇒ Object



17
18
19
# File 'lib/libis/format/type_database_impl.rb', line 17

def typeinfo(t)
  @types[t.to_sym] || {}
end