- Added AttributeDefinition#type
- Added Attributes.attribute_names
- Added TypecastedAttributes
- Added Typecasting
- Changed Attributes.attributes return value from an Array to a Hash
- Removed StrictMassAssignment, use StrictMassAssignment with ActiveModel v3.2 which allows assigning mass_assignment_sanitizer to :strict on the class
- Implemented ActiveModel serialization in Model
- Added Model
- Support for ActiveModel 3.2
- Added BlockInitialization
- Added DangerousAttributeError
- Added Logger
- Added MassAssignmentSecurity
- Added QueryAttributes
- Added UnknownAttributeError
- Attributes now honors getters/setters when calling #read_attribute, #write_attribute, #[], and #[]=
- Attributes now raises DangerousAttributeError when defining an attribute whose methods would conflict with an existing method
- Attributes now raises UnknownAttributeError when getting/setting any undefined attributes
- Fixed all instances of modules' #initialize not invoking its superclass
- Fixed redefining an attribute appending a new AttributeDefinition
- Subclassing a model using Attributes will now copy the parent's attribute definitions to the subclass
- Added AttributeDefinition#<=>
- Added AttributeDefinition#to_sym
- Added Attributes#[]
- Added Attributes#[]=
- Attributes#attributes now returns the results of overridden getters
- Attributes.inspect and Attributes#inspect are now in alphabetical order
- Overridden attribute getters and setters can now call super
- ActiveAttr now autoloads nested classes and modules
- Added AttributeDefinition
- Added Attributes
- Added BasicModel
- Added Error
- Added Matchers::HaveAttributeMatcher
- Added StrictMassAssignment
- Added UnknownAttributesError
- Documented everything
- Added MassAssignment#assign_attributes
- Added MassAssignment#attributes=
- Added MassAssignment#initialize