Class: Libis::Format::Library

Inherits:
Object
  • Object
show all
Includes:
Singleton
Defined in:
lib/libis/format/library.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.enrich(info, map_keys = {}) ⇒ Object



44
45
46
# File 'lib/libis/format/library.rb', line 44

def enrich(info, map_keys = {})
  instance.enrich(info, map_keys)
end

.get_field(format, field) ⇒ Object



28
29
30
# File 'lib/libis/format/library.rb', line 28

def get_field(format, field)
  instance.get_field(format, field)
end

.get_field_by(key, value, field) ⇒ Object



32
33
34
# File 'lib/libis/format/library.rb', line 32

def get_field_by(key, value, field)
  instance.get_field_by(key, value, field)
end

.get_fields_by(key, value, field) ⇒ Object



36
37
38
# File 'lib/libis/format/library.rb', line 36

def get_fields_by(key, value, field)
  instance.get_fields_by(key, value, field)
end

.get_info(format) ⇒ Object



16
17
18
# File 'lib/libis/format/library.rb', line 16

def get_info(format)
  instance.get_info(format)
end

.get_info_by(key, value) ⇒ Object



20
21
22
# File 'lib/libis/format/library.rb', line 20

def get_info_by(key, value)
  instance.get_info_by(key, value)
end

.get_infos_by(key, value) ⇒ Object



24
25
26
# File 'lib/libis/format/library.rb', line 24

def get_infos_by(key, value)
  instance.get_infos_by(key, value)
end

.implementation=(impl) ⇒ Object



12
13
14
# File 'lib/libis/format/library.rb', line 12

def implementation=(impl)
  instance.implementation = impl
end

.known?(key, value) ⇒ Boolean

Returns:

  • (Boolean)


40
41
42
# File 'lib/libis/format/library.rb', line 40

def known?(key, value)
  instance.known?(key, value)
end

.normalize(info, map_keys = {}) ⇒ Object



48
49
50
# File 'lib/libis/format/library.rb', line 48

def normalize(info, map_keys = {})
  instance.normalize(info, map_keys)
end

Instance Method Details

#enrich(info, map_keys = {}) ⇒ Object



97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
# File 'lib/libis/format/library.rb', line 97

def enrich(info, map_keys = {})
  info = normalize(info, map_keys)
  mapper = Hash.new { |hash, key| hash[key] = key }.merge(map_keys)
  unless (format = info[mapper[:name]]).nil?
    lib_info = get_info(format)
    mapper.keys.each do |key|
      case key
      when :mimetype
        info[mapper[key]] = lib_info[:mimetypes].first if lib_info[:mimetypes].first
      when :puid
        info[mapper[key]] = lib_info[:puids].first if lib_info[:puids].first
      when :extension
        info[mapper[key]] = lib_info[:extensions].first if lib_info[:extensions].first
      else
        info[mapper[key]] = lib_info[key] if lib_info[key]
      end
    end
  end
  info
end

#get_field(format, field) ⇒ Object



57
58
59
# File 'lib/libis/format/library.rb', line 57

def get_field(format, field)
  get_field_by(:name, format, field)
end

#get_field_by(key, value, field) ⇒ Object



61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/libis/format/library.rb', line 61

def get_field_by(key, value, field)
  info = get_info_by(key, value)
  return nil unless info
  case field
  when :mimetype
    info[:mimetypes]&.first
  when :puid
    info[:puids]&.first
  when :extension
    info[:extensions]&.first
  else
    info[field]
  end
end

#get_fields_by(key, value, field) ⇒ Object



76
77
78
# File 'lib/libis/format/library.rb', line 76

def get_fields_by(key, value, field)
  get_infos_by(key, value)&.map { |info| info[field] }.compact
end

#get_info(format) ⇒ Object



80
81
82
# File 'lib/libis/format/library.rb', line 80

def get_info(format)
  get_info_by(:name, format)
end

#get_info_by(key, value) ⇒ Object



84
85
86
# File 'lib/libis/format/library.rb', line 84

def get_info_by(key, value)
  get_infos_by(key, value)&.first
end

#get_infos_by(key, value) ⇒ Object



88
89
90
91
# File 'lib/libis/format/library.rb', line 88

def get_infos_by(key, value)
  result = @implementation.query(key, value)
  result.map(&:to_hash)
end

#implementation=(impl) ⇒ Object



53
54
55
# File 'lib/libis/format/library.rb', line 53

def implementation=(impl)
  @implementation = impl
end

#known?(key, value) ⇒ Boolean

Returns:

  • (Boolean)


93
94
95
# File 'lib/libis/format/library.rb', line 93

def known?(key, value)
  !get_info_by(key, value).nil?
end

#normalize(info, map_keys = {}) ⇒ Object

Derive name from the available info



119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
# File 'lib/libis/format/library.rb', line 119

def normalize(info, map_keys = {})
  return {} unless info.is_a? Hash
  mapper = Hash.new { |hash, key| hash[key] = key }.merge(map_keys)
  # fill format from looking up by puid
  unless (puid = info[mapper[:puid]]).blank?
    info[mapper[:name]] ||= get_field_by(:puid, puid, :name)
  end
  # fill format from looking up by mimetype
  unless (mime = info[mapper[:mimetype]]).blank?
    info[mapper[:name]] ||= get_field_by(:mimetype, mime, :name)
  end
  # finally complete the information from looking up by format name
  unless (format = info[mapper[:name]]).nil?
    info[mapper[:mimetype]] = get_field(format, :mimetype)
    info[mapper[:category]] = get_field(format, :category)
  end
  info
end