Class: ActiveRecord::Importer::Runner

Inherits:
Object
  • Object
show all
Defined in:
lib/activerecord/importer/runner.rb

Instance Method Summary collapse

Constructor Details

#initialize(db_config_path = 'database.yml', db_source_key = 'source', db_dest_key = 'dest', db_props_table_name = 'props') ⇒ Runner

Returns a new instance of Runner.



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/activerecord/importer/runner.rb', line 7

def initialize( db_config_path = 'database.yml',
                db_source_key = 'source',
                db_dest_key = 'dest',
                db_props_table_name = 'props' )

  @db_config = YAML.load_file( db_config_path )

  @db_source = @db_config[ db_source_key ]
  @db_dest   = @db_config[ db_dest_key   ]
  
  puts "datasource old:"
  pp @db_source

  puts "datasource new:"
  pp @db_dest

  # lets use a props model for tracking versions/imports
  @prop_clazz = Class.new( ActiveRecord::Base )   # same as  class Anoynymous < ActiveRecord::Base ; end
  @prop_clazz.table_name = db_props_table_name     # same as   self.table_name = 'new_table_name'
end

Instance Method Details

#connect(key) ⇒ Object



37
38
39
# File 'lib/activerecord/importer/runner.rb', line 37

def connect( key )
  ActiveRecord::Base.establish_connection(  @db_config[ key ] )
end

#connect_newObject



33
34
35
# File 'lib/activerecord/importer/runner.rb', line 33

def connect_new
  ActiveRecord::Base.establish_connection(  @db_dest )
end

#connect_oldObject

todo: use connect_old! w/ !!! - check ar for convetion



29
30
31
# File 'lib/activerecord/importer/runner.rb', line 29

def connect_old
  ActiveRecord::Base.establish_connection( @db_source )
end

#debug_dump_table(sql) ⇒ Object



99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
# File 'lib/activerecord/importer/runner.rb', line 99

def debug_dump_table( sql )
  
  connect_old()
  puts "OK - Connection successfully established."

  puts "SQL>#{sql}<"

  recs = ActiveRecord::Base.connection.execute( sql )

  puts "OK - Found #{recs.length} records."


  recs.each do |rec|
    print '.'
    debug_dump_record( rec )
  end

  puts "OK"
end

#import(items) ⇒ Object



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/activerecord/importer/runner.rb', line 42

def import( items )

  items.each_with_index do |item,index|
    model_clazz = item[0]
    sql         = item[1]
    puts "Importing step #{index+1}/#{items.size}..."
    import_table( model_clazz, sql )
  end

  version = version_string()

  puts "Adding version string >#{version}<..."
  @prop_clazz.create!( :key => 'db.version.import', :value => version )
  puts "OK"
end

#import_table(model_clazz, sql) ⇒ Object

sql - source query model_clazz - target model/table



62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
# File 'lib/activerecord/importer/runner.rb', line 62

def import_table( model_clazz, sql )

  connect_old()

  puts "Fetching records with query >#{sql}<..."
  
  recs = ActiveRecord::Base.connection.execute( sql )

  puts "OK - Found #{recs.length} records."

  connect_new()

  puts "Adding records to table >#{model_clazz.name}<..."

  recs.each_with_index do |rec,i|

    # entertain use on console .....o....o...1000.. etc.
    if ((i+1) % 1000) == 0
      print (i+1)
    elsif ((i+1) % 100) == 0
      print 'O'
    elsif ((i+1) % 10) == 0
      print 'o'
    else
      print '.'  
    end
     
    print "\r\n" if ((i+1) % 80) == 0   # add new line after 80 records

    #debug_dump_record( rec )
    model_clazz.create!( downcase_hash( rec ) )
  end

  puts "OK"
end