From 84f050f3d596f3b9bef18d6cbcfad9f7ef1b913b Mon Sep 17 00:00:00 2001 From: Davide D'Agostino Date: Wed, 22 Feb 2012 15:07:54 +0100 Subject: [PATCH] Add correclty ActiveRecord Middleware. Fix #792 --- .../lib/padrino-admin/generators/admin_app.rb | 1 + .../test/generators/test_admin_app_generator.rb | 1 + padrino-gen/lib/padrino-gen/generators/actions.rb | 14 ++++++++++++++ .../generators/components/orms/activerecord.rb | 1 + .../generators/components/orms/mini_record.rb | 3 ++- padrino-gen/test/test_model_generator.rb | 12 +++++++++++- 6 files changed, 30 insertions(+), 2 deletions(-) diff --git a/padrino-admin/lib/padrino-admin/generators/admin_app.rb b/padrino-admin/lib/padrino-admin/generators/admin_app.rb index 6e79e2d44..1b1f86546 100644 --- a/padrino-admin/lib/padrino-admin/generators/admin_app.rb +++ b/padrino-admin/lib/padrino-admin/generators/admin_app.rb @@ -59,6 +59,7 @@ def create_admin directory "templates/assets", destination_root("public", "admin") template "templates/app.rb.tt", destination_root("admin/app.rb") append_file destination_root("config/apps.rb"), "\nPadrino.mount(\"Admin\").to(\"/admin\")" + insert_middleware 'ActiveRecord::ConnectionAdapters::ConnectionManagement', 'admin' account_params = [ options[:admin_model].underscore, "name:string", "surname:string", "email:string", "crypted_password:string", "role:string", diff --git a/padrino-admin/test/generators/test_admin_app_generator.rb b/padrino-admin/test/generators/test_admin_app_generator.rb index a755e1b9c..2f8590548 100644 --- a/padrino-admin/test/generators/test_admin_app_generator.rb +++ b/padrino-admin/test/generators/test_admin_app_generator.rb @@ -59,6 +59,7 @@ def teardown assert_match_in_file 'class Admin < Padrino::Application', "#{@apptmp}/sample_project/admin/app.rb" assert_match_in_file 'role.project_module :accounts, \'/accounts\'', "#{@apptmp}/sample_project/admin/app.rb" assert_match_in_file 'button_to pat(:logout)', "#{@apptmp}/sample_project/admin/views/layouts/application.haml" + assert_match_in_file(/ use ActiveRecord::ConnectionAdapters::ConnectionManagemen/m, "#{@apptmp}/sample_project/admin/app.rb") end should 'correctly generate a new padrino admin application with erb renderer' do diff --git a/padrino-gen/lib/padrino-gen/generators/actions.rb b/padrino-gen/lib/padrino-gen/generators/actions.rb index 337213977..9b75d721d 100644 --- a/padrino-gen/lib/padrino-gen/generators/actions.rb +++ b/padrino-gen/lib/padrino-gen/generators/actions.rb @@ -293,6 +293,20 @@ def insert_hook(include_text, where) inject_into_file('config/boot.rb', " #{include_text}\n", :after => "Padrino.#{where} do\n") end + # Inserts a middlware inside app.rb + # + # @param [String] include_text + # Text to include into hooks in boot.rb + # + # @example + # insert_middleware(ActiveRecord::ConnectionAdapters::ConnectionManagement) + # + # @api public + def insert_middleware(include_text, app=nil) + name = app || (options[:name].present? ? @app_name.downcase : 'app') + inject_into_file("#{name}/app.rb", " use #{include_text}\n", :after => "Padrino::Application\n") + end + # Registers and Creates Initializer. # # @param [Symbol] name diff --git a/padrino-gen/lib/padrino-gen/generators/components/orms/activerecord.rb b/padrino-gen/lib/padrino-gen/generators/components/orms/activerecord.rb index dee673a66..787c7ef36 100644 --- a/padrino-gen/lib/padrino-gen/generators/components/orms/activerecord.rb +++ b/padrino-gen/lib/padrino-gen/generators/components/orms/activerecord.rb @@ -118,6 +118,7 @@ def setup_orm require_dependencies 'sqlite3' end require_dependencies 'activerecord', :require => 'active_record' + insert_middleware 'ActiveRecord::ConnectionAdapters::ConnectionManagement' create_file("config/database.rb", ar) end diff --git a/padrino-gen/lib/padrino-gen/generators/components/orms/mini_record.rb b/padrino-gen/lib/padrino-gen/generators/components/orms/mini_record.rb index 9b39ec2ea..bacf6e366 100644 --- a/padrino-gen/lib/padrino-gen/generators/components/orms/mini_record.rb +++ b/padrino-gen/lib/padrino-gen/generators/components/orms/mini_record.rb @@ -102,7 +102,8 @@ def setup_orm end require_dependencies 'mini_record' create_file('config/database.rb', ar) - insert_hook('ActiveRecord::Base.descendants.each(&:auto_upgrade!)', :after_load) + insert_hook('ActiveRecord::Base.auto_upgrade!', :after_load) + insert_middleware 'ActiveRecord::ConnectionAdapters::ConnectionManagement' end MR_MODEL = (<<-MODEL) unless defined?(MR_MODEL) diff --git a/padrino-gen/test/test_model_generator.rb b/padrino-gen/test/test_model_generator.rb index b59e5bdf4..f338a2287 100644 --- a/padrino-gen/test/test_model_generator.rb +++ b/padrino-gen/test/test_model_generator.rb @@ -80,6 +80,11 @@ def teardown # ACTIVERECORD context "model generator using activerecord" do + should "add activerecord middleware" do + capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-d=activerecord') } + assert_match_in_file(/ use ActiveRecord::ConnectionAdapters::ConnectionManagemen/m, "#{@apptmp}/sample_project/app/app.rb") + end + should "generate model file" do capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=activerecord') } capture_io { generate(:model, 'user', "-r=#{@apptmp}/sample_project") } @@ -122,11 +127,16 @@ def teardown should "generate hooks for auto upgrade" do capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=mini_record') } assert_match_in_file( - "Padrino.after_load do\n ActiveRecord::Base.descendants.each(&:auto_upgrade!)", + "Padrino.after_load do\n ActiveRecord::Base.auto_upgrade!", "#{@apptmp}/sample_project/config/boot.rb" ) end + should "add activerecord middleware" do + capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-d=activerecord') } + assert_match_in_file(/ use ActiveRecord::ConnectionAdapters::ConnectionManagemen/m, "#{@apptmp}/sample_project/app/app.rb") + end + should "generate model file" do capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=mini_record') } capture_io { generate(:model, 'user', 'name:string', 'surname:string', 'age:integer', "-r=#{@apptmp}/sample_project") }