module MonkeyPatches
  class << self
    def include_patches
      patch_core_methods
      # Other instance methods
      Watir::Element.include WatirExtensions::Element

      # monkeypatch existing methods (replaces alias_method with super)
      PageObject::Accessors.prepend PageObjectExtensions::Accessors
      PageObject::Platforms::Watir::PageObject.prepend(
        PageObjectExtensions::Platforms::Watir::PageObject
      )
      PageObject::IndexedProperties::TableOfElements.prepend(
        PageObjectExtensions::IndexedProperties::TableOfElements
      )
      PageObject::IndexedProperties.const_set(
        "CollectionOfElements",
        PageObjectExtensions::IndexedProperties::CollectionOfElements
      )
    end

    private

    def patch_core_methods
      # Core class methods
      Time.extend CoreExtensions::TimeClass

      # Core instance methods
      String.include CoreExtensions::String
      Hash.include CoreExtensions::Hash
      Array.include CoreExtensions::Array
    end
  end
end
