lib/mache/page.rb in mache-1.0.0 vs lib/mache/page.rb in mache-1.0.1
- old
+ new
@@ -1,28 +1,61 @@
require "capybara"
require "mache/node"
module Mache
- # A page provides a DSL for querying a wrapped capybara node object node. A
- # page can also has a path which can be visited.
+ # The Page class wraps an HTML page with an application-specific API. You can
+ # extend it to define your own API for manipulating the pages of your web
+ # application.
+ #
+ # @example
+ #
+ # class WelcomePage < Mache::page
+ # element :main, "#main"
+ # component :nav, Nav, "#nav"
+ # end
+ #
+ # page = WelcomePage.new(path: "/welcome")
+ # page.visit
+ # page.current # true
+ # page.main.text # lorem ipsum
+ #
class Page < Node
+ # The path where the page is located, without any domain information.
+ #
+ # @return [String] the path string
+ # @example
+ # "/welcome"
+ # "/users/sign_in"
attr_reader :path
+ # Returns a new page object.
+ #
+ # @param node [Capybara::Node] the Capybara node to attach to
+ # @param path [String] the path where the page is located
def initialize(node: Capybara.current_session, path: nil)
@node ||= node
@path ||= path
end
+ # Visits the page at its {#path}.
+ #
+ # @return [Page] the page object
def visit
@node.visit(path)
self
end
+ # Tests whether the page is current.
+ #
+ # @return [Boolean] `true` if the page is current, `false` otherwise
def current?
@node.current_path == path
end
+ # Creates a new page object and calls {#visit} on it.
+ #
+ # @return [Page] the page object
def self.visit
- new.tap(&:visit)
+ new.visit
end
end
end