From 3461e93e814dcbbe2aa17770bacb5287d4caa76f Mon Sep 17 00:00:00 2001 From: Rob Kaufman Date: Wed, 29 Nov 2017 10:54:18 -0800 Subject: [PATCH 1/4] update to rails 4/5 support --- README.md | 14 ++-- VERSION.yml | 4 +- lib/generators/truck/USAGE | 1 + lib/generators/truck/lib/insert_commands.rb | 68 +++++++++++++++++++ lib/generators/truck/templates/legacy_base.rb | 11 +++ .../truck/templates/legacy_model.erb | 11 +++ .../truck/templates/legacy_task.erb | 23 +++++++ lib/generators/truck/truck_generator.rb | 30 ++++++++ 8 files changed, 153 insertions(+), 9 deletions(-) create mode 100644 lib/generators/truck/USAGE create mode 100644 lib/generators/truck/lib/insert_commands.rb create mode 100644 lib/generators/truck/templates/legacy_base.rb create mode 100644 lib/generators/truck/templates/legacy_model.erb create mode 100644 lib/generators/truck/templates/legacy_task.erb create mode 100644 lib/generators/truck/truck_generator.rb diff --git a/README.md b/README.md index 30bdaa6..c6e5988 100644 --- a/README.md +++ b/README.md @@ -3,19 +3,19 @@ Use Trucker to migrate legacy data into your Rails app. ## Installation -1. Install the trucker gem - ```bash - sudo gem install trucker +1. Add the trucker gem in to your Gemfile + ```ruby + gem 'trucker' ``` -2. Add trucker to your `config.gem` block in `environment.rb`. - ```ruby - config.gem "trucker" +2. Bundle + ```bash + bundle install ``` 3. Generate the basic trucker files ```bash - script/generate truck + rails g truck ``` This will do the following things: diff --git a/VERSION.yml b/VERSION.yml index a850afb..1348797 100644 --- a/VERSION.yml +++ b/VERSION.yml @@ -1,5 +1,5 @@ --- :patch: 1 :build: -:major: 0 -:minor: 5 +:major: 1 +:minor: 0 diff --git a/lib/generators/truck/USAGE b/lib/generators/truck/USAGE new file mode 100644 index 0000000..8cd42a3 --- /dev/null +++ b/lib/generators/truck/USAGE @@ -0,0 +1 @@ +script/generate truck \ No newline at end of file diff --git a/lib/generators/truck/lib/insert_commands.rb b/lib/generators/truck/lib/insert_commands.rb new file mode 100644 index 0000000..e8534df --- /dev/null +++ b/lib/generators/truck/lib/insert_commands.rb @@ -0,0 +1,68 @@ +# Mostly pinched from http://github.com/ryanb/nifty-generators/tree/master + +Rails::Generators::Actions.class_eval do + def file_contains?(relative_destination, line) + File.read(destination_path(relative_destination)).include?(line) + end + + def insert_before(file, line, stop='^(class|module) .+$') + logger.insert "#{line} into #{file}" + unless options[:pretend] || file_contains?(file, line) + gsub_file file, /^#{stop}/ do |match| + "#{line}\n#{match}" + end + end + end + + def insert_after(file, line, stop='^(class|module) .+$') + logger.insert "#{line} into #{file}" + @run = false + unless options[:pretend] || file_contains?(file, line) + gsub_file file, /#{stop}/ do |match| + @run = true + "#{match}\n #{line}" + end + raise "Append Key Not Found, was looking for #{stop}" unless @run + end + end + + def append(file, line) + logger.insert "added legacy adapter to end of database.yml" + unless options[:pretend] || file_contains?(file, line) + File.open(file, "a") do |file| + file.write("\n" + line) + end + end + end + + def insert_before(file, line, stop='') + logger.remove "#{line} from #{file}" + unless options[:pretend] + gsub_file file, "\n #{line}", '' + end + end + + def insert_after(file, line, stop='') + logger.remove "#{line} from #{file}" + unless options[:pretend] + gsub_file file, "\n #{line}", '' + end + end + + def append(file, line) + logger.insert "added legacy adapter to end of database.yml" + end + + def insert_before(file, line, stop='') + logger.insert "#{line} into #{file}" + end + + def insert_after(file, line, stop='') + logger.insert "#{line} into #{file}" + end + + def append(file, line) + logger.insert "added legacy adapter to end of database.yml" + end + +end diff --git a/lib/generators/truck/templates/legacy_base.rb b/lib/generators/truck/templates/legacy_base.rb new file mode 100644 index 0000000..9e6a5b7 --- /dev/null +++ b/lib/generators/truck/templates/legacy_base.rb @@ -0,0 +1,11 @@ +class LegacyBase < ActiveRecord::Base + self.abstract_class = true + establish_connection "legacy" + + def migrate + new_record = self.class.to_s.gsub(/Legacy/,'::').constantize.new(map) + new_record[:id] = self.id + new_record.save + end + +end diff --git a/lib/generators/truck/templates/legacy_model.erb b/lib/generators/truck/templates/legacy_model.erb new file mode 100644 index 0000000..f89795d --- /dev/null +++ b/lib/generators/truck/templates/legacy_model.erb @@ -0,0 +1,11 @@ +class Legacy<%= config[:model_name].classify %> < LegacyBase + self.table_name = "<%= config[:model_name].pluralize %>" + + def map + { + :field_one => self.old_field_one.squish, + :field_two => self.old_field_two.squish + } + end + +end diff --git a/lib/generators/truck/templates/legacy_task.erb b/lib/generators/truck/templates/legacy_task.erb new file mode 100644 index 0000000..58f1501 --- /dev/null +++ b/lib/generators/truck/templates/legacy_task.erb @@ -0,0 +1,23 @@ +require 'trucker' +include Trucker + +namespace :db do + namespace :migrate do + + <%- unless config[:legacy_models].size > 0 -%> + # desc 'Migrates products' + # task :products => :environment do + # migrate :products + # end + <%- end -%> + + <%- config[:legacy_models].each do |model_name| -%> + desc 'Migrates <%= model_name.pluralize.downcase %>' + task :<%= model_name.pluralize.downcase %> => :environment do + Trucker.migrate :<%= model_name.pluralize.downcase %> + end + + <%- end -%> + + end +end diff --git a/lib/generators/truck/truck_generator.rb b/lib/generators/truck/truck_generator.rb new file mode 100644 index 0000000..b65f221 --- /dev/null +++ b/lib/generators/truck/truck_generator.rb @@ -0,0 +1,30 @@ +require File.expand_path(File.dirname(__FILE__) + "/lib/insert_commands.rb") + +class TruckGenerator < Rails::Generators::Base + source_root File.expand_path("../templates", __FILE__) + def manifest + @legacy_models = Dir.glob(Rails.root.join('app/models/*.rb')).collect { |model_path| File.basename(model_path).gsub('.rb', '') } + empty_directory 'app/models/legacy' + copy_file 'legacy_base.rb', 'app/models/legacy/legacy_base.rb' + + @legacy_models.each do |model_name| + template 'legacy_model.erb', "app/models/legacy/legacy_#{model_name.downcase}.rb", { :model_name => model_name } + end + + empty_directory 'lib/tasks' + template 'legacy_task.erb', 'lib/tasks/legacy.rake', { :legacy_models => @legacy_models } + + snippet = < Date: Wed, 29 Nov 2017 10:54:29 -0800 Subject: [PATCH 2/4] drops rails 3 support --- generators/truck/USAGE | 1 - generators/truck/lib/insert_commands.rb | 76 --------------------- generators/truck/templates/legacy_base.rb | 11 --- generators/truck/templates/legacy_model.erb | 11 --- generators/truck/templates/legacy_task.erb | 23 ------- generators/truck/truck_generator.rb | 36 ---------- 6 files changed, 158 deletions(-) delete mode 100644 generators/truck/USAGE delete mode 100644 generators/truck/lib/insert_commands.rb delete mode 100644 generators/truck/templates/legacy_base.rb delete mode 100644 generators/truck/templates/legacy_model.erb delete mode 100644 generators/truck/templates/legacy_task.erb delete mode 100644 generators/truck/truck_generator.rb diff --git a/generators/truck/USAGE b/generators/truck/USAGE deleted file mode 100644 index 8cd42a3..0000000 --- a/generators/truck/USAGE +++ /dev/null @@ -1 +0,0 @@ -script/generate truck \ No newline at end of file diff --git a/generators/truck/lib/insert_commands.rb b/generators/truck/lib/insert_commands.rb deleted file mode 100644 index e8c4abd..0000000 --- a/generators/truck/lib/insert_commands.rb +++ /dev/null @@ -1,76 +0,0 @@ -# Mostly pinched from http://github.com/ryanb/nifty-generators/tree/master - -Rails::Generator::Commands::Base.class_eval do - def file_contains?(relative_destination, line) - File.read(destination_path(relative_destination)).include?(line) - end -end - -Rails::Generator::Commands::Create.class_eval do - def insert_before(file, line, stop='^(class|module) .+$') - logger.insert "#{line} into #{file}" - unless options[:pretend] || file_contains?(file, line) - gsub_file file, /^#{stop}/ do |match| - "#{line}\n#{match}" - end - end - end - - def insert_after(file, line, stop='^(class|module) .+$') - logger.insert "#{line} into #{file}" - @run = false - unless options[:pretend] || file_contains?(file, line) - gsub_file file, /#{stop}/ do |match| - @run = true - "#{match}\n #{line}" - end - raise "Append Key Not Found, was looking for #{stop}" unless @run - end - end - - def append(file, line) - logger.insert "added legacy adapter to end of database.yml" - unless options[:pretend] || file_contains?(file, line) - File.open(file, "a") do |file| - file.write("\n" + line) - end - end - end - -end - -Rails::Generator::Commands::Destroy.class_eval do - def insert_before(file, line, stop='') - logger.remove "#{line} from #{file}" - unless options[:pretend] - gsub_file file, "\n #{line}", '' - end - end - - def insert_after(file, line, stop='') - logger.remove "#{line} from #{file}" - unless options[:pretend] - gsub_file file, "\n #{line}", '' - end - end - - def append(file, line) - logger.insert "added legacy adapter to end of database.yml" - end - -end - -Rails::Generator::Commands::List.class_eval do - def insert_before(file, line, stop='') - logger.insert "#{line} into #{file}" - end - - def insert_after(file, line, stop='') - logger.insert "#{line} into #{file}" - end - - def append(file, line) - logger.insert "added legacy adapter to end of database.yml" - end - -end diff --git a/generators/truck/templates/legacy_base.rb b/generators/truck/templates/legacy_base.rb deleted file mode 100644 index 9e6a5b7..0000000 --- a/generators/truck/templates/legacy_base.rb +++ /dev/null @@ -1,11 +0,0 @@ -class LegacyBase < ActiveRecord::Base - self.abstract_class = true - establish_connection "legacy" - - def migrate - new_record = self.class.to_s.gsub(/Legacy/,'::').constantize.new(map) - new_record[:id] = self.id - new_record.save - end - -end diff --git a/generators/truck/templates/legacy_model.erb b/generators/truck/templates/legacy_model.erb deleted file mode 100644 index 746010a..0000000 --- a/generators/truck/templates/legacy_model.erb +++ /dev/null @@ -1,11 +0,0 @@ -class Legacy<%= model_name.classify %> < LegacyBase - self.table_name = "<%= model_name.pluralize %>" - - def map - { - :field_one => self.old_field_one.squish, - :field_two => self.old_field_two.squish - } - end - -end \ No newline at end of file diff --git a/generators/truck/templates/legacy_task.erb b/generators/truck/templates/legacy_task.erb deleted file mode 100644 index 02fd8ae..0000000 --- a/generators/truck/templates/legacy_task.erb +++ /dev/null @@ -1,23 +0,0 @@ -require 'trucker' -include Trucker - -namespace :db do - namespace :migrate do - - <%- unless legacy_models.size > 0 -%> - # desc 'Migrates products' - # task :products => :environment do - # migrate :products - # end - <%- end -%> - - <%- legacy_models.each do |model_name| -%> - desc 'Migrates <%= model_name.pluralize.downcase %>' - task :<%= model_name.pluralize.downcase %> => :environment do - Trucker.migrate :<%= model_name.pluralize.downcase %> - end - - <%- end -%> - - end -end \ No newline at end of file diff --git a/generators/truck/truck_generator.rb b/generators/truck/truck_generator.rb deleted file mode 100644 index f09ef1d..0000000 --- a/generators/truck/truck_generator.rb +++ /dev/null @@ -1,36 +0,0 @@ -require File.expand_path(File.dirname(__FILE__) + "/lib/insert_commands.rb") - -class TruckGenerator < Rails::Generator::Base - - def manifest - record do |m| - @legacy_models = Dir.glob(RAILS_ROOT + '/app/models/*.rb').collect { |model_path| File.basename(model_path).gsub('.rb', '') } - - m.directory 'app/models/legacy' - m.file 'legacy_base.rb', 'app/models/legacy/legacy_base.rb' - - @legacy_models.each do |model_name| - m.template 'legacy_model.erb', "app/models/legacy/legacy_#{model_name.downcase}.rb", :assigns => { :model_name => model_name } - end - - m.directory 'lib/tasks' - m.template 'legacy_task.erb', 'lib/tasks/legacy.rake', :assigns => { :legacy_models => @legacy_models } - - snippet = < Date: Wed, 29 Nov 2017 12:47:20 -0800 Subject: [PATCH 3/4] connection update --- lib/generators/truck/truck_generator.rb | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/generators/truck/truck_generator.rb b/lib/generators/truck/truck_generator.rb index b65f221..7e65cf1 100644 --- a/lib/generators/truck/truck_generator.rb +++ b/lib/generators/truck/truck_generator.rb @@ -16,7 +16,7 @@ def manifest snippet = < Date: Wed, 29 Nov 2017 13:04:08 -0800 Subject: [PATCH 4/4] working on query under rails 5 --- lib/trucker.rb | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/lib/trucker.rb b/lib/trucker.rb index dec0110..ffa9a67 100644 --- a/lib/trucker.rb +++ b/lib/trucker.rb @@ -20,10 +20,10 @@ def self.migrate(name, options={}) # Set import counter counter = 0 counter += offset_for_records if offset_for_records - total_records = "Legacy#{model}".constantize.find(:all).size + total_records = "Legacy#{model}".constantize.count # Start import - "Legacy#{model}".constantize.find(:all, with(options)).each do |record| + "Legacy#{model}".constantize.limit(number_of_records).offset(offset_for_records).each do |record| counter += 1 puts status + " (#{counter}/#{total_records})" record.migrate @@ -35,10 +35,6 @@ def self.migrate(name, options={}) protected - def self.with(options={}) - {:limit => number_of_records, :offset => offset_for_records}.merge(options) - end - def self.number_of_records nil || ENV['limit'].to_i if ENV['limit'].to_i > 0 end