ruby-activeldap 0.8.0

某環境で久々に gem update したら ruby-activeldap が update されました。なんだろうと思ってぐぐってみたら Ruby/ActiveLdap: Two big announcements なんてのが出てました。11/21 か、全く気づいていませんでした。

First off, I'd like to welcome kou to the team! He joined just recently,
but he's been a phenomenal addition. The second announcement is entirely
thanks to his work --

Ruby/ActiveLdap 0.8.0 has been released! This release is a departure from
all of the past releases. The API is now very similar to that of ActiveRecord
and will only get closer as we approach the 1.0.0 release.

kou さんは Rabbit の方みたいですね。

で、CHANGES から 0.7.4 以降の変更点を抜粋すると

 0.8.0:
  * Makefile/gemspec system replaced with Rakefile + Hoe
  * Bugfix: Allow base to be empty
  * Add support for Date, DateTime, and Time objects (patch from Patrick Cole)
  * Add support for a :filter argument to override the default attr=val LDAP search filter in find_all() and find() (patch from Patrick Cole)
  * Add Base#update_attributes(hash) method which does bulk updates to attributes (patch from Patrick Cole) and saves immediately
  * API CHANGE: #attributes now returns a Hash of attribute_name => clone(attribute_val)
  * API CHANGE: #attribute_names now returns an alphabetically sorted list of attribute names
  * API CHANGE;
  * Added attributes=() as the implementation for update_attributes(hash) (without autosave)
  * API TRANSITION: Base#write is now deprecated. Please use Base#save
  * API TRANSITION: Added SaveError exception (which is a subclass of WriteError for now)
  * API TRANSITION: Base.connect() is now deprecated. Please use Base.establish_connection()
  * Added update_attribute(name, value) to update one attribute and save immediately
  * #delete -> #destroy
  * Base.destroy_all
  * Base.delete(id) & Base.delete_all(filter)
  * add Base.exists?(dnattr_val)
  * attr_protected
  * Base.update(dnattr_val, attributes_hash) - instantiate, update, save, return
  * Base.update_all(updates_hash, filter)
  * attribute_present?(attribute) - if not empty/nil
  * has_attribute?(attr_name)  - if in hash
  * reload() (refetch from LDAP)
  * make save() return false on fail
  * make save!() raise EntryNotSaved exception
  * to_xml()
  * clear_active_connections!() -- Conn per class
    - make @@active_connections and name them by 
  * base_class() (just return the ancestor)
  * Separate ObjectClass changes to live in ActiveLDAP::ObjectClass
    - add_objectclass
    - remove_objectclass
    - replace_objectclass
    - disallow direct objectclass access?
    # - e.g. Person.reset_column_information
    #   - this would mean cleaner loading I think
  * support ActiveRecord::Validations.
  * support ActiveRecord::Callbacks.
  * rename to ActiveLdap from ActiveLDAP to integrate RoR easily and enforce
    many API changes.

うわー、いっぱいあるなぁ ^^)。