module Contentful::DatabaseImporter::Resource

Resource for mapping Database Tables to Contentful Content Types and Entries

Attributes

associated_assets[R]
bootstrap_fields[R]
excluded_fields[R]
index[R]

Public Class Methods

included(base) click to toggle source
# File lib/contentful/database_importer/resource.rb, line 19
def self.included(base)
  base.extend(ResourceClassMethods)
  base.extend(ResourceFieldClassMethods)
  base.extend(ResourceBootstrapClassMethods)
end
new(row, index = 0) click to toggle source
# File lib/contentful/database_importer/resource.rb, line 30
def initialize(row, index = 0)
  @index = index
  @bootstrap_fields = {}
  @excluded_fields = {}
  @raw = row
  @associated_assets = []

  row.each do |db_name, value|
    process_row_field(db_name, value)
  end

  process_relationships
end

Public Instance Methods

id() click to toggle source
# File lib/contentful/database_importer/resource.rb, line 81
def id
  if self.class.id_generator.nil?
    self.class.id_generator = IdGenerator::Base.new(
      self.class.default_generator_options
    )
  end

  self.class.id_generator.run(self, index)
end
pre_process(field_definition, value) click to toggle source
# File lib/contentful/database_importer/resource.rb, line 66
def pre_process(field_definition, value)
  return value unless field_definition[:pre_process]

  transformation = field_definition[:pre_process]

  return send(transformation, value) if transformation.is_a? ::Symbol
  return transformation.call(value) if transformation.respond_to?(:call)

  raise
rescue StandardError
  error = 'Pre Process could not be done for '
  error += "#{field_definition[:maps_to]} - #{transformation}"
  raise error
end
process_relationships() click to toggle source
# File lib/contentful/database_importer/resource.rb, line 59
def process_relationships
  self.class.relationship_fields.each do |relationship_field_definition|
    relations = fetch_relations(relationship_field_definition)
    @bootstrap_fields[relationship_field_definition[:maps_to]] = relations
  end
end
process_row_field(db_name, value) click to toggle source
# File lib/contentful/database_importer/resource.rb, line 44
def process_row_field(db_name, value)
  field_definition = self.class.fields.find { |f| f[:db_name] == db_name }

  return unless field_definition

  value = pre_process(field_definition, value)
  value = coerce(field_definition, value)

  if field_definition[:exclude_from_output]
    @excluded_fields[field_definition[:maps_to]] = value
  else
    @bootstrap_fields[field_definition[:maps_to]] = value
  end
end