webrat 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. data/History.txt +76 -14
  2. data/README.txt +40 -36
  3. data/Rakefile +80 -18
  4. data/TODO.txt +9 -3
  5. data/init.rb +1 -1
  6. data/lib/webrat.rb +30 -5
  7. data/lib/webrat/core.rb +12 -0
  8. data/lib/webrat/core/area.rb +44 -0
  9. data/lib/webrat/core/field.rb +332 -0
  10. data/lib/webrat/core/flunk.rb +7 -0
  11. data/lib/webrat/core/form.rb +130 -0
  12. data/lib/webrat/core/label.rb +18 -0
  13. data/lib/webrat/core/link.rb +101 -0
  14. data/lib/webrat/core/locators.rb +92 -0
  15. data/lib/webrat/core/logging.rb +25 -0
  16. data/lib/webrat/core/matchers.rb +4 -0
  17. data/lib/webrat/core/matchers/have_content.rb +94 -0
  18. data/lib/webrat/core/matchers/have_selector.rb +39 -0
  19. data/lib/webrat/core/matchers/have_tag.rb +58 -0
  20. data/lib/webrat/core/matchers/have_xpath.rb +85 -0
  21. data/lib/webrat/core/methods.rb +44 -0
  22. data/lib/webrat/core/mime.rb +29 -0
  23. data/lib/webrat/core/nokogiri.rb +42 -0
  24. data/lib/webrat/core/scope.rb +208 -0
  25. data/lib/webrat/core/select_option.rb +29 -0
  26. data/lib/webrat/core/session.rb +188 -0
  27. data/lib/webrat/core_extensions/blank.rb +58 -0
  28. data/lib/webrat/core_extensions/deprecate.rb +8 -0
  29. data/lib/webrat/core_extensions/detect_mapped.rb +12 -0
  30. data/lib/webrat/core_extensions/hash_with_indifferent_access.rb +131 -0
  31. data/lib/webrat/core_extensions/meta_class.rb +6 -0
  32. data/lib/webrat/core_extensions/nil_to_param.rb +5 -0
  33. data/lib/webrat/mechanize.rb +28 -0
  34. data/lib/webrat/merb.rb +75 -0
  35. data/lib/webrat/rack.rb +24 -0
  36. data/lib/webrat/rails.rb +102 -0
  37. data/lib/webrat/rails/redirect_actions.rb +18 -0
  38. data/lib/webrat/selenium.rb +3 -0
  39. data/lib/webrat/selenium/location_strategy_javascript/button.js +12 -0
  40. data/lib/webrat/selenium/location_strategy_javascript/label.js +16 -0
  41. data/lib/webrat/selenium/location_strategy_javascript/webrat.js +5 -0
  42. data/lib/webrat/selenium/location_strategy_javascript/webratlink.js +9 -0
  43. data/lib/webrat/selenium/location_strategy_javascript/webratlinkwithin.js +15 -0
  44. data/lib/webrat/selenium/location_strategy_javascript/webratselectwithoption.js +5 -0
  45. data/lib/webrat/selenium/selenium_extensions.js +6 -0
  46. data/lib/webrat/selenium/selenium_session.rb +137 -0
  47. data/lib/webrat/sinatra.rb +19 -0
  48. metadata +66 -52
  49. data/Manifest.txt +0 -20
  50. data/lib/webrat/rails_extensions.rb +0 -27
  51. data/lib/webrat/session.rb +0 -523
  52. data/test/checks_test.rb +0 -121
  53. data/test/chooses_test.rb +0 -74
  54. data/test/clicks_button_test.rb +0 -308
  55. data/test/clicks_link_test.rb +0 -193
  56. data/test/fills_in_test.rb +0 -139
  57. data/test/helper.rb +0 -21
  58. data/test/reloads_test.rb +0 -26
  59. data/test/selects_test.rb +0 -93
  60. data/test/visits_test.rb +0 -31
data/History.txt CHANGED
@@ -1,3 +1,65 @@
1
+ == 0.3.0 / 2008-11-07
2
+
3
+ * Major enhancements
4
+
5
+ * Added Merb support (Gwyn Morfey, Jeremy Burks, Rob Kaufman, Yehuda Katz)
6
+ * Added experimental Selenium support (Luke Melia)
7
+ * Add have_selector, have_xpath, have_tag and contain matchers from Merb
8
+ * Switch from Hpricot to Nokogiri for XML parsing (thanks, Aaron Patterson)
9
+
10
+ * Minor enhancements
11
+
12
+ * Added #within for manipulating the current page within a selector scope
13
+ * Add support for file fields via #attaches_file method (Rails only at the moment) (Kyle Hargraves)
14
+ * Add support for simulating SSL requests (Luke Melia)
15
+ * Added #basic_auth(user, pass) to support HTTP Basic Auth (Aslak Hellesøy)
16
+ * Added support for Sinatra and Rack (Aslak Hellesøy)
17
+ * Rename visits to visit, fills_in to fill_in, etc.
18
+ * Add #field_labeled for looking up form fields by label (David Chelimsky)
19
+ * Add #field_named and #field_with_id locators
20
+ * Don't depend on hoe anymore
21
+ * Return responses after sending requests
22
+ * Allow clicking links and buttons by a regular expression in Selenium (Luke Melia)
23
+ * Allow clicking links by a regular expression
24
+ * Add #http_accept for including MIME type HTTP "Accept" headers (Ryan Briones)
25
+ * Add #header to support inclusion of custom HTTP headers (Ryan Briones)
26
+ * Consider response codes 200-499 as successful enough to not raise a Webrat error (David Leal)
27
+ * Add Webrat.root method for cross-framework support (Krzysztof Zylawy)
28
+ * Add support for clicking areas of an image map (Alex Lang)
29
+ * Support relative links, including href="?foo=bar" (Kyle Hargraves)
30
+ * Separated Rails-specific code from the Webrat core to make it easier to use Webrat with other environments
31
+ * Alias visits as visit, clicks_link as click_link, etc. for better readability
32
+ * Raise error when trying to interact with a disabled form element (Luke Melia)
33
+ * Don't send disabled form elements to the server (Nicholas A. Evans)
34
+ * Display response body when the page load is not successful (David Leal)
35
+ * CGI escape form field values (Miha Filej)
36
+ * Add support for redirect_to :back by sending HTTP_REFERER headers (Hendrik Volkmer)
37
+ * Expose current DOM (as an Hpricot object) as #current_dom
38
+ * Add support for disabling JavaScript when clicking a link to enable testing of both JS
39
+ and non-JS implementations (Luke Melia and Bryan Helmkamp)
40
+ * Support &nbsp's as spaces in matching link text (Luke Melia)
41
+ * Support button elements (Nick Sieger)
42
+ * Support matching select options by regexp (Kyle Hargraves)
43
+ * save_and_open_page rewrites css and image references to provide a friendlier debugging experience (Luke Melia)
44
+ * Added support for matching alt attributes in fields (primarly for clicks_button) (Aaron Quint)
45
+ * Support '&' in submitted values (Kyle Hargraves)
46
+ * Support clicking links by title (Dan Barry)
47
+ * Added missing spec for clicking image buttons (Tim Harper)
48
+ * Switched tests to specs, and from Mocha to RSpec's mocking library
49
+ * Add support to click_button for IDs (Gwyn Morfey)
50
+ * Miscellaneous core refactorings (Jan Suchal)
51
+
52
+ * Bug fixes
53
+
54
+ * Fix initialization of WWW::Mechanize (Derek Kastner)
55
+ * Don't open blank pages in the browser (Kyle Hargraves)
56
+ * Support radio buttons with multiple labels (Dan Barry)
57
+ * Fix load order bug on some platforms (Ismael Celis)
58
+ * Fix bug with empty select list option (Kyle Hargraves)
59
+ * Fix regression of not sending default values in password fields
60
+ * Don't explode if encountering inputs with no type attribute (assume text)
61
+ * Fix bug where choosing a radio button in a series with a default submitted the incorrect field value (Luke Melia)
62
+
1
63
  == 0.2.0 / 2008-04-04
2
64
 
3
65
  * 4 Major enhancements
@@ -6,29 +68,29 @@
6
68
  * Add radio button support via #chooses method
7
69
  * Add basic support for Rails-generated JavaScript link tags
8
70
  * Add support for checkboxes (Patches from Kyle Hargraves and Jarkko Laine)
9
- * Add support for textarea fields (Patch from Sacha Schlegel)
71
+ * Add support for textarea fields (Sacha Schlegel)
10
72
 
11
73
  * 8 Minor enhancements
12
74
 
13
- * Added reloads method to reload the page (Patch from Kamal Fariz Mahyuddi)
14
- * Prevent making a request if clicking on local anchor link (Patch from Kamal Fariz Mahyuddi)
75
+ * Added reloads method to reload the page (Kamal Fariz Mahyuddi)
76
+ * Prevent making a request if clicking on local anchor link (Kamal Fariz Mahyuddi)
15
77
  * Added clicks_link_within(selector, link_text), allowing restricting link search
16
- to within a given css selector (Path from Luke Melia)
17
- * Allow specifying the input name/label when doing a select (Patch from David Chelimsky)
18
- * Raise a specific exception if the developer tries to manipulate form elements before loading a page (Patch from James Deville)
19
- * Add support for alternate POST, PUT and DELETE link clicking (Patch from Kyle Hargraves)
20
- * Change clicks_link to find the shortest matching link (Patch from Luke Melia)
78
+ to within a given css selector (Luke Melia)
79
+ * Allow specifying the input name/label when doing a select (David Chelimsky)
80
+ * Raise a specific exception if the developer tries to manipulate form elements before loading a page (James Deville)
81
+ * Add support for alternate POST, PUT and DELETE link clicking (Kyle Hargraves)
82
+ * Change clicks_link to find the shortest matching link (Luke Melia)
21
83
  * Improve matching for labels in potentially ambiguous cases
22
84
 
23
85
  * 7 Bug fixes
24
86
 
25
- * Fix incorrect serializing of collection inputs, i.e. name contains [] (Patch from Kamal Fariz Mahyuddi)
26
- * Serialize empty text field values just like browsers (Patch from Kamal Fariz Mahyuddi)
27
- * Quick fix to avoid @dom not initialized warnings (Patch from Kamal Fariz Mahyuddi)
28
- * Docfix: bad reference to #select method in README (Patch from Luke Melia)
87
+ * Fix incorrect serializing of collection inputs, i.e. name contains [] (Kamal Fariz Mahyuddi)
88
+ * Serialize empty text field values just like browsers (Kamal Fariz Mahyuddi)
89
+ * Quick fix to avoid @dom not initialized warnings (Kamal Fariz Mahyuddi)
90
+ * Docfix: bad reference to #select method in README (Luke Melia)
29
91
  * Ensure Rails-style checkboxes work properly (checkboxes followed by a hidden input with the same name)
30
- * Fix Edge Rails (a.k.a. 2.0 RC) compatibility (Patch from David Chelimsky)
31
- * Support param hashes nested more than one level (Patch from David Chelimsky)
92
+ * Fix Edge Rails (a.k.a. 2.0 RC) compatibility (David Chelimsky)
93
+ * Support param hashes nested more than one level (David Chelimsky)
32
94
 
33
95
  == 0.1.0 / 2007-11-28
34
96
 
data/README.txt CHANGED
@@ -1,14 +1,12 @@
1
- = Webrat - Ruby Acceptance Testing for Web applications
1
+ === Webrat
2
2
 
3
- http://rubyforge.org/projects/webrat
4
- http://github.com/brynary/webrat
3
+ - [Code on GitHub](http://github.com/brynary/webrat)
4
+ - [Tickets on Lighthouse](http://webrat.lighthouseapp.com/)
5
5
 
6
- * mailto:bryan@brynary.com
7
- * mailto:seth@mojodna.net
6
+ === Description
8
7
 
9
- == DESCRIPTION:
10
-
11
- Webrat lets you quickly write robust and thorough acceptance tests for a Ruby
8
+ Webrat (_Ruby Acceptance Testing for Web applications_)
9
+ lets you quickly write robust and thorough acceptance tests for a Ruby
12
10
  web application. By leveraging the DOM, it can run tests similarly to an
13
11
  in-browser testing solution without the associated performance hit (and
14
12
  browser dependency). The result is tests that are less fragile and more
@@ -19,20 +17,20 @@ Selenium, the primary consideration should be how much JavaScript the
19
17
  application uses. In-browser testing is currently the only way to test JS, and
20
18
  that may make it a requirement for your project. If JavaScript is not central
21
19
  to your application, Webrat is a simpler, effective solution that will let you
22
- run your tests much faster and more frequently. (Benchmarks forthcoming.)
20
+ run your tests much faster and more frequently.
23
21
 
24
- Initial development was sponsored by EastMedia (http://www.eastmedia.com).
22
+ Initial development was sponsored by [EastMedia](http://www.eastmedia.com).
25
23
 
26
- == SYNOPSIS:
24
+ === Synopsis
27
25
 
28
- def test_sign_up
29
- visits "/"
30
- clicks_link "Sign up"
31
- fills_in "Email", :with => "good@example.com"
32
- selects "Free account"
33
- clicks_button "Register"
34
- ...
35
- end
26
+ def test_sign_up
27
+ visit "/"
28
+ click_link "Sign up"
29
+ fill_in "Email", :with => "good@example.com"
30
+ select "Free account"
31
+ click_button "Register"
32
+ ...
33
+ end
36
34
 
37
35
  Behind the scenes, this will perform the following work:
38
36
 
@@ -50,37 +48,43 @@ Behind the scenes, this will perform the following work:
50
48
  Take special note of the things _not_ specified in that test, that might cause
51
49
  tests to break unnecessarily as your application evolves:
52
50
 
53
- * The input field IDs or names (e.g. "user_email" or "user[email]"), which
51
+ - The input field IDs or names (e.g. "user_email" or "user[email]"), which
54
52
  could change if you rename a model
55
- * The ID of the form element (Webrat can do a good job of guessing, even if
53
+ - The ID of the form element (Webrat can do a good job of guessing, even if
56
54
  there are multiple forms on the page.)
57
- * The URLs of links followed
58
- * The URL the form submission should be sent to, which could change if you
55
+ - The URLs of links followed
56
+ - The URL the form submission should be sent to, which could change if you
59
57
  adjust your routes or controllers
60
- * The HTTP method for the login request
58
+ - The HTTP method for the login request
59
+
60
+ A test written with Webrat can handle these changes to these without any modifications.
61
+
62
+ === Merb
63
+ To avoid losing sessions, you need this in environments/test.rb:
61
64
 
62
- A test written with Webrat can handle these changes smoothly.
65
+ Merb::Config.use do |c|
66
+ c[:session_store] = 'memory'
67
+ end
63
68
 
64
- == REQUIREMENTS:
69
+ === Install
65
70
 
66
- * Rails >= 1.2.6
67
- * Hpricot >= 0.6
68
- * Rails integration tests in Test::Unit _or_
69
- * RSpec stories (using an RSpec version >= revision 2997)
71
+ To install the latest release:
70
72
 
71
- == INSTALL:
73
+ sudo gem install webrat
72
74
 
73
75
  In your stories/helper.rb:
74
76
 
75
- require "webrat"
77
+ require "webrat"
76
78
 
77
79
  You could also unpack the gem into vendor/plugins.
78
80
 
79
- == HISTORY:
81
+ === Authors
80
82
 
81
- See CHANGELOG in this directory.
83
+ - Maintained by [Bryan Helmkamp](mailto:bryan@brynary.com)
84
+ - Original code written by [Seth Fitzsimmons](mailto:seth@mojodna.net)
85
+ - Many other contributors. See attributions in History.txt
82
86
 
83
- == LICENSE:
87
+ === License
84
88
 
85
89
  Copyright (c) 2007 Bryan Helmkamp, Seth Fitzsimmons.
86
- See MIT-LICENSE in this directory.
90
+ See MIT-LICENSE.txt in this directory.
data/Rakefile CHANGED
@@ -1,27 +1,89 @@
1
1
  require 'rubygems'
2
- require 'hoe'
2
+ require "rake/gempackagetask"
3
+ require 'rake/rdoctask'
4
+ require "rake/clean"
5
+ require 'spec'
6
+ require 'spec/rake/spectask'
7
+ require 'spec/rake/verify_rcov'
3
8
  require './lib/webrat.rb'
4
9
 
5
- Hoe.new('webrat', Webrat::VERSION) do |p|
6
- p.rubyforge_name = 'webrat'
7
- p.summary = 'Ruby Acceptance Testing for Web applications'
8
-
9
- p.developer "Bryan Helmkamp", "bryan@brynary.com"
10
- p.developer "Seth Fitzsimmons", "seth@mojodna.net"
11
-
12
- # require "rubygems"; require "ruby-debug"; Debugger.start; debugger
13
-
14
- p.description = p.paragraphs_of('README.txt', 4..6).join("\n\n")
15
- p.url = p.paragraphs_of('README.txt', 1).first.split("\n").first.strip
16
- p.changes = p.paragraphs_of('History.txt', 0..3).join("\n\n")
17
-
18
- p.extra_deps << ["hpricot", ">= 0.6"]
19
-
20
- p.remote_rdoc_dir = '' # Release to root
21
- p.test_globs = ['test/**/*_test.rb']
10
+ ##############################################################################
11
+ # Package && release
12
+ ##############################################################################
13
+ spec = Gem::Specification.new do |s|
14
+ s.name = "webrat"
15
+ s.version = Webrat::VERSION
16
+ s.platform = Gem::Platform::RUBY
17
+ s.author = "Bryan Helmkamp"
18
+ s.email = "bryan" + "@" + "brynary.com"
19
+ s.homepage = "http://github.com/brynary/webrat"
20
+ s.summary = "Webrat. Ruby Acceptance Testing for Web applications"
21
+ s.bindir = "bin"
22
+ s.description = s.summary
23
+ s.require_path = "lib"
24
+ s.files = %w(History.txt init.rb install.rb MIT-LICENSE.txt README.txt Rakefile TODO.txt) + Dir["lib/**/*"]
25
+
26
+ # rdoc
27
+ s.has_rdoc = true
28
+ s.extra_rdoc_files = %w(README.txt MIT-LICENSE.txt)
29
+
30
+ # Dependencies
31
+ s.add_dependency "nokogiri", ">= 1.0.3"
32
+ end
33
+
34
+ Rake::GemPackageTask.new(spec) do |package|
35
+ package.gem_spec = spec
36
+ end
37
+
38
+ desc 'Show information about the gem.'
39
+ task :debug_gem do
40
+ puts spec.to_ruby
22
41
  end
23
42
 
43
+ CLEAN.include ["pkg", "*.gem", "doc", "ri", "coverage"]
44
+
24
45
  desc "Upload rdoc to brynary.com"
25
46
  task :publish_rdoc => :docs do
26
47
  sh "scp -r doc/ brynary.com:/apps/uploads/webrat"
48
+ end
49
+
50
+ desc "Run API and Core specs"
51
+ Spec::Rake::SpecTask.new do |t|
52
+ t.spec_opts = ['--options', "\"#{File.dirname(__FILE__)}/spec/spec.opts\""]
53
+ t.spec_files = FileList['spec/**/*_spec.rb']
54
+ end
55
+
56
+ desc "Run all specs in spec directory with RCov"
57
+ Spec::Rake::SpecTask.new(:rcov) do |t|
58
+ t.spec_opts = ['--options', "\"#{File.dirname(__FILE__)}/spec/spec.opts\""]
59
+ t.spec_files = FileList['spec/**/*_spec.rb']
60
+ t.rcov = true
61
+ t.rcov_opts = lambda do
62
+ IO.readlines(File.dirname(__FILE__) + "/spec/rcov.opts").map {|l| l.chomp.split " "}.flatten
63
+ end
64
+ end
65
+
66
+ RCov::VerifyTask.new(:verify_rcov => :rcov) do |t|
67
+ t.threshold = 96.2 # Make sure you have rcov 0.7 or higher!
68
+ end
69
+
70
+ task :default do
71
+ Rake::Task["verify_rcov"].invoke
72
+ end
73
+
74
+ desc 'Install the package as a gem.'
75
+ task :install_gem => [:clean, :package] do
76
+ gem = Dir['pkg/*.gem'].first
77
+ sh "sudo gem install --local #{gem}"
78
+ end
79
+
80
+ Rake::RDocTask.new(:docs) do |rd|
81
+ rd.main = "README.txt"
82
+ rd.rdoc_dir = 'doc'
83
+ files = spec.files.grep(/^(lib|bin|ext)|txt$/)
84
+ files -= ["TODO.txt"]
85
+ files -= files.grep(/\.js$/)
86
+ rd.rdoc_files = files.uniq
87
+ title = "webrat-#{Webrat::VERSION} Documentation"
88
+ rd.options << "-t #{title}"
27
89
  end
data/TODO.txt CHANGED
@@ -1,4 +1,10 @@
1
- Full support for multiple forms on a page
2
- Track the current form based on the location of the last manipulated input, use this as a default for clicks_button
1
+ Run tests in separate processes to eliminate constant-level dependencies
2
+ Add rake tasks for selenium runs
3
+ Add tests for selenium
4
+ Add tests for locator strategies
5
+ Use Webrat::Methods for Rails integration
6
+ Get file uploads workign with merb
7
+ Fix #within scoping for forms that exist outside the scope
3
8
  Make current_url work with redirections
4
- Support for a hash mapping page names to page URLs
9
+ Track the current form based on the location of the last manipulated input, use this as a default for click_button
10
+ Verify SSL support in Rails and Merb
data/init.rb CHANGED
@@ -1,3 +1,3 @@
1
- if RAILS_ENV == "test"
1
+ if RAILS_ENV == "test" || RAILS_ENV == "selenium"
2
2
  require File.join(File.dirname(__FILE__), "lib", "webrat")
3
3
  end
data/lib/webrat.rb CHANGED
@@ -1,6 +1,31 @@
1
- require File.join(File.dirname(__FILE__), "webrat", "rails_extensions")
2
- require File.join(File.dirname(__FILE__), "webrat", "session")
1
+ require "rubygems"
3
2
 
4
- class Webrat
5
- VERSION = '0.2.0'
6
- end
3
+ $LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__))) unless $LOAD_PATH.include?(File.expand_path(File.dirname(__FILE__)))
4
+
5
+ module Webrat
6
+ VERSION = '0.3.0'
7
+
8
+ def self.root #:nodoc:
9
+ defined?(RAILS_ROOT) ? RAILS_ROOT : Merb.root
10
+ end
11
+ end
12
+
13
+ # We need Nokogiri's CSS to XPath support, even if using REXML
14
+ require "nokogiri/css"
15
+
16
+ # Require nokogiri and fall back on rexml
17
+ begin
18
+ require "nokogiri"
19
+ require "webrat/core/nokogiri"
20
+ rescue LoadError => e
21
+ require "rexml/document"
22
+ warn("Standard REXML library is slow. Please consider installing nokogiri.\nUse \"sudo gem install nokogiri\"")
23
+ end
24
+
25
+ require "webrat/core"
26
+
27
+ # TODO: This is probably not a good idea.
28
+ # Probably better for webrat users to require "webrat/rails" etc. directly
29
+ if defined?(RAILS_ENV)
30
+ require "webrat/rails"
31
+ end
@@ -0,0 +1,12 @@
1
+ require "webrat/core/nokogiri"
2
+ require "webrat/core/logging"
3
+ require "webrat/core/flunk"
4
+ require "webrat/core/form"
5
+ require "webrat/core/scope"
6
+ require "webrat/core/link"
7
+ require "webrat/core/area"
8
+ require "webrat/core/label"
9
+ require "webrat/core/select_option"
10
+ require "webrat/core/session"
11
+ require "webrat/core/methods"
12
+ require "webrat/core/matchers"
@@ -0,0 +1,44 @@
1
+ module Webrat
2
+ class Area #:nodoc:
3
+
4
+ def initialize(session, element)
5
+ @session = session
6
+ @element = element
7
+ end
8
+
9
+ def click(method = nil, options = {})
10
+ @session.request_page(absolute_href, :get, {})
11
+ end
12
+
13
+ def matches_text?(id_or_title)
14
+ matcher = /#{Regexp.escape(id_or_title.to_s)}/i
15
+ title =~ matcher || id =~ matcher
16
+ end
17
+
18
+ protected
19
+
20
+ def href
21
+ @element["href"]
22
+ end
23
+
24
+ def title
25
+ @element["title"]
26
+ end
27
+
28
+ def id
29
+ @element["id"]
30
+ end
31
+
32
+
33
+ def absolute_href
34
+ if href =~ /^\?/
35
+ "#{@session.current_url}#{href}"
36
+ elsif href !~ %r{^https?://[\w|.]+(/.*)} && (href !~ /^\//)
37
+ "#{@session.current_url}/#{href}"
38
+ else
39
+ href
40
+ end
41
+ end
42
+
43
+ end
44
+ end