- ActiveAttr now supports Rails 4.2.0 (Jesse B. Hannah)
- ActiveAttr now supports RSpec 3.0.0 (Aaron Mc Adam)
- ActiveAttr now supports Rails 4.1.0
- #108 Fix grammar in HaveAttributeMatcher#description (Matt Hodan)
- #110 #116 Improve performance of typecasting (Roman Heinrich)
- #121 Fix compatibility with ActiveModel Serializers gem by dropping support for Rails 3.2 edge prior to RC1
- ActiveAttr now supports Rails 4.0.0
- ActiveAttr now supports Ruby 2.0.0
- HaveAttributeMatcher failure messages now use an expected/got format
- Removed MassAssignmentSecurity, sanitizer support has been merged into MassAssignment. Include the ActiveModel::MassAssignmentSecurity module or ActiveModel::ForbiddenAttributesProtection depending on your Rails version
- Added Serialization
- Changed Typecasting::DateTypecaster to not raise on invalid Strings
- #114 Fixed NoMethodError in TypecastedAttributes#attribute_before_type_cast
- Added AttributeDefinition#inspect
- Added Attributes.attribute!
- Added Attributes.dangerous_attribute?
- Added missing autoload for BlockInitialization
- Added Typecasting#typecaster_for
- Added Typecasting::UnknownTypecasterError
- Changed Typecasting#typecast_attribute to take a typecaster, not a type
- Removed Typecasting#typecast_value
- TypecastedAttributes now supports a :typecaster option on attribute definitions which can be any object that responds to #call
- ActiveAttr now supports Rails 3.0.2+ (Egor Baranov)
- ActiveAttr is now Ruby warning free
- Added AttributeDefaults
- Added AttributeDefinition#[]
- Added Attributes.attribute_names
- Added Matchers::HaveAttributeMatcher#of_type
- Added Matchers::HaveAttributeMatcher#with_default_value_of
- Added TypecastedAttributes
- Added Typecasting
- Added Typecasting::BigDecimalTypecaster
- Added Typecasting::Boolean
- Added Typecasting::BooleanTypecaster
- Added Typecasting::DateTimeTypecaster
- Added Typecasting::DateTypecaster
- Added Typecasting::FloatTypecaster
- Added Typecasting::IntegerTypecaster
- Added Typecasting::ObjectTypecaster
- Added Typecasting::StringTypecaster
- Changed Attributes.attributes return value from an Array to a Hash
- Changed HaveAttributeMatcher to return spec failures when the model is missing ActiveAttr modules
- Changed redefining an attribute to actually redefine the attribute
- Removed StrictMassAssignment, instead use MassAssignmentSecurity 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