== 1.4.1 released 2008-10-08 * Extracted english text into configuration to support alternate languages. I18n support. * Improved method detection in add_joins to use respond_to? with the private method option set to true == 1.4.0 released 2008-10-08 * Fixed bug when duping or cloning to copy over instance vars instead of method values * Fixed bug with older versions of ActiveRecord and creating an alias method chain on find in AssociationCollection * Added modifiers: upper, lower, trim, ltrim, rtrim * Added not_nil and not_blank conditions * Modified conditions so that table name is a variable, this allows table name to be switched on the fly. * Modified auto joins to return symbols instead of SQL. This allows AR to properly merge the joins and ultimately result in proper SQL when performing multiple complex scopes. * Fixed conflicts between includes and joins, duplicate joins are not added. Includes are prioritized. This also makes ActiveRecord much more flexible. Now you can cherry pick included associations. And not have to worry about conflicting with joins. * Modified ActiveRecord's default behavior to use inner joins with the :joins option. Inner joins impose limitations. When providing this as a "convenience", inner joins do not make sense. The don't allow OR conditions to be across associations, nor does it properly order when an ordering by an association attribute when that association is optional. == 1.3.5 released 2008-10-08 * Since joins are now strings, AR doesn't know how to merge them properly. So searchgasm now checks which joins to skip over to avoid conflicts. == 1.3.4 released 2008-10-07 * Fixed method names creation for conditions with modifiers * Create local column conditions, incase there are method conflicts. Such as "id". * All joins are switched to left outer joins. When search with *any* conditions, inner joins return incorrect results. Also when ordering by an association that allows for blanks, inner joins exclude the records with blank values. Only option is left outer joins. * If joins is manually set with a string, treat it as SQL, just like ActiveRecord == 1.3.3 released 2008-10-03 * Fixed modifiers being double escaped on equals condition * Fixed bug when merging conditions with array substitutions * Updated blank condition to check if the values is false or not * Fixed type for the year modifier in the mysql adapter == 1.3.2 released 2008-10-03 * Fixed condition to type cast all values in an array * Fixed bug to properly set the type for the type cast column * Fixed bug to allow conditions on local columns * Apparently ActiveRecord 2.2 doesnt remove duplicates on all joins, need to enforce this for ALL versions of ActiveRecord * Fixed bug when passing a symbol as the SQL type for condition return types * Moved duplicate removal to only apply when searching or calculating from a search object. Anything done in a normal ActiveRecord method should remain untouched and let ActiveRecord handle it. Just like in ActiveRecord if you do a User.all search and pass some :joins, you might get duplicate records. Searchgasm should not change that behavior, unless called from a searchgasm object. * Discard meaningless array values when setting a condition. * Delete blank strings from mass assignments on conditions. == 1.3.1 released 2008-10-02 * Fixed bug when requiring a connection adapter that is not present * Fixes bug in "not" conditions == 1.3.0 released 2008-10-02 * Added modifiers into the mix: hour_of_created_at_less_than = 10, etc. * Changed how the Searchgasm::Conditions::Base class works. Instead of predefining all methods for all conditions upon instantiation, they are defined as needed via method_missing. Similar to ActiveRecord's dynamic finders: User.find_by_name_and_email(name, email). Once the are defined they never hit method_missing again, acts like a cache. * Altered how values are handled for each condition, meaningless values are ignored completely. * Added in more "not" conditions: not_like, not_begin_with, not_have_keywords, etc == 1.2.2 released 2008-09-29 * Fixed bug when reverse engineering order to order_by, assumed ASC and DESC would always be present when they are not. * False is a meaningful value for some conditions, and false.blank? == true. So instead of using value.blank? to ignore conditions we use meaningless?(value), which returns false if it is false. * Fixed aliases for lt, lte, gt, and gte. * Fixed bug when writing conditions on associations via a hash with string keys * Added Config.remove_duplicates to turn off the "automatic" removing of duplicates if desired. * Updated searchgasm_state helper to insert the entire state all at once. * Added CSS class "ordering" to order_by_link if the search is being ordered by that. == 1.2.1 released 2008-09-25 * Fixed problem when determining if an order_by_link is currently being ordered. Just "stringified" both comparable values. * Removed default order_by and order_as. They will ONLY have values if you specify how to order, otherwise they are nil. * Removed order_as requirement. order_as is optional. * Added in deep_merge methods for hash, copied over from ActiveSupport 2.1 * Improved order by auto joins to be based off of what order_by returns instead of setting it when setting order_by. * Added priority_order_by. Useful if you want to order featured products first and then order as usual. See documentation in Searchgasm::Search::Ordering for more info. * Added in base64 support for order_by and priority_order_by so that it's value is safe in the URL * Added priority_order_by_link == 1.2.0 released 2008-09-24 * Added searchgasm_params and searchgasm_url helper to use outside of the control type helpers. * Added dup and clone methods that work properly for searchgasm objects * Fixed bug to remove nil scope values, HABTM likes to add :limit => nil * Removed unnecessary build_search methods for associations * Removed support for searching with conditions only. This just made things much more complicated when you can accomplish the same thing by starting a new search and only setting conditions. * Fixed bug when searching with *any* conditions to use left outer joins instead of inner joins. == 1.1.3 released 2008-09-23 * Setting a condition to nil removes it if the condition is set to ignore blanks * Setting search.conditions = "some sql" will reset ALL conditions. Alternatively search.conditions => {:first_name_contains => "Ben"} will overwrite "some sql". The same goes with search.conditions.first_name_contains = "Ben". * Fixed bug with inspect * Other small performance enhancements with memoized attributes == 1.1.2 released 2008-09-22 * Fixed bug with select control types not using :search_obj to determine its select values. * Added is_nil and is_blank condition types. * "memoized" various attributes for performance enhancements * Removed the :order option from calculation options when :order is useless and just slows down query. * Switched from using :include to :joins, big performance increase == 1.1.1 released 2008-09-19 * Fixed typo in "next page" button. * Updated valid options for searching and performing calculations, fixed some bugs when searching and performing calculations with advanced options. * Fixed bug in ordering where table name was assumed by the hash. Now assumed by the reflection. * Added default for per_page, so pagination comes implemented by default * On mass assignments blank strings for *any* conditions are ignored. Sometimes blank strings are meaningful for "equals" and "does not equal", those only takes effect if you explicitly call these conditions: search.conditions.name = "". User.new_search(:conditions => {:name => ""}) will be ignored. Also, Searchgasm should never change how ActiveRecord behaves by default. So User.all(:conditions => {:name => ""}) will NOT be ignored. == 1.1.0 released 2008-09-18 * Added the options :inner_spread and :outer_spread to the page_links helper. Also added various config options for setting page_links defaults. * Updated calculation methods to ignore :limit and :offset. AR returns 0 or nil on calculations that provide an offset. * Added support to allow for "any" of the conditions, instead of all of them. Joins conditions with "or" instead of "and". See Searchgasm::Conditions::Base or the readme == 1.0.4 released 2008-09-18 * Fixed bugs when performing calculations and searches on has_many through relationships. * Instead of merging the find_options myself, I delegated that to AR's with_scope function, which already does this. Much more solid, less intrusive. == 1.0.3 released 2008-09-18 * Updated inspect to show the current options for your search. Plays nicer in the console. * Made sure protection state is persistent among relationship conditions. * Fixed bug with backwards compatibility of rails. concat requires a proc in older version. * Defaulted remote control types to use GET requests instead of POST. * Completely reengineered integration with ActiveRecord. Searchgasm is properly using scopes letting you do use serachgasm where scope are implemented. @current_users.orders.new_search, etc. If your search is scoped and you want a search object, that search object will represent a new search in the context of those scopes, meaning the scopes get merged into Searchgasm as options. * Dropped support for Searchgasm functionality when defining relationships: has_many :order, :conditions => {:total_gt => 100}, will not work anymore. It's a chicken and the egg thing. Searchgasm needs AR constants, some models get loaded before others, therefore the Order model may not have been loaded yet, causing an unknown constant error. * Clean up redundant code and moved it into the Searchgasm::Shared namespace. == 1.0.2 released 2008-09-12 * Moved cached searchers out of the global namespace and into the Searchgasm::Cache namespce. * Various changes to improve performance through profiling / benchmarking. http://pastie.org/271936 * Config.per_page works with new_search & new_search! only. Where as before it was only working if the search was protected. == 1.0.1 released 2008-09-11 * Cached "searchers" so when a new search object is instantiated it doesn't go through all of the meta programming and method creation. Helps a lot with performance. You will see the speed benefits after the first instantiation. * Added in new options for page_links. * Fixed minor bugs when doing page_links. * Updated documentation to be more detailed and inclusive. == 1.0.0 released 2008-09-08 * Major changes in the helpers, they were completely re-engineered. Hence the new version. I established a pattern between all helpers giving you complete flexibility as to how they are used. All helpers are called differently now (see documentation). == 0.9.10 released 2008-09-08 * Fixed bug with setting the per_page configuration to only take effect on protected searches, thus staying out of the way of normal searching. * Hardened more tests == 0.9.9 released 2008-09-07 * Fixed setting per_page to nil, false, or ''. This is done to "show all" results. == 0.9.8 released 2008-09-06 * Fixed order_by helper bug when guessing the text with arrays. Should use the first value instead of last. * Added in per_page config option. == 0.9.7 released 2008-09-06 * Complete class restructure. Moved the 3 main components into their own base level class: Search, Conditions, Condition * Split logic and functionality into their own modules, implemented via alias_chain_method * Added in helpers for using in a rails app * Added link to documentation and live example in README * Various small bug fixes * Hardened tests == 0.9.6 released 2008-09-04 * Fixed bug when instantiating with nil options == 0.9.5 released 2008-09-03 * Enhanced searching with conditions only, added in search methods and calculations * Updated README to include examples == 0.9.4 released 2008-09-03 * Cleaned up search methods * Removed reset! method for both searching and searching by conditions == 0.9.3 released 2008-09-02 * Changed structure of conditions to have their own class * Added API for adding your own conditions. == 0.9.2 released 2008-09-02 * Enhanced protection from SQL injections (made more efficient) == 0.9.1 released 2008-09-02 * Added aliases for datetime, date, time, and timestamp attrs. You could call created_at_after, now you can also call created_after. Just removed the "at" requirement. == 0.9.0 released 2008-09-01 * First release