def element(name, opts, &block)
      element_method = _add_element_method(name, opts, &block)
      _add_common_methods(name, element_method, opts)
      _add_assignment_methods(name, element_method, opts)
    end
def element(name, opts, &block)
      element_method = _add_element_method(name, opts, &block)
      _add_common_methods(name, element_method, opts)
      _add_assignment_methods(name, element_method, opts)
    end
This is the core accessor on which everything else is based.
 Given a name and some options this will generate the following methods:
   name - Executes the method found in the :default_method option, or the element itself if none provided.
   name= - Executes the method found in the :assign_method option, passing it the value. (optional).
   name? - Executes the method found in the :presence_method option, or present?

 For example a text field would look like this:
   element(:username, id: 'some_id', how: :text_field, default_method: :value, assign_method: :set)

 The :how option can either be something that is sendable. or a proc
   If send is used, the options will be passed on to the method.
   If a proc is used it will be called with the name and opts param as well as the container

 A text field could be declared like this:
  element(:username, id: 'some_id', how: Proc.new { |name, container, opts| container.text_field(opts) }, default_method: :value, assign_method: :set)