class PageSet

Attributes

context[RW]
pages[R]

Public Class Methods

new(context, smart_completion=true) click to toggle source
# File lib/acceptance_test/page_set.rb, line 12
def initialize context, smart_completion=true
  @context = context
  @smart_completion = smart_completion
  @pages = []
end
page_set() click to toggle source
# File lib/acceptance_test/page_set.rb, line 58
def self.page_set # access to class instance variable
  @page_set
end

Public Instance Methods

delegate_to_page(page) click to toggle source
# File lib/acceptance_test/page_set.rb, line 34
def delegate_to_page page
  pages << page

  self.class.send :attr_reader, page

  self.class.def_delegators page, *page_methods(page)
end
delegate_to_pages(*pages) click to toggle source
# File lib/acceptance_test/page_set.rb, line 26
def delegate_to_pages *pages
  pages.each do |page|
    delegate_to_page page
  end

  enable_smart_completion if @smart_completion
end
detect_pages(scope) click to toggle source
# File lib/acceptance_test/page_set.rb, line 78
def detect_pages scope
  pages_classes = scope.constants.select do |class_name|
    clazz = scope.const_get(class_name)

    clazz.ancestors.include? Page
  end

  pages_classes.collect do |class_name|
    clazz = scope.const_get(class_name)

    object = clazz.new self

    name = underscore(class_name.to_s)

    self.instance_variable_set("@#{name}", object)

    name
  end
end
enable_smart_completion() click to toggle source
# File lib/acceptance_test/page_set.rb, line 48
def enable_smart_completion
  context.class.send(:define_method, :method_missing) do |method_name, *args, &block|
    page_set.send method_name, *args, &block
  end

  page_set = self

  PageSet.class_eval do
    @page_set = page_set # class instance variable

    def self.page_set # access to class instance variable
      @page_set
    end
  end

  pages.each do |page|
    page_methods(page).each do |method_name|
      method = page_set.method(method_name)

      context.class.step "I #{method_name.to_s.gsub('_', ' ')}" do |*args|
        page_set.send method_name, *args
      end

      context.class.step "#{method.to_s.gsub('_', ' ')}" do
        page_set.send method_name, *args
      end
    end
  end
end
execute(&code) click to toggle source
# File lib/acceptance_test/page_set.rb, line 22
def execute &code
  MetaMethods::DslBuilder.instance.evaluate_dsl(self, nil, code)
end
page_methods(page) click to toggle source
# File lib/acceptance_test/page_set.rb, line 42
def page_methods page
  clazz = self.send(page).class

  clazz.instance_methods - Page.instance_methods
end
session() click to toggle source
# File lib/acceptance_test/page_set.rb, line 18
def session
  context.page
end

Private Instance Methods

camelize(string) click to toggle source
# File lib/acceptance_test/page_set.rb, line 100
def camelize string
  string.split("_").each {|s| s.capitalize! }.join("")
end
underscore(string) click to toggle source
# File lib/acceptance_test/page_set.rb, line 104
def underscore string
  string.scan(/[A-Z][a-z]*/).join("_").downcase
end