== 3.3.0 (February 9, 2012)

* major enhancement

  * Don't extend/modify the XML parser

== 3.1.6 (September 9, 2010)

* bug fix

  * load active_support in a way that is compatible with 2.x and 3.x
    (fixes gh issue #27)
  * change the way we monkey patch Nokogiri to leave the original
    behaviour of the search() method unchanged (fixes gh issue #16)

== 3.1.5 (December 18, 2009)

* bug fix

  * don't use tasks/ because those rake files are picked up by those vendoring roxml

== 3.1.4 (December 18, 2009)

* bug fix

  * require the necessary version of active support (#tap wasn't introduced until 2.3)

== 3.1.3 (October 30, 2009)

* minor enhancements

  * Add support for local-name() reference reading via :namespace => '*'
    (ala http://techrageo.us/2008/11/01/wildcard-namespaces-in-xpath/)

* bug fixes

  * attributes collected :as => [] were previously output improperly,
    as a single attribute on a single node
  * don't output crazy, context-less namespaces and local-name xpaths
    when trying to output namespaced attributes

== 3.1.2 (October 18, 2009)

* minor enhancements

  * Retain whitespace in element contents, but still default on blank (rather than entirely empty) elements

* bug fixes

  * Include namespaces in xml output
  * Fix that auto-wrapped collections weren't output with their wrappers
    (which requires introducing the roxml_references accessor on the instance)

== 3.1.1 (October 17, 2009)

* bug fix

  * Fix bad load paths

== 3.1 (October 16, 2009)

* major enhancements

  * Add support for registering XML namespace prefixes via the xml_namespaces method

* bug fix

  * References to arrays of attributes were only returning the first.  No more.

== 3.0 (October 14, 2009)

* major enhancements

  * Add Nokogiri support
  * Remove previously deprecated functionality
  * Remove REXML support
  * Error on any unrecognized options
  * Normalize hash declaration syntax:
    * for :key => '@string', string is taken to be the :from argument
    * for :key => {:from => '@string', :as => Type}, the arguments are just the same as a regular declaration

* minor enhancements

  * Include 't' and 'f' in the list of possible boolean values, since rails uses them
  * Remove :attrs hash syntax.  Not particularly helpful & somewhat obfuscatory.  Use :key, :value instead.
  * Default attrs ending in '_at' to DateTime.  This can be overriden via :as
  * Default attrs ending in '_on' to Date.  This can be overriden via :as
  * Don't require rubygems within the library
  * Don't mess with the load path

== 2.5.4 (October 4, 2009)

* bug fix

  * Rely on REXML's #add_child and LibXML's <<, rather than #child_add which had been removed from REXML and deprecated from LibXML

== 2.5.3 (March 22, 2009)

* minor enhancement

  * Work around apparently unintentional breaking change in libxml-ruby 1.1.3

== 2.5.2 (March 12, 2009)

* minor enhancements

  * Remove dependency on an Object#try which conflicted with ActiveSupport 2.3's version
  * Document the :to_xml option for attr references
  * Require active_support directly,  as it's less brittle and plays nicer with other libraries

== 2.5.1 (March 2, 2009)

* minor enhancements

   * Add Document#save to REXML support, complete with XMLDecl output

* bug fixes

   * rexml support has been fixed
   * the first example in the readme was broken and has been fixed

== 2.5.0 (February 24, 2009)

* major enhancements

   * support for mapping ActiveRecord classes.  See examples/rails.rb.
   * .from_xml will now use the setter for the declared variable, if one is available,
     rather than directly setting the instance variable
   * All declaration type arguments are now supported via the :as parameter, e.g. :as => [MyType].  Other uses are deprecated.
   * All xml source path arguments are now supported via the :from and :in parameters, e.g. :from => :attr or :from => '@MyAttr'.  Other uses are deprecated.
   * All other options are presented separately, e.g. :cdata => true rather than :as => :cdata.  Other uses are deprecated.

* minor enhancements

   * .xml_attr declaration declares neither a reader nor a writer.  With it you're left to your own devices.
   * You can use literal [] for the [:text] object type declaration,
    though they should be used in the :as parameter: :as => []
   * You can use [] with your :as declarations. e.g. :as => [Float] is
     equivalent to the old :as => [Float, :array]
   * Show the actual call point of a deprecation, rather than some internal path
   * Add support for BigDecimal and Fixnum as block shorthands [James Healy]
   * Update libxml support to 0.9.6, and add it as a dependency, to ensure correct versioning, and
     as it's an order of magnitude faster than rexml

* breaking changes

   * :else option only applies to instances created via .from_xml
   * On .from_xml, #initialize is now called with the *initialization_args before extracting attributes from the xml.
   * #xml_initialize has been replaced with the #after_parse callback, which takes no arguments.
   * .xml_accessor will overwrite the setter for this variable if it has already been defined.  Use .xml_reader or .xml_attr,
     or define your writer later, if this is not the behavior you want.

* deprecations

  * Use :cdata => true rather than :as => :cdata
  * Use literal [] around your regular object type, rather than :as => :array
  * Use :from => :content rather than the :content object declaration type
  * Specifying an unknown symbol or Class for :as will raise in 3.0
  * Specifying :as with anything other than a type argument e.g. :bool, Float, [Date],
    will not be supported in 3.0
  * Use :from => :attr or :from => '@attribute_name' rather than the :attr
    object declaration type
  * Passing any type declaration outside the :as parameter is deprecated
  * In 3.0, attributes ending in _on and _at will default to :as => Date and DateTime, respectively,
    rather than :text
  * Deprecated hash :attrs declaration syntax in favor of {:key => '@attr1', :value => '@attr2'}
  * Deprecated hash {Type => 'name'} declaration syntax in favor of {:as => Type, :from => 'name}
  * Deprecated String#to_utf and #to_latin.

* bug fixes

   * xml_accessor now properly handles punctuation, such that the writer appears without '?' for boolean attributes
   * text node contents are no longer truncated when '&' are present in the contents
   * When using :as => Integer or Float, don't raise on missing element [James Healy]

== 2.4.3 (February 1, 2009)

* 1 bug fix

  * Fix roxml to work in ruby 1.8.6, which has been broken since the removal of
    extensions in version 2.4.1.  Thanks Pat! [Pat Nakajima]

== 2.4.2 (January 31, 2009)

* 1 major enhancement

  * xml_namespace for declaring Class-level, inheritable default namespaces.

* 4 minor enhancements

  * add :as => Time, DateTime, and Date support
  * support Pathname, IO and URI objects as #from_xml arguments
  * :as => :bool now supports all capitalizations of 'true', 'false', 'yes', 'no', as well as '1' and '0'
  * For basic types (:as => Integer, Float, Date, &c.), interpret empty strings just
    as missing elements (by returning nil), rather than raising.  Raise behavior can be
    accessed by supplying your own block or using the :required option.

 * 3 bug fixes

  * Arrays of attrs or elements :as => :bool weren't previously supported.  An oversight.
  * Don't apply xml_convention if name is explicitly set
  * Protect xpath operators : and / from modification via String#camelcase & such

== 2.4.1 (January 28, 2009)

* 3 minor enhancements

  * remove dependency on 'extensions' gem, as we weren't using it much and it
    was causing problems for some
  * deprecate the 'xml' declaration in favor of the more explicit 'xml_reference'
    declaration.  Reorder params to make for cleaner 3.0 transition.
  * deprecate '#tag_name' in favor of 'self.class.tag_name', as it's a class-specific value

== 2.4.0 (January 15, 2009)

* 1 major enhancement

  * Add xml_convention to enable easy defaulting to common naming formats, such as camel-case and
    underscored [Ben Woosley]

* 6 minor enhancements

  * Add :frozen option for freezing values on parse [Ben Woosley]
  * Attempt to minimize node creation by better matching wrappers [Ben Woosley]
  * Preserve hash values where a single key maps to multiple values, return them as an array rather
    any single one of them at random (as in group_by rather than index_by) [Ben Woosley]
  * Deprecate #xml_name? as it's only used for triggering the xml_name warning [Ben Woosley]
  * REXML parser ignores whitespace, which doesn't matter to us anyway [Ben Woosley]
  * xml_name is inherited by default [Ben Woosley]

* 2 bug fixes

  * Don't detect objects which define their own empty? as being absent for the purposes
    of :default and :required [Ben Woosley]
  * Sub-objects pick up their parent's attributes, even if they're added after
    the child's use [Ben Woosley]

== 2.3.2 (December 11, 2008)

* Fix that both false and nil values were excluded from to_xml output, when only nil values should be [Ben Woosley]

== 2.3.1 (December 9, 2008)

* Add missing dependencies to extensions/enumerable and Symbol.to_proc,
  which are as-yet inexplicably pre-included on my system... [Ben Woosley, Per Melin]

== 2.3 (December 7, 2008)

* Fix a bug in the application of blocks to array types [Ben Woosley]

* Objects now inherit xml attributes from their parents, as they should [Ben Woosley, Per Melin]

* Add #xml_initialize, which is called at the end of #from_xml, after the xml attributes
  are set. Deprecate the half-baked xml_construct in it's favor. [Ben Woosley]

* Fix a bug in the handling of empty Hash types [Ben Woosley]

* Implement automatic bool-ification when the accessor name ends with ?. [Ben Woosley]

* Add missing dependency ActiveSupport [Ben Woosley]

* Remove support for installing as a rails plugin [Ben Woosley]

* Fix a bug where xml_construct was using the refs' names rather than their accessor names for comparison [Ben Woosley]

* Significantly reduce our footprint by selectively including smaller parts of ActiveSupport and Extensions.
  This avoids problems such as the conflict between ActiveSupport's #to_json and the JSON gem's #to_json.
  Thanks to Per Melin for reporting this problem. [Ben Woosley]

* Rationalize sub-element xml naming by enforcing the following precedence for the containing xml of an object:
  :from of parent, xml_name of child, parent's accessor name.  The previous fallback did not include xml_name.
  This new behavior is more consistent, explicit, predictable, and DRY, but it is a breaking change, so a warning
  is printed to alert others of this behavior change. ROXML::SILENCE_XML_NAME_WARNING may be used to deactivate this
  warning. [Ben Woosley, James W. Thompson, Delynn Berry]

== 2.2 (November 2, 2008)

* fix gem dependencies [James Healy]

* Add block shorthands for Float and Integer, which precede the block argume if present [Ben Woosley]

* Add :required option to throw on absence [Ben Woosley]

* Deprecate the non-specific #parse in favor of #from_xml [Ben Woosley]

* Fix a bug whereby the default value was carrying over information from one object to another [James Healy, Ben Woosley]

* Fix support for :in on :attr elements [Ben Woosley]

* Deprecate Array#to_h in favor of Array#to_hash [Ben Woosley]

* Deprecate Object#to_latin and Object#to_utf in favor of the same methods on String [Ben Woosley]

== 2.1 (October 3, 2008)

* rake test now uses the default parser selection [Ben Woosley]

* Added rcov code coverage for tests [Anders Engström]

* Accommodate that libxml requires you to name the default namespace when available [Ben Woosley]

* Enable optional selection of a parser through the early definition of ROXML::XML_PARSER
  [Ben Woosley]

* Enable fallback to the REXML parser if LibXML is unavailable [Ben Woosley]

== 2.0 (September 20, 2008)

* :text_content becomes simply :content, and is joined by :name  [Ben Woosley]

* Allow hash mapping from node names and contents: [Ben Woosley]

  xml_reader :name, {:key => :name,
                     :value => :content}, :in => 'container'

* Allow supplying a default via the :else option [Ben Woosley]

* Allow hash mapping of text and attr elements: [Ben Woosley]

  xml_reader :name, {:key => {:text => 'key_name'},
                     :value => {:attr => 'attr_name'}}, :in => 'container'

* Allow 'xml_reader :name, [Type]' as an alternative to 'xml_reader :name, Type, :as => :array'
  [Ben Woosley]

* Allow attaching a block for manipulating a value on fetch: [Ben Woosley]

  xml_accessor :count, :attr => 'my_int' do |val|
    Integer(val)
  end

* Collapse xml_attr, xml_text and xml_object into a single api: xml, patterned after the standard
  attr, and offer xml_reader and xml_accessor as well.  Remove the :readonly arg in the process
  [Ben Woosley]

* Attach string extensions (#to_latin, #to_utf) to Object rather than String, so we don't have to
  call #to_s first every time [Ben Woosley]

* Allow a ROXML object to call its constructor on initialization with the xml_construct function
  [Ben Woosley]

* Use symbols (e.g. :text_content) rather than TAG_CONSTANTS (e.g. TEXT_CONTENT) for readability
  [Ben Woosley]

* Use named arguments (e.g. :as, :in) rather than positional for clarity,
  position-independence, and invisible exclusion [Ben Woosley]

* Split out rails_plugin_package_task_gem [Ben Woosley]

* Increase testing significantly, particularly on new functionality & to_xml [Ben Woosley]

== 1.2 (October 10, 2007)

* Fix a bug such that the TEXT_CONTENT tag is no longer also READ_ONLY [Russ Olsen]

== 1.1 (September 24, 2006)

* Initial design & development [Zak Mandhro & Anders Engstrom]
