From 336cb3c0bf3d38400f6c774ca78376117b899985 Mon Sep 17 00:00:00 2001 From: Mikel Lindsaar Date: Thu, 8 Apr 2010 15:52:35 +1000 Subject: Adding Rails.env= to railties to allow changing of rails env on the fly for rake tasks etc MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: José Valim --- railties/lib/rails.rb | 4 ++++ railties/test/railties/railtie_test.rb | 11 +++++++++++ 2 files changed, 15 insertions(+) (limited to 'railties') diff --git a/railties/lib/rails.rb b/railties/lib/rails.rb index 9d02da104d..085b82c154 100644 --- a/railties/lib/rails.rb +++ b/railties/lib/rails.rb @@ -79,6 +79,10 @@ module Rails @_env ||= ActiveSupport::StringInquirer.new(ENV["RAILS_ENV"] || ENV["RACK_ENV"] || "development") end + def env=(environment) + @_env = ActiveSupport::StringInquirer.new(environment) + end + def cache RAILS_CACHE end diff --git a/railties/test/railties/railtie_test.rb b/railties/test/railties/railtie_test.rb index 546bf5e143..2accaca855 100644 --- a/railties/test/railties/railtie_test.rb +++ b/railties/test/railties/railtie_test.rb @@ -125,5 +125,16 @@ module RailtiesTest require "#{app_path}/config/environment" assert $ran_block end + + test "we can change our environment if we want to" do + begin + original_env = Rails.env + Rails.env = 'foo' + assert_equal('foo', Rails.env) + ensure + Rails.env = original_env + assert_equal(original_env, Rails.env) + end + end end end -- cgit v1.2.3 From 4e92134dfa15ae198c714b85376838ffec5a7773 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Thu, 8 Apr 2010 12:52:37 +0200 Subject: Fix a bug in ActionDispatch::Static where Rails cannot find assets if started in another directory which is not the RAILS_ROOT. --- railties/lib/rails.rb | 5 +++-- railties/lib/rails/application/configuration.rb | 2 +- railties/test/application/configuration_test.rb | 9 +++++++++ 3 files changed, 13 insertions(+), 3 deletions(-) (limited to 'railties') diff --git a/railties/lib/rails.rb b/railties/lib/rails.rb index 085b82c154..0611b2a9f5 100644 --- a/railties/lib/rails.rb +++ b/railties/lib/rails.rb @@ -92,11 +92,12 @@ module Rails end def public_path - @@public_path ||= self.root ? File.join(self.root, "public") : "public" + application && application.paths.public.to_a.first end def public_path=(path) - @@public_path = path + ActiveSupport::Deprecation.warn "Setting Rails.public_path= is deprecated. " << + "Please set paths.public = in config/application.rb instead.", caller end end end diff --git a/railties/lib/rails/application/configuration.rb b/railties/lib/rails/application/configuration.rb index f9f47ef679..7ce3494fa6 100644 --- a/railties/lib/rails/application/configuration.rb +++ b/railties/lib/rails/application/configuration.rb @@ -137,7 +137,7 @@ module Rails def default_middleware_stack ActionDispatch::MiddlewareStack.new.tap do |middleware| - middleware.use('::ActionDispatch::Static', lambda { Rails.public_path }, :if => lambda { serve_static_assets }) + middleware.use('::ActionDispatch::Static', lambda { paths.public.to_a.first }, :if => lambda { serve_static_assets }) middleware.use('::Rack::Lock', :if => lambda { !allow_concurrency }) middleware.use('::Rack::Runtime') middleware.use('::Rails::Rack::Logger') diff --git a/railties/test/application/configuration_test.rb b/railties/test/application/configuration_test.rb index 97d5f64708..8bf0f09d6b 100644 --- a/railties/test/application/configuration_test.rb +++ b/railties/test/application/configuration_test.rb @@ -184,6 +184,15 @@ module ApplicationTests end end + test "config.paths.public sets Rails.public_path" do + add_to_config <<-RUBY + config.paths.public = "somewhere" + RUBY + + require "#{app_path}/config/application" + assert_equal File.join(app_path, "somewhere"), Rails.public_path + end + def make_basic_app require "rails" require "action_controller/railtie" -- cgit v1.2.3 From 91d1012a98975979473709adf723a94057bda295 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Thu, 8 Apr 2010 13:53:18 +0200 Subject: Update rails.js to the latest one at http://github.com/rails/prototype-ujs --- .../app/templates/public/javascripts/rails.js | 73 ++++++++++++---------- 1 file changed, 41 insertions(+), 32 deletions(-) (limited to 'railties') diff --git a/railties/lib/rails/generators/rails/app/templates/public/javascripts/rails.js b/railties/lib/rails/generators/rails/app/templates/public/javascripts/rails.js index 7342e1b830..c5fa02ae35 100644 --- a/railties/lib/rails/generators/rails/app/templates/public/javascripts/rails.js +++ b/railties/lib/rails/generators/rails/app/templates/public/javascripts/rails.js @@ -1,15 +1,8 @@ document.observe("dom:loaded", function() { - var authToken = $$('meta[name=csrf-token]').first().readAttribute('content'), - authParam = $$('meta[name=csrf-param]').first().readAttribute('content'), - formTemplate = '
\ - #{realmethod}\ -
', - realmethodTemplate = ''; - function handleRemote(element) { var method, url, params; - if (element.tagName.toLowerCase() == 'form') { + if (element.tagName.toLowerCase() === 'form') { method = element.readAttribute('method') || 'post'; url = element.readAttribute('action'); params = element.serialize(true); @@ -39,65 +32,81 @@ document.observe("dom:loaded", function() { element.fire("ajax:after"); } + function handleMethod(element) { + var method, url, token_name, token; + + method = element.readAttribute('data-method'); + url = element.readAttribute('href'); + csrf_param = $$('meta[name=csrf-param]').first(); + csrf_token = $$('meta[name=csrf-token]').first(); + + var form = new Element('form', { method: "POST", action: url, style: "display: none;" }); + element.parentNode.appendChild(form); + + if (method != 'post') { + var field = new Element('input', { type: 'hidden', name: '_method', value: method }); + form.appendChild(field); + } + + if (csrf_param) { + var param = csrf_param.readAttribute('content'); + var token = csrf_token.readAttribute('content'); + var field = new Element('input', { type: 'hidden', name: param, value: token }); + form.appendChild(field); + } + + form.submit(); + } + $(document.body).observe("click", function(event) { - var message = event.element().readAttribute('data-confirm'); + var message = event.findElement().readAttribute('data-confirm'); if (message && !confirm(message)) { event.stop(); return false; } - var element = event.findElement("a[data-remote=true]"); + var element = event.findElement("a[data-remote]"); if (element) { handleRemote(element); event.stop(); + return true; } var element = event.findElement("a[data-method]"); - if (element && element.readAttribute('data-remote') != 'true') { - var method = element.readAttribute('data-method'), - piggyback = method.toLowerCase() != 'post', - formHTML = formTemplate.interpolate({ - method: 'POST', - realmethod: piggyback ? realmethodTemplate.interpolate({ method: method }) : '', - action: element.readAttribute('href'), - token: authToken, - param: authParam - }); - - var form = new Element('div').update(formHTML).down().hide(); - this.insert({ bottom: form }); - - form.submit(); + if (element) { + handleMethod(element); event.stop(); + return true; } }); // TODO: I don't think submit bubbles in IE $(document.body).observe("submit", function(event) { - var message = event.element().readAttribute('data-confirm'); + var element = event.findElement(), + message = element.readAttribute('data-confirm'); if (message && !confirm(message)) { event.stop(); return false; } - var inputs = event.element().select("input[type=submit][data-disable-with]"); + var inputs = element.select("input[type=submit][data-disable-with]"); inputs.each(function(input) { input.disabled = true; input.writeAttribute('data-original-value', input.value); input.value = input.readAttribute('data-disable-with'); }); - var element = event.findElement("form[data-remote=true]"); + var element = event.findElement("form[data-remote]"); if (element) { handleRemote(element); event.stop(); } }); - $(document.body).observe("ajax:complete", function(event) { - var element = event.element(); + $(document.body).observe("ajax:after", function(event) { + var element = event.findElement(); - if (element.tagName.toLowerCase() == 'form') { + if (element.tagName.toLowerCase() === 'form') { var inputs = element.select("input[type=submit][disabled=true][data-disable-with]"); inputs.each(function(input) { input.value = input.readAttribute('data-original-value'); @@ -106,4 +115,4 @@ document.observe("dom:loaded", function() { }); } }); -}); +}); \ No newline at end of file -- cgit v1.2.3