```ruby
module Pxpay
  # The return notification from Payment Express 
  class Notification
    require 'nokogiri'
    attr_accessor :response
    # Create a new Notification from Payment Express' response
    def initialize(response)
      @response = response
    end
    
    # Return the xml response
    def to_xml
      response
    end 
    
    # Return the response as a hash
    def to_hash
      doc = ::Nokogiri::XML( self.response )
      hash = {}
      doc.at_css("Response").element_children.each do |attribute|
        hash[attribute.name.underscore.to_sym] = attribute.inner_text
      end
      hash
    end
  end
end

class String
  # A copy of Rails' ActiveSupport underscore method
   def underscore
     self.gsub(/::/, '/').
     gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
     gsub(/([a-z\d])([A-Z])/,'\1_\2').
     tr("-", "_").
     downcase
   end
end```

Rollback of last commit, can't just remove valid, will work it out properly later
user
```ruby
module Pxpay
  # The return notification from Payment Express 
  class Notification
    require 'nokogiri'
    attr_accessor :response
    # Create a new Notification from Payment Express' response
    def initialize(response)
      @response = response
    end
    
    # Return the xml response
    def to_xml
      response
    end 
    
    # Return the response as a hash
    def to_hash
      doc = ::Nokogiri::XML( self.response )
      hash = {}
      doc.at_css("Response").element_children.each do |attribute|
        hash[attribute.name.underscore.to_sym] = attribute.inner_text
      end
      hash[:valid] = doc.at_css("Response")['valid']
      hash
    end
  end
end

class String
  # A copy of Rails' ActiveSupport underscore method
   def underscore
     self.gsub(/::/, '/').
     gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
     gsub(/([a-z\d])([A-Z])/,'\1_\2').
     tr("-", "_").
     downcase
   end
end```
assistant