Module: ASpaceImport::CSVConvert
  
  
  
  
  
    
  
    
  
  
    - Included in:
 
    - AccessionConverter, DigitalObjectConverter
 
    
  
  
    - Defined in:
 
    - backend/app/converters/lib/csv_converter.rb
 
  
Defined Under Namespace
  
    
      Modules: ClassMethods
    
  
    
      Classes: CSVSyntaxException, CellHandler
    
  
    
  
  
    
      Class Method Summary
      (collapse)
    
    
  
    
      Instance Method Summary
      (collapse)
    
    
  
  
    Class Method Details
    
      
  
  
    + (Object) included(base) 
  
  
  
  
    
      
37
38
39 
     | 
    
      # File 'backend/app/converters/lib/csv_converter.rb', line 37
def self.included(base)
  base.extend(ClassMethods)
end
 
     | 
  
 
    
   
  
    Instance Method Details
    
      
  
  
    - (Object) configuration 
  
  
  
  
    
      
42
43
44 
     | 
    
      # File 'backend/app/converters/lib/csv_converter.rb', line 42
def configuration
  self.class.configuration
end
 
     | 
  
 
    
      
  
  
    - (Object) get_new(key) 
  
  
  
  
    
      
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134 
     | 
    
      # File 'backend/app/converters/lib/csv_converter.rb', line 109
def get_new(key)
  conf = configuration[key.to_sym] || {}
  type = conf[:record_type] ? conf[:record_type] : key
  proxy = @proxies.get_proxy_for(key, type)
  if conf[:on_create]
    proxy.on_spawn(conf[:on_create])
  end
  
  if conf[:defaults]
    conf[:defaults].each do |key, val|
      proxy.on_discharge(self, :set_default, key, val)
    end
  end
  
  if conf[:on_row_complete]
    proxy.on_discharge(conf[:on_row_complete], :call, @batch.working_area)
  end
  proxy
end
     | 
  
 
    
      
  
  
    - (Object) get_queued_or_new(key) 
  
  
  
  
    
      
99
100
101
102
103
104
105
106 
     | 
    
      # File 'backend/app/converters/lib/csv_converter.rb', line 99
def get_queued_or_new(key)
  if (prox = @batch.working_area.find {|j| j.key == key })
    yield  prox
  elsif (prox = get_new(key))
    yield prox
    @batch << prox
  end
end
     | 
  
 
    
      
  
  
    - (Object) parse_cell(handler, cell_contents) 
  
  
  
  
    
      
84
85
86
87
88
89
90
91
92
93
94
95
96 
     | 
    
      # File 'backend/app/converters/lib/csv_converter.rb', line 84
def parse_cell(handler, cell_contents)
  return nil unless handler
  val = handler.(cell_contents)
  return nil unless val
  get_queued_or_new(handler.target_key) do |prox|
    property = handler.target_path
    prox.set(property, val)
  end
end
     | 
  
 
    
      
  
  
    - (Object) parse_row(row) 
  
  
  
  
    
      
70
71
72
73
74
75
76
77
78
79
80
81 
     | 
    
      # File 'backend/app/converters/lib/csv_converter.rb', line 70
def parse_row(row)
  row.each_with_index { |cell, i| parse_cell(@cell_handlers[i], cell) }
  
  @batch.working_area.map! {|proxy| proxy.spawn }.compact!
  
  @batch.working_area.each { |obj| @proxies.discharge_proxy(obj.key, obj) }
  
  @batch.flush
end
     | 
  
 
    
      
  
  
    - (Object) run 
  
  
  
  
    
      
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67 
     | 
    
      # File 'backend/app/converters/lib/csv_converter.rb', line 47
def run
  @cell_handlers = []
  @proxies = ASpaceImport::RecordProxyMgr.new
  CSV.foreach(@input_file, 'r:bom|utf-8') do |row|
    if @cell_handlers.empty?
      @cell_handlers,  = self.class.configure_cell_handlers(row)
      unless .empty?
        Log.warn("Data source has headers that aren't defined: #{bad_headers.join(', ')}")
      end
    else
      parse_row(row)
    end
  end
  @proxies.undischarged.each do |prox|
    Log.warn("Undischarged: #{prox.to_s}")
  end
end
     | 
  
 
    
      
  
  
    - (Object) set_default(property, val, obj) 
  
  
  
  
    
      
137
138
139
140
141 
     | 
    
      # File 'backend/app/converters/lib/csv_converter.rb', line 137
def set_default(property, val, obj)
  if obj.send("#{property}").nil?
    obj.send("#{property}=", val)
  end
end
     |