From 8d541fc20282bb8cb2ab6a8762987c4e95bf2c51 Mon Sep 17 00:00:00 2001 From: Viktar Basharymau Date: Wed, 25 Jun 2014 12:29:32 +0300 Subject: Simplify complex code in databases.rake --- activerecord/lib/active_record/railties/databases.rake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'activerecord') diff --git a/activerecord/lib/active_record/railties/databases.rake b/activerecord/lib/active_record/railties/databases.rake index ecf5afc4f4..5ffa09f1e1 100644 --- a/activerecord/lib/active_record/railties/databases.rake +++ b/activerecord/lib/active_record/railties/databases.rake @@ -190,7 +190,7 @@ db_namespace = namespace :db do require 'active_record/fixtures' base_dir = if ENV['FIXTURES_PATH'] - File.join [Rails.root, ENV['FIXTURES_PATH'] || %w{test fixtures}].flatten + Rails.root.join(ENV['FIXTURES_PATH']) else ActiveRecord::Tasks::DatabaseTasks.fixtures_path end @@ -212,7 +212,7 @@ db_namespace = namespace :db do puts %Q(The fixture ID for "#{label}" is #{ActiveRecord::FixtureSet.identify(label)}.) if label base_dir = if ENV['FIXTURES_PATH'] - File.join [Rails.root, ENV['FIXTURES_PATH'] || %w{test fixtures}].flatten + Rails.root.join(ENV['FIXTURES_PATH']) else ActiveRecord::Tasks::DatabaseTasks.fixtures_path end -- cgit v1.2.3 From 13ff102c8439c683fb34371a0672d7b48e110d1f Mon Sep 17 00:00:00 2001 From: Viktar Basharymau Date: Wed, 25 Jun 2014 12:34:21 +0300 Subject: db:fixtures:{identify,load} tasks respect AR::Tasks::DatabaseTasks.root Before this commit, if `ENV['FIXTURES_PATH']` was set, then `Rails.root` was used, otherwise the app used `ActiveRecord::Tasks::DatabaseTasks.root`. Now it is consistent. --- activerecord/lib/active_record/railties/databases.rake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'activerecord') diff --git a/activerecord/lib/active_record/railties/databases.rake b/activerecord/lib/active_record/railties/databases.rake index 5ffa09f1e1..695ae2ae41 100644 --- a/activerecord/lib/active_record/railties/databases.rake +++ b/activerecord/lib/active_record/railties/databases.rake @@ -190,7 +190,7 @@ db_namespace = namespace :db do require 'active_record/fixtures' base_dir = if ENV['FIXTURES_PATH'] - Rails.root.join(ENV['FIXTURES_PATH']) + ActiveRecord::Tasks::DatabaseTasks.root.join(ENV['FIXTURES_PATH']) else ActiveRecord::Tasks::DatabaseTasks.fixtures_path end @@ -212,7 +212,7 @@ db_namespace = namespace :db do puts %Q(The fixture ID for "#{label}" is #{ActiveRecord::FixtureSet.identify(label)}.) if label base_dir = if ENV['FIXTURES_PATH'] - Rails.root.join(ENV['FIXTURES_PATH']) + ActiveRecord::Tasks::DatabaseTasks.root.join(ENV['FIXTURES_PATH']) else ActiveRecord::Tasks::DatabaseTasks.fixtures_path end -- cgit v1.2.3 From 0526fad51a06ee4b739c4ec0ecd9f26351f5c08f Mon Sep 17 00:00:00 2001 From: Viktar Basharymau Date: Wed, 25 Jun 2014 12:40:02 +0300 Subject: Get rid of duplication in db:fixtures:{identify,load} --- activerecord/lib/active_record/railties/databases.rake | 13 ++----------- activerecord/lib/active_record/tasks/database_tasks.rb | 6 +++++- 2 files changed, 7 insertions(+), 12 deletions(-) (limited to 'activerecord') diff --git a/activerecord/lib/active_record/railties/databases.rake b/activerecord/lib/active_record/railties/databases.rake index 695ae2ae41..2a44c9e559 100644 --- a/activerecord/lib/active_record/railties/databases.rake +++ b/activerecord/lib/active_record/railties/databases.rake @@ -189,11 +189,7 @@ db_namespace = namespace :db do task :load => [:environment, :load_config] do require 'active_record/fixtures' - base_dir = if ENV['FIXTURES_PATH'] - ActiveRecord::Tasks::DatabaseTasks.root.join(ENV['FIXTURES_PATH']) - else - ActiveRecord::Tasks::DatabaseTasks.fixtures_path - end + base_dir = ActiveRecord::Tasks::DatabaseTasks.fixtures_path fixtures_dir = File.join [base_dir, ENV['FIXTURES_DIR']].compact @@ -211,12 +207,7 @@ db_namespace = namespace :db do puts %Q(The fixture ID for "#{label}" is #{ActiveRecord::FixtureSet.identify(label)}.) if label - base_dir = if ENV['FIXTURES_PATH'] - ActiveRecord::Tasks::DatabaseTasks.root.join(ENV['FIXTURES_PATH']) - else - ActiveRecord::Tasks::DatabaseTasks.fixtures_path - end - + base_dir = ActiveRecord::Tasks::DatabaseTasks.fixtures_path Dir["#{base_dir}/**/*.yml"].each do |file| if data = YAML::load(ERB.new(IO.read(file)).result) diff --git a/activerecord/lib/active_record/tasks/database_tasks.rb b/activerecord/lib/active_record/tasks/database_tasks.rb index 7712a14b79..4727469420 100644 --- a/activerecord/lib/active_record/tasks/database_tasks.rb +++ b/activerecord/lib/active_record/tasks/database_tasks.rb @@ -58,7 +58,11 @@ module ActiveRecord end def fixtures_path - @fixtures_path ||= File.join(root, 'test', 'fixtures') + @fixtures_path ||= if ENV['FIXTURES_PATH'] + File.join(root, ENV['FIXTURES_PATH']) + else + File.join(root, 'test', 'fixtures') + end end def root -- cgit v1.2.3 From 41fb066394245c5fd0ffb13cc5f755abff7e1081 Mon Sep 17 00:00:00 2001 From: Viktar Basharymau Date: Wed, 25 Jun 2014 12:51:30 +0300 Subject: Replace a bit of cryptic code in fixtures:load rake task with plain stupid Ruby --- activerecord/lib/active_record/railties/databases.rake | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'activerecord') diff --git a/activerecord/lib/active_record/railties/databases.rake b/activerecord/lib/active_record/railties/databases.rake index 2a44c9e559..a293487032 100644 --- a/activerecord/lib/active_record/railties/databases.rake +++ b/activerecord/lib/active_record/railties/databases.rake @@ -191,7 +191,11 @@ db_namespace = namespace :db do base_dir = ActiveRecord::Tasks::DatabaseTasks.fixtures_path - fixtures_dir = File.join [base_dir, ENV['FIXTURES_DIR']].compact + fixtures_dir = if ENV['FIXTURES_DIR'] + File.join base_dir, ENV['FIXTURES_DIR'] + else + base_dir + end (ENV['FIXTURES'] ? ENV['FIXTURES'].split(',') : Dir["#{fixtures_dir}/**/*.yml"].map {|f| f[(fixtures_dir.size + 1)..-5] }).each do |fixture_file| ActiveRecord::FixtureSet.create_fixtures(fixtures_dir, fixture_file) -- cgit v1.2.3 From 5a4df8005145a7c6529c4e9ed92e3f4927aa55e7 Mon Sep 17 00:00:00 2001 From: Viktar Basharymau Date: Wed, 25 Jun 2014 12:53:03 +0300 Subject: Extract `fixture_files` variable in fixtures:load rake task --- activerecord/lib/active_record/railties/databases.rake | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'activerecord') diff --git a/activerecord/lib/active_record/railties/databases.rake b/activerecord/lib/active_record/railties/databases.rake index a293487032..816fca4f85 100644 --- a/activerecord/lib/active_record/railties/databases.rake +++ b/activerecord/lib/active_record/railties/databases.rake @@ -197,7 +197,13 @@ db_namespace = namespace :db do base_dir end - (ENV['FIXTURES'] ? ENV['FIXTURES'].split(',') : Dir["#{fixtures_dir}/**/*.yml"].map {|f| f[(fixtures_dir.size + 1)..-5] }).each do |fixture_file| + fixture_files = if ENV['FIXTURES'] + ENV['FIXTURES'].split(',') + else + Dir["#{fixtures_dir}/**/*.yml"].map {|f| f[(fixtures_dir.size + 1)..-5] } + end + + fixture_files.each do |fixture_file| ActiveRecord::FixtureSet.create_fixtures(fixtures_dir, fixture_file) end end -- cgit v1.2.3 From d20b8699e9ba67182f1fc9bbe71bbe8da054370f Mon Sep 17 00:00:00 2001 From: Viktar Basharymau Date: Wed, 25 Jun 2014 12:57:03 +0300 Subject: db:fixtures:load refactoring: remove unnecessary loop `ActiveRecord::FixtureSet.create_fixtures` can accept an array of fixture_files. --- activerecord/lib/active_record/railties/databases.rake | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) (limited to 'activerecord') diff --git a/activerecord/lib/active_record/railties/databases.rake b/activerecord/lib/active_record/railties/databases.rake index 816fca4f85..4ccc21e9b4 100644 --- a/activerecord/lib/active_record/railties/databases.rake +++ b/activerecord/lib/active_record/railties/databases.rake @@ -203,9 +203,7 @@ db_namespace = namespace :db do Dir["#{fixtures_dir}/**/*.yml"].map {|f| f[(fixtures_dir.size + 1)..-5] } end - fixture_files.each do |fixture_file| - ActiveRecord::FixtureSet.create_fixtures(fixtures_dir, fixture_file) - end + ActiveRecord::FixtureSet.create_fixtures(fixtures_dir, fixture_files) end # desc "Search for a fixture given a LABEL or ID. Specify an alternative path (eg. spec/fixtures) using FIXTURES_PATH=spec/fixtures." -- cgit v1.2.3 From 482fdad5ef8a73688b50bba3991dd4ef6f286edd Mon Sep 17 00:00:00 2001 From: Viktar Basharymau Date: Wed, 25 Jun 2014 13:02:23 +0300 Subject: Replace String index juggling with Pathname goodness in db:fixtures:load --- activerecord/lib/active_record/railties/databases.rake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'activerecord') diff --git a/activerecord/lib/active_record/railties/databases.rake b/activerecord/lib/active_record/railties/databases.rake index 4ccc21e9b4..5c1c70f3d6 100644 --- a/activerecord/lib/active_record/railties/databases.rake +++ b/activerecord/lib/active_record/railties/databases.rake @@ -200,7 +200,7 @@ db_namespace = namespace :db do fixture_files = if ENV['FIXTURES'] ENV['FIXTURES'].split(',') else - Dir["#{fixtures_dir}/**/*.yml"].map {|f| f[(fixtures_dir.size + 1)..-5] } + Pathname.glob("#{fixtures_dir}/**/*.yml").map {|f| f.basename.sub_ext('').to_s } end ActiveRecord::FixtureSet.create_fixtures(fixtures_dir, fixture_files) -- cgit v1.2.3 From 5dbf37d04f705d4b309d8a9afab9bd49a1aa9c1b Mon Sep 17 00:00:00 2001 From: Viktar Basharymau Date: Wed, 25 Jun 2014 16:44:54 +0300 Subject: Add explaining variables to db:migrate:status --- activerecord/lib/active_record/railties/databases.rake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'activerecord') diff --git a/activerecord/lib/active_record/railties/databases.rake b/activerecord/lib/active_record/railties/databases.rake index 5c1c70f3d6..64aa046c16 100644 --- a/activerecord/lib/active_record/railties/databases.rake +++ b/activerecord/lib/active_record/railties/databases.rake @@ -116,8 +116,8 @@ db_namespace = namespace :db do puts "\ndatabase: #{ActiveRecord::Base.connection_config[:database]}\n\n" puts "#{'Status'.center(8)} #{'Migration ID'.ljust(14)} Migration Name" puts "-" * 50 - (db_list + file_list).sort_by {|migration| migration[1]}.each do |migration| - puts "#{migration[0].center(8)} #{migration[1].ljust(14)} #{migration[2]}" + (db_list + file_list).sort_by { |_, version, _| version }.each do |status, version, name| + puts "#{status.center(8)} #{version.ljust(14)} #{name}" end puts end -- cgit v1.2.3 From c4918eefdf94320b3a1263f90456f290bd89a723 Mon Sep 17 00:00:00 2001 From: Viktar Basharymau Date: Thu, 26 Jun 2014 14:03:54 +0300 Subject: Use Array#flat_map and Array#grep in db:migrate:status task It allows the code to be more declarative and elegant. --- .../lib/active_record/railties/databases.rake | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) (limited to 'activerecord') diff --git a/activerecord/lib/active_record/railties/databases.rake b/activerecord/lib/active_record/railties/databases.rake index 64aa046c16..fb890ed709 100644 --- a/activerecord/lib/active_record/railties/databases.rake +++ b/activerecord/lib/active_record/railties/databases.rake @@ -98,17 +98,17 @@ db_namespace = namespace :db do end db_list = ActiveRecord::Base.connection.select_values("SELECT version FROM #{ActiveRecord::Migrator.schema_migrations_table_name}") db_list.map! { |version| ActiveRecord::SchemaMigration.normalize_migration_number(version) } - file_list = [] - ActiveRecord::Migrator.migrations_paths.each do |path| - Dir.foreach(path) do |file| - # match "20091231235959_some_name.rb" and "001_some_name.rb" pattern - if match_data = /^(\d{3,})_(.+)\.rb$/.match(file) - version = ActiveRecord::SchemaMigration.normalize_migration_number(match_data[1]) - status = db_list.delete(version) ? 'up' : 'down' - file_list << [status, version, match_data[2].humanize] + + file_list = + ActiveRecord::Migrator.migrations_paths.flat_map do |path| + # match "20091231235959_some_name.rb" and "001_some_name.rb" pattern + Dir.foreach(path).grep(/^(\d{3,})_(.+)\.rb$/) do + version = ActiveRecord::SchemaMigration.normalize_migration_number($1) + status = db_list.delete(version) ? 'up' : 'down' + [status, version, $2.humanize] + end end - end - end + db_list.map! do |version| ['up', version, '********** NO FILE **********'] end -- cgit v1.2.3 From e75bdcb4d8698947ed228eeacd2d3f23eaad0f6b Mon Sep 17 00:00:00 2001 From: Viktar Basharymau Date: Thu, 26 Jun 2014 20:08:19 +0300 Subject: db:migrate:status refactoring: Rewrite hand-crafted SQL query with ActiveRecord#pluck --- activerecord/lib/active_record/railties/databases.rake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'activerecord') diff --git a/activerecord/lib/active_record/railties/databases.rake b/activerecord/lib/active_record/railties/databases.rake index fb890ed709..c82a56718a 100644 --- a/activerecord/lib/active_record/railties/databases.rake +++ b/activerecord/lib/active_record/railties/databases.rake @@ -96,7 +96,7 @@ db_namespace = namespace :db do unless ActiveRecord::Base.connection.table_exists?(ActiveRecord::Migrator.schema_migrations_table_name) abort 'Schema migrations table does not exist yet.' end - db_list = ActiveRecord::Base.connection.select_values("SELECT version FROM #{ActiveRecord::Migrator.schema_migrations_table_name}") + db_list = ActiveRecord::SchemaMigration.pluck(:version) db_list.map! { |version| ActiveRecord::SchemaMigration.normalize_migration_number(version) } file_list = -- cgit v1.2.3 From 68b7e7ab9776d26d69bc84037ba81c68dd38885b Mon Sep 17 00:00:00 2001 From: Viktar Basharymau Date: Fri, 27 Jun 2014 20:16:21 +0300 Subject: Extract AR::SchemaMigration.normalized_versions method --- activerecord/lib/active_record/railties/databases.rake | 3 +-- activerecord/lib/active_record/schema_migration.rb | 4 ++++ 2 files changed, 5 insertions(+), 2 deletions(-) (limited to 'activerecord') diff --git a/activerecord/lib/active_record/railties/databases.rake b/activerecord/lib/active_record/railties/databases.rake index c82a56718a..d7621646d9 100644 --- a/activerecord/lib/active_record/railties/databases.rake +++ b/activerecord/lib/active_record/railties/databases.rake @@ -96,8 +96,7 @@ db_namespace = namespace :db do unless ActiveRecord::Base.connection.table_exists?(ActiveRecord::Migrator.schema_migrations_table_name) abort 'Schema migrations table does not exist yet.' end - db_list = ActiveRecord::SchemaMigration.pluck(:version) - db_list.map! { |version| ActiveRecord::SchemaMigration.normalize_migration_number(version) } + db_list = ActiveRecord::SchemaMigration.normalized_versions file_list = ActiveRecord::Migrator.migrations_paths.flat_map do |path| diff --git a/activerecord/lib/active_record/schema_migration.rb b/activerecord/lib/active_record/schema_migration.rb index 3a004d58c9..b5038104ac 100644 --- a/activerecord/lib/active_record/schema_migration.rb +++ b/activerecord/lib/active_record/schema_migration.rb @@ -43,6 +43,10 @@ module ActiveRecord def normalize_migration_number(number) "%.3d" % number.to_i end + + def normalized_versions + pluck(:version).map { |v| normalize_migration_number v } + end end def version -- cgit v1.2.3 From 3852f2d40883423e8c15e75b0b96e341f81a7752 Mon Sep 17 00:00:00 2001 From: Viktar Basharymau Date: Fri, 27 Jun 2014 20:24:38 +0300 Subject: Use AR::SchemaMigration.table_exists? call instead of longish AR::Base...etc,etc --- activerecord/lib/active_record/railties/databases.rake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'activerecord') diff --git a/activerecord/lib/active_record/railties/databases.rake b/activerecord/lib/active_record/railties/databases.rake index d7621646d9..fa94df7a52 100644 --- a/activerecord/lib/active_record/railties/databases.rake +++ b/activerecord/lib/active_record/railties/databases.rake @@ -93,7 +93,7 @@ db_namespace = namespace :db do desc 'Display status of migrations' task :status => [:environment, :load_config] do - unless ActiveRecord::Base.connection.table_exists?(ActiveRecord::Migrator.schema_migrations_table_name) + unless ActiveRecord::SchemaMigration.table_exists? abort 'Schema migrations table does not exist yet.' end db_list = ActiveRecord::SchemaMigration.normalized_versions -- cgit v1.2.3