jwilger-webrat 0.4.3.4 → 0.4.4.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (62) hide show
  1. data/History.txt +34 -0
  2. data/Rakefile +16 -3
  3. data/lib/webrat/core/configuration.rb +9 -16
  4. data/lib/webrat/core/elements/area.rb +7 -7
  5. data/lib/webrat/core/elements/element.rb +11 -11
  6. data/lib/webrat/core/elements/field.rb +50 -50
  7. data/lib/webrat/core/elements/form.rb +17 -17
  8. data/lib/webrat/core/elements/label.rb +6 -6
  9. data/lib/webrat/core/elements/link.rb +13 -11
  10. data/lib/webrat/core/elements/select_option.rb +9 -9
  11. data/lib/webrat/core/locators/area_locator.rb +10 -10
  12. data/lib/webrat/core/locators/button_locator.rb +13 -13
  13. data/lib/webrat/core/locators/field_by_id_locator.rb +8 -8
  14. data/lib/webrat/core/locators/field_labeled_locator.rb +11 -11
  15. data/lib/webrat/core/locators/field_locator.rb +7 -7
  16. data/lib/webrat/core/locators/field_named_locator.rb +10 -10
  17. data/lib/webrat/core/locators/form_locator.rb +6 -6
  18. data/lib/webrat/core/locators/label_locator.rb +9 -9
  19. data/lib/webrat/core/locators/link_locator.rb +12 -12
  20. data/lib/webrat/core/locators/locator.rb +5 -5
  21. data/lib/webrat/core/locators/select_option_locator.rb +11 -11
  22. data/lib/webrat/core/locators.rb +2 -2
  23. data/lib/webrat/core/logging.rb +7 -4
  24. data/lib/webrat/core/matchers/have_content.rb +12 -12
  25. data/lib/webrat/core/matchers/have_selector.rb +9 -9
  26. data/lib/webrat/core/matchers/have_tag.rb +4 -4
  27. data/lib/webrat/core/matchers/have_xpath.rb +24 -24
  28. data/lib/webrat/core/methods.rb +14 -10
  29. data/lib/webrat/core/mime.rb +3 -3
  30. data/lib/webrat/core/save_and_open_page.rb +9 -9
  31. data/lib/webrat/core/scope.rb +54 -52
  32. data/lib/webrat/core/session.rb +20 -13
  33. data/lib/webrat/core/xml/hpricot.rb +3 -3
  34. data/lib/webrat/core/xml/nokogiri.rb +11 -11
  35. data/lib/webrat/core/xml/rexml.rb +3 -3
  36. data/lib/webrat/core/xml.rb +16 -16
  37. data/lib/webrat/core_extensions/blank.rb +1 -1
  38. data/lib/webrat/core_extensions/deprecate.rb +1 -1
  39. data/lib/webrat/core_extensions/detect_mapped.rb +4 -4
  40. data/lib/webrat/core_extensions/meta_class.rb +1 -1
  41. data/lib/webrat/core_extensions/tcp_socket.rb +27 -0
  42. data/lib/webrat/mechanize.rb +9 -9
  43. data/lib/webrat/merb.rb +1 -1
  44. data/lib/webrat/merb_session.rb +10 -10
  45. data/lib/webrat/rack_test.rb +32 -0
  46. data/lib/webrat/rails.rb +2 -2
  47. data/lib/webrat/rspec-rails.rb +2 -2
  48. data/lib/webrat/selenium/application_server.rb +75 -0
  49. data/lib/webrat/selenium/matchers/have_content.rb +4 -4
  50. data/lib/webrat/selenium/matchers/have_selector.rb +4 -4
  51. data/lib/webrat/selenium/matchers/have_tag.rb +16 -16
  52. data/lib/webrat/selenium/matchers/have_xpath.rb +4 -4
  53. data/lib/webrat/selenium/matchers.rb +1 -1
  54. data/lib/webrat/selenium/merb_application_server.rb +50 -0
  55. data/lib/webrat/selenium/rails_application_server.rb +44 -0
  56. data/lib/webrat/selenium/selenium_rc_server.rb +90 -0
  57. data/lib/webrat/selenium/selenium_session.rb +22 -31
  58. data/lib/webrat/selenium/silence_stream.rb +14 -0
  59. data/lib/webrat/selenium/sinatra_application_server.rb +37 -0
  60. data/lib/webrat/selenium.rb +5 -81
  61. data/lib/webrat.rb +8 -11
  62. metadata +10 -2
@@ -6,36 +6,36 @@ module Webrat
6
6
  # An HTML element (link, button, field, etc.) that Webrat expected was not found on the page
7
7
  class NotFoundError < WebratError
8
8
  end
9
-
9
+
10
10
  class Scope
11
11
  include Logging
12
12
  include Locators
13
-
13
+
14
14
  def self.from_page(session, response, response_body) #:nodoc:
15
15
  new(session) do
16
16
  @response = response
17
17
  @response_body = response_body
18
18
  end
19
19
  end
20
-
20
+
21
21
  def self.from_scope(session, scope, selector) #:nodoc:
22
22
  new(session) do
23
23
  @scope = scope
24
24
  @selector = selector
25
25
  end
26
26
  end
27
-
27
+
28
28
  attr_reader :session
29
-
29
+
30
30
  def initialize(session, &block) #:nodoc:
31
31
  @session = session
32
32
  instance_eval(&block) if block_given?
33
-
33
+
34
34
  if @selector && scoped_dom.nil?
35
35
  raise Webrat::NotFoundError.new("The scope was not found on the page: #{@selector.inspect}")
36
36
  end
37
37
  end
38
-
38
+
39
39
  # Verifies an input field or textarea exists on the current page, and stores a value for
40
40
  # it which will be sent when the form is submitted.
41
41
  #
@@ -53,7 +53,7 @@ module Webrat
53
53
  end
54
54
 
55
55
  webrat_deprecate :fills_in, :fill_in
56
-
56
+
57
57
  # Verifies that a hidden field exists on the current page and sets
58
58
  # the value to that given by the <tt>:to</tt> option.
59
59
  #
@@ -63,7 +63,7 @@ module Webrat
63
63
  field = locate_field(field_locator, HiddenField)
64
64
  field.set(options[:to])
65
65
  end
66
-
66
+
67
67
  # Verifies that an input checkbox exists on the current page and marks it
68
68
  # as checked, so that the value will be submitted with the form.
69
69
  #
@@ -74,7 +74,7 @@ module Webrat
74
74
  end
75
75
 
76
76
  webrat_deprecate :checks, :check
77
-
77
+
78
78
  # Verifies that an input checkbox exists on the current page and marks it
79
79
  # as unchecked, so that the value will not be submitted with the form.
80
80
  #
@@ -85,7 +85,7 @@ module Webrat
85
85
  end
86
86
 
87
87
  webrat_deprecate :unchecks, :uncheck
88
-
88
+
89
89
  # Verifies that an input radio button exists on the current page and marks it
90
90
  # as checked, so that the value will be submitted with the form.
91
91
  #
@@ -96,7 +96,7 @@ module Webrat
96
96
  end
97
97
 
98
98
  webrat_deprecate :chooses, :choose
99
-
99
+
100
100
  # Verifies that a an option element exists on the current page with the specified
101
101
  # text. You can optionally restrict the search to a specific select list by
102
102
  # assigning <tt>options[:from]</tt> the value of the select list's name or
@@ -111,7 +111,7 @@ module Webrat
111
111
  end
112
112
 
113
113
  webrat_deprecate :selects, :select
114
-
114
+
115
115
  DATE_TIME_SUFFIXES = {
116
116
  :year => '1i',
117
117
  :month => '2i',
@@ -120,9 +120,9 @@ module Webrat
120
120
  :minute => '5i'
121
121
  }
122
122
 
123
- # Verifies that date elements (year, month, day) exist on the current page
123
+ # Verifies that date elements (year, month, day) exist on the current page
124
124
  # with the specified values. You can optionally restrict the search to a specific
125
- # date's elements by assigning <tt>options[:from]</tt> the value of the date's
125
+ # date's elements by assigning <tt>options[:from]</tt> the value of the date's
126
126
  # label. Selects all the date elements with date provided. The date provided may
127
127
  # be a string or a Date/Time object.
128
128
  #
@@ -136,15 +136,15 @@ module Webrat
136
136
  # select_date Date.parse("December 25, 2000"), :from => "Event"
137
137
  # select_date "April 26, 1982", :id_prefix => 'birthday'
138
138
  def select_date(date_to_select, options ={})
139
- date = date_to_select.is_a?(Date) || date_to_select.is_a?(Time) ?
140
- date_to_select : Date.parse(date_to_select)
141
-
139
+ date = date_to_select.is_a?(Date) || date_to_select.is_a?(Time) ?
140
+ date_to_select : Date.parse(date_to_select)
141
+
142
142
  id_prefix = locate_id_prefix(options) do
143
143
  year_field = FieldByIdLocator.new(@session, dom, /(.*?)_#{DATE_TIME_SUFFIXES[:year]}$/).locate
144
144
  raise NotFoundError.new("No date fields were found") unless year_field && year_field.id =~ /(.*?)_1i/
145
145
  $1
146
146
  end
147
-
147
+
148
148
  select date.year, :from => "#{id_prefix}_#{DATE_TIME_SUFFIXES[:year]}"
149
149
  select date.strftime('%B'), :from => "#{id_prefix}_#{DATE_TIME_SUFFIXES[:month]}"
150
150
  select date.day, :from => "#{id_prefix}_#{DATE_TIME_SUFFIXES[:day]}"
@@ -152,9 +152,9 @@ module Webrat
152
152
 
153
153
  webrat_deprecate :selects_date, :select_date
154
154
 
155
- # Verifies that time elements (hour, minute) exist on the current page
155
+ # Verifies that time elements (hour, minute) exist on the current page
156
156
  # with the specified values. You can optionally restrict the search to a specific
157
- # time's elements by assigning <tt>options[:from]</tt> the value of the time's
157
+ # time's elements by assigning <tt>options[:from]</tt> the value of the time's
158
158
  # label. Selects all the time elements with date provided. The time provided may
159
159
  # be a string or a Time object.
160
160
  #
@@ -164,28 +164,28 @@ module Webrat
164
164
  #
165
165
  # Note: Just like Rails' time_select helper this assumes the form is using
166
166
  # 24 hour select boxes, and not 12 hours with AM/PM.
167
- #
167
+ #
168
168
  # Examples:
169
169
  # select_time "9:30"
170
170
  # select_date "3:30PM", :from => "Party Time"
171
171
  # select_date Time.parse("10:00PM"), :from => "Event"
172
172
  # select_date "10:30AM", :id_prefix => 'meeting'
173
173
  def select_time(time_to_select, options ={})
174
- time = time_to_select.is_a?(Time) ? time_to_select : Time.parse(time_to_select)
174
+ time = time_to_select.is_a?(Time) ? time_to_select : Time.parse(time_to_select)
175
175
 
176
176
  id_prefix = locate_id_prefix(options) do
177
177
  hour_field = FieldByIdLocator.new(@session, dom, /(.*?)_#{DATE_TIME_SUFFIXES[:hour]}$/).locate
178
178
  raise NotFoundError.new("No time fields were found") unless hour_field && hour_field.id =~ /(.*?)_4i/
179
179
  $1
180
180
  end
181
-
181
+
182
182
  select time.hour.to_s.rjust(2,'0'), :from => "#{id_prefix}_#{DATE_TIME_SUFFIXES[:hour]}"
183
183
  select time.min.to_s.rjust(2,'0'), :from => "#{id_prefix}_#{DATE_TIME_SUFFIXES[:minute]}"
184
184
  end
185
185
 
186
186
  webrat_deprecate :selects_time, :select_time
187
-
188
- # Verifies and selects all the date and time elements on the current page.
187
+
188
+ # Verifies and selects all the date and time elements on the current page.
189
189
  # See #select_time and #select_date for more details and available options.
190
190
  #
191
191
  # Examples:
@@ -194,23 +194,23 @@ module Webrat
194
194
  # select_datetime Time.parse("December 25, 2000 15:30"), :from => "Event"
195
195
  # select_datetime "April 26, 1982 5:50PM", :id_prefix => 'birthday'
196
196
  def select_datetime(time_to_select, options ={})
197
- time = time_to_select.is_a?(Time) ? time_to_select : Time.parse(time_to_select)
198
-
197
+ time = time_to_select.is_a?(Time) ? time_to_select : Time.parse(time_to_select)
198
+
199
199
  options[:id_prefix] ||= (options[:from] ? FieldByIdLocator.new(@session, dom, options[:from]).locate : nil)
200
-
200
+
201
201
  select_date time, options
202
202
  select_time time, options
203
203
  end
204
204
 
205
205
  webrat_deprecate :selects_datetime, :select_datetime
206
-
206
+
207
207
  # Verifies that an input file field exists on the current page and sets
208
208
  # its value to the given +file+, so that the file will be uploaded
209
209
  # along with the form. An optional <tt>content_type</tt> may be given.
210
210
  #
211
211
  # Example:
212
- # attaches_file "Resume", "/path/to/the/resume.txt"
213
- # attaches_file "Photo", "/path/to/the/image.png", "image/png"
212
+ # attach_file "Resume", "/path/to/the/resume.txt"
213
+ # attach_file "Photo", "/path/to/the/image.png", "image/png"
214
214
  def attach_file(field_locator, path, content_type = nil)
215
215
  locate_field(field_locator, FileField).set(path, content_type)
216
216
  end
@@ -229,13 +229,13 @@ module Webrat
229
229
  def click_area(area_name)
230
230
  find_area(area_name).click
231
231
  end
232
-
232
+
233
233
  webrat_deprecate :clicks_area, :click_area
234
-
234
+
235
235
  # Issues a request for the URL pointed to by a link on the current page,
236
236
  # follows any redirects, and verifies the final page load was successful.
237
- #
238
- # click_link has very basic support for detecting Rails-generated
237
+ #
238
+ # click_link has very basic support for detecting Rails-generated
239
239
  # JavaScript onclick handlers for PUT, POST and DELETE links, as well as
240
240
  # CSRF authenticity tokens if they are present.
241
241
  #
@@ -243,15 +243,15 @@ module Webrat
243
243
  #
244
244
  # Passing a :method in the options hash overrides the HTTP method used
245
245
  # for making the link request
246
- #
246
+ #
247
247
  # It will try to find links by (in order of precedence):
248
248
  # innerHTML, with simple &nbsp; handling
249
249
  # title
250
250
  # id
251
- #
251
+ #
252
252
  # innerHTML and title are matchable by text subtring or Regexp
253
253
  # id is matchable by full text equality or Regexp
254
- #
254
+ #
255
255
  # Example:
256
256
  # click_link "Sign up"
257
257
  # click_link "Sign up", :javascript => false
@@ -261,7 +261,7 @@ module Webrat
261
261
  end
262
262
 
263
263
  webrat_deprecate :clicks_link, :click_link
264
-
264
+
265
265
  # Verifies that a submit button exists for the form, then submits the form, follows
266
266
  # any redirects, and verifies the final page was successful.
267
267
  #
@@ -288,36 +288,38 @@ module Webrat
288
288
  def submit_form(id)
289
289
  FormLocator.new(@session, dom, id).locate.submit
290
290
  end
291
-
291
+
292
292
  def dom # :nodoc:
293
293
  return @dom if @dom
294
-
294
+
295
295
  if @selector
296
296
  @dom = scoped_dom
297
297
  else
298
298
  @dom = page_dom
299
299
  end
300
-
300
+
301
301
  return @dom
302
302
  end
303
-
303
+
304
+ protected
305
+
304
306
  def page_dom #:nodoc:
305
307
  return @response.dom if @response.respond_to?(:dom)
306
-
308
+
307
309
  if @session.xml_content_type?
308
310
  dom = Webrat::XML.xml_document(@response_body)
309
311
  else
310
312
  dom = Webrat::XML.html_document(@response_body)
311
313
  end
312
-
314
+
313
315
  Webrat.define_dom_method(@response, dom)
314
316
  return dom
315
317
  end
316
-
318
+
317
319
  def scoped_dom
318
320
  Webrat::XML.css_at(@scope.dom, @selector)
319
321
  end
320
-
322
+
321
323
  def locate_field(field_locator, *field_types) #:nodoc:
322
324
  if field_locator.is_a?(Field)
323
325
  field_locator
@@ -325,10 +327,10 @@ module Webrat
325
327
  field(field_locator, *field_types)
326
328
  end
327
329
  end
328
-
330
+
329
331
  def locate_id_prefix(options, &location_strategy) #:nodoc:
330
332
  return options[:id_prefix] if options[:id_prefix]
331
-
333
+
332
334
  if options[:from]
333
335
  if (label = LabelLocator.new(@session, dom, options[:from]).locate)
334
336
  label.for_id
@@ -339,10 +341,10 @@ module Webrat
339
341
  yield
340
342
  end
341
343
  end
342
-
344
+
343
345
  def forms #:nodoc:
344
346
  @forms ||= Form.load_all(@session, dom)
345
347
  end
346
-
348
+
347
349
  end
348
350
  end
@@ -11,7 +11,7 @@ module Webrat
11
11
 
12
12
  class InfiniteRedirectError < WebratError
13
13
  end
14
-
14
+
15
15
  def self.session_class
16
16
  case Webrat.configuration.mode
17
17
  when :rails
@@ -26,6 +26,8 @@ module Webrat
26
26
  SinatraSession
27
27
  when :mechanize
28
28
  MechanizeSession
29
+ when :rack_test
30
+ RackTestSession
29
31
  else
30
32
  raise WebratError.new(<<-STR)
31
33
  Unknown Webrat mode: #{Webrat.configuration.mode.inspect}
@@ -77,7 +79,7 @@ For example:
77
79
  def doc_root #:nodoc:
78
80
  nil
79
81
  end
80
-
82
+
81
83
  def header(key, value)
82
84
  @custom_headers[key] = value
83
85
  end
@@ -100,11 +102,8 @@ For example:
100
102
  h['HTTP_REFERER'] = @current_url if @current_url
101
103
 
102
104
  debug_log "REQUESTING PAGE: #{http_method.to_s.upcase} #{url} with #{data.inspect} and HTTP headers #{h.inspect}"
103
- if h.empty?
104
- send "#{http_method}", url, data || {}
105
- else
106
- send "#{http_method}", url, data || {}, h
107
- end
105
+
106
+ process_request(http_method, url, data, h)
108
107
 
109
108
  save_and_open_page if exception_caught? && Webrat.configuration.open_error_files?
110
109
  raise PageLoadError.new("Page load was not successful (Code: #{response_code.inspect}):\n#{formatted_error}") unless success_code?
@@ -122,13 +121,13 @@ For example:
122
121
 
123
122
  return response
124
123
  end
125
-
124
+
126
125
  def check_for_infinite_redirects
127
126
  if current_url == response_location
128
127
  @_identical_redirect_count ||= 0
129
128
  @_identical_redirect_count += 1
130
129
  end
131
-
130
+
132
131
  if infinite_redirect_limit_exceeded?
133
132
  raise InfiniteRedirectError.new("#{Webrat.configuration.infinite_redirect_limit} redirects to the same URL (#{current_url.inspect})")
134
133
  end
@@ -138,7 +137,7 @@ For example:
138
137
  Webrat.configuration.infinite_redirect_limit &&
139
138
  (@_identical_redirect_count || 0) > Webrat.configuration.infinite_redirect_limit
140
139
  end
141
-
140
+
142
141
  def success_code? #:nodoc:
143
142
  (200..499).include?(response_code)
144
143
  end
@@ -154,7 +153,7 @@ For example:
154
153
  response_location_host_domain = response_location_host.split('.')[-2..-1].join('.') rescue response_location_host
155
154
  current_host_domain == response_location_host_domain
156
155
  end
157
-
156
+
158
157
  #easy helper to pull out where we were redirected to
159
158
  def redirected_to
160
159
  redirect? ? response_location : nil
@@ -259,12 +258,20 @@ For example:
259
258
 
260
259
  private
261
260
 
261
+ def process_request(http_method, url, data, headers)
262
+ if headers.empty?
263
+ send "#{http_method}", url, data || {}
264
+ else
265
+ send "#{http_method}", url, data || {}, headers
266
+ end
267
+ end
268
+
262
269
  def response_location
263
270
  response.headers["Location"]
264
271
  end
265
272
 
266
273
  def current_host
267
- URI.parse(current_url).host || @custom_headers["Host"] || "www.example.com"
274
+ URI.parse(current_url).host || "www.example.com"
268
275
  end
269
276
 
270
277
  def response_location_host
@@ -276,6 +283,6 @@ For example:
276
283
  @_scopes = nil
277
284
  @_page_scope = nil
278
285
  end
279
-
286
+
280
287
  end
281
288
  end
@@ -1,5 +1,5 @@
1
1
  module Webrat
2
-
2
+
3
3
  def self.hpricot_document(stringlike)
4
4
  return stringlike.dom if stringlike.respond_to?(:dom)
5
5
 
@@ -15,5 +15,5 @@ module Webrat
15
15
  Hpricot(stringlike.to_s)
16
16
  end
17
17
  end
18
-
19
- end
18
+
19
+ end
@@ -1,10 +1,10 @@
1
1
  require "webrat/core_extensions/meta_class"
2
2
 
3
3
  module Webrat
4
-
4
+
5
5
  def self.nokogiri_document(stringlike) #:nodoc:
6
6
  return stringlike.dom if stringlike.respond_to?(:dom)
7
-
7
+
8
8
  if Nokogiri::HTML::Document === stringlike
9
9
  stringlike
10
10
  elsif Nokogiri::XML::NodeSet === stringlike
@@ -17,10 +17,10 @@ module Webrat
17
17
  Nokogiri::HTML(stringlike.to_s)
18
18
  end
19
19
  end
20
-
20
+
21
21
  def self.html_nokogiri_document(stringlike) #:nodoc:
22
22
  return stringlike.dom if stringlike.respond_to?(:dom)
23
-
23
+
24
24
  if Nokogiri::HTML::Document === stringlike
25
25
  stringlike
26
26
  elsif Nokogiri::XML::NodeSet === stringlike
@@ -33,10 +33,10 @@ module Webrat
33
33
  Nokogiri::HTML(stringlike.to_s)
34
34
  end
35
35
  end
36
-
36
+
37
37
  def self.xml_nokogiri_document(stringlike) #:nodoc:
38
38
  return stringlike.dom if stringlike.respond_to?(:dom)
39
-
39
+
40
40
  if Nokogiri::HTML::Document === stringlike
41
41
  stringlike
42
42
  elsif Nokogiri::XML::NodeSet === stringlike
@@ -49,20 +49,20 @@ module Webrat
49
49
  Nokogiri::XML(stringlike.to_s)
50
50
  end
51
51
  end
52
-
52
+
53
53
  def self.define_dom_method(object, dom) #:nodoc:
54
54
  object.meta_class.send(:define_method, :dom) do
55
55
  dom
56
56
  end
57
57
  end
58
-
58
+
59
59
  end
60
60
 
61
61
 
62
62
  module Nokogiri #:nodoc:
63
63
  module CSS #:nodoc:
64
64
  class XPathVisitor #:nodoc:
65
-
65
+
66
66
  def visit_pseudo_class_text(node) #:nodoc:
67
67
  "@type='text'"
68
68
  end
@@ -70,7 +70,7 @@ module Nokogiri #:nodoc:
70
70
  def visit_pseudo_class_password(node) #:nodoc:
71
71
  "@type='password'"
72
72
  end
73
-
73
+
74
74
  end
75
75
  end
76
- end
76
+ end
@@ -1,5 +1,5 @@
1
1
  module Webrat
2
-
2
+
3
3
  def self.rexml_document(stringlike)
4
4
  stringlike = stringlike.body.to_s if stringlike.respond_to?(:body)
5
5
 
@@ -20,5 +20,5 @@ module Webrat
20
20
  end
21
21
  end
22
22
  end
23
-
24
- end
23
+
24
+ end
@@ -4,7 +4,7 @@ require "webrat/core/xml/rexml"
4
4
 
5
5
  module Webrat #:nodoc:
6
6
  module XML #:nodoc:
7
-
7
+
8
8
  def self.document(stringlike) #:nodoc:
9
9
  if Webrat.configuration.parse_with_nokogiri?
10
10
  Webrat.nokogiri_document(stringlike)
@@ -12,7 +12,7 @@ module Webrat #:nodoc:
12
12
  Webrat.rexml_document(Webrat.hpricot_document(stringlike).to_html)
13
13
  end
14
14
  end
15
-
15
+
16
16
  def self.html_document(stringlike) #:nodoc:
17
17
  if Webrat.configuration.parse_with_nokogiri?
18
18
  Webrat.html_nokogiri_document(stringlike)
@@ -20,7 +20,7 @@ module Webrat #:nodoc:
20
20
  Webrat.rexml_document(Webrat.hpricot_document(stringlike).to_html)
21
21
  end
22
22
  end
23
-
23
+
24
24
  def self.xml_document(stringlike) #:nodoc:
25
25
  if Webrat.configuration.parse_with_nokogiri?
26
26
  Webrat.xml_nokogiri_document(stringlike)
@@ -36,7 +36,7 @@ module Webrat #:nodoc:
36
36
  element.to_s
37
37
  end
38
38
  end
39
-
39
+
40
40
  def self.inner_html(element)
41
41
  if Webrat.configuration.parse_with_nokogiri?
42
42
  element.inner_html
@@ -44,7 +44,7 @@ module Webrat #:nodoc:
44
44
  element.text
45
45
  end
46
46
  end
47
-
47
+
48
48
  def self.all_inner_text(element)
49
49
  if Webrat.configuration.parse_with_nokogiri?
50
50
  element.inner_text
@@ -52,7 +52,7 @@ module Webrat #:nodoc:
52
52
  Hpricot(element.to_s).children.first.inner_text
53
53
  end
54
54
  end
55
-
55
+
56
56
  def self.inner_text(element)
57
57
  if Webrat.configuration.parse_with_nokogiri?
58
58
  element.inner_text
@@ -64,7 +64,7 @@ module Webrat #:nodoc:
64
64
  end
65
65
  end
66
66
  end
67
-
67
+
68
68
  def self.xpath_to(element)
69
69
  if Webrat.configuration.parse_with_nokogiri?
70
70
  element.path
@@ -72,25 +72,25 @@ module Webrat #:nodoc:
72
72
  element.xpath
73
73
  end
74
74
  end
75
-
75
+
76
76
  def self.attribute(element, attribute_name)
77
77
  return element[attribute_name] if element.is_a?(Hash)
78
-
78
+
79
79
  if Webrat.configuration.parse_with_nokogiri?
80
80
  element[attribute_name]
81
81
  else
82
82
  element.attributes[attribute_name]
83
83
  end
84
84
  end
85
-
85
+
86
86
  def self.xpath_at(*args)
87
87
  xpath_search(*args).first
88
88
  end
89
-
89
+
90
90
  def self.css_at(*args)
91
91
  css_search(*args).first
92
92
  end
93
-
93
+
94
94
  def self.xpath_search(element, *searches)
95
95
  searches.flatten.map do |search|
96
96
  if Webrat.configuration.parse_with_nokogiri?
@@ -100,16 +100,16 @@ module Webrat #:nodoc:
100
100
  end
101
101
  end.flatten.compact
102
102
  end
103
-
103
+
104
104
  def self.css_search(element, *searches) #:nodoc:
105
105
  xpath_search(element, css_to_xpath(*searches))
106
106
  end
107
-
107
+
108
108
  def self.css_to_xpath(*selectors)
109
109
  selectors.map do |rule|
110
110
  Nokogiri::CSS.xpath_for(rule, :prefix => ".//")
111
111
  end.flatten.uniq
112
112
  end
113
-
113
+
114
114
  end
115
- end
115
+ end
@@ -12,7 +12,7 @@ class Object #:nodoc:
12
12
  def blank?
13
13
  respond_to?(:empty?) ? empty? : !self
14
14
  end
15
-
15
+
16
16
  # An object is present if it's not blank.
17
17
  def present?
18
18
  !blank?
@@ -5,4 +5,4 @@ class Module #:nodoc:
5
5
  __send__(new_method_name, *args)
6
6
  end
7
7
  end
8
- end
8
+ end
@@ -1,12 +1,12 @@
1
1
  class Array #:nodoc:
2
-
2
+
3
3
  def detect_mapped
4
4
  each do |element|
5
5
  result = yield element
6
6
  return result if result
7
7
  end
8
-
8
+
9
9
  return nil
10
10
  end
11
-
12
- end
11
+
12
+ end
@@ -3,4 +3,4 @@ class ::Object #:nodoc:
3
3
  class << self; self end
4
4
  end
5
5
  end
6
-
6
+