@@ -6,12 +6,17 @@ namespace :import_data do
66
77 # This is a starting point for the import process
88 # We will refactor for elegance
9+ # It is not idempotent; it presumes a clean database except for seeds
10+
11+ desc "All"
12+ task all : [ :regions , :providers , :topics ]
913
1014 desc "Import Providers and Associate With Regions"
1115 task providers : :environment do
1216 file_path = Rails . root . join ( "import_files" , "Providers.csv" )
1317 data = CSV . read ( file_path , headers : true )
1418 data . each do |row |
19+ # TODO: add old_provider_id to Provider model
1520 provider = Provider . find_or_create_by! ( name : row [ "Provider_Name" ] , provider_type : row [ "Provider_Type" ] )
1621 region = Region . find_or_create_by! ( name : row [ "region_name" ] )
1722 # TODO: we need the association table
@@ -22,7 +27,7 @@ namespace :import_data do
2227 puts "Provider #{ provider . name } associated with region #{ region . name } "
2328
2429 user = User . find_or_create_by! ( email_address : "#{ row [ "Provider_Name" ] . underscore . downcase } @update.me" , password_digest : BCrypt ::Password . create ( row [ "Provider_Password" ] ) , is_admin : false )
25- # TODO: add provider_id once that association is in place
30+ user . update ( provider_id : provider . id )
2631 puts "User #{ user . email_address } created"
2732 end
2833 end
@@ -32,11 +37,18 @@ namespace :import_data do
3237 file_path = Rails . root . join ( "import_files" , "Topics.csv" )
3338 data = CSV . read ( file_path , headers : true )
3439 data . each do |row |
35- topic = Topic . find_or_create_by! ( name : row [ "Topic_Name" ] )
36- provider = Provider . find_by ( name : row [ "Provider_Name" ] )
37- topic . providers << provider
38- puts "Topic #{ topic . name } associated with provider #{ provider . name } "
40+ # look up provider by old_provider_id
41+ provider = Provider . find_by ( old_provider_id : row [ "Provider_ID" ] )
42+ # Language IDs should correspond to the IDs in old app
43+ # TODO: verify before final import
44+ topic = Topic . find_or_create_by! ( name : row [ "Topic_Name" ] , provider_id : provider . id , description : row [ "Topic_Desc" ] ,
45+ language_id : row [ "Language_ID" ] , uid : row [ "Topic_UID" ] , state : determine_state ( row [ "Topic_Archived" ] , old_topic_id : row [ "topic_id" ] ) )
46+ puts "Topic #{ topic . name } created"
3947 end
40-
48+ end
49+
50+ def determine_state ( archived )
51+ # TODO: validate against state enumerable
52+ archived ? "archived" : "published"
4153 end
4254end
0 commit comments