Class: WaxTasks::IiifCollection

Inherits:
Collection show all
Defined in:
lib/wax_tasks/iiif_collection.rb

Overview

A Jekyll collection with IIIF configuration + data

Instance Attribute Summary collapse

Attributes inherited from Collection

#config, #name, #page_dir, #site

Instance Method Summary collapse

Methods inherited from Collection

#collection_config, #ingest_file, inherited

Constructor Details

#initialize(name, site) ⇒ IiifCollection

Creates a new IiifCollection with name @name given site config @site



16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/wax_tasks/iiif_collection.rb', line 16

def initialize(name, site)
  super(name, site)

  @src_data     = @config.fetch('source', nil)
  @iiif_config  = @config.fetch('iiif', {})
  @meta         = @iiif_config.fetch('meta', nil)
  @variants     = validated_variants
  @src_dir      = Utils.make_path(@site[:source_dir],
                                  '_data/iiif',
                                  @name)
  @target_dir   = Utils.make_path(@site[:source_dir],
                                  'iiif',
                                  @name)
end

Instance Attribute Details

#iiif_configHash

the iiif configuration for the collection

Returns:

  • (Hash)

    the current value of iiif_config



12
13
14
# File 'lib/wax_tasks/iiif_collection.rb', line 12

def iiif_config
  @iiif_config
end

#metaArray

metadata k,v rules

Returns:

  • (Array)

    the current value of meta



12
13
14
# File 'lib/wax_tasks/iiif_collection.rb', line 12

def meta
  @meta
end

#src_dataString

the path to the data source file

Returns:

  • (String)

    the current value of src_data



12
13
14
# File 'lib/wax_tasks/iiif_collection.rb', line 12

def src_data
  @src_data
end

#src_dirString

path to existing iiif source images

Returns:

  • (String)

    the current value of src_dir



12
13
14
# File 'lib/wax_tasks/iiif_collection.rb', line 12

def src_dir
  @src_dir
end

#target_dirString

target path for iiif derivatives

Returns:

  • (String)

    the current value of target_dir



12
13
14
# File 'lib/wax_tasks/iiif_collection.rb', line 12

def target_dir
  @target_dir
end

#variantsHash

image variants to generate e.g. { med: 650 }

Returns:

  • (Hash)

    the current value of variants



12
13
14
# File 'lib/wax_tasks/iiif_collection.rb', line 12

def variants
  @variants
end

Instance Method Details

#iiif_builderObject

Creates a IiifS3::Builder object from collection config

Returns:

  • (Object)


43
44
45
46
47
48
49
50
51
# File 'lib/wax_tasks/iiif_collection.rb', line 43

def iiif_builder
  build_opts = {
    base_url: "#{@site[:baseurl]}/iiif/#{@name}",
    output_dir: @target_dir,
    verbose: true,
    variants: @variants
  }
  IiifS3::Builder.new(build_opts)
end

#iiif_record(src_img, metadata) ⇒ Object

Creates an individual IiifS3 ImageRecord with metadata from source data file if available

Parameters:

  • src_img (String)

    path to the original source image

  • metadata (Hash)

    metadata to add to the item if available

Returns:

  • (Object)


93
94
95
96
97
98
99
100
101
102
103
# File 'lib/wax_tasks/iiif_collection.rb', line 93

def iiif_record(src_img, )
  basename = File.basename(src_img, '.*').to_s
  record_opts = { id: basename, path: src_img, label: basename }
  if 
    src_item = .find { |i| i['pid'].to_s == basename }
    @meta.each do |i|
      record_opts[i.first[0].to_sym] = src_item.fetch(i.first[1], '')
    end
  end
  IiifS3::ImageRecord.new(record_opts)
end

#iiif_recordsArray

Creates an array of IIIfS3 ImageRecords from the collection config for the IiifS3 Builder to process

Returns:



74
75
76
77
78
79
80
81
82
83
84
85
# File 'lib/wax_tasks/iiif_collection.rb', line 74

def iiif_records
  records = []
  source_images = Dir["#{@src_dir}/*"].sort!
  if @meta && @src_data
    src_path = Utils.make_path(@site[:source_dir], '_data', @src_data)
     = ingest_file(src_path)
  else
     = false
  end
  source_images.each { |src_img| records << iiif_record(src_img, ) }
  records
end

#processNil

Main method for generating iiif derivatives and json

Returns:

  • (Nil)

Raises:

  • (Error::MissingIiifSrc)


33
34
35
36
37
38
39
# File 'lib/wax_tasks/iiif_collection.rb', line 33

def process
  raise Error::MissingIiifSrc, "Cannot find IIIF source directory #{@src_dir}" unless Dir.exist?(@src_dir)
  FileUtils.mkdir_p(@target_dir, verbose: false)
  builder = iiif_builder
  builder.load(iiif_records)
  builder.process_data(true)
end

#validated_variantsHash

Gets custom image variants from collection config if available Else returns default variants { med: 600, lg: 1140 } to Builder

Returns:



57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/wax_tasks/iiif_collection.rb', line 57

def validated_variants
  vars = @iiif_config.fetch('variants', false)
  if vars.is_a?(Array) && vars.all? { |v| v.is_a?(Integer) }
    variants = {}
    vars.each_with_index do |v, i|
      variants["custom_variant_#{i}".to_sym] = v
    end
  else
    variants = { med: 600, lg: 1140 }
  end
  variants
end