diabolo-webrat 0.4.3 → 0.4.4
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.
- data/History.txt +8 -0
- data/Rakefile +5 -1
- data/lib/webrat/core/locators/field_labeled_locator.rb +1 -1
- data/lib/webrat/core/locators/label_locator.rb +1 -1
- data/lib/webrat/core_extensions/tcp_socket.rb +27 -0
- data/lib/webrat/selenium/application_server.rb +71 -0
- data/lib/webrat/selenium/merb_application_server.rb +48 -0
- data/lib/webrat/selenium/rails_application_server.rb +42 -0
- data/lib/webrat/selenium/selenium_rc_server.rb +80 -0
- data/lib/webrat/selenium/sinatra_application_server.rb +35 -0
- data/spec/fakes/test_session.rb +34 -0
- data/spec/integration/merb/app/controllers/application.rb +2 -0
- data/spec/integration/merb/app/controllers/exceptions.rb +13 -0
- data/spec/integration/merb/app/controllers/testing.rb +18 -0
- data/spec/integration/merb/config/environments/development.rb +15 -0
- data/spec/integration/merb/config/environments/rake.rb +11 -0
- data/spec/integration/merb/config/environments/test.rb +14 -0
- data/spec/integration/merb/config/init.rb +25 -0
- data/spec/integration/merb/config/rack.rb +11 -0
- data/spec/integration/merb/config/router.rb +33 -0
- data/spec/integration/merb/spec/spec_helper.rb +24 -0
- data/spec/integration/merb/spec/webrat_spec.rb +32 -0
- data/spec/integration/merb/tasks/merb.thor/app_script.rb +31 -0
- data/spec/integration/merb/tasks/merb.thor/common.rb +64 -0
- data/spec/integration/merb/tasks/merb.thor/gem_ext.rb +124 -0
- data/spec/integration/merb/tasks/merb.thor/ops.rb +93 -0
- data/spec/integration/merb/tasks/merb.thor/utils.rb +40 -0
- data/spec/integration/rails/app/controllers/application.rb +15 -0
- data/spec/integration/rails/app/controllers/webrat_controller.rb +39 -0
- data/spec/integration/rails/config/boot.rb +109 -0
- data/spec/integration/rails/config/environment.rb +12 -0
- data/spec/integration/rails/config/environments/development.rb +17 -0
- data/spec/integration/rails/config/environments/selenium.rb +22 -0
- data/spec/integration/rails/config/environments/test.rb +22 -0
- data/spec/integration/rails/config/initializers/inflections.rb +10 -0
- data/spec/integration/rails/config/initializers/mime_types.rb +5 -0
- data/spec/integration/rails/config/initializers/new_rails_defaults.rb +17 -0
- data/spec/integration/rails/config/routes.rb +14 -0
- data/spec/integration/rails/test/integration/webrat_test.rb +80 -0
- data/spec/integration/rails/test/test_helper.rb +25 -0
- data/spec/integration/sinatra/classic_app.rb +64 -0
- data/spec/integration/sinatra/modular_app.rb +16 -0
- data/spec/integration/sinatra/test/classic_app_test.rb +37 -0
- data/spec/integration/sinatra/test/modular_app_test.rb +18 -0
- data/spec/integration/sinatra/test/test_helper.rb +16 -0
- data/spec/private/core/configuration_spec.rb +104 -0
- data/spec/private/core/field_spec.rb +67 -0
- data/spec/private/core/link_spec.rb +24 -0
- data/spec/private/core/logging_spec.rb +10 -0
- data/spec/private/core/session_spec.rb +198 -0
- data/spec/private/mechanize/mechanize_session_spec.rb +81 -0
- data/spec/private/merb/merb_session_spec.rb +42 -0
- data/spec/private/nokogiri_spec.rb +77 -0
- data/spec/private/rails/attaches_file_spec.rb +81 -0
- data/spec/private/rails/rails_session_spec.rb +110 -0
- data/spec/public/basic_auth_spec.rb +24 -0
- data/spec/public/check_spec.rb +191 -0
- data/spec/public/choose_spec.rb +118 -0
- data/spec/public/click_area_spec.rb +106 -0
- data/spec/public/click_button_spec.rb +502 -0
- data/spec/public/click_link_spec.rb +541 -0
- data/spec/public/fill_in_spec.rb +209 -0
- data/spec/public/locators/field_by_xpath_spec.rb +19 -0
- data/spec/public/locators/field_labeled_spec.rb +172 -0
- data/spec/public/locators/field_with_id_spec.rb +16 -0
- data/spec/public/matchers/contain_spec.rb +114 -0
- data/spec/public/matchers/have_selector_spec.rb +135 -0
- data/spec/public/matchers/have_tag_spec.rb +39 -0
- data/spec/public/matchers/have_xpath_spec.rb +123 -0
- data/spec/public/reload_spec.rb +10 -0
- data/spec/public/save_and_open_spec.rb +51 -0
- data/spec/public/select_date_spec.rb +112 -0
- data/spec/public/select_datetime_spec.rb +137 -0
- data/spec/public/select_spec.rb +261 -0
- data/spec/public/select_time_spec.rb +100 -0
- data/spec/public/set_hidden_field_spec.rb +5 -0
- data/spec/public/submit_form_spec.rb +5 -0
- data/spec/public/visit_spec.rb +58 -0
- data/spec/public/within_spec.rb +177 -0
- data/spec/spec_helper.rb +50 -0
- metadata +90 -25
data/History.txt
CHANGED
data/Rakefile
CHANGED
|
@@ -6,6 +6,8 @@ require 'spec'
|
|
|
6
6
|
require 'spec/rake/spectask'
|
|
7
7
|
require 'spec/rake/verify_rcov'
|
|
8
8
|
require File.expand_path('./lib/webrat.rb')
|
|
9
|
+
require 'jeweler'
|
|
10
|
+
|
|
9
11
|
|
|
10
12
|
##############################################################################
|
|
11
13
|
# Package && release
|
|
@@ -35,7 +37,9 @@ end
|
|
|
35
37
|
|
|
36
38
|
Rake::GemPackageTask.new(spec) do |package|
|
|
37
39
|
package.gem_spec = spec
|
|
38
|
-
|
|
40
|
+
endrak
|
|
41
|
+
|
|
42
|
+
Jeweler::Tasks.new(spec)
|
|
39
43
|
|
|
40
44
|
desc 'Show information about the gem.'
|
|
41
45
|
task :debug_gem do
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
class TCPSocket
|
|
2
|
+
|
|
3
|
+
def self.wait_for_service_with_timeout(options)
|
|
4
|
+
start_time = Time.now
|
|
5
|
+
|
|
6
|
+
until listening_service?(options)
|
|
7
|
+
verbose_wait
|
|
8
|
+
|
|
9
|
+
if options[:timeout] && (Time.now > start_time + options[:timeout])
|
|
10
|
+
raise SocketError.new("Socket did not open within #{options[:timeout]} seconds")
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def self.wait_for_service_termination_with_timeout(options)
|
|
16
|
+
start_time = Time.now
|
|
17
|
+
|
|
18
|
+
while listening_service?(options)
|
|
19
|
+
verbose_wait
|
|
20
|
+
|
|
21
|
+
if options[:timeout] && (Time.now > start_time + options[:timeout])
|
|
22
|
+
raise SocketError.new("Socket did not terminate within #{options[:timeout]} seconds")
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
end
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
module Webrat
|
|
2
|
+
module Selenium
|
|
3
|
+
|
|
4
|
+
class ApplicationServer
|
|
5
|
+
|
|
6
|
+
def self.boot
|
|
7
|
+
case Webrat.configuration.application_framework
|
|
8
|
+
when :sinatra
|
|
9
|
+
require "webrat/selenium/sinatra_application_server"
|
|
10
|
+
SinatraApplicationServer.new.boot
|
|
11
|
+
when :merb
|
|
12
|
+
require "webrat/selenium/merb_application_server"
|
|
13
|
+
MerbApplicationServer.new.boot
|
|
14
|
+
when :rails
|
|
15
|
+
require "webrat/selenium/rails_application_server"
|
|
16
|
+
RailsApplicationServer.new.boot
|
|
17
|
+
else
|
|
18
|
+
raise WebratError.new(<<-STR)
|
|
19
|
+
Unknown Webrat application_framework: #{Webrat.configuration.application_framework.inspect}
|
|
20
|
+
|
|
21
|
+
Please ensure you have a Webrat configuration block that specifies an application_framework
|
|
22
|
+
in your test_helper.rb, spec_helper.rb, or env.rb (for Cucumber).
|
|
23
|
+
|
|
24
|
+
For example:
|
|
25
|
+
|
|
26
|
+
Webrat.configure do |config|
|
|
27
|
+
# ...
|
|
28
|
+
config.application_framework = :rails
|
|
29
|
+
end
|
|
30
|
+
STR
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def boot
|
|
35
|
+
start
|
|
36
|
+
wait
|
|
37
|
+
stop_at_exit
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def stop_at_exit
|
|
41
|
+
at_exit do
|
|
42
|
+
stop
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def wait
|
|
47
|
+
$stderr.print "==> Waiting for #{Webrat.configuration.application_framework} application server on port #{Webrat.configuration.application_port}... "
|
|
48
|
+
wait_for_socket
|
|
49
|
+
$stderr.print "Ready!\n"
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def wait_for_socket
|
|
53
|
+
silence_stream(STDOUT) do
|
|
54
|
+
TCPSocket.wait_for_service_with_timeout \
|
|
55
|
+
:host => Webrat.configuration.application_address,
|
|
56
|
+
:port => Webrat.configuration.application_port.to_i,
|
|
57
|
+
:timeout => 30 # seconds
|
|
58
|
+
end
|
|
59
|
+
rescue SocketError
|
|
60
|
+
fail
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def prepare_pid_file(file_path, pid_file_name)
|
|
64
|
+
FileUtils.mkdir_p File.expand_path(file_path)
|
|
65
|
+
File.expand_path("#{file_path}/#{pid_file_name}")
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
end
|
|
71
|
+
end
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
module Webrat
|
|
2
|
+
module Selenium
|
|
3
|
+
|
|
4
|
+
class MerbApplicationServer < ApplicationServer
|
|
5
|
+
|
|
6
|
+
def start
|
|
7
|
+
system start_command
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def stop
|
|
11
|
+
silence_stream(STDOUT) do
|
|
12
|
+
pid = File.read(pid_file)
|
|
13
|
+
system("kill -9 #{pid}")
|
|
14
|
+
FileUtils.rm_f pid_file
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def fail
|
|
19
|
+
$stderr.puts
|
|
20
|
+
$stderr.puts
|
|
21
|
+
$stderr.puts "==> Failed to boot the Merb application server... exiting!"
|
|
22
|
+
$stderr.puts
|
|
23
|
+
$stderr.puts "Verify you can start a Merb server on port #{Webrat.configuration.application_port} with the following command:"
|
|
24
|
+
$stderr.puts
|
|
25
|
+
$stderr.puts " #{start_command}"
|
|
26
|
+
exit
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def pid_file
|
|
30
|
+
"log/merb.#{Webrat.configuration.application_port}.pid"
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def start_command
|
|
34
|
+
"#{merb_command} -d -p #{Webrat.configuration.application_port} -e #{Webrat.configuration.application_environment}"
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def merb_command
|
|
38
|
+
if File.exist?('bin/merb')
|
|
39
|
+
merb_cmd = 'bin/merb'
|
|
40
|
+
else
|
|
41
|
+
merb_cmd = 'merb'
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
end
|
|
48
|
+
end
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
module Webrat
|
|
2
|
+
module Selenium
|
|
3
|
+
|
|
4
|
+
class RailsApplicationServer < ApplicationServer
|
|
5
|
+
|
|
6
|
+
def start
|
|
7
|
+
system start_command
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def stop
|
|
11
|
+
silence_stream(STDOUT) do
|
|
12
|
+
system stop_command
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def fail
|
|
17
|
+
$stderr.puts
|
|
18
|
+
$stderr.puts
|
|
19
|
+
$stderr.puts "==> Failed to boot the Rails application server... exiting!"
|
|
20
|
+
$stderr.puts
|
|
21
|
+
$stderr.puts "Verify you can start a Rails server on port #{Webrat.configuration.application_port} with the following command:"
|
|
22
|
+
$stderr.puts
|
|
23
|
+
$stderr.puts " #{start_command}"
|
|
24
|
+
exit
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def pid_file
|
|
28
|
+
prepare_pid_file("#{RAILS_ROOT}/tmp/pids", "mongrel_selenium.pid")
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def start_command
|
|
32
|
+
"mongrel_rails start -d --chdir='#{RAILS_ROOT}' --port=#{Webrat.configuration.application_port} --environment=#{Webrat.configuration.application_environment} --pid #{pid_file} &"
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def stop_command
|
|
36
|
+
"mongrel_rails stop -c #{RAILS_ROOT} --pid #{pid_file}"
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
end
|
|
42
|
+
end
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
module Webrat
|
|
2
|
+
module Selenium
|
|
3
|
+
|
|
4
|
+
class SeleniumRCServer
|
|
5
|
+
|
|
6
|
+
def self.boot
|
|
7
|
+
new.boot
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def boot
|
|
11
|
+
return if selenium_grid?
|
|
12
|
+
|
|
13
|
+
start
|
|
14
|
+
wait
|
|
15
|
+
stop_at_exit
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def start
|
|
19
|
+
silence_stream(STDOUT) do
|
|
20
|
+
remote_control.start :background => true
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def stop_at_exit
|
|
25
|
+
at_exit do
|
|
26
|
+
stop
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def remote_control
|
|
31
|
+
return @remote_control if @remote_control
|
|
32
|
+
|
|
33
|
+
@remote_control = ::Selenium::RemoteControl::RemoteControl.new("0.0.0.0", Webrat.configuration.selenium_server_port, 5)
|
|
34
|
+
@remote_control.jar_file = jar_path
|
|
35
|
+
|
|
36
|
+
return @remote_control
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def jar_path
|
|
40
|
+
File.expand_path(__FILE__ + "../../../../../vendor/selenium-server.jar")
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def selenium_grid?
|
|
44
|
+
Webrat.configuration.selenium_server_address
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def wait
|
|
48
|
+
$stderr.print "==> Waiting for Selenium RC server on port #{Webrat.configuration.selenium_server_port}... "
|
|
49
|
+
wait_for_socket
|
|
50
|
+
$stderr.print "Ready!\n"
|
|
51
|
+
rescue SocketError
|
|
52
|
+
fail
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def wait_for_socket
|
|
56
|
+
silence_stream(STDOUT) do
|
|
57
|
+
TCPSocket.wait_for_service_with_timeout \
|
|
58
|
+
:host => (Webrat.configuration.selenium_server_address || "0.0.0.0"),
|
|
59
|
+
:port => Webrat.configuration.selenium_server_port,
|
|
60
|
+
:timeout => 15 # seconds
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def fail
|
|
65
|
+
$stderr.puts
|
|
66
|
+
$stderr.puts
|
|
67
|
+
$stderr.puts "==> Failed to boot the Selenium RC server... exiting!"
|
|
68
|
+
exit
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def stop
|
|
72
|
+
silence_stream(STDOUT) do
|
|
73
|
+
::Selenium::RemoteControl::RemoteControl.new("0.0.0.0", Webrat.configuration.selenium_server_port, 5).stop
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
end
|
|
80
|
+
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
module Webrat
|
|
2
|
+
module Selenium
|
|
3
|
+
|
|
4
|
+
class SinatraApplicationServer < ApplicationServer
|
|
5
|
+
|
|
6
|
+
def start
|
|
7
|
+
fork do
|
|
8
|
+
File.open('rack.pid', 'w') { |fp| fp.write Process.pid }
|
|
9
|
+
exec 'rackup', File.expand_path(Dir.pwd + '/config.ru'), '-p', Webrat.configuration.application_port.to_s
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def stop
|
|
14
|
+
silence_stream(STDOUT) do
|
|
15
|
+
pid = File.read(pid_file)
|
|
16
|
+
system("kill -9 #{pid}")
|
|
17
|
+
FileUtils.rm_f pid_file
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def fail
|
|
22
|
+
$stderr.puts
|
|
23
|
+
$stderr.puts
|
|
24
|
+
$stderr.puts "==> Failed to boot the Sinatra application server... exiting!"
|
|
25
|
+
exit
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def pid_file
|
|
29
|
+
prepare_pid_file(Dir.pwd, 'rack.pid')
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
end
|
|
35
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
module Webrat #:nodoc:
|
|
2
|
+
def self.session_class #:nodoc:
|
|
3
|
+
TestSession
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
class TestSession < Session #:nodoc:
|
|
7
|
+
attr_accessor :response_body
|
|
8
|
+
attr_writer :response_code
|
|
9
|
+
|
|
10
|
+
def doc_root
|
|
11
|
+
File.expand_path(File.join(".", "public"))
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def response
|
|
15
|
+
@response ||= Object.new
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def response_code
|
|
19
|
+
@response_code || 200
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def get(url, data, headers = nil)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def post(url, data, headers = nil)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def put(url, data, headers = nil)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def delete(url, data, headers = nil)
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
Merb.logger.info("Loaded DEVELOPMENT Environment...")
|
|
2
|
+
Merb::Config.use { |c|
|
|
3
|
+
c[:exception_details] = true
|
|
4
|
+
c[:reload_templates] = true
|
|
5
|
+
c[:reload_classes] = true
|
|
6
|
+
c[:reload_time] = 0.5
|
|
7
|
+
c[:ignore_tampered_cookies] = true
|
|
8
|
+
c[:log_auto_flush ] = true
|
|
9
|
+
c[:log_level] = :debug
|
|
10
|
+
|
|
11
|
+
c[:log_stream] = STDOUT
|
|
12
|
+
c[:log_file] = nil
|
|
13
|
+
# Or redirect logging into a file:
|
|
14
|
+
# c[:log_file] = Merb.root / "log" / "development.log"
|
|
15
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
Merb.logger.info("Loaded RAKE Environment...")
|
|
2
|
+
Merb::Config.use { |c|
|
|
3
|
+
c[:exception_details] = true
|
|
4
|
+
c[:reload_classes] = false
|
|
5
|
+
c[:log_auto_flush ] = true
|
|
6
|
+
|
|
7
|
+
c[:log_stream] = STDOUT
|
|
8
|
+
c[:log_file] = nil
|
|
9
|
+
# Or redirect logging into a file:
|
|
10
|
+
# c[:log_file] = Merb.root / "log" / "development.log"
|
|
11
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + "/../../../../../lib/webrat"
|
|
2
|
+
|
|
3
|
+
Merb.logger.info("Loaded TEST Environment...")
|
|
4
|
+
Merb::Config.use { |c|
|
|
5
|
+
c[:testing] = true
|
|
6
|
+
c[:exception_details] = true
|
|
7
|
+
c[:log_auto_flush ] = true
|
|
8
|
+
# log less in testing environment
|
|
9
|
+
c[:log_level] = :error
|
|
10
|
+
|
|
11
|
+
#c[:log_file] = Merb.root / "log" / "test.log"
|
|
12
|
+
# or redirect logger using IO handle
|
|
13
|
+
c[:log_stream] = STDOUT
|
|
14
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Go to http://wiki.merbivore.com/pages/init-rb
|
|
2
|
+
|
|
3
|
+
# Specify a specific version of a dependency
|
|
4
|
+
# dependency "RedCloth", "> 3.0"
|
|
5
|
+
|
|
6
|
+
# use_orm :none
|
|
7
|
+
use_test :rspec
|
|
8
|
+
use_template_engine :erb
|
|
9
|
+
|
|
10
|
+
Merb::Config.use do |c|
|
|
11
|
+
c[:use_mutex] = false
|
|
12
|
+
c[:session_store] = 'cookie' # can also be 'memory', 'memcache', 'container', 'datamapper
|
|
13
|
+
|
|
14
|
+
# cookie session store configuration
|
|
15
|
+
c[:session_secret_key] = 'adb9ea7a0e94b5513503f58623a393c5efe18851' # required for cookie session store
|
|
16
|
+
c[:session_id_key] = '_merb_session_id' # cookie session id key, defaults to "_session_id"
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
Merb::BootLoader.before_app_loads do
|
|
20
|
+
# This will get executed after dependencies have been loaded but before your app's classes have loaded.
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
Merb::BootLoader.after_app_loads do
|
|
24
|
+
# This will get executed after your app's classes have been loaded.
|
|
25
|
+
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# use PathPrefix Middleware if :path_prefix is set in Merb::Config
|
|
2
|
+
if prefix = ::Merb::Config[:path_prefix]
|
|
3
|
+
use Merb::Rack::PathPrefix, prefix
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
# comment this out if you are running merb behind a load balancer
|
|
7
|
+
# that serves static files
|
|
8
|
+
use Merb::Rack::Static, Merb.dir_for(:public)
|
|
9
|
+
|
|
10
|
+
# this is our main merb application
|
|
11
|
+
run Merb::Rack::Application.new
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Merb::Router is the request routing mapper for the merb framework.
|
|
2
|
+
#
|
|
3
|
+
# You can route a specific URL to a controller / action pair:
|
|
4
|
+
#
|
|
5
|
+
# match("/contact").
|
|
6
|
+
# to(:controller => "info", :action => "contact")
|
|
7
|
+
#
|
|
8
|
+
# You can define placeholder parts of the url with the :symbol notation. These
|
|
9
|
+
# placeholders will be available in the params hash of your controllers. For example:
|
|
10
|
+
#
|
|
11
|
+
# match("/books/:book_id/:action").
|
|
12
|
+
# to(:controller => "books")
|
|
13
|
+
#
|
|
14
|
+
# Or, use placeholders in the "to" results for more complicated routing, e.g.:
|
|
15
|
+
#
|
|
16
|
+
# match("/admin/:module/:controller/:action/:id").
|
|
17
|
+
# to(:controller => ":module/:controller")
|
|
18
|
+
#
|
|
19
|
+
# You can specify conditions on the placeholder by passing a hash as the second
|
|
20
|
+
# argument of "match"
|
|
21
|
+
#
|
|
22
|
+
# match("/registration/:course_name", :course_name => /^[a-z]{3,5}-\d{5}$/).
|
|
23
|
+
# to(:controller => "registration")
|
|
24
|
+
#
|
|
25
|
+
# You can also use regular expressions, deferred routes, and many other options.
|
|
26
|
+
# See merb/specs/merb/router.rb for a fairly complete usage sample.
|
|
27
|
+
|
|
28
|
+
Merb.logger.info("Compiling routes...")
|
|
29
|
+
Merb::Router.prepare do
|
|
30
|
+
match("/").to(:controller => "testing", :action => "show_form")
|
|
31
|
+
match("/internal_redirect").to(:controller => "testing", :action => "internal_redirect")
|
|
32
|
+
match("/external_redirect").to(:controller => "testing", :action => "external_redirect")
|
|
33
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
require "rubygems"
|
|
2
|
+
|
|
3
|
+
# Add the local gems dir if found within the app root; any dependencies loaded
|
|
4
|
+
# hereafter will try to load from the local gems before loading system gems.
|
|
5
|
+
if (local_gem_dir = File.join(File.dirname(__FILE__), '..', 'gems')) && $BUNDLE.nil?
|
|
6
|
+
$BUNDLE = true; Gem.clear_paths; Gem.path.unshift(local_gem_dir)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
require "merb-core"
|
|
10
|
+
require "spec" # Satisfies Autotest and anyone else not using the Rake tasks
|
|
11
|
+
|
|
12
|
+
# this loads all plugins required in your init file so don't add them
|
|
13
|
+
# here again, Merb will do it for you
|
|
14
|
+
Merb.start_environment(:testing => true, :adapter => 'runner', :environment => ENV['MERB_ENV'] || 'test')
|
|
15
|
+
|
|
16
|
+
Spec::Runner.configure do |config|
|
|
17
|
+
config.include(Merb::Test::ViewHelper)
|
|
18
|
+
config.include(Merb::Test::RouteHelper)
|
|
19
|
+
config.include(Merb::Test::ControllerHelper)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
Webrat.configure do |config|
|
|
23
|
+
config.mode = :merb
|
|
24
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), "spec_helper"))
|
|
2
|
+
|
|
3
|
+
describe "Webrat" do
|
|
4
|
+
it "should visit pages" do
|
|
5
|
+
response = visit "/"
|
|
6
|
+
response.should contain("Webrat Form")
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
it "should submit forms" do
|
|
10
|
+
visit "/"
|
|
11
|
+
fill_in "Text field", :with => "Hello"
|
|
12
|
+
check "TOS"
|
|
13
|
+
select "January"
|
|
14
|
+
click_button "Test"
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it "should follow internal redirects" do
|
|
18
|
+
response = visit "/internal_redirect"
|
|
19
|
+
response.status.should == 200
|
|
20
|
+
response.should contain("Webrat Form")
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it "should check the value of a field" do
|
|
24
|
+
visit "/"
|
|
25
|
+
field_labeled("Prefilled").value.should == "text"
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
it "should not follow external redirects" do
|
|
29
|
+
response = visit "/external_redirect"
|
|
30
|
+
response.status.should == 302
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
# This was added by Merb's bundler
|
|
4
|
+
|
|
5
|
+
require "rubygems"
|
|
6
|
+
require File.join(File.dirname(__FILE__), "common")
|
|
7
|
+
|
|
8
|
+
gems_dir = File.join(File.dirname(__FILE__), '..', 'gems')
|
|
9
|
+
|
|
10
|
+
if File.directory?(gems_dir)
|
|
11
|
+
$BUNDLE = true
|
|
12
|
+
Gem.clear_paths
|
|
13
|
+
Gem.path.replace([File.expand_path(gems_dir)])
|
|
14
|
+
ENV["PATH"] = "#{File.dirname(__FILE__)}:#{ENV["PATH"]}"
|
|
15
|
+
|
|
16
|
+
gem_file = File.join(gems_dir, "specifications", "<%= spec.name %>-*.gemspec")
|
|
17
|
+
|
|
18
|
+
if local_gem = Dir[gem_file].last
|
|
19
|
+
version = File.basename(local_gem)[/-([\.\d]+)\.gemspec$/, 1]
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
version ||= "<%= Gem::Requirement.default %>"
|
|
24
|
+
|
|
25
|
+
if ARGV.first =~ /^_(.*)_$/ and Gem::Version.correct? $1 then
|
|
26
|
+
version = $1
|
|
27
|
+
ARGV.shift
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
gem '<%= @spec.name %>', version
|
|
31
|
+
load '<%= bin_file_name %>'
|