Changelog History
Page 2
-
v2.8.0 Changes
November 05, 2009Facets 2.8 effectively completes the MORE library clean-up which peaked π with the previous 2.7 release. Another eight libraries have been deprecated, a few of them spun-off to a separate project. However, this verison also βͺ reverts a few of the deprecations made in the last version. These libs π will remain in Facets's MORE library for the forseeable future.
This version effectively concludes the MORE library clean-up. The next, and last version before Facets 3.0, will focus on "auditing" the CORE library.
π Changes:
π 6 Libraries "Undeprecated":
- ini.rb
- linkedlist.rb
- matcher.rb
- memoizer.rb
- roman.rb
- semaphore.rb
π 5 Libraries Deprecated:
- fileable.rb (too esoteric)
- ioredirect.rb (needs better implementation)
- coroutine.rb (because of Fiber)
- capsule.rb (may be spun-off)
- recorder.rb (may be spun-off)
π 3 Libraries Spun-Off and Deprecated:
- ansicode.rb ansi
- progressbar.rb ansi
- logger.rb ansi
β Additonal Enhancements:
- Kernel#extend can now take a block
- Fixed kernel#d so it is useable
- Added Range#at_rand (thanks to Tyler Rick)
- Added Enumerable#map_detect (thanks to Scott Taylor)
- String#/ calls File.join
- Added String#newlines and String#cleanlines
- String#titlecase includes apostrophe in words
- BasicObject/BlankSlate is more compliant with 1.9.1 design
- Enumerable#count can take multiple items, treats as logical Or
- Class#class_extend extends class level, not class_eval
- Integer#succ(n) becomes Fixnum#succ(n), succ.rb
- Complete rewrite of Inheritor
- Shellwords extensions have been reworked
- Added String#similarity
- Added Levenshtein String#edit_distance method
- And other minor improvements (some thanks to ccjr)
-
v2.7.0 Changes
August 01, 2009π Facets 2.7 is the biggest release of Facets since 2.4. Rather then trickle-release these π changes over the course of the 2.6.x series, I made the decision to let 2.7 have them π all at once. In so doing this release nearly completes the process of trimming down the MORE library to its essentials. Over 40 high-level libraries have been spun-off π as separate gems and/or deprecated. No doubt this is a big change for Facets, and the transition may be a bit bumpy over the short-term, but I am certain that in the long-run π everyone involved will be better served. To help, I have listed the effected libraries and the alternate gems availble to take their place.
π A few other changes have also been made in the release that may also effect your code. In particular you should note that #class_extension has been renamed to #class_extend (require 'facets/class_extend'). In addition we have added a few new core methods such π» as Exception#raised? and Symbol#thrown?.
π Changes:
- Spun-Off Projects
These libraries have been deprectated from Facets entirely, but are available as separate gems (or soon will be).
LIBRARY GEM -------------------- ------------------------------ overload.rb overload binreadable.rb binaryio downloader.rb downloader xoxo.rb xoxo bicrypt.rb bicrypt typecast.rb typecast association.rb association syncarray.rb sync synchash.rb sync paramix.rb paramix crypt.rb crypt3 lrucache.rb lrucache net/smtp_tls.rb smtp_tls advisable.rb advisable buildable.rb buildable memoizer.rb memoizer harray.rb sparray sparse_array.rb sparray iteration.rb iteration interval.rb stick infinity.rb stick pool.rb pool linkedlist.rb linkedlist semaphore.rb semaphore pqueue.rb pqueue censor.rb language matcher.rb language basex.rb radix minitar.rb archive-tar-minitar -or- folio
- Spun-Off But Still Available
These libraries have been spun-off into stand-alone gems, but remain π available via Facets too. Ultimately some of these will be removed from Facets too (in particular the ansi libraries).
LIBRARY GEM -------------------- ------------------------------ ansicode.rb ansi progressbar.rb ansi logger.rb ansi tracepoint.rb tracepoint dictionary.rb dictionary recorder.rb recorder ostructable.rb ostructable -or- openhash openobject.rb openhash opencollection.rb openhash opencascade.rb openhash openhash.rb openhash openmodule.rb openmodule fileable.rb fileable enumerablepass.rb enumargs
- π Deprecations Without Current Replacement
π The libraries have been deprecated but do not yet have replacements. Seperate gems for these are planned though.
bbcode.rb ini.rb settings.rb xmlhash.rb
- π Deprecations Merged Into CORE
π These libraries have been deprecated because their functionality was merged into the CORE library and/or made available in some another way.
1stclassmethod.rb #method! and #instance_method! are now part of CORE. elementor.rb #per has been added to CORE. elementwise.rb #ewise has been added to CORE. consoleutils.rb #ask is in CORE, for the rest see Ansi or Clio project. attr.rb Added Module#attr_setter to CORE, and separated the rest in MORE.
- π General Deprecations
π These libraries have simply been deprecated because they were found lacking in some significant fashion.
nilstatus.rb Poved rather useless, not to mention trivial. heap.rb Heap was just an alias for PQueue anyway. Use 'pqueue' instead. dependency.rb Other solutions exist that are much better (like Advisable). classmethods.rb #class_extend solution is more robust. ziputils.rb Have a look at Folio (gem install folio) for replacement. unheritable.rb Implementation is trivial and usefulness questionable. instantise.rb Replaced by instance_function.rb.
Other Enhancements
- Fixed Proc#curry to work with #define_method (Thanks to R.Potter)
- Module#class_extension has been renamed to #class_extend (require 'facets/class_extend').
- kernel#instance is no longer in core; now it is an extra monkey patch for #instance_eval.
- Kernel#this has been removed. It is equivalent to 'method(method)'.
- BlankSlate is now an alias for BasicObject, and will be deprecated in the future.
- Kernel#method! and Module#instance_method! now use a global variable for their cache.
- #object_state (old name was #state) has been added to core.
-
v2.6.0 Changes
July 03, 2009π Facets 2.6.0 removes htmlfilter.rb and cssfilter.rb due to licensing π¦ incompatability. These scripts are now available as a separate package π called 'htmlfilter'. Also removed are a few MORE libs that were too expiremental and/or not robust enough. Effectively this finishes up π the "spring cleaning" of the MORE lib mentioned a few releases back.
But it also marks a new start in trimming MORE down further. We have decided to do this for three reasons 1) Some of the MORE libs would π be better served as separate projects. 2) Facets will become a tighter library, primarily focused on extensions. And 3) all libraries involved will become easier to maintain and thus more robust in the long run.
π This release also fixes an important arity bug with the recently added Module#extend method --one of the very few actual core overrides in Facets.
π Changes:
7 Major Enhancements
- Removed htmlfilter.rb due to licensing issues.
- Also removed cssfilter.rb ('gem install htmlfilter' now)
- Removed rwdelegator.rb, simply not a robust solution.
- Removed buildable.rb, api is too confusing.
- Removed meta.rb which was not very useful and too expiremental anyway.
- Removed prototype.rb, which needs it's own project.
3 Minor Enhancements
- Removed Kernel#HERE as it simply cannot work. (Ruby 1.9.2 will offer #source_location for the same, btw)
- Returned binding/opvars to core.
- Added Integer#length as suggested by Victor H. Goff III.
1 Bug Fix
- Fixed arity issue with Module#extend.
-
v2.5.2 Changes
April 07, 2009π Facets 2.5.2 is a simple maintentance release which fixed a few issues π in the new to_hash.rb library. This release also added String#lowercase and String#uppercae.
π Changes:
1 Major Enhancement
- added string/uppercase and lowercase
1 Minor Enhancement
- adjustments to to_hash.rb
-
v2.5.1 Changes
March 05, 2009π Facets 2.5.1 fixes a few bugs, makes some small but nice additions and improves 1.9 compatibility.
The most important addition to make note of is Object#extend, which has been overridden to allow a block parameter. This is one of only two or three actual "monkey patches" in all of Facets. The block, when provided, is used to create an annonymous module which then extends the reciever. This is a "good practice" way to extend objects, rather than using class_eval on the singleton class.
Special thanks to Erik Veenstra, Pit Capitan and especially Sandor SzΓΌcs π for their contributions to this release.
π Changes:
7 Major Enhancements
- added Hash#group_by_value (thanks to Erik Veenstra)
- added String#file
- added Hash#new_with (Pit Capitan)
- added module/extend.rb, now can take a block.
- added hook.rb
- added to_h_auto
- overhauled to_hash.rb, now has multiple methods
π 10 Bug Fixes
- corrected ostruct.rb to test for frozen state on updates
- fixed String#left_align
- fixed conflict between test_name.rb and test_arguments.rb
- fixed Enumreable#split when reciever is empty array
- fixed coruption of reciever by Hash#collate (thanks to Tilo Sloboda)
- fixed Array#to_h, h={} was not initialized
- fixed test of Module#conflict according ruby19
- fixed Hash#dearray_singluar_values
- association.rb stores reference when using #new
- changed Array#product to make it compatible to ruby 19, deleted block parameter
5 Minor Enhancements
- split enumerable/collect into map_with_index and compact_map
- improved Array#to_h for 1.9 using flatten(1)
- Dictionary#replace can take regular Hash too
- move test_to_hash.rb from more to core
- Doc'd that UnboundMethod#name returns Symbol in 1.9, but String in 1.8
-
v2.5.0 Changes
November 23, 2008Facets 2.5.0 is an important milestone in the development of Facets.
π This release has been tested against Rails' ActiveSupport library. π As long as Facets is loaded after ActiveSupport, everything should work fine. Of course, there's no counting for real world β trials, but all ActiveSupport testcases pass under this scenario.
π Secondly, this release is the first of two (or three) down-scaling π releases intended to remove all the remaining "excess" from the library. This is being done for a variety of reasons. Some scripts are substantial enough to be one their own and have been spun-off π into separate largely compatible projects. In this release:
If you were using... Use this project instead...
annotations.rb Anise bytes.rb RichUnits times.rb command.rb Clio consoleutils.rb
π A few others scripts have been deprecated, without an alternative recourse, simply because they were too weak, such as uploadutils.rb, or highly experimental, such as chain.rb and eventhook.rb.
π Although this release constitutes an over all slimming down of Facets, two excellent new libraries have been added.
1) ini.rb by Jeena Paradies. While YAML is frequently used by π§ Rubyists for configuration files, a full-on serializer like YAML is often overkill. INI files provide a lightweight solution π§ specifically geared for configuration.
2) filter.rb by Brian Candler offers lazy evaluation chains of β‘οΈ Enumerable methods. This is an elegant way to optimize contiguous maps, selections, etc. --effective even on infinite enumerators. π (Note, the name of this library may be changed in the next release.)
While work remains to be done, I am happy to say, Facets is finally beginning to approach the level of solidity I set out to achieve just over a year ago. Thank the Maker!
Special thanks to Brian Candler, Jeena Paradies and Tyler Rick.
π Changes:
9 Major Changes
- added Brian Candler's Enumerator::Filter
- added sparse_array.rb (was old harray.rb)
- added Jeena Paradies' ini.rb
- renamed CacheDelegator to Memoizer
- renamed DictionaryMatcher to just Matcher
- deprecated bytes.rb and times.rb (use RichUnits instead)
- deprecated uploadutils.rb; ziputils.rb will be (use Folio)
- deprecated annotations.rb (use Anise instead)
- deprecated command.rb and consoleutils.rb (use Clio instead)
5 Minor Changes
- deprecated chain.rb (very expiremental)
- deprecated eventhook.rb (moved to ToadCode project)
- deprecated tagiter.rb (moved to ToadCode project)
- moved Hash#symolize_keys and #stringify_keys to core lib (still recommend #rekey instead though)
- switched to git as of 2.4.5
π 4 Bug Fixes
- memoize.rb, cache was at class-level, now at instance-level
- binding/caller.rb, fixed require for callstack.rb
- fixed missing require in string/tabto.rb
- Fixed some bugs with Time#ago/Time#hence not changing years correctly when you changed months. (For example, Time.utc(2008, 1, 1).ago(12, :months) incorrectly returned 2009-01-01 instead of 2007-01-01.) Changed Time#ago/Time#hence to still work if passed negative number.
-
v2.4.5 Changes
October 02, 2008π Facets 2.4.5 is a maintaince release. This release is notable however in that it will likely be the last that to use SVN. Facets will be switching to Git. π Also, some libraries that have been flagged "to be deprecated" for some time will finally be so.
π Changes:
8 Major Enhancements
- Re-added date.rb to lore library, and removed from core. (#r1014)
- Much improved date.rb extension now in Lore library. (#r1027)
- Deprecated kernel/suppress. Use Exception.suppress from now on. (#r1040)
- Deprecated string/style.rb. Use English project instead. (#r1074)
- Console namespace is no longer supported (for Ansicode). (#r1077)
- enumerable/mode.rb, Enumerable#mode returns array since there can be more than one. (#r1079)
- OpenCascade automatically creates nodes, use foo? to query. (#r1056)
- Change #index_of to #index which now takes a block.
14 Minor Enhancements
- OpenStruct.new can now take a default block, like Hash.new.
- Moved variablize methods out of metaid.rb and into separate files (string/ and symbol/). (#r1042)
- Added Time#advance. (#r1046)
- Speed up of Integer odd/even methods. (#r1057)
- Array#index now takes a block (this is a core override). (#r1059)
- Spilt file/write.rb into separate method files (append, create, writelines). (#r1073)
- Modified Enumerable#split to behave like String#split. (#r1076)
- hash/op.rb, split into separate method files. (#r1081)
- Added string/modulize. string/methodize handles path names now too. (#r1085)
- Class#cattr is now part of core. (#r1089)
- Modified Enumerable#split to behave like String#split. [minor]
- Removed Rope class. If anything this will have a separate project.
- Added doc/news.html and doc/authors.html to website (temporarily?).
- Added zlib.rb to Lore library.
π 7 Bug Fixes
- OpenStruct#to_h dups internal table. (#r1015)
- Fixed require of string/xor in bicrypt.rb. (#r1039)
- integer/odd.rb, fixed Ruby 1.9 condition. (#r1080)
- class/cattr_*.rb fix require bug
- opencascade.rb, fixed bug when accessing sub-hash.
- typecast.rb, fixed require for string/methodize.
- Fixed Pathname#glob to ensure use of ::File.
-
v2.4.4 Changes
September 01, 2008Facets 2.4.4 includes a major bug fix that caused Facets not to load properly, π having to do with a Time extension. The problem has been fixed. In addition, π this release put Facets only a few pending adjustments away from full π Rails/ActiveSupport compatibility.
π Changes:
10 Major Enhancements
- Added string/mask providing powerful string manipulation. (#997)
- BasicObject is now just a synonm for BlankSlate unless Ruby 1.9. (#1000)
- Added Symbol#plain?, Symbol#query? and Symbol#setter? (#1011)
- Removed Time#to_date.
- Due to clobberd RI Docs (!) this should have been in Lore lib date.rb
- Moved to Lore date.rb. (#1012)
- Re-added date.rb to lore library, and removed from core. (#1014)
- Much improved date.rb extension now in Lore library. (#1027)
- Deprecated kernel/suppress. Use Exception.suppress from now on. (#1040)
- Improved date.rb and moved to LORE library, and removed from CORE. [major]
- Deprecated kernel/suppress. Use Exception.suppress from now on. [major]
- Deprecated String#to_time.
- This method reqiures the loading of a number of other standard libs.
- We can reconsider adding it again if we decide these other libs should be core.
- Or if we find a more suitable way to define the method.
17 Minor Enhancements
- Moved style.rb to string/stylize.rb (#998)
- Renamed string/subtract to string/op_sub. Old name will remain for time being for compatability. (#1002)
- Module#instance_method_define? now only applies to public methods. (#1003)
- Array#index accepts a block (one of the few core overrides). (#1004)
- Moved Hash#<< from hash/update.rb to hash/op_push.rb (#1005)
- Add facets class files (eg. facets/string) have been made dynamic. (#1013)
- Moved variablize methods out of metaid.rb and into separate files (string/ and symbol/). (#1042)
- Added Time#advance. (#1046)
- Added qua_class.rb. Yea. It really is my favorite.
- Added simple functional test that loads all of Facets.
- Added a benchmark for measuring how fast Facets loads. (Core < 1sec!)
- Made Module#alias_method_chain a public method (for better Rails support).
- Wrapped Nilclass#to_f in 1.9 condition.
- float/round.rb redirects to numeric/round.rb.
- numeric/float.rb holds rounding methods for all classed Numeric, Integer and Float.
- Replaced Kernel#instance_exec with Mauricio's version.
- Improved String#each_char to work like Ruby 1.9.
- This loads strscan.rb.
- It is wrapped in a 1.9 condition.
π 8 Bug Fixes
- Hash#<< now returns self (#1001)
- OpenStruct#to_h dups internal table. (#1015)
- Fixed require of string/xor in bicrypt.rb. (#1039)
- Fixed facets.rb to use relative paths.
- Fixed cgi.rb (CGI is a class not a module).
- OpenStruct#to_h dups internal table. [bug]
- Fixed require of string/xor in bicrypt.rb. [bug]
- date.rb (stamp) fixed ref to constant FORMAT.
-
v2.4.3 Changes
August 14, 2008π Facets is almost fully interoperable with ActiveSupport and Ruby 1.9. π We will continue to improve this interoperability in upcoming releases.
As a REMINDER, Facets 2.4+ now encourages:
require 'facets'
π This is better than cherry-picking methods. It may seem counter-intuitive, but it actually proves more advantages to do this for the sake of π improved interoperability. The practice of cherry-picking can become problematic if other dependent libraries have cherry-picked different β methods. In those cases these distinctions go unaccounted and untested.
π Note that this release does not include a setup.rb script. We are working π on a new version of this script, which we plan to include in the next release.
π This release give special thanks to the following people for their contributions: Ken Bloom, Nick Caruso, Evgeniy Dolzhenko, Andy Freeman, Tomasz Muras and Dave Myron. And of course, to anyone else I failed to mention that has contributed.
π (NOTE: 2.4.3's changes may actually be long to 2.4.2. Notice the releases are only two days apart. There was an issue with 2.4.2 and it had to be replaced immediately. So take the distinct with a grain of salt.)
π Changes:
β Additions
- Add Time#trunc and Time#round to Core.
- Add Array#recursively and fixed bug in Hash#recursively.
- Add Kernel#instance method which provides a fluent interface to private object space.
- Add Symbol#plain?, Symbol#query? and Symbol#setter?
- Add Hash#symbolize_keys and #stringify_keys.
- Add File#split_root.
- Add #glob and #glob_first as extensions to Pathname.
- Add NilClass#ergo whic points back to kernel/ergo.
- Add #bump method to VersionNumber class.
- Add String#mask providing powerful string manipulation.
- Add Ken Bloom's DictionaryMatcher class (will be renamed in future version)
π Deprecations
- Deprecate Hash#keys_to_s and Hash#keys_to_sym.
- These are the original versions of these methods.
- But now we can use #rekey(:to_s) and #rekey(:to_sym) instead.
- Deprecat ruby.rb, which was a sort 1.9 compatibility layer.
22 Major Enhancements
- Changed File#rewrite to not use the in-place change of the string.
- Renamed Class#to_pathname and #to_methodname to #pathize and #methodize.
- Removed Console:: namespace for ANSICode.
- Moved Mentalguy's lazy.rb to core!
- Added Indexable and Stackable to core.
- BasicObject is now just a synonm for BlankSlate unless Ruby 1.9. [major]
- Moved Indexable and Stackable to core.
- Renamed arguments.rb and CLI::Arguments to argvector.rb and Argvector.
- Added optional argument to Dictionary#first and #last.
- Moved binding/opvars from core to more.
19 Minor Enhancements
- Improved File#rootname --it is now more robust.
- Made FileUtils#whereis a module_function again.
- Created Lore library to house extensions to Ruby's standard library.
- Re-added facets class files (eg. facets/string) and are now dynamic.
- Added block to Array#index.
- This is one of the few core overrides in Facets.
- It is a feature already in Ruby 1.9.
- Added Jim Weirich's BlankSlate class.
- This is a temporary measure be compatible w/ AcitveSupport's BasicObject.
- Split kernel/load.rb into require_all.rb and require_local.rb.
- Split module/alias.rb up into alias_accessor, alias_module_function and alias_method_chain.
- Renamed string/subtract to string/op_sub. Old name will remain for time being for compatability. [minor]
- Moved style.rb to string/stylize.rb [minor]
- Added warning to bytes to use RichUnits instead.
- Updated warn line fore eventual deprecation of fileshell and arguments.*
- Added facets-load.rb to allow old school cherry picking.*
- Between 2.0 and 2.4 require 'facets' simply added core to LOAD_PATH.
- Starting with 2.4 it loads all of core automatically instead.
- facets-load.rb provides a way to use the old behavior. require 'facets-load.rb require 'kernel/with' require 'symbol/to_proc'
- This adds the path to the end of LOAD_PATH to prevent any load conflicts.
π 5 Bug Fixes
- Fixed Time#hence changed years when changing months.
- Fixed Time#hence to flip year correctly when adding months.
- Hash#<< returns self
- Fixed String#pathize.
- Module#instance_method_defined? now only applies to public methods.
Administrative Enhancements
- While not perceptible to an end user, there are now 3 divisions: lib/core, lib/lore, lib/more.
- Modified script/test to display $LOAD_PATH before running tests.
-
v2.4.2 Changes
August 12, 2008Just some more of those great old work your ass off changes.
π Changes:
Major Enhancements
- Added Ken Bloom's DictionaryMatcher class from Ruby Quiz #103. (Note this class will probably be renamed in the future.)
- Changed File#rewrite to not use the inplace change of the string.
- If you were using the function, change your code to use File#rewrite! instead.
- Or, modify your code ot use the new behavior.
- This change can make for a slippery bug, so be sure to check for it!
- Moved live.rb to facets-live.rb.
- Added kernel/instance method which provides a fluent interface to private object space.
5 Minor Enhancements
- Added sow generation forms.
- Spilt Time#trunc into separate file.
- Remove old log files --shouldn't version control these.
- Added note to FileList to add glob options parameter.
- Added optional argument to Dictionary#first and #last.
Other Enhancements
- Move "lore" tests to test/lore (lore are extensions to Ruby's standard lib).
- Added test/core, test/lore and test/more.
- Added time/test_round.rb
- Added array/recursively.
- Added time/round.
- Time#to_date makes the public (it already existed in Ruby!)
- Fixed Time#hence to flip year correctly when adding months.
- Work on documentation using new Sow system.
- Moved meta.rb to more/kernel/meta.rb and merged facets/core.rb into facets.rb.
- Added more/kernel directory --hey not every extension can be core.
- Adjusted loadpath and moved lazy.rb to core!
- Moved remaing files to subdirectory locations.
- Moved most core libs to core/.
- Move most more files to the more directory.
- Added lore and more directories.
- Added facets/core directory. Yes, I'm spiliting the lib again.
- Loadpath will be used, so user inteface will stay the same.
- Setup.rb will be adjusted to recognaize loadpath.
- Removed Rope class. If anything this will have a separate project.
- Moved setup.rb to script/setup.
- This will either be replaced with configure/install scripts.
- Or, depend on a separate ruby setup.rb project.
- Added recorder.rb to consider in work directory.
- Added admin directory.
- Added "TO BE DEPRECATED" message to ruby.rb.
- Added all methods from ruby.rb as individual core methods.
- These are the methods that overlap with 1.9.
- They are encased in 'unless RUBY_VERSION' caluses.
- Imporved file/rootname --now much more robust.
- Added Kernel#to_yamlfrag to yaml.rb as way to output yaml w/o the "---" header.
- Perhaps not the most robust solution, but okay for now.
- Maybe a poor name for the method, but you got a better one?
- Made FileUtils#whereis a module_function again like it used to be. Because: (1) that seems to be the way most other FileUtils methods are (cd, mkdir, cp, ...) and the most obvious way that users would WANT to use FileUtils: FileUtils.whereis("ruby"). (2) I see module_function used in other comparible parts of Facets: UploadUtils, ConsoleUtils, ZipUtils, FileUtils#safe_ln, ... (3) My code that relied on the old module_function behavior was breaking What were you thinking changing it?? ;)