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` 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!