steam 0.0.2
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/MIT-LICENSE +21 -0
- data/README.textile +91 -0
- data/Rakefile +23 -0
- data/TODO +7 -0
- data/lib/core_ext/ruby/array/flatten_once.rb +9 -0
- data/lib/core_ext/ruby/hash/except.rb +11 -0
- data/lib/core_ext/ruby/hash/slice.rb +14 -0
- data/lib/core_ext/ruby/kernel/silence_warnings.rb +8 -0
- data/lib/core_ext/ruby/process/daemon.rb +23 -0
- data/lib/core_ext/ruby/string/camelize.rb +5 -0
- data/lib/core_ext/ruby/string/underscore.rb +5 -0
- data/lib/steam.rb +43 -0
- data/lib/steam/browser.rb +24 -0
- data/lib/steam/browser/html_unit.rb +87 -0
- data/lib/steam/browser/html_unit/actions.rb +176 -0
- data/lib/steam/browser/html_unit/client.rb +74 -0
- data/lib/steam/browser/html_unit/connection.rb +79 -0
- data/lib/steam/browser/html_unit/drb.rb +45 -0
- data/lib/steam/browser/html_unit/matchers.rb +57 -0
- data/lib/steam/browser/html_unit/page.rb +51 -0
- data/lib/steam/browser/html_unit/web_response.rb +116 -0
- data/lib/steam/connection.rb +9 -0
- data/lib/steam/connection/mock.rb +57 -0
- data/lib/steam/connection/net_http.rb +42 -0
- data/lib/steam/connection/open_uri.rb +24 -0
- data/lib/steam/connection/rails.rb +20 -0
- data/lib/steam/connection/static.rb +33 -0
- data/lib/steam/java.rb +74 -0
- data/lib/steam/process.rb +53 -0
- data/lib/steam/request.rb +49 -0
- data/lib/steam/response.rb +13 -0
- data/lib/steam/session.rb +30 -0
- data/lib/steam/session/rails.rb +33 -0
- data/lib/steam/version.rb +3 -0
- data/test/all.rb +3 -0
- data/test/browser/html_unit/actions_test.rb +183 -0
- data/test/browser/html_unit/javascript_test.rb +60 -0
- data/test/browser/html_unit/rails_actions_test.rb +151 -0
- data/test/browser/html_unit_test.rb +97 -0
- data/test/connection/cascade_test.rb +42 -0
- data/test/connection/mock_test.rb +58 -0
- data/test/connection/rails_test.rb +16 -0
- data/test/connection/static_test.rb +14 -0
- data/test/fixtures/html_fakes.rb +191 -0
- data/test/java_test.rb +29 -0
- data/test/playground/connection.rb +19 -0
- data/test/playground/dragdrop_behavior.rb +60 -0
- data/test/playground/drb.rb +55 -0
- data/test/playground/java_signature.rb +22 -0
- data/test/playground/nokogiri.rb +15 -0
- data/test/playground/put_headers.rb +83 -0
- data/test/playground/rack.rb +11 -0
- data/test/playground/rjb_bind.rb +42 -0
- data/test/playground/stack_level_problem.rb +129 -0
- data/test/playground/thread_problem.rb +57 -0
- data/test/playground/web_response_data.rb +21 -0
- data/test/playground/webrat.rb +48 -0
- data/test/playground/xhr_accept_headers.rb +61 -0
- data/test/process_test.rb +55 -0
- data/test/session_test.rb +15 -0
- data/test/test_helper.rb +56 -0
- metadata +135 -0
@@ -0,0 +1,60 @@
|
|
1
|
+
require File.expand_path('../../../test_helper', __FILE__)
|
2
|
+
require 'fixtures/html_fakes'
|
3
|
+
|
4
|
+
class HtmlUnitJavascriptTest < Test::Unit::TestCase
|
5
|
+
include Steam, HtmlFakes
|
6
|
+
|
7
|
+
def setup
|
8
|
+
@app = Steam::Connection::Mock.new
|
9
|
+
static = Steam::Connection::Static.new(:root => FIXTURES_PATH)
|
10
|
+
@browser = Steam::Browser::HtmlUnit.new(Rack::Cascade.new([static, @app]))
|
11
|
+
end
|
12
|
+
|
13
|
+
test "jquery: div:not([id]) selector" do
|
14
|
+
html = <<-html
|
15
|
+
<html>
|
16
|
+
<head>
|
17
|
+
<script src="/javascripts/jquery.js" type="text/javascript"></script>
|
18
|
+
<script>
|
19
|
+
$(document).ready(function() {
|
20
|
+
$('div:not([id])').each(function() {
|
21
|
+
document.title = $(this).html();
|
22
|
+
});
|
23
|
+
});
|
24
|
+
</script>
|
25
|
+
</head>
|
26
|
+
<body>
|
27
|
+
<div id="foo">foo</div>
|
28
|
+
<div>bar</div>
|
29
|
+
</body>
|
30
|
+
</html>
|
31
|
+
html
|
32
|
+
|
33
|
+
perform(:get, 'http://localhost:3000/', html)
|
34
|
+
assert_equal 'bar', @browser.page.getTitleText
|
35
|
+
end
|
36
|
+
|
37
|
+
test "jquery: div[id*=bar] selector" do
|
38
|
+
html = <<-html
|
39
|
+
<html>
|
40
|
+
<head>
|
41
|
+
<script src="/javascripts/jquery.js" type="text/javascript"></script>
|
42
|
+
<script>
|
43
|
+
$(document).ready(function() {
|
44
|
+
$('div[id*=bar]').each(function() {
|
45
|
+
document.title = $(this).html();
|
46
|
+
});
|
47
|
+
});
|
48
|
+
</script>
|
49
|
+
</head>
|
50
|
+
<body>
|
51
|
+
<div id="sidebar">foobar</div>
|
52
|
+
</body>
|
53
|
+
</html>
|
54
|
+
html
|
55
|
+
|
56
|
+
perform(:get, 'http://localhost:3000/', html)
|
57
|
+
assert_equal 'foobar', @browser.page.getTitleText
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
@@ -0,0 +1,151 @@
|
|
1
|
+
require File.expand_path('../../../test_helper', __FILE__)
|
2
|
+
require 'fixtures/html_fakes'
|
3
|
+
|
4
|
+
class HtmlUnitRailsActionsTest < Test::Unit::TestCase
|
5
|
+
include Steam, HtmlFakes
|
6
|
+
|
7
|
+
def setup
|
8
|
+
@app = Steam::Connection::Mock.new
|
9
|
+
static = Steam::Connection::Static.new(:root => FIXTURES_PATH)
|
10
|
+
@browser = Steam::Browser::HtmlUnit.new(Rack::Cascade.new([static, @app]))
|
11
|
+
|
12
|
+
@app.mock :get, "http://localhost:3000/form?event_date(1i)=2009&event_date(2i)=11&event_date(3i)=7", 'DATE'
|
13
|
+
@app.mock :get, "http://localhost:3000/form?event_datetime(1i)=2009&event_datetime(2i)=11&event_datetime(3i)=7&event_datetime(4i)=19&event_datetime(5i)=0", 'DATETIME'
|
14
|
+
@app.mock :get, "http://localhost:3000/form?event_time(4i)=19&event_time(5i)=0", 'TIME'
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_select_date
|
18
|
+
perform :get, 'http://localhost:3000/', html(:fields => :date)
|
19
|
+
|
20
|
+
assert_response_contains('DATE') do
|
21
|
+
@browser.select_date('7 November 2009', :from => 'event_date')
|
22
|
+
@browser.submit_form('form')
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_select_date_works_with_date_object
|
27
|
+
perform :get, 'http://localhost:3000/', html(:fields => :date)
|
28
|
+
|
29
|
+
assert_response_contains('DATE') do
|
30
|
+
@browser.select_date(Date.parse('7 November 2009'), :from => 'event_date')
|
31
|
+
@browser.submit_form('form')
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_select_date_works_with_label
|
36
|
+
perform :get, 'http://localhost:3000/', html(:fields => :date)
|
37
|
+
|
38
|
+
assert_response_contains('DATE') do
|
39
|
+
@browser.select_date('7 November 2009', :from => 'Date')
|
40
|
+
@browser.submit_form('form')
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_select_date_works_without_from_option
|
45
|
+
perform :get, 'http://localhost:3000/', html(:fields => :date)
|
46
|
+
|
47
|
+
assert_response_contains('DATE') do
|
48
|
+
@browser.select_date('7 November 2009')
|
49
|
+
@browser.submit_form('form')
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_select_date_works_with_id_prefix_option
|
54
|
+
perform :get, 'http://localhost:3000/', html(:fields => :date)
|
55
|
+
|
56
|
+
assert_response_contains('DATE') do
|
57
|
+
@browser.select_date('7 November 2009', :id_prefix => 'event_date')
|
58
|
+
@browser.submit_form('form')
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_select_datetime
|
63
|
+
perform :get, 'http://localhost:3000/', html(:fields => :datetime)
|
64
|
+
|
65
|
+
assert_response_contains('DATETIME') do
|
66
|
+
@browser.select_datetime('7 November 2009, 19:00', :from => 'event_datetime')
|
67
|
+
@browser.submit_form('form')
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def test_select_datetime_works_with_datetime_object
|
72
|
+
perform :get, 'http://localhost:3000/', html(:fields => :datetime)
|
73
|
+
|
74
|
+
assert_response_contains('DATETIME') do
|
75
|
+
@browser.select_datetime(Time.parse('7 November 2009, 19:00'), :from => 'event_datetime')
|
76
|
+
@browser.submit_form('form')
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
def test_select_datetime_works_with_label
|
81
|
+
perform :get, 'http://localhost:3000/', html(:fields => :datetime)
|
82
|
+
|
83
|
+
assert_response_contains('DATETIME') do
|
84
|
+
@browser.select_datetime('7 November 2009, 19:00', :from => 'Datetime')
|
85
|
+
@browser.submit_form('form')
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
def test_select_datetime_works_without_from_option
|
90
|
+
perform :get, 'http://localhost:3000/', html(:fields => :datetime)
|
91
|
+
|
92
|
+
assert_response_contains('DATETIME') do
|
93
|
+
@browser.select_datetime('7 November 2009, 19:00')
|
94
|
+
@browser.submit_form('form')
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
def test_select_datetime_works_with_id_prefix_option
|
99
|
+
perform :get, 'http://localhost:3000/', html(:fields => :datetime)
|
100
|
+
|
101
|
+
assert_response_contains('DATETIME') do
|
102
|
+
@browser.select_datetime('7 November 2009, 19:00', :id_prefix => 'event_datetime')
|
103
|
+
@browser.submit_form('form')
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
def test_select_time
|
108
|
+
perform :get, 'http://localhost:3000/', html(:fields => :time)
|
109
|
+
|
110
|
+
assert_response_contains('TIME') do
|
111
|
+
@browser.select_time('19:00', :from => 'event_time')
|
112
|
+
@browser.submit_form('form')
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
def test_select_time_works_with_time_object
|
117
|
+
perform :get, 'http://localhost:3000/', html(:fields => :time)
|
118
|
+
|
119
|
+
assert_response_contains('TIME') do
|
120
|
+
@browser.select_time(Time.parse('19:00'), :from => 'event_time')
|
121
|
+
@browser.submit_form('form')
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
def test_select_time_works_with_label
|
126
|
+
perform :get, 'http://localhost:3000/', html(:fields => :time)
|
127
|
+
|
128
|
+
assert_response_contains('TIME') do
|
129
|
+
@browser.select_time('19:00', :from => 'Time')
|
130
|
+
@browser.submit_form('form')
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
def test_select_time_works_without_from_option
|
135
|
+
perform :get, 'http://localhost:3000/', html(:fields => :time)
|
136
|
+
|
137
|
+
assert_response_contains('TIME') do
|
138
|
+
@browser.select_time('19:00')
|
139
|
+
@browser.submit_form('form')
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
def test_select_time_works_with_id_prefix_option
|
144
|
+
perform :get, 'http://localhost:3000/', html(:fields => :time)
|
145
|
+
|
146
|
+
assert_response_contains('TIME') do
|
147
|
+
@browser.select_time('19:00', :id_prefix => 'event_time')
|
148
|
+
@browser.submit_form('form')
|
149
|
+
end
|
150
|
+
end
|
151
|
+
end
|
@@ -0,0 +1,97 @@
|
|
1
|
+
require File.expand_path('../../test_helper', __FILE__)
|
2
|
+
require 'fixtures/html_fakes'
|
3
|
+
require 'locator'
|
4
|
+
|
5
|
+
module HtmlUnitTests
|
6
|
+
def init
|
7
|
+
@app = Steam::Connection::Mock.new
|
8
|
+
static = Steam::Connection::Static.new(:root => FIXTURES_PATH)
|
9
|
+
@browser = Steam::Browser::HtmlUnit.new(Rack::Cascade.new([static, @app]))
|
10
|
+
perform(:get, 'http://localhost:3000/', '<div id="foo"><div id="bar"><a id="buz" href="">bar!</a></div></div>')
|
11
|
+
end
|
12
|
+
|
13
|
+
def locate(*args, &block)
|
14
|
+
@browser.locate(*args, &block)
|
15
|
+
end
|
16
|
+
|
17
|
+
def within(*args, &block)
|
18
|
+
@browser.within(*args, &block)
|
19
|
+
end
|
20
|
+
|
21
|
+
test 'locate with node type' do
|
22
|
+
element = locate(:a)
|
23
|
+
assert_equal 'a', element.name
|
24
|
+
end
|
25
|
+
|
26
|
+
test 'locate with attributes' do
|
27
|
+
element = locate(:id => 'buz')
|
28
|
+
assert_equal 'a', element.name
|
29
|
+
end
|
30
|
+
|
31
|
+
test 'locate with search text' do
|
32
|
+
element = locate(:a, 'bar!')
|
33
|
+
assert_equal 'a', element.name
|
34
|
+
end
|
35
|
+
|
36
|
+
test 'locate with xpath' do
|
37
|
+
element = locate(:xpath => '//div/div/a')
|
38
|
+
assert_equal 'a', element.name
|
39
|
+
end
|
40
|
+
|
41
|
+
test 'locate with css' do
|
42
|
+
element = locate(:css => '#foo #bar a')
|
43
|
+
assert_equal 'a', element.name
|
44
|
+
end
|
45
|
+
|
46
|
+
test 'within with node type' do
|
47
|
+
element = within(:div) { within(:div) { locate(:a) } }
|
48
|
+
assert_equal 'a', element.name
|
49
|
+
end
|
50
|
+
|
51
|
+
test 'within with attributes' do
|
52
|
+
element = within(:id => 'foo') { within(:id => 'bar') { locate(:a) } }
|
53
|
+
assert_equal 'a', element.name
|
54
|
+
end
|
55
|
+
|
56
|
+
test 'within with xpath' do
|
57
|
+
element = within('//div/div') { locate(:a) }
|
58
|
+
assert_equal 'a', element.name
|
59
|
+
end
|
60
|
+
|
61
|
+
test 'within with css' do
|
62
|
+
element = within('#foo #bar') { locate(:a) }
|
63
|
+
assert_equal 'a', element.name
|
64
|
+
end
|
65
|
+
|
66
|
+
test 'nesting locate' do
|
67
|
+
element = locate(:id => 'foo') { locate(:id => 'bar') { locate(:a) } }
|
68
|
+
assert_equal 'a', element.name
|
69
|
+
end
|
70
|
+
|
71
|
+
test 'nesting within' do
|
72
|
+
element = within(:id => 'foo') { within(:id => 'bar') { locate(:a) } }
|
73
|
+
assert_equal 'a', element.name
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
class HtmlUnitWithNokogiriAdapterTest < Test::Unit::TestCase
|
78
|
+
include Steam, HtmlUnitTests
|
79
|
+
|
80
|
+
def setup
|
81
|
+
init
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
class HtmlUnitWithHtmlUnitAdapterTest < Test::Unit::TestCase
|
86
|
+
include Steam, HtmlUnitTests
|
87
|
+
|
88
|
+
def setup
|
89
|
+
@old_adapter, Locator::Dom.adapter = Locator::Dom.adapter, Locator::Dom::Htmlunit
|
90
|
+
init
|
91
|
+
end
|
92
|
+
|
93
|
+
def teardown
|
94
|
+
Locator::Dom.adapter = @old_adapter
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
|
2
|
+
require 'rack/cascade'
|
3
|
+
|
4
|
+
class ConnectionCascadeTest < Test::Unit::TestCase
|
5
|
+
include Steam
|
6
|
+
|
7
|
+
def setup
|
8
|
+
connections = []
|
9
|
+
@urls = []
|
10
|
+
@bodies = []
|
11
|
+
|
12
|
+
@root = File.expand_path(File.dirname(__FILE__) + '/../fixtures')
|
13
|
+
connections << Connection::Static.new(:root => @root)
|
14
|
+
@urls << 'http://localhost:3000/javascripts/foo.js'
|
15
|
+
@bodies << File.read(@root + '/javascripts/foo.js')
|
16
|
+
|
17
|
+
@mock_url = 'http://localhost:3000/mock'
|
18
|
+
mock = Connection::Mock.new
|
19
|
+
mock.mock :get, @mock_url, 'mock body'
|
20
|
+
connections << mock
|
21
|
+
@urls << @mock_url
|
22
|
+
@bodies << 'mock body'
|
23
|
+
|
24
|
+
if Gem.available?('patron')
|
25
|
+
patron = Connection::Patron.new
|
26
|
+
patron_body = 'patron body'
|
27
|
+
patron.stubs(:handle_request).returns(patron_response(patron_body)) # FIXME .with(...)
|
28
|
+
connections << patron
|
29
|
+
@urls << 'http://localhost:3000/patron'
|
30
|
+
@bodies << patron_body
|
31
|
+
end
|
32
|
+
|
33
|
+
@connection = Rack::Cascade.new(connections)
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_cascade
|
37
|
+
@urls.each_with_index do |url, index|
|
38
|
+
status, headers, response = @connection.call(Request.env_for(url))
|
39
|
+
assert_equal @bodies[index], response.body.join
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
|
2
|
+
|
3
|
+
class ConnectionMockTest < Test::Unit::TestCase
|
4
|
+
include Steam
|
5
|
+
|
6
|
+
def setup
|
7
|
+
@connection = Connection::Mock.new
|
8
|
+
@url = 'http://localhost:3000/'
|
9
|
+
@body = <<-body
|
10
|
+
<html>
|
11
|
+
<head>
|
12
|
+
<script src="/javascripts/script.js" type="text/javascript"></script>
|
13
|
+
</head>
|
14
|
+
</html>
|
15
|
+
body
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_call
|
19
|
+
@connection.mock(:get, @url, @body)
|
20
|
+
status, headers, response = @connection.call(Request.env_for(@url))
|
21
|
+
assert_equal [@body], response.body
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_mock_with_response
|
25
|
+
@connection.mock(:get, @url, Rack::Response.new(@body, 200, { 'Content-Type' => 'text/css' }))
|
26
|
+
assert_response('Content-Type' => 'text/css')
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_mock_with_string
|
30
|
+
@connection.mock(:get, @url, @body)
|
31
|
+
assert_response
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_mock_with_array_without_content_type
|
35
|
+
@connection.mock(:get, @url, [@body, 201, { 'foo' => 'bar' }])
|
36
|
+
assert_response(201, 'foo' => 'bar')
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_mock_with_array_with_content_type
|
40
|
+
@connection.mock(:get, @url, [@body, 201, { 'Content-Type' => 'text/css' }])
|
41
|
+
assert_response(201, 'Content-Type' => 'text/css')
|
42
|
+
end
|
43
|
+
|
44
|
+
protected
|
45
|
+
|
46
|
+
def assert_response(*args)
|
47
|
+
headers = args.last.is_a?(Hash) ? args.pop : {}
|
48
|
+
headers = { 'Content-Type' => 'text/html' }.merge(headers)
|
49
|
+
status = args.pop || 200
|
50
|
+
|
51
|
+
response = @connection.response('GET', @url)
|
52
|
+
|
53
|
+
assert response.is_a?(Rack::Response)
|
54
|
+
assert_equal [@body], response.body
|
55
|
+
assert_equal status, response.status
|
56
|
+
assert_equal headers['Content-Type'], response.header['Content-Type']
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
|
2
|
+
#
|
3
|
+
# class ConnectionRailsTest < Test::Unit::TestCase
|
4
|
+
# include Steam
|
5
|
+
#
|
6
|
+
# def test_rails
|
7
|
+
# rails_root = File.expand_path(File.dirname(__FILE__) + '/../fixtures/rails')
|
8
|
+
# require rails_root + '/config/environment.rb'
|
9
|
+
#
|
10
|
+
# url = 'http://localhost:3000/users'
|
11
|
+
# connection = Connection::Rails.new
|
12
|
+
#
|
13
|
+
# status, headers, response = connection.call(Request.env_for(url))
|
14
|
+
# # assert !response.body.empty?
|
15
|
+
# end
|
16
|
+
# end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
|
2
|
+
|
3
|
+
class ConnectionStaticTest < Test::Unit::TestCase
|
4
|
+
include Steam
|
5
|
+
|
6
|
+
def test_static
|
7
|
+
url = 'http://localhost:3000/javascripts/foo.js'
|
8
|
+
root = File.expand_path(File.dirname(__FILE__) + '/../fixtures')
|
9
|
+
connection = Connection::Static.new(:root => root)
|
10
|
+
|
11
|
+
status, headers, response = connection.call(Request.env_for(url))
|
12
|
+
assert_equal File.read(root + '/javascripts/foo.js'), response.body.join
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,191 @@
|
|
1
|
+
module HtmlFakes
|
2
|
+
def html(options = {})
|
3
|
+
fields = Array(options[:fields]).map { |field| self.send(field) }
|
4
|
+
scripts = Array(options[:scripts]).map { |script| self.send(script) }
|
5
|
+
ERB.new(layout).result(binding)
|
6
|
+
end
|
7
|
+
|
8
|
+
def text
|
9
|
+
<<-html
|
10
|
+
<label for="field">Label for field</label>
|
11
|
+
<input type="text" id="field" name="field" />
|
12
|
+
html
|
13
|
+
end
|
14
|
+
|
15
|
+
def textarea
|
16
|
+
<<-html
|
17
|
+
<label for="textarea">Label for textarea</label>
|
18
|
+
<textarea id="textarea" name="textarea"></textarea>
|
19
|
+
html
|
20
|
+
end
|
21
|
+
|
22
|
+
def checkbox
|
23
|
+
<<-html
|
24
|
+
<label for="checkbox">Label for checkbox</label>
|
25
|
+
<input id="checkbox" type="checkbox" name="checkbox" value="1" />
|
26
|
+
html
|
27
|
+
end
|
28
|
+
|
29
|
+
def radio
|
30
|
+
<<-html
|
31
|
+
<label for="radio1">Label for radio</label>
|
32
|
+
<input id="radio1" type="radio" name="radio" value="radio" />
|
33
|
+
<label for="radio2">Label for tv</label>
|
34
|
+
<input id="radio2" type="radio" name="radio" value="tv" />
|
35
|
+
html
|
36
|
+
end
|
37
|
+
|
38
|
+
def select
|
39
|
+
<<-html
|
40
|
+
<label for="select">Label for select</label>
|
41
|
+
<select id="select" name="select">
|
42
|
+
<option value=""></option>
|
43
|
+
<option value="foo">foo</option>
|
44
|
+
</select>
|
45
|
+
html
|
46
|
+
end
|
47
|
+
|
48
|
+
def hidden
|
49
|
+
<<-html
|
50
|
+
<input id="hidden" type="hidden" name="hidden" value="bar" />
|
51
|
+
html
|
52
|
+
end
|
53
|
+
|
54
|
+
def file
|
55
|
+
<<-html
|
56
|
+
<label for="file">Label for file</label><input id="file" type="file" name="file" />
|
57
|
+
html
|
58
|
+
end
|
59
|
+
|
60
|
+
def date
|
61
|
+
<<-html
|
62
|
+
<label for="event_date">Date</label>
|
63
|
+
<select id="event_date_1i" name="event_date(1i)">
|
64
|
+
<option value="2008">2008</option>
|
65
|
+
<option value="2009">2009</option>
|
66
|
+
<option value="2010">2010</option>
|
67
|
+
</select>
|
68
|
+
<select id="event_date_2i" name="event_date(2i)">
|
69
|
+
<option value="10">October</option>
|
70
|
+
<option value="11">November</option>
|
71
|
+
<option value="12">December</option>
|
72
|
+
</select>
|
73
|
+
<select id="event_date_3i" name="event_date(3i)">
|
74
|
+
<option value="6">6</option>
|
75
|
+
<option value="7">7</option>
|
76
|
+
<option value="8">8</option>
|
77
|
+
</select>
|
78
|
+
html
|
79
|
+
end
|
80
|
+
|
81
|
+
def datetime
|
82
|
+
<<-html
|
83
|
+
<label for="event_datetime">Datetime</label>
|
84
|
+
<select id="event_datetime_1i" name="event_datetime(1i)">
|
85
|
+
<option value="2008">2008</option>
|
86
|
+
<option value="2009">2009</option>
|
87
|
+
<option value="2010">2010</option>
|
88
|
+
</select>
|
89
|
+
<select id="event_datetime_2i" name="event_datetime(2i)">
|
90
|
+
<option value="10">October</option>
|
91
|
+
<option value="11">November</option>
|
92
|
+
<option value="12">December</option>
|
93
|
+
</select>
|
94
|
+
<select id="event_datetime_3i" name="event_datetime(3i)">
|
95
|
+
<option value="6">6</option>
|
96
|
+
<option value="7">7</option>
|
97
|
+
<option value="8">8</option>
|
98
|
+
</select> :
|
99
|
+
<select id="event_datetime_4i" name="event_datetime(4i)">
|
100
|
+
<option value="18">18</option>
|
101
|
+
<option value="19">19</option>
|
102
|
+
<option value="20">20</option>
|
103
|
+
</select>
|
104
|
+
<select id="event_datetime_5i" name="event_datetime(5i)">
|
105
|
+
<option value="0">00</option>
|
106
|
+
<option value="1">01</option>
|
107
|
+
<option value="2">02</option>
|
108
|
+
</select>
|
109
|
+
html
|
110
|
+
end
|
111
|
+
|
112
|
+
def time
|
113
|
+
<<-html
|
114
|
+
<label for="event_time">Time</label>
|
115
|
+
<select id="event_time_4i" name="event_time(4i)">
|
116
|
+
<option value="18">18</option>
|
117
|
+
<option value="19">19</option>
|
118
|
+
<option value="20">20</option>
|
119
|
+
</select>
|
120
|
+
<select id="event_time_5i" name="event_time(5i)">
|
121
|
+
<option value="0">00</option>
|
122
|
+
<option value="1">01</option>
|
123
|
+
<option value="2">02</option>
|
124
|
+
</select>
|
125
|
+
html
|
126
|
+
end
|
127
|
+
|
128
|
+
def jquery
|
129
|
+
<<-html
|
130
|
+
<script src="/javascripts/jquery.js" type="text/javascript"></script>
|
131
|
+
html
|
132
|
+
end
|
133
|
+
|
134
|
+
def jquery_ui
|
135
|
+
<<-html
|
136
|
+
<script src="/javascripts/jquery-ui.js" type="text/javascript"></script>
|
137
|
+
html
|
138
|
+
end
|
139
|
+
|
140
|
+
def foo
|
141
|
+
<<-html
|
142
|
+
<script src="/javascripts/foo.js" type="text/javascript"></script>
|
143
|
+
html
|
144
|
+
end
|
145
|
+
|
146
|
+
def hover
|
147
|
+
<<-html
|
148
|
+
<script src="/javascripts/hover.js" type="text/javascript"></script>
|
149
|
+
html
|
150
|
+
end
|
151
|
+
|
152
|
+
def blur
|
153
|
+
<<-html
|
154
|
+
<script src="/javascripts/blur.js" type="text/javascript"></script>
|
155
|
+
html
|
156
|
+
end
|
157
|
+
|
158
|
+
def focus
|
159
|
+
<<-html
|
160
|
+
<script src="/javascripts/focus.js" type="text/javascript"></script>
|
161
|
+
html
|
162
|
+
end
|
163
|
+
|
164
|
+
def double_click
|
165
|
+
<<-html
|
166
|
+
<script src="/javascripts/double_click.js" type="text/javascript"></script>
|
167
|
+
html
|
168
|
+
end
|
169
|
+
|
170
|
+
def drag
|
171
|
+
<<-html
|
172
|
+
<script src="/javascripts/drag.js" type="text/javascript"></script>
|
173
|
+
html
|
174
|
+
end
|
175
|
+
|
176
|
+
def layout
|
177
|
+
<<-erb
|
178
|
+
<html>
|
179
|
+
<head><%= scripts %></head>
|
180
|
+
<body>
|
181
|
+
<p id="paragraph"></p>
|
182
|
+
<p><a href="/link" id="link">link</a></p>
|
183
|
+
<form action="/form" method="get" id="form" enctype="multipart/form-data">
|
184
|
+
<%= fields %>
|
185
|
+
<input type="submit" value="button" />
|
186
|
+
</form>
|
187
|
+
</body>
|
188
|
+
</html>
|
189
|
+
erb
|
190
|
+
end
|
191
|
+
end
|