diff --git a/app/models/bike_csv_importer.rb b/app/models/bike_csv_importer.rb index f9694b3..cf80a0f 100644 --- a/app/models/bike_csv_importer.rb +++ b/app/models/bike_csv_importer.rb @@ -1,24 +1,32 @@ require 'csv' +# Gone -> If "Yes", set 'gone' to true, then create a Log entry like the following: +# id | loggable_id | loggable_type | logger_id | logger_type | context | start_date | end_date | description | log_action_id | log_action_type | created_at | updated_at +# 18 | 1 | Bike | 4 | User | | 2017-02-03 23:27:00 | 2017-02-03 23:27:00 | Gone | 5 | ActsAsLoggable::BikeAction | 2017-02-03 23:27:36.8387 | 2017-02-03 23:27:36.8387 +# See https://github.com/spacemunkay/BikeShed/blob/master/app/components/bike_logs.rb#L12-L18 for example. Use user_id 1 for current_user_id (1 should be the admin ID I think). Use "Date Out" column for start_date & end_date. Set action_id to "COMPLETED". +# +# Date In -> Create a bike log entry with start_date & end_date with same value as "Date In". Set action_id to "AQUIRED" +# Date Out -> Should be the start_date & end_date value for "Gone" column mentioned above. +# Comment -> Create a bike log entry with action_id "NOTE". The log 'description' should be the value of 'Comment'. + class BikeCsvImporter include BikeCsvImporter::Cache include BikeCsvImporter::Cleaner include BikeCsvImporter::BikeAttrs - attr_reader :file, :dry_run + attr_reader :file - def initialize(file, dry_run) - @file = file - @dry_run = !!dry_run + def initialize(file) + @file = file end - def run + def run(dry_run) result = {imported: {}, skipped: {}} fetch do |bike_hash| - bike = import_bike bike_hash - check_method = dry_run ? :valid? : :persisted? + bike = new_bike bike_hash + check_method = dry_run ? :valid? : :save if bike.try check_method result[:imported][bike.shop_id] = bike.inspect else @@ -65,18 +73,7 @@ class BikeCsvImporter @header.zip(row).to_h end - # Gone -> If "Yes", set 'gone' to true, then create a Log entry like the following: - # id | loggable_id | loggable_type | logger_id | logger_type | context | start_date | end_date | description | log_action_id | log_action_type | created_at | updated_at - # 18 | 1 | Bike | 4 | User | | 2017-02-03 23:27:00 | 2017-02-03 23:27:00 | Gone | 5 | ActsAsLoggable::BikeAction | 2017-02-03 23:27:36.8387 | 2017-02-03 23:27:36.8387 - # See https://github.com/spacemunkay/BikeShed/blob/master/app/components/bike_logs.rb#L12-L18 for example. Use user_id 1 for current_user_id (1 should be the admin ID I think). Use "Date Out" column for start_date & end_date. Set action_id to "COMPLETED". - # - # Date In -> Create a bike log entry with start_date & end_date with same value as "Date In". Set action_id to "AQUIRED" - # Date Out -> Should be the start_date & end_date value for "Gone" column mentioned above. - # Comment -> Create a bike log entry with action_id "NOTE". The log 'description' should be the value of 'Comment'. - def import_bike(bike_hash) - bike = Bike.new bike_attrs(bike_hash) - #bike.save unless dry_run - raise 'TODO save' unless dry_run - bike + def new_bike(bike_hash) + Bike.new bike_attrs(bike_hash) end end diff --git a/lib/tasks/import.rake b/lib/tasks/import.rake index f459413..7a28b57 100644 --- a/lib/tasks/import.rake +++ b/lib/tasks/import.rake @@ -5,7 +5,7 @@ namespace :import do file, dry_run = args.values_at :file, :dry_run next puts "Usage: rake #{t.name}[$csv_file_path[,$dry_run=dry]]" unless file next puts "File #{file} does not exist or is unreachable" unless File.readable? file - pp BikeCsvImporter.new(file, dry_run == 'dry').run + BikeCsvImporter.new(file).run dry_run == 'dry' end # Analyze a single field from CSV file @@ -13,7 +13,7 @@ namespace :import do file, field = args.values_at :file, :field next puts "Usage: rake #{t.name}[$csv_file_path[,\"$field_name\"]]" unless file next puts "File #{file} does not exist or is unreachable" unless File.readable? file - pp BikeCsvImporter.new(file).analyze field ? [field] : [] + BikeCsvImporter.new(file).analyze field ? [field] : [] end end end