paramadeep/pageify

View on GitHub
lib/pageify/page_object.rb

Summary

Maintainability
A
25 mins
Test Coverage
module Pageify
  class PageObject
    attr_accessor :name,:parent,:self_selector,:intend,:full_selector

    def createChild (raw_row)
      child = PageObject.create(raw_row)
      child.parent = self
      define_singleton_method(child.name) do |*arguments|
        unless arguments.eql? []
          child_selector = (child.self_selector % arguments).strip_quotes.strip
        else
          child_selector = (child.self_selector % '').strip_quotes.strip
        end
        if child_selector.start_with? "&"
          child.full_selector = @full_selector + child_selector.gsub(/^&/, "")
        else
          child.full_selector = @full_selector + " " + child_selector
        end
        child
      end
      return child
    end

    def self.create (raw_row)
      name = raw_row.lstrip.split(":").first
      self_selector = raw_row.slice(raw_row.index(':')+1..-1)
      intend = raw_row.lspace
      PageObject.new(name,self_selector,intend)
    end

    def selector
      @full_selector.strip
    end

    def initialize (name,self_selector,intend)
      @name = name
      @self_selector = self_selector
      @intend = intend
    end

    def run_block (&block)
      @self_before_instance_eval = eval "self", block.binding
      instance_eval &block
    end

  end

  def on (pageObject,&block)
    pageObject.run_block &block
  end

end