Class: Radiant::Setup

Inherits:
Object
  • Object
show all
Defined in:
lib/radiant_setup_create_records_patch.rb

Instance Method Summary collapse

Instance Method Details

#create_records(template) ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/radiant_setup_create_records_patch.rb', line 3

def create_records(template)
  records = template['records']
  if records
    puts
    records.keys.each do |key|
      table = key.underscore
      # assume this is an ActiveRecord model if table has column 'id'
      if key == "Radiant::Configs" || ActiveRecord::Base.connection.columns(table).map { |c| c.name }.include?("id")
        feedback "Importing '#{key.to_s.underscore.humanize.titleize}' table data" do
          model = model(key)
          model.reset_column_information
          record_pairs = order_by_id(records[key])
          step do
            record_pairs.each do |id, record|
              begin
                #puts "i: #{id}"
                #puts "r: #{record}"
                #puts
                r = model.new(record)
                r.id = id
                r.save
                # UserActionObserver sets user to null, so we have to update explicitly
                model.update_all({:created_by_id => record['created_by_id']}, {:id => r.id}) if r.respond_to? :created_by_id
              rescue Exception => e
                puts "Failed to create record #{id}. Reason: #{e}"
              end
            end
          end
        end
      else
         feedback "Importing '#{key.to_s.underscore.humanize.titleize}' join table data" do
           table = key.underscore
           record_pairs = records[key].sort
           step do
             record_pairs.each do |id, record|
               begin
                 sql = "INSERT INTO #{table} (#{record.keys.join(", ")}) VALUES (#{record.values.join(", ")})"
                 ActiveRecord::Base.connection.execute(sql)
               rescue Exception => e
                 puts "Failed to create record #{id}. Reason: #{e}"
               end
             end
           end          
         end
      end
    end
  end
end