module Audumbla::FieldEnrichment

Enrich a specific field or list of fields, setting the property to the supplied value

Public Instance Methods

enrich(record, *fields) click to toggle source

The main enrichment method; runs the enrichment against a stated set of fields for a record.

This is a narrower case of ‘Audumbla::Enrichment` which runs the enrichment against each of the specified fields in turn, setting the field’s value to the result.

For example:

delete_empty_string_literals.enrich(record,
  {:sourceResource => {:creator => :name}})

To apply the enrichment across all fields, leave the fields parameter empty, or use ‘:all`:

delete_empty_string_literals.enrich(record)
delete_empty_string_literals.enrich(record, :all)

@see Audumbla::Enrichment#enrich for documentation about field

formatting

@param record [ActiveTriples::Resource] the record to enrich @param fields [Array] the fields on which to apply the enrichment @return [ActiveTriples::Resource] the enriched record

# File lib/audumbla/field_enrichment.rb, line 33
def enrich(record, *fields)
  record = record.clone
  return enrich_all(record) if fields.empty? || fields == [:all]
  fields.each { |f| enrich_field(record, field_to_chain(f)) }
  record
end
enrich_all(record) click to toggle source
# File lib/audumbla/field_enrichment.rb, line 65
def enrich_all(record)
  list_fields(record).each do |field|
    enrich_field(record, field_to_chain(field))
  end
  record
end
enrich_field(record, field_chain) click to toggle source
# File lib/audumbla/field_enrichment.rb, line 40
def enrich_field(record, field_chain)
  field = field_chain.first
  return record unless record.respond_to? field
  values = record.send(field)
  if field_chain.length == 1
    new_values = values.map { |v| enrich_value(v) }
    # We call #flatten twice, since under some circumstances it fails on
    # nested #to_ary calls the first time. This appears to be related to:
    #
    # http://yehudakatz.com/2010/01/02/the-craziest-fing-bug-ive-ever-seen/
    #   and
    # https://bugs.ruby-lang.org/issues/2494
    begin
      new_values = new_values.flatten.compact
    rescue
      new_values = new_values.flatten.compact
    end

    record.send("#{field}=".to_sym, new_values)
  else
    resources(values).each { |v| enrich_field(v, field_chain[1..-1]) }
  end
  record
end