Class: DriveTime::WorksheetConverter

Inherits:
Object
  • Object
show all
Defined in:
lib/drive_time/converters/worksheet_converter.rb

Defined Under Namespace

Classes: NoClassWithTitleError, NoFieldNameError, NoKeyError, NoMethodError, PolymorphicAssociationError

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(model_store, class_name_map, loader, namespace) ⇒ WorksheetConverter

Returns a new instance of WorksheetConverter.



13
14
15
16
17
18
19
# File 'lib/drive_time/converters/worksheet_converter.rb', line 13

def initialize(model_store, class_name_map, loader, namespace)
  @class_name_map = class_name_map
  @model_store = model_store
  @loader = loader
  @namespace = namespace
  @field_expander = FieldExpander.new(@loader)
end

Instance Attribute Details

#row_mapObject

Returns the value of attribute row_map.



5
6
7
# File 'lib/drive_time/converters/worksheet_converter.rb', line 5

def row_map
  @row_map
end

Instance Method Details

#convert(worksheet) ⇒ Object



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/drive_time/converters/worksheet_converter.rb', line 21

def convert(worksheet)
  Logger.log_as_header "Converting worksheet: #{worksheet.title}"
  # Use the spreadsheet name unless 'map_to_class' is set
  class_name = DriveTime.class_name_from_title(worksheet.title)
  class_name = @class_name_map.resolve_mapped_from_original class_name
  Logger.debug "Converting Worksheet #{worksheet.title} to class #{class_name}"
  # Check class exists - better we know immediately
  begin
    clazz = namespaced_class_name class_name
  rescue StandardError => error
    raise NoClassWithTitleError, "Worksheet named #{worksheet.title} doesn't exists as class #{class_name}"
  end
  rows = worksheet.rows.dup
  # Remove the first row and use it for field-names
  fields = rows.shift.map{ |row| row }
  # Reject rows of only empty strings (empty cells).
  rows.reject! {|row| row.all?(&:empty?)}
  rows.each do |row|
    generate_model_from_row clazz, worksheet.mapping, fields, row
  end
end