Module: Audumbla::FieldEnrichment
- Includes:
- Enrichment
- Included in:
- Enrichments::CoarseGeocode
- Defined in:
- lib/audumbla/field_enrichment.rb
Overview
Enrich a specific field or list of fields, setting the property to the supplied value
Instance Method Summary collapse
-
#enrich(record, *fields) ⇒ ActiveTriples::Resource
The main enrichment method; runs the enrichment against a stated set of fields for a record.
- #enrich_all(record) ⇒ Object
- #enrich_field(record, field_chain) ⇒ Object
Methods included from Enrichment
#enrich!, #enrich_value, #list_fields
Instance Method Details
#enrich(record, *fields) ⇒ ActiveTriples::Resource
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)
33 34 35 36 37 38 |
# 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) ⇒ Object
65 66 67 68 69 70 |
# 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) ⇒ Object
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# 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 |