activerecord-importer 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -4,7 +4,10 @@ module ActiveRecord::Importer
4
4
 
5
5
  class Runner
6
6
 
7
- def initialize( db_config_path = 'database.yml', db_source_key = 'source', db_dest_key = 'dest' )
7
+ def initialize( db_config_path = 'database.yml',
8
+ db_source_key = 'source',
9
+ db_dest_key = 'dest',
10
+ db_props_table_name = 'props' )
8
11
 
9
12
  @db_config = YAML.load_file( db_config_path )
10
13
 
@@ -16,23 +19,59 @@ module ActiveRecord::Importer
16
19
 
17
20
  puts "datasource new:"
18
21
  pp @db_dest
22
+
23
+ # lets use a props model for tracking versions/imports
24
+ @prop_clazz = Class.new( ActiveRecord::Base ) # same as class Anoynymous < ActiveRecord::Base ; end
25
+ @prop_clazz.table_name = db_props_table_name # same as self.table_name = 'new_table_name'
26
+ end
27
+
28
+ ## todo: use connect_old! w/ !!! - check ar for convetion
29
+ def connect_old
30
+ ActiveRecord::Base.establish_connection( @db_source )
31
+ end
32
+
33
+ def connect_new
34
+ ActiveRecord::Base.establish_connection( @db_dest )
35
+ end
36
+
37
+ def connect( key )
38
+ ActiveRecord::Base.establish_connection( @db_config[ key ] )
39
+ end
40
+
41
+
42
+ def import( items )
43
+
44
+ items.each_with_index do |item,index|
45
+ model_clazz = item[0]
46
+ sql = item[1]
47
+ puts "Importing step #{index+1}/#{items.size}..."
48
+ import_table( model_clazz, sql )
49
+ end
50
+
51
+ version = version_string()
52
+
53
+ puts "Adding version string >#{version}<..."
54
+ @prop_clazz.create!( :key => 'db.version.import', :value => version )
55
+ puts "OK"
19
56
  end
20
-
21
-
57
+
58
+
22
59
  ### sql - source query
23
60
  ### model_clazz - target model/table
24
-
25
- def import( sql, model_clazz )
26
61
 
27
- ActiveRecord::Base.establish_connection( @db_source )
62
+ def import_table( model_clazz, sql )
63
+
64
+ connect_old()
65
+
66
+ puts "Fetching records with query >#{sql}<..."
28
67
 
29
68
  recs = ActiveRecord::Base.connection.execute( sql )
30
69
 
31
- puts "SQL>#{sql}<"
70
+ puts "OK - Found #{recs.length} records."
32
71
 
33
- puts "#{model_clazz.name} -> Found #{recs.length} Records"
72
+ connect_new()
34
73
 
35
- ActiveRecord::Base.establish_connection( @db_dest )
74
+ puts "Adding records to table >#{model_clazz.name}<..."
36
75
 
37
76
  recs.each_with_index do |rec,i|
38
77
 
@@ -50,35 +89,24 @@ module ActiveRecord::Importer
50
89
  print "\r\n" if ((i+1) % 80) == 0 # add new line after 80 records
51
90
 
52
91
  #debug_dump_record( rec )
53
- model_clazz.create!( downcase_hash( rec ) )
92
+ model_clazz.create!( downcase_hash( rec ) )
54
93
  end
55
94
 
56
- puts "OK"
95
+ puts "OK"
57
96
  end
58
97
 
59
- def version_string
60
-
61
- username = ENV['USERNAME'] || '!!(username missing)'
62
- computername = ENV['COMPUTERNAME'] || '!!(computername missing)'
63
-
64
- buf = ""
65
- buf << "generated on #{Time.now} "
66
- buf << "by #{username} @ #{computername} "
67
- buf << "using Ruby #{RUBY_VERSION} (#{RUBY_RELEASE_DATE}) [#{RUBY_PLATFORM}]"
68
- buf
69
- end
70
-
71
98
 
72
99
  def debug_dump_table( sql )
73
100
 
74
- ActiveRecord::Base.establish_connection( @db_source )
75
- puts "OK - Verbindung erfolgreich aufgebaut!!!"
101
+ connect_old()
102
+ puts "OK - Connection successfully established."
103
+
104
+ puts "SQL>#{sql}<"
76
105
 
77
106
  recs = ActiveRecord::Base.connection.execute( sql )
78
107
 
79
- puts "OK - Found #{recs.length} Records!!!"
108
+ puts "OK - Found #{recs.length} records."
80
109
 
81
- puts "SQL>#{sql}<"
82
110
 
83
111
  recs.each do |rec|
84
112
  print '.'
@@ -88,9 +116,21 @@ def debug_dump_table( sql )
88
116
  puts "OK"
89
117
  end
90
118
 
91
-
92
-
119
+
93
120
  private
121
+
122
+ def version_string
123
+
124
+ username = ENV['USERNAME'] || '!!(username missing)'
125
+ computername = ENV['COMPUTERNAME'] || '!!(computername missing)'
126
+
127
+ buf = ""
128
+ buf << "generated on #{Time.now} "
129
+ buf << "by #{username} @ #{computername} "
130
+ buf << "using Ruby #{RUBY_VERSION} (#{RUBY_RELEASE_DATE}) [#{RUBY_PLATFORM}]"
131
+ buf
132
+ end
133
+
94
134
  def downcase_hash( hash )
95
135
  new_hash = {}
96
136
  hash.each do |k,v|
@@ -104,7 +144,7 @@ def downcase_hash( hash )
104
144
  end
105
145
  end
106
146
  new_hash
107
- end
147
+ end
108
148
 
109
149
  def debug_dump_record( hash )
110
150
  hash.each do |k,v|
@@ -2,6 +2,5 @@
2
2
  module ActiveRecord ; end # forward reference
3
3
 
4
4
  module ActiveRecord::Importer
5
- VERSION = "0.1.0"
5
+ VERSION = '0.2.0'
6
6
  end
7
-
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activerecord-importer
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
4
+ hash: 23
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 1
8
+ - 2
9
9
  - 0
10
- version: 0.1.0
10
+ version: 0.2.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Gerald Bauer
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-11-30 00:00:00 Z
18
+ date: 2012-12-03 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: rdoc
@@ -40,11 +40,11 @@ dependencies:
40
40
  requirements:
41
41
  - - ~>
42
42
  - !ruby/object:Gem::Version
43
- hash: 7
43
+ hash: 1
44
44
  segments:
45
45
  - 3
46
- - 0
47
- version: "3.0"
46
+ - 3
47
+ version: "3.3"
48
48
  type: :development
49
49
  version_requirements: *id002
50
50
  description: activerecord-importer - Another Data Importer