Skip to content

Commit

Permalink
Move more of node functionality into subfolder
Browse files Browse the repository at this point in the history
We have too many top level files, we have multiple
classes in the same file. This allows us to solve
both problems, while also providing a good place
for the new Capybara::Node::Simple (formerly
Capybara::StringNode)
  • Loading branch information
jnicklas committed Nov 21, 2010
1 parent 39f998d commit d223d54
Show file tree
Hide file tree
Showing 15 changed files with 393 additions and 300 deletions.
5 changes: 4 additions & 1 deletion Rakefile
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,10 @@ require 'rspec/core/rake_task'
require 'yard'

desc "Run all examples"
RSpec::Core::RakeTask.new('spec')
RSpec::Core::RakeTask.new(:spec) do |t|
#t.rspec_path = 'bin/rspec'
t.rspec_opts = %w[--color]
end

YARD::Rake::YardocTask.new do |t|
t.files = ['lib/**/*.rb', 'README.rdoc']
Expand Down
21 changes: 13 additions & 8 deletions lib/capybara.rb
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
require 'timeout'
require 'nokogiri'
require 'xpath'

module Capybara
class CapybaraError < StandardError; end
class DriverNotFoundError < CapybaraError; end
Expand Down Expand Up @@ -132,7 +131,7 @@ def server(&block)
##
#
# Wraps the given string, which should contain an HTML document or fragment
# in a {Capybara::StringNode} which exposes all {Capybara::Node::Matchers} and
# in a {Capybara::Node::Simple} which exposes all {Capybara::Node::Matchers} and
# {Capybara::Node::Finders}. This allows you to query any string containing
# HTML in the exact same way you would query the current document in a Capybara
# session. For example:
Expand All @@ -150,10 +149,10 @@ def server(&block)
# node.find('ul').find('li').text # => 'Home'
#
# @param [String] html An html fragment or document
# @return [Capybara::StringNode] A node which has Capybara's finders and matchers
# @return [Capybara::Node::Simple] A node which has Capybara's finders and matchers
#
def string(html)
StringNode.new(html)
Capybara::Node::Simple.new(html)
end

##
Expand Down Expand Up @@ -183,13 +182,19 @@ def deprecate(method, alternate_method)

autoload :Server, 'capybara/server'
autoload :Session, 'capybara/session'
autoload :Node, 'capybara/node'
autoload :StringNode, 'capybara/util/string'
autoload :Document, 'capybara/node'
autoload :Element, 'capybara/node'
autoload :Selector, 'capybara/selector'
autoload :VERSION, 'capybara/version'

module Node
autoload :Base, 'capybara/node/base'
autoload :Simple, 'capybara/node/simple'
autoload :Element, 'capybara/node/element'
autoload :Document, 'capybara/node/document'
autoload :Finders, 'capybara/node/finders'
autoload :Matchers, 'capybara/node/matchers'
autoload :Actions, 'capybara/node/actions'
end

module Driver
autoload :Base, 'capybara/driver/base'
autoload :Node, 'capybara/driver/node'
Expand Down
2 changes: 1 addition & 1 deletion lib/capybara/driver/rack_test_driver.rb
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ def find(locator)
private

def string_node
@string_node ||= Capybara::StringNode.new(native)
@string_node ||= Capybara::Node::Simple.new(native)
end

# a reference to the select node if this is an option node
Expand Down
216 changes: 0 additions & 216 deletions lib/capybara/node.rb

This file was deleted.

2 changes: 1 addition & 1 deletion lib/capybara/node/actions.rb
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
module Capybara
class Node
module Node
module Actions

##
Expand Down
47 changes: 47 additions & 0 deletions lib/capybara/node/base.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
module Capybara
module Node

##
#
# A {Capybara::Node::Base} represents either an element on a page through the subclass
# {Capybara::Node::Element} or a document through {Capybara::Node::Document}.
#
# Both types of Node share the same methods, used for interacting with the
# elements on the page. These methods are divided into three categories,
# finders, actions and matchers. These are found in the modules
# {Capybara::Node::Finders}, {Capybara::Node::Actions} and {Capybara::Node::Matchers}
# respectively.
#
# A {Capybara::Session} exposes all methods from {Capybara::Node::Document} directly:
#
# session = Capybara::Session.new(:rack_test, my_app)
# session.visit('/')
# session.fill_in('Foo', :with => 'Bar') # from Capybara::Node::Actions
# bar = session.find('#bar') # from Capybara::Node::Finders
# bar.select('Baz', :from => 'Quox') # from Capybara::Node::Actions
# session.has_css?('#foobar') # from Capybara::Node::Matchers
#
class Base
attr_reader :session, :base

include Capybara::Node::Finders
include Capybara::Node::Actions
include Capybara::Node::Matchers

def initialize(session, base)
@session = session
@base = base
end

protected

def wait?
driver.wait?
end

def driver
session.driver
end
end
end
end
17 changes: 17 additions & 0 deletions lib/capybara/node/document.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
module Capybara
module Node

##
#
# A {Capybara::Document} represents an HTML document. Any operation
# performed on it will be performed on the entire document.
#
# @see Capybara::Node
#
class Document < Base
def inspect
%(#<Capybara::Document>)
end
end
end
end
Loading

0 comments on commit d223d54

Please sign in to comment.