class Cornucopia::SitePrism::PageApplication
PageApplication
is a class used to fetch page objects and memoize them without really having to know anything about them.
This class is intended to be the base class for a page application object.
An example of how it is designed to work is:
class MyApplication < Cornucopia::SitePrism::PageApplication
def pages_module MyPagesModule end
end
module MyPagesModule
class MyPage < SitePrism::Page end
end
page = MyApplication.my_page
The system works as follows:
* Pages are defined as: BaseModule::SubModule::NamePage BaseModule:: is optional SubModule:: is optional and you can have as many levels as you want Name is the name of the page Page is recommended to distinguish pages from sections * A singleton instance of your application class is memoized. That instance is used to instantiate and memoize all of the page objects. Additional functions and properties which you may need may be added to this class. Remember, this singleton instance is instantiated once per test run and will be reused in multiple tests. * To get a page object, simply use your class object and call the underscored name of the page and its modules as a class method. The class method name will be deconstructed and constantized into a page object. The page object will be created once and then cached for future use. Use 2 underscores (__) between modules. To get the sample page it would be: MyApplication.sub_module__name_page
All you have to do is define the page objects under a single module namespace and the application class will recognize the pages and return them.
Public Class Methods
current_instance()
click to toggle source
# File lib/cornucopia/site_prism/page_application.rb, line 56 def current_instance @@current_instances[self.name] ||= self.new end
method_missing(method_sym, *arguments, &block)
click to toggle source
Redirect any non-class methods to the instance if the instance supports them.
Calls superclass method
# File lib/cornucopia/site_prism/page_application.rb, line 61 def method_missing(method_sym, *arguments, &block) if self.current_instance.respond_to?(method_sym, true) self.current_instance.send(method_sym, *arguments) else super end end
respond_to?(method_sym, include_private = false)
click to toggle source
Calls superclass method
# File lib/cornucopia/site_prism/page_application.rb, line 69 def respond_to?(method_sym, include_private = false) if self.current_instance.respond_to?(method_sym, include_private) true else super end end
Public Instance Methods
is_page_name?(method_name)
click to toggle source
# File lib/cornucopia/site_prism/page_application.rb, line 78 def is_page_name?(method_name) is_page_name = false if method_name =~ /^[@a-z0-9_]+$/i base_class = pages_module is_page_name = true method_name.split("__").each do |module_name| if module_name.blank? is_page_name = false break; end unless base_class.const_defined?(module_name.camelize) is_page_name = false break end base_class = "#{base_class}::#{module_name.camelize}".constantize end end is_page_name end
method_missing(method_sym, *arguments, &block)
click to toggle source
Calls superclass method
# File lib/cornucopia/site_prism/page_application.rb, line 102 def method_missing(method_sym, *arguments, &block) method_name = method_sym.to_s if is_page_name?(method_name) return_page = instance_variable_get("@#{method_name}") unless return_page return_page = "#{pages_module.to_s}::#{method_name.split("__").map(&:camelize).join("::")}".constantize.new instance_variable_set("@#{method_name}", return_page) end return_page else super end end
pages_module()
click to toggle source
# File lib/cornucopia/site_prism/page_application.rb, line 51 def pages_module Object end
respond_to?(method_sym, include_private = false)
click to toggle source
Calls superclass method
# File lib/cornucopia/site_prism/page_application.rb, line 117 def respond_to?(method_sym, include_private = false) method_name = method_sym.to_s if is_page_name?(method_name) true else super end end