2.0.2 / 2012-11-18

  • minor enhancements

    • attribute_set class and instance aliases are created if methods named the same aren’t defined yet

2.0.1 / 2012-10-04

  • major enhancements

    • Virtual attributes changes tracking improved; the attr_virtual DSL keyword can be placed anywhere

    • Internal sets refactored, added abstraction layer that utilizes just two class instance variables:

      • ‘@attribute_sets` (for keeping sets, attributes map, virtual and semi-real items)

      • ‘@attribute_filters` (for keeping filtering methods)

  • minor enhancements

    • Added conversion methods: AttributeSet#to_hash, AttributeSet#to_attribute_set

    • MetaSet improved, removed grandparent.class.bind(self).call

2.0.0 / 2012-10-01

  • major enhancements

    • Operating speed increased by 100%

    • API change:

      • AttributeSet is now based on a Hash

      • Added MetaSet for keeping sets of attribute sets

      • Added DSL keyword for registering filtering methods

      • DSL method filter_attributes is using filtering methods registered before

    • Creation of duplicates for sets moved to class-level accessors

    • Adding elements to sets improved, AttributeSet initializer uses the method add

    • Common Filters seriously refactored (easily expandable and parametrizable now)

    • Added common filters: Convert, Order, Pick, Presence

  • minor enhancements

    • DSL class methods for models have now aliases named in third person

    • ‘AttributeSet#annotations` returns a hash containing annotated attributes only

    • Documentation updated, common filters specific documentation moved to COMMON-FILTERS

    • Added ‘AttributeSet::Enumerable#each_name_value` enumerator

    • Added ‘AttributeSet::Enumerable#select_accessible` enumerator

    • Added DSL for attribute name gethering from next method name in a chain

    • Added filtered_attribute_simple DSL method

    • Added attribute_set_exists? DSL class method

    • Added virtual? and semi_real? to AttributeSet::AttrQuery and AttributeSet::Query

    • Added changed? and unchanged? to AttributeSet::AttrQuery and AttributeSet::Query

    • Added ‘AttributeSet#to_set`

    • Improved DSL methods: valid?, invalid?, accessible?, protected?

    • Improved AttributeSet::Query initializer (added error checking)

    • Improved attributes_to_filter DLS method (removed redundant calls to duplicates of a set)

    • Overriden inspect method in AttributeSet

  • major bugfixes

    • Fixed AttributeSet::Query wrapper calls (passing custom calls to next method was broken)

    • Replaced ‘hash.merge(hash)` expressions with more HashWithIndifferentAccess compliant

  • minor bugfixes

    • Enumerators wrapped to return AttributeSet::Enumerator objects

1.4.0 / 2012-08-24

  • major enhancements

    • Added annotations support

    • Added Split and Join common filters

    • Improved virtual attributes handling (added attr_virtual keyword)

    • All common filters can now handle arrays and hashes

    • API change: additional yeld params changed for DSL instance methods:

      • for_each_attr_from_set

      • filter_attrs_from_set

      • operate_on_attrs_from_set

    • API change: class methods return copies of sets, not originals

  • minor enhancements

    • Added values and values_hash methods to AttributeSet::Query for reading values

    • Added value method to AttributeSet::AttrQuery for reading value

    • Added each iterator to custom enumerators

    • Added attribute_set_simple instance DSL method for bypassing proxies

    • Added filter_attributes instance DSL method for running all predefined filters

    • Added calls forwarding in proxy classes for instance_eval and instance_exec methods

    • AttributeSetEnumerable is now AttributeSet::Enumerable

    • AttirbuteSetEnumerator is now AttributeSet::Enumerator

    • Modified filtering methods so they return specialized enumerator when called whithout a block

      • for_each_attr_from_set

      • filter_attrs_from_set

  • major bugfixes

    • In AttributeSet::Query: separated instance level data from class level by adding dup where needed

    • In AttributeSet: separated instance level data from class level by adding dup where needed

  • minor bugfixes

    • In AttributeFilters::Common: Squish submodule included in Common module

    • In AttributeSet::Query: replaced calls to send by calls to public_send

    • In AttributeSet::Query: replaced calls to method by calls to public_method

    • In AttributeSet::AttrQuery: replaced call to method by call to public_method

    • In AttributeFilters::operate_on_attrs_from_set: replaced calls to send by calls to public_send

1.3.2 / 2012-08-05

  • minor bugfixes

    • fixed indentation in HISTORY file

1.3.1 / 2012-08-05

  • major enhancements

    • Added accessible?, inaccessible?, protected? attribute checks

    • Added all_accessible_attributes, all_protected_attributes, all_inaccessible_attributes

  • minor enhancements

    • Added squish common filter

1.3.0 / 2012-08-04

  • major bugfixes

    • In AttributeSet::Query: proxy now uses send to get attribute values

  • major enhancements

    • Added valid? and invalid? DSL instance methods

    • Added all_attributes instance method

1.2.2 / 2012-08-03

  • major enhancements

    • Common filtering methods modularized

  • minor enhancements

    • Added is_a? overrides to proxy classes

    • Method attributes_to_filter can now take attribute set as an argument

1.2.1 / 2012-07-09

  • minor bugfixes

    • Fixed documentation links

1.2.0 / 2012-07-08

  • major bugfixes

    • In AttributeSet::Query: removed typo that caused incorrect processing

  • minor bugfixes

    • Added missing respond_to? definitions to proxy classes

  • major enhancements

    • Added enumerators (AttributeSetEnumerable and AttributeSetEnumerator)

    • Added predefined filtering methods

    • Added virtual attributes support in filters

    • Written the usage instructions

  • minor enhancements

    • Removed the show DSL method from AttrQuery proxy class

    • Added checking of model methods that are needed for a proper operation

    • Proxy class AttributeSet::Query is now viral and tries to wrap the results in its own instances

    • Added none and one presence selectors to AttributeSet::Query class

    • Added from_attributes_that as an alias for the attribute_set instance method

1.1.2 / 2012-06-30

  • major bugfixes

    • In operate_on_attrs_from_set: replaced self[attr] and ‘method(attr)` calls with send (to be ORM agnostic)

    • In attributes_to_filter: inefficient respond_to? calls replaced by the attributes method call

  • major enhancements

    • AttributeFilters module can be now used without full Rails stack, just with Active Model loaded

  • minor enhancements

    • Documentation updated

    • Added attribute-filters/helpers.rb containing AttributeFiltersHelpers module

    • Flags parsing method attr_filter_process_flags moved to AttributeFiltersHelpers as process_flags

    • Added SuperModel and ActiveRecord dependencies for testing purposes

    • Added first RSpec example

1.1.0 / 2012-06-29

  • major enhancement

    • API changed; call_attrs_from_set name changed to for_each_attr_from_set, caching removed

  • minor enhancements

    • Optimized code for attributes filtering

    • Namespace organized (AttributeFilters moved completely under ActiveModel namespace)

    • Prepared for testing with RSpec

    • Added custom CSS file for YARD formatter

1.0.2 / 2012-06-28

  • minor enhancements

    • Documentation updated

    • Extended arguments parsing for DSL class method attribute_set

1.0.1 / 2012-06-28

  • minor enhancements

    • Documentation updated

    • Rakefile and gemspec updated

1.0.0 / 2012-06-28

  • major enhancement

    • Birthday!