jwilger-webrat 0.4.3.4 → 0.4.4.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.
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
+