diff --git a/README.md b/README.md
index 050a676f2..29fca0b07 100644
--- a/README.md
+++ b/README.md
@@ -1,253 +1,84 @@
-# Ruby Facets
+# Ruby Facets
[](https://rubygems.org/gems/facets)
[](https://github.com/rubyworks/facets/actions/workflows/ci.yml)
+**More of Ruby, one method at a time.** Facets is a collection of extensions to Ruby's core classes and standard library, plus a few small, reusable classes and modules. Most methods live in their own files, so you can load one extension, a class's extensions, or the core collection.
-*"ALL YOUR BASE ARE BELONG TO RUBY"*
+Facets began in 2005 and is still maintained. The current release is **3.2.2**, which requires **Ruby 3.1 or newer**. See the [release history](HISTORY.md) for changes and migration notes from earlier versions. The `main` branch also contains changes awaiting the next release.
+## Install
-## Introduction
+```sh
+gem install facets
+```
-Ruby Facets is the premier collection of general purpose method
-extensions and standard additions for the Ruby programming language.
+With Bundler, add this to your Gemfile:
-Facets houses the largest single collection of methods available for
-extending the core capabilities of Ruby's built-in classes and modules.
-This collection of extension methods are unique by virtue of their atomicity.
-The methods are stored in individual files so that each can be required
-independently. This gives developers the potential for much finer control over
-which extra methods to bring into their code.
+```ruby
+gem 'facets', require: false
+```
-In addition Facets provides a collection of extensions to Ruby standard library
-plus a small collection of add-on classes and modules. Together these
-libraries constitute an reliable source of reusable components, suitable
-to a wide variety of usecases.
+`require: false` lets you choose which extensions to load. Omit it if you want Bundler to load the core collection automatically.
+## Choose how much to load
-## Resources
+### One method
-* Homepage: https://rubyworks.github.io/facets
-* Report Bugs: https://github.com/rubyworks/facets/issues
-* Wiki Pages: https://github.com/rubyworks/facets/wiki
-* Source Code: https://github.com/rubyworks/facets
+```ruby
+require 'facets/array/to_ranges'
+[1, 2, 3, 6, 7].to_ranges
+#=> [1..3, 6..7]
+```
-## Documentation
-
-Facets has special documentation needs due to its extensive breadth.
-The documentation generated when installing via RubyGems, or the YARD
-docs provided by rubydoc.info can be somewhat unwieldy because it
-combines all of Facets in one large set. When using these resources,
-it is important to remain aware of the source location of particular
-methods.
-
-For better organized online documentation, generated to separate core
-extensions from standard libraries, see the [Learn Facets](https://rubyworks.github.io/facets/learn.html) page on the website for links to available documentation.
-
-
-## Installation
-
-### Bundler
-
-If you are using Bundler with your project, add the facets gem to the project's
-Gemfile. Unless you want all of facets loaded be sure to add the `:require => false`
-option.
-
- gem "facets", require: false
-
-### RubyGems
-
-The easiest way to install is via RubyGems.
-
- $ gem install facets
-
-### Requirements
-
-Facets 3.2+ requires Ruby 3.1 or higher.
-
-
-## Mission
-
-Facets holds to the notion that the more we can *reasonably* integrate into
-a common foundation, directed toward general needs, the better that foundation
-will be able to serve the community. There are a number of advantages here:
-
-* Better Code-reuse
-* Collaborative Improvements
-* Greater Name Consistency
-* One-stop Shop and Installation
-
-
-## Usage
-
-### CORE Library
-
-At the heart of Ruby Facets is the CORE extensions library. CORE provides
-a sizable collection of generally useful methods, along with a few supporting
-classes, that extend the functionality of Ruby's core classes and modules.
-
-With the exception of a few *uncommon* extensions, CORE contains anything that
-will load automatically when issuing:
-
- require 'facets'
-
-This loads all the CORE functionality at once. If you plan to use more then a
-handful of Facets core methods it is recommended that you require the library in
-this way. However, you can also "cherry pick" the CORE library as you prefer.
-And for uncommon extensions this must be done. The general require statement for
-a core extension library is:
-
- require 'facets//'
-
-For example:
-
- require 'facets/time/stamp'
-
-Most "atoms" contain only one method, but exceptions occur when methods
-are closely tied together.
+### One class's core extensions
-You can load per-class or per-module groups of core methods by requiring the
-class or module by name. For example"
+```ruby
+require 'facets/string'
- require 'facets/time'
+'Ruby Facets'.snakecase
+#=> "ruby_facets"
+```
-Will require all the core Time method extensions.
+### The core collection
-Note that some methods that were part of CORE in 1.8 and earlier are now part
-of MORE libraries. A good example is 'random.rb'. There were separated because
-they had more specialized use cases, where as CORE extensions are intended as
-general purpose.
+```ruby
+require 'facets'
-#### Method File Names
+[1, 2, 3].average
+#=> 2.0
+```
-Operator method redirect files are stored using English names. For instance
-`Proc#*` is `proc/op_mul`.
+`require 'facets'` loads the broadly useful **core** extensions. Some specialized core extensions are opt-in; require their method file directly. To load Facets extensions to a Ruby standard library, require that library through Facets:
-For reference, here is the chart.
+```ruby
+require 'facets/ostruct'
+```
- +@ => op_plus
- -@ => op_minus
- + => op_add
- - => op_sub
- ** => op_pow
- * => op_mul
- / => op_div
- % => op_mod
- ~ => op_tilde
- <=> => op_cmp
- << => op_lshift
- >> => op_rshift
- < => op_lt
- > => op_gt
- === => op_case
- == => op_equal
- =~ => op_apply
- <= => op_lt_eq
- >= => op_gt_eq
- | => op_or
- & => op_and
- ^ => op_xor
- []= => op_store
- [] => op_fetch
+This loads `ostruct` and Facets' OpenStruct extensions. On Ruby 3.5+, declare the `ostruct` gem separately because it is no longer a default gem.
-Facets simply takes the '*' and translates it into a string acceptable to all
-file systems. Also, if a method ends in '=', '?' or '!' it is simply removed.
-
-
-### MORE Library (aka Standard Library)
-
-On top of the extensive CORE library, Facets provides extensions for Ruby's
-standard library, as well as a small collection of additional modules and
-classes to supplement it.
-
-Use this library like you would any other 3rd party library.
-The only difference between Facet's Standard library and other libraries
-is the lack of any enclosing `Facets::` namespace.
-
-When using Facets extended versions of Ruby's standard libraries,
-the libraries have to loaded individually. However you do not need
-to load Ruby's library first, as the Facets' library will do that
-automatically.
-
-For example, normally one load Ruby's OpenStruct class via:
-
- require 'ostruct'
-
-To load 'ostruct.rb' plus Facets extensions for it simply use:
-
- require 'facets/ostruct'
+## Documentation
-For details pertaining to the functionality of each feature,
-please see the API documentation.
+- [Getting started and loading guide](https://rubyworks.github.io/facets/learn.html)
+- [Generated API documentation on RubyDoc.info](https://www.rubydoc.info/gems/facets) (check the displayed version)
+- [Release history](HISTORY.md)
+In the published 3.2.2 gem, the split between `lib/core` and `lib/standard` is visible in API source paths. This helps you tell whether a method is loaded by `require 'facets'` or needs an explicit require. The development branch also has a new `lib/rails` area for Rails-compatible helpers; see the **Unreleased** section of the release history for details.
## Contribute
-This project thrives on contribution!
-
-If you have any extension methods, classes or modules that you think have
-very general applicability and would like to see them included in
-this project, don't hesitate to submit. Also, if you have better versions
-of any thing already included or simply have a patch, they are more than
-welcome. We want Ruby Facets to be of the highest quality.
-
-
-## Development
-
-Facets uses the [Lemon](https://rubyworks.github.io/lemon) testing framework
-to handle unit testing, while [QED](https://rubyworks.github.io/qed) specifications
-provide tested documentation. Run the test suite with [Rake](https://ruby.github.io/rake/):
-
- $ rake test
-
-Continuous integration runs on GitHub Actions (see `.github/workflows/ci.yml`).
-
-
-## Authors
-
-Much of this collection was written and/or inspired by a variety of great Ruby
-developers. Fortunately nearly all utilized works were copyrighted under the same
-open licenses, the Ruby License or the more liberal BSD and MIT licenses. In the
-one or two exceptions the copyright notice has been included with the source code.
-We have since received permission from the various authors to normalize the licensing
-to a single license. For this purpose we have chosen the BSD 2 Clause License.
-This is the license Ruby itself now uses, so it seemed the most appropriate choice.
-It is also almost identical to the MIT license. Any code file not specifically labeled
-otherwise shall fall under the this license (which is BSD 2-clause).
-
-In all cases, every effort has been made to give credit where credit is due.
-You will find these acknowledgments embedded in the source code. You can see
-them in "CREDIT:" and/or "@author" lines.
-Also see the [Contributors page](https://github.com/rubyworks/facets/wiki/Contributors)
-on the Wiki for a list of all contributing Rubyists. If anyone is missing from
-the list, please let us know so we can correct. Thanks.
-
-This collection was put together by, and much of it written by [trans](https://github.com/trans).
-If need be, he can be reached via email at transfire at gmail.com.
-
-
-## License
-
-The collection PER COLLECTION is licensed as follows:
-
- Ruby Facets
- Copyright (c) 2005 Rubyworks
-
- Distributed under the terms of the BSD-2 License (same as Ruby license).
-
-The BSD 2 Clause License is a simple open source license. The complete text of the
-license accompany this document (see the enclosed LICENSE file).
-
-Acknowledgments and Copyrights for particular snippets of borrowed code
-are given in their respective source. At this point, all licensing has been normalized
-for all included code. Original authors have given permission for inclusion of their
-code under such license, with appropriate credit citations.
+Issues and pull requests are welcome. Start with [CONTRIBUTING.md](CONTRIBUTING.md) for the library's method organization, demos, and test conventions. The test suite runs with:
+```sh
+bundle install
+bundle exec rake test
+```
-## "ALL YOUR BASE ARE BELONG TO RUBY!"
+[Source](https://github.com/rubyworks/facets) · [Issues](https://github.com/rubyworks/facets/issues) · [Website](https://rubyworks.github.io/facets/)
-Ruby Facets, Copyright (c) 2005 Rubyworks
+## License and credits
-Do you Ruby? (https://ruby-lang.org)
+Facets is distributed under the [BSD 2-Clause License](LICENSE.txt). Thomas Sawyer started the project, and many Rubyists have contributed code, ideas, tests, and documentation. Individual files record additional credits where applicable.
+*All your base are belong to Ruby.*
diff --git a/docs/README.md b/docs/README.md
new file mode 100644
index 000000000..494f8eb42
--- /dev/null
+++ b/docs/README.md
@@ -0,0 +1,11 @@
+# Facets website
+
+The current GitHub Pages site is served directly from `docs/`. Edit the four page fragments and historical post fragments in `_src/`, and the shared stylesheet in `assets/styles/site.css`, then run:
+
+```sh
+ruby docs/build.rb
+```
+
+Commit the generated HTML pages, including pages under `posts/`, with the source changes. The build uses only Ruby's standard library. `atom.xml` is a small static release feed and is edited directly.
+
+The `.page`, `.post`, `brite.yml`, and `assets/layouts/` files are retained from the former Brite site for historical reference; they are not inputs to this build. The article copy in `_src/archive/` was taken from the original posts. It describes its original release period and should not be used as current installation or API guidance.
diff --git a/docs/_src/archive/2008-01-01-how-facets-was-born.html b/docs/_src/archive/2008-01-01-how-facets-was-born.html
new file mode 100644
index 000000000..190d02a34
--- /dev/null
+++ b/docs/_src/archive/2008-01-01-how-facets-was-born.html
@@ -0,0 +1,16 @@
+
As programmers are wont to do, I started collecting reusable pieces of
+Ruby long ago. At first it was just a small function here, a useful
+module there. Eventually the collection became sizable and I called it TomsLib.
+As time wore on and my library grew, I started to feel it worth a general
+release and I had renamed it Raspberry Lib. But sometime shortly thereafter
+I hit upon the idea of atomicity of the core extensions. And that's how the
+name Facets came about --it's all about the little things. Of course, that name
+took a while to decide upon too. The library was almost called "Atomix & Trix"!
+
+
Facets has eveolved considerably over the years --and lessons were learned. Probably
+the biggest lesson was the 2.0 release, where the idea of atomicity was eroded and
+and alternate means of library requiring was attempted. Both were rectified by 2.4.
+
+
Much has changed since those first days. But time has been good to Facets.
+Today, Facets is a more solid and leaner library than ever before and will
+continue in the fashion for version to come.
diff --git a/docs/_src/archive/2008-03-24-release-2-4.html b/docs/_src/archive/2008-03-24-release-2-4.html
new file mode 100644
index 000000000..ebe212355
--- /dev/null
+++ b/docs/_src/archive/2008-03-24-release-2-4.html
@@ -0,0 +1,57 @@
+
Facets 2.4.3 is now out in the wild. The release is primarily a maintenance
+release —fixing a handful of small bugs and adding some small feature
+improvements, but a few significant changes are also present.
+
+
+
Moved Mentalguy's lazy.rb to CORE!
+
Moved Indexable and Stackable to core.
+
Added Time#trunc and Time#round to CORE.
+
Added Ken Bloom's DictionaryMatcher class (maybe renamed in future version)
+
Added Array#recursively and fixed bug in Hash#recursively.
+
Added kernel/instance method which provides a fluent interface to private object space.
+
Renamed Class#to_pathname and #to_methodname to #pathize and #methodize.
+
Changed File#rewrite to not use the in-place change of the string.
+
Changed Dictionary#first and #last to take optional arguments.
+
Deprecated Hash#keys_to_s and Hash#keys_to_sym (use #rekey).
+
Deprecated Console:: namespace for ANSICode.
+
Deprecated ruby.rb, which was a sort 1.9 compatibility layer.
+
The ruby.rb methods were moved to core, wrapped in a 1.9 condition.
+
Fixed Time#hence changed years when changing months.
+
Fixed Time#hence to flip year correctly when adding months.
+
Improved File#rootname, it is now more robust.
+
Made FileUtils#whereis a module_function again.
+
Use "lib/lore" to separate extensions to Ruby's standard library.
+
+
+
+
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.
+
+
Special thanks to:
+
+
+
Ken Bloom
+
Nick Caruso
+
Evgeniy Dolzhenko
+
Andy Freeman
+
Tomasz Muras
+
Dave Myron
+
+
+
+
And of course, to anyone else I failed to mention that has contributed.
+
+
Finally, Facets 2.4+ now encourages using:
+
+
require 'facets'
+
+
+
when testing, even if you are 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, and the
+the different choices go unaccounted and untested.
+
+
Facets is almost fully interoperable with ActiveSupport and Ruby 1.9. We
+will continue to improve this interoperability in upcoming releases.
diff --git a/docs/_src/archive/2009-07-21-new-website.html b/docs/_src/archive/2009-07-21-new-website.html
new file mode 100644
index 000000000..f0f614f71
--- /dev/null
+++ b/docs/_src/archive/2009-07-21-new-website.html
@@ -0,0 +1,8 @@
+
The old Ruby Facets website was a static 100% XML/XSLT site. When I originally created
+the site, I though XML/XSLT suredly was the pinnicale and proper way to build a
+modern site --for no other reason that XSL is a pain in the ass! Well, we all know
+the ultimate outcome of this story. XML/XSLT is turning out to be an exmplar of
+over engineering by academics.
+
+
The new Facets website runs of Jekyll, a static site generator supoprted by GitHub.
+(another good site tool is Shunman)
diff --git a/docs/_src/archive/2009-08-22-release-2-7.html b/docs/_src/archive/2009-08-22-release-2-7.html
new file mode 100644
index 000000000..97ca89f07
--- /dev/null
+++ b/docs/_src/archive/2009-08-22-release-2-7.html
@@ -0,0 +1,122 @@
+
Facets 2.7 is most significant 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 available 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?.
+
+
Spun-Off Projects
+
+
These libraries have been deprecated from Facets entirely, but are available
+as separate gems (or soon will be).
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).
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.
+
+
+
In addition to all this we've also taken some time to ensure Ruby Facets is more compatible
+with Ruby 1.9 --indeed, at this point, it should be very close to fully compatibility. In
+the process of doing this, btw, it has become clear that Ruby 1.9 picked up a good number
+of methods already supported by Facets (some with the same exact names and some with
+changed names). There's no way to know if Facets had any influence in these additions
+to 1.9, but at the very least we can be sure that Facets contributed to "airing the field"
+that led to their addition. That's a great thing, as it means Facets is directly contributing
+to Ruby's future. I hope that will continue.
diff --git a/docs/_src/archive/2009-11-09-release-2-8.html b/docs/_src/archive/2009-11-09-release-2-8.html
new file mode 100644
index 000000000..64630b604
--- /dev/null
+++ b/docs/_src/archive/2009-11-09-release-2-8.html
@@ -0,0 +1,62 @@
+
Facets 2.8 effectively completes the MORE library clean-up which peaked
+with the previous 2.7 release. In so doing, five additional libraries
+have been 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)
+
+
+
+
Three other libraries have been deprecated, but have been spun-off
+to the new 'ansi' project:
+
+
+
ansicode.rb
+
progressbar.rb
+
logger.rb
+
+
+
+
This version of Facets also reverts a few of the deprecations made before --
+reconsiderations made due to analysis of the code as suitable for release
+as separate projects. These libs will thus remain in Facets's MORE library
+at least for the forseeable future.
+
+
+
ini.rb
+
linkedlist.rb
+
matcher.rb
+
memoizer.rb
+
roman.rb
+
semaphore.rb
+
+
+
+
Other minor enhancements have also been made in the release. These include:
+
+
+
Kernel#extend can now take a block
+
Fixed kernel#d so it is useable
+
Added method #at_rand to Range in random.rb (thanks to Tyler Rick).
+
Added method #map_detect to Enumerable (thanks to Scott Taylor).
+
Added method #/ to String, which calls File.join.
+
Added method #newlines and #cleanlines to String.
+
String#titlecase now handles apostrophes.
+
BasicObject/BlankSlate is more compliant with 1.9.1's design.
+
Enumerable#count can take multiple items, treats them as a logical Or.
+
Class#class_extend extends class level, rather than use class_eval.
+
Integer#succ(n) becomes Fixnum#succ(n) in succ.rb.
+
inheritor.rb has been rewritten.
+
The Shellwords extensions have been reworked.
+
Added #similarity method to String.
+
Added a Levenshtein edit_distance method to String.
+
+
+
+
In addition to all this, we have recently set up a new Ruby 1.9 compliance procedure
+using RunCodeRun.com. Actually RunCodeRun helps us to ensure 1.8.6 compabiltiy as well.
+This is great tool for improving code quality, and comes highly recommended.
diff --git a/docs/_src/archive/2010-09-01-release-2-9.html b/docs/_src/archive/2010-09-01-release-2-9.html
new file mode 100644
index 000000000..37e0c8a2e
--- /dev/null
+++ b/docs/_src/archive/2010-09-01-release-2-9.html
@@ -0,0 +1,28 @@
+
Facets 2.9 is fairly extensive as it was originally intended to be v3.0.
+After further consideration it was decided to reserve v3.0 for something a
+little bolder (to be announced). The primary goal of this release was to
+trim Facets down to a true core extensions library. All tertiary add-on classes
+and mixins have now been spun-off to other projects. Only a very select set of
+general purposes classes and mixins remain.
+
+
A new TOUR library division has been added to complement CORE and MORE.
+This division houses purely optional extensions. The new division serves
+a couple of useful purposes. In particular, it helps separates the standard
+library extensions from optional core extension in the RDocs and thus makes
+the perfect place to vet new extension ideas.
+
+
One important change that will effect anyone using Facets along side
+ActiveSupport is that Facets no longer tries to conditionally avoid
+method overlaps with ActiveSupport. This is fine for the upcoming
+ActiveSupport 3.0 library which extends core classes directly instead of
+using mixins. One need only require 'facets' in Rails' config/preinitializer.rb
+file, and ActiveSupport will take precedence over Facets. For older versions
+of ActiveSupport, the best approach is to cherry pick from Facets just the
+extensions you want, thus avoiding any conflicts. There are actually only a
+dozen or so overlaps and all are intended to compatible, but it doesn't hurt
+to be sure.
+
+
I won't detail each change here, have a look at the HISTORY.rdoc file for that.
+Needless to say, it's a good idea to read it over to see what changes might
+effect your usage --and it also gives you a glimpse at what other extensions are
+available that you might not yet be familiar.
diff --git a/docs/_src/index.erb b/docs/_src/index.erb
new file mode 100644
index 000000000..b2741f948
--- /dev/null
+++ b/docs/_src/index.erb
@@ -0,0 +1,55 @@
+
+
+
+
A Ruby library since 2005
+
More of Ruby, one method at a time.
+
A thoughtfully collected set of extensions for Ruby's core classes and standard library. Load the whole core collection or pick just the methods you need.
Install the gem, choose how much to load, and make Ruby feel a little more like yours.
+
+
01 / GET READY
Install Facets
Facets 3.2.2 requires Ruby 3.1 or newer. Install it directly with RubyGems or add it to a Bundler project.
TERMINAL
gem install facets
GEMFILE
gem 'facets', require: false
require: false keeps Bundler from loading the entire core collection automatically, so you can choose the files your project needs.
+
02 / CHOOSE YOUR SCOPE
Load what fits
Most core extension methods are stored in individual files. You can require one method, a class's core methods, or the core collection.
RUBY
# One method
+require 'facets/array/to_ranges'
+
+# A class's core extensions
+require 'facets/string'
+
+# Most core extensions
+require 'facets'
Standard library extensions are separate from the core collection. Require each one explicitly. For example, require 'facets/ostruct' loads Ruby's ostruct and the Facets additions for it.
Using Ruby 3.5+? Add the ostruct gem separately if you use Facets' OpenStruct extensions. Ruby no longer includes it as a default gem.
+
03 / SEE IT WORK
A few useful facets
These examples use methods present in the 3.2 release.
Extensions add methods to Ruby's existing classes. When combining libraries that extend the same classes, choose your requires deliberately and check for method name overlap.
+
04 / KEEP EXPLORING
Find the right method
RubyDoc.info hosts generated API documentation; check the displayed gem version when browsing. In the published 3.2.2 gem, lib/core belongs to the core collection and lib/standard contains separately loaded libraries. The source repository also contains unreleased changes, including a new lib/rails area.
diff --git a/docs/_src/news.erb b/docs/_src/news.erb
new file mode 100644
index 000000000..730f74e97
--- /dev/null
+++ b/docs/_src/news.erb
@@ -0,0 +1,7 @@
+
RELEASES & HISTORY
A living Ruby collection.
Facets has been growing since 2005. Here are the recent releases and a path back through its story.
+
LATEST RELEASES
Facets 3.2
The 3.2 series brings the library forward for Ruby 3.1 and newer. Work merged since 3.2.2 is listed under Unreleased in the release history.
+
3.2.215 JUN 2026
LATEST
Compatibility, polished
Fixes range intersection on Ruby 3.1 and 3.2, restores Range#overlap? where Ruby does not provide it, and corrects Binding#caller_locations argument handling.
Core extensions live under lib/core/facets, standard library extensions under lib/standard/facets, and unreleased Rails-compatible helpers under lib/rails/facets. Keep focused changes close to their tests and demos.
Thomas Sawyer began Facets in 2005. Many contributors have shaped its methods, tests, and documentation since then. Credits for individual pieces appear in the source, and the collection is distributed under the BSD 2-Clause License.
- Ruby Facets is the premiere collection of method extension and standard library additions for the Ruby programming language.
+
+
+
+
+
+
A Ruby library since 2005
+
More of Ruby, one method at a time.
+
A thoughtfully collected set of extensions for Ruby's core classes and standard library. Load the whole core collection or pick just the methods you need.
# Load only what you need
+require'facets/array/to_ranges'
+
+[1, 2, 3, 6, 7].to_ranges
+#=> [1..3, 6..7]
+
+
+
+
01 Small, focused files02 Core + standard libraries03 Your Ruby, your choices
-
-
-
-
Facets is the Premier Ruby Extensions Library
-
-
Ruby Facets was first released in 2005. Since then it has evolved into the
-single largest and most refined core extensions library for the Ruby programming
-language. All facets can be loaded with a single require or cherry-picked
-individually. There are hundreds of quality methods in the collection which
-have been derived from years of experience of dozens of top Ruby programmers.
-
-
In addition to the core libraries, Facets provides extensions to Ruby standard
-library, as well as as a small collection of add-on classes and mixins.
-Together with core extensions these libraries provide a broad general-purpose
-set of components commonly useful across a wide variety of applications.
-
-
Facets is for Every Ruby Developer
-
-
Who uses Facets? Lots of Rubyists do!
-
-
Many developers use Facets as a copy-and-paste resource, others use it as a dependency
-cherry-picking just the methods they need, and still others use the library whole-clothe.
-How you use Ruby Facets to facilitate your Ruby development is completely yours to decide.
-
-
-
-
Facets is a Bright Idea
-
-
The philosophy of Facets can be summed
-up in a simple mantra, ALL BASE COMMON. The idea being, that by sharing a broad foundation
-of general purpose code, the Ruby community will be better served. There are a number of
-advantages to this approach. Among them: name consistency, better code-reuse, collaborative
-improvements and reduced installation requirements.
-
-
Facets also embodies the idea of "having it your way". You can use as much or as little
-of Facets as you see fit. In fact, Ruby Facets originated the idea cherry-pickable extensions.
-
-
Facets is a Community Effort
-
-
Facets is not the sole achievement of one person, but was made possible by the hard
-work of many excellent programmers. Some persons contributed code directly, other's simply
-had their code picked-up from another open resource. In either case, three cheeers
-for all!
-
-
Thibaut Barrère Daniel J. Berger Ken Bloom
- Rich Bradley Paul Brannan Mikael Brockman
- Jamis Buck Renald Buter Brian Candler
- Shashank Date Robert Feldt Mauricio Fernandez
- Florian Frank Hal Fulton Noah Gibbs
- Michael Granger Florian Gross Sean O'Halpin
- Michael Harmer Matthew Harris David Heinemeier Hansson
- Thomas-Ivo Heinen Dave Hoover Ara T. Howard
- MenTaLguY Mohammad Khan Robert Klemme
- Michael Kohl Richard Laugesen Lavir the Whiolet
- Derek Lewis Jan Molic George Moschovitis
- Michael Neumann Marco Otte-Witte Roger Pack
- Jeena Paradies Tim Pease Jonas Pfenniger
- Ryan Platte Oliver Renaud Tyler Rick
- Christoph Rippel Daniel Schierbeck Louis J Scoras
- Gavin Sinclair Tilo Sloboda Sandor Szücs
- Phil Tomson Mauro Tortonesi Peter Vanbroekhoven
- Jim Weirich Jeff Wood Jean-Denis Vauguet
- Erik Veenstra Austin Ziegler Why The Lucky Stiff
-
-
-
Facets is Open Source Software
-
-
Facets is true open source software. Ruby Facets is distributed under the terms of the
-Ruby License,
-just like Ruby.
-
-
Ruby Facets, Copyright (c) 2005-2010 Thomas Sawyer
-
-
Credit and any additional copyrights for particular code fragments are
-given in their respective source. All secondary licenses are either compatible
-with the Ruby license or the original author has given permission for
-inclusion of their code under this license.
-
-
- "Lots of cool stuff... There's just so much there!"
- --Austin Ziegler
-
-
-
+
+
+
THE IDEA
Good ideas deserve a shared home.
Facets brings useful Ruby methods together in a form you can discover, reuse, and improve. Each extension stays easy to find and easy to require.
+
+
01 / GRANULAR
One file, one idea
Most methods have their own file. Add a single method without loading a larger set of extensions.
+ ⌘
02 / FAMILIAR
Ruby, extended
Build on the classes and modules you already use, from Array and String to parts of the standard library.
+ ✳
03 / COMMUNITY
Made together
Years of contributions and refinement live in one collection, with tests and source credits alongside the code.
+
-
+
+
+
+
+
MAKE IT YOURS
Start small. Go further.
Choose the amount of Facets that fits your project. You can change that choice as your needs grow.
-
- Copyright (c) 2005-2008 Thomas Sawyer & Contributors
-
- Ruby Facets was created by Thomas Sawyer (7rans), either written by hand or collected from a variety of Ruby resources.
- The system continues to be extended and improved by a diverse cast of open-source contributors.
-
- Facets is released under the terms of the Ruby license, just like Ruby.
- The Ruby license is a dual GPLv2 license.
-
- "Facets", "Ruby Facets" and "All Base Common" are trademarks of Thomas Sawyer. All rights reserved.
-
-
-
- THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
- IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
- WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE.
-
-
-
-
-
+
+
+
+
LATEST RELEASE
Fresh facets for modern Ruby.
Version 3.2.2 includes compatibility fixes across Ruby 3.1–3.4, following the 3.2 modernization release.
- Learn Facets as you program, these resources make it a snap. Hook up with other users and broaden the scope of your usage. Ruby Facets has a moto, "All Base Common".
+
+
+
THE GUIDE
Find your way into Facets.
Install the gem, choose how much to load, and make Ruby feel a little more like yours.
+
+
01 / GET READY
Install Facets
Facets 3.2.2 requires Ruby 3.1 or newer. Install it directly with RubyGems or add it to a Bundler project.
TERMINAL
gem install facets
GEMFILE
gem 'facets', require: false
require: false keeps Bundler from loading the entire core collection automatically, so you can choose the files your project needs.
+
02 / CHOOSE YOUR SCOPE
Load what fits
Most core extension methods are stored in individual files. You can require one method, a class's core methods, or the core collection.
RUBY
# One method
+require 'facets/array/to_ranges'
+
+# A class's core extensions
+require 'facets/string'
+
+# Most core extensions
+require 'facets'
Standard library extensions are separate from the core collection. Require each one explicitly. For example, require 'facets/ostruct' loads Ruby's ostruct and the Facets additions for it.
Using Ruby 3.5+? Add the ostruct gem separately if you use Facets' OpenStruct extensions. Ruby no longer includes it as a default gem.
+
03 / SEE IT WORK
A few useful facets
These examples use methods present in the 3.2 release.
Extensions add methods to Ruby's existing classes. When combining libraries that extend the same classes, choose your requires deliberately and check for method name overlap.
+
04 / KEEP EXPLORING
Find the right method
RubyDoc.info hosts generated API documentation; check the displayed gem version when browsing. In the published 3.2.2 gem, lib/core belongs to the core collection and lib/standard contains separately loaded libraries. The source repository also contains unreleased changes, including a new lib/rails area.
Facets can be dowloaded and installed easily using RubyGems:
-
-
$ gem install facets
-
-
-
Gems will automatically generate rdocs on installation. Unfortunately
-the Gem generated rdocs are very poor --in fact Facets only allows them
-to be generated to ensure the creation of ri docs (ruby api index files).
-We recommend instead that you use the pre-generated rdocs on the website.
-
-
Site Install
-
-
Note this is a very old-school installation method. We should probably remove this,
-but for the moment we leave it her for posterity's sake.
-
-
If you would like to install from source, you can download the tarball
-package from GitHub
-and use Ruby Setup, e.g.
-
-
$ tar -xvzf facets-2.9.0.tgz
-$ cd facets-2.9.0
-$ setup.rb
-
-
-
The last step may require super-user permissions (eg. use sudo).
-
-
Of course, to use Facets you also need Ruby. The 2.x versions of Facets are
-designed to work with Ruby 1.8.6 and up. Facets is fully compatible with Ruby 1.9.
-
-
API Documentation
-
-
The YARD documentation includes all of Facets,
-both the core extensions and standard library, in a single reference resource.
-
-
Facets offical API documentation is divided into two documentation sets, one for the core extensions,
-and the other for the standard library extensions and additions.
-
-
PLEASE NOTE THE FOLLOWING DOCUMENTATION RESOURCES ARE DOWN UNTIL YOURS TRULY HAS A CHANCE TO FIX.
-
-
Core API
-
-
The CORE API
-(alt)
-includes only the core extensions. These methods are at the heart of Facets. Any application or library that makes use of Facets
-is encouraged to write their tests with all of these methods loaded to ensure cross-application support. Also included is the
-Functor class, which is a Higher Order Message class. It is used by a number of methods to provide fluid interfaces.
-
-
Standard API
-
-
The STANDARD API
-(alt)
-documents a variety of extension methods to Ruby's standard library, and additional
-classes and modules Facets provides as optional libraries.
-
-
Wiki
-
-
The Wiki is a place for end-users to create their own documentation. Ultimately,
-it is hoped, this documentaiton will make a great source for sharing real-world
-use cases. The community wiki, that anyone can use to help document Facets, is at
-Facets Wiki.
-
-
Mailing List
-
-
Facets has a dedicated mailing list hosted via
-Google Groups.
-The same list is used by developers and end-users alike. If you have a
-question or a suggestion, the list this is a place you can use to get feedback.
-However the Github Issues page is so good these days that most people opt just to use it
-instead, which is fine.
-
-
-
-
-
-
-
-
-
-
-
-
- Copyright (c) 2005-2008 Thomas Sawyer & Contributors
-
- Ruby Facets was created by Thomas Sawyer (7rans), either written by hand or collected from a variety of Ruby resources.
- The system continues to be extended and improved by a diverse cast of open-source contributors.
-
- Facets is released under the terms of the Ruby license, just like Ruby.
- The Ruby license is a dual GPLv2 license.
-
- "Facets", "Ruby Facets" and "All Base Common" are trademarks of Thomas Sawyer. All rights reserved.
-
-
-
- THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
- IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
- WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE.
-
Facets 2.9 is fairly extensive as it was originally intended to be v3.0.
-After further consideration it was decided to reserve v3.0 for something a
-little bolder (to be announced). The primary goal of this release was to
-trim Facets down to a true core extensions library. All tertiary add-on classes
-and mixins have now been spun-off to other projects. Only a very select set of
-general purposes classes and mixins remain.
Facets 2.8 effectively completes the MORE library clean-up which peaked
-with the previous 2.7 release. In so doing, five additional libraries
-have been 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)
-
-
-
-
Three other libraries have been deprecated, but have been spun-off
-to the new 'ansi' project:
Facets 2.7 is most significant 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 available to take their place.
The old Ruby Facets website was a static 100% XML/XSLT site. When I originally created
-the site, I though XML/XSLT suredly was the pinnicale and proper way to build a
-modern site --for no other reason that XSL is a pain in the ass! Well, we all know
-the ultimate outcome of this story. XML/XSLT is turning out to be an exmplar of
-over engineering by academics.
-
-
The new Facets website runs of Jekyll, a static site generator supoprted by GitHub.
-(another good site tool is Shunman)
Facets 2.4.3 is now out in the wild. The release is primarily a maintenance
-release —fixing a handful of small bugs and adding some small feature
-improvements, but a few significant changes are also present.
-
-
-
Moved Mentalguy's lazy.rb to CORE!
-
Moved Indexable and Stackable to core.
-
Added Time#trunc and Time#round to CORE.
-
Added Ken Bloom's DictionaryMatcher class (maybe renamed in future version)
-
Added Array#recursively and fixed bug in Hash#recursively.
-
Added kernel/instance method which provides a fluent interface to private object space.
-
Renamed Class#to_pathname and #to_methodname to #pathize and #methodize.
-
Changed File#rewrite to not use the in-place change of the string.
-
Changed Dictionary#first and #last to take optional arguments.
-
Deprecated Hash#keys_to_s and Hash#keys_to_sym (use #rekey).
-
Deprecated Console:: namespace for ANSICode.
-
Deprecated ruby.rb, which was a sort 1.9 compatibility layer.
-
The ruby.rb methods were moved to core, wrapped in a 1.9 condition.
-
Fixed Time#hence changed years when changing months.
-
Fixed Time#hence to flip year correctly when adding months.
-
Improved File#rootname, it is now more robust.
-
Made FileUtils#whereis a module_function again.
-
Use "lib/lore" to separate extensions to Ruby's standard library.
-
-
-
-
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.
As programmers are wont to do, I started collecting reusable pieces of
-Ruby long ago. At first it was just a small function here, a useful
-module there. Eventually the collection became sizable and I called it TomsLib.
-As time wore on and my library grew, I started to feel it worth a general
-release and I had renamed it Raspberry Lib. But sometime shortly thereafter
-I hit upon the idea of atomicity of the core extensions. And that's how the
-name Facets came about --it's all about the little things. Of course, that name
-took a while to decide upon too. The library was almost called "Atomix & Trix"!
-
- Copyright (c) 2005-2008 Thomas Sawyer & Contributors
-
- Ruby Facets was created by Thomas Sawyer (7rans), either written by hand or collected from a variety of Ruby resources.
- The system continues to be extended and improved by a diverse cast of open-source contributors.
-
- Facets is released under the terms of the Ruby license, just like Ruby.
- The Ruby license is a dual GPLv2 license.
-
- "Facets", "Ruby Facets" and "All Base Common" are trademarks of Thomas Sawyer. All rights reserved.
-
-
-
- THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
- IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
- WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE.
-
Facets has been growing since 2005. Here are the recent releases and a path back through its story.
+
LATEST RELEASES
Facets 3.2
The 3.2 series brings the library forward for Ruby 3.1 and newer. Work merged since 3.2.2 is listed under Unreleased in the release history.
+
3.2.215 JUN 2026
LATEST
Compatibility, polished
Fixes range intersection on Ruby 3.1 and 3.2, restores Range#overlap? where Ruby does not provide it, and corrects Binding#caller_locations argument handling.
As programmers are wont to do, I started collecting reusable pieces of
+
FROM THE ARCHIVE / 2008-01-01
How Facets Was Born
This post is preserved from an earlier Facets release. For current installation and API guidance, use the guide.
+
As programmers are wont to do, I started collecting reusable pieces of
Ruby long ago. At first it was just a small function here, a useful
module there. Eventually the collection became sizable and I called it TomsLib.
As time wore on and my library grew, I started to feel it worth a general
@@ -88,53 +42,23 @@
How Facets Was Born
Much has changed since those first days. But time has been good to Facets.
Today, Facets is a more solid and leaner library than ever before and will
continue in the fashion for version to come.
-
- Copyright (c) 2005-2008 Thomas Sawyer & Contributors
-
- Ruby Facets was created by Thomas Sawyer (7rans), either written by hand or collected from a variety of Ruby resources.
- The system continues to be extended and improved by a diverse cast of open-source contributors.
-
- Facets is released under the terms of the Ruby license, just like Ruby.
- The Ruby license is a dual GPLv2 license.
-
- "Facets", "Ruby Facets" and "All Base Common" are trademarks of Thomas Sawyer. All rights reserved.
-
-
-
- THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
- IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
- WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE.
-
Facets 2.4.3 is now out in the wild. The release is primarily a maintenance
+
FROM THE ARCHIVE / 2008-03-24
Facets 2.4.3
This post is preserved from an earlier Facets release. For current installation and API guidance, use the guide.
+
Facets 2.4.3 is now out in the wild. The release is primarily a maintenance
release —fixing a handful of small bugs and adding some small feature
improvements, but a few significant changes are also present.
@@ -129,55 +83,23 @@
Facets 2.4.3
Facets is almost fully interoperable with ActiveSupport and Ruby 1.9. We
will continue to improve this interoperability in upcoming releases.
-
- Copyright (c) 2005-2008 Thomas Sawyer & Contributors
-
- Ruby Facets was created by Thomas Sawyer (7rans), either written by hand or collected from a variety of Ruby resources.
- The system continues to be extended and improved by a diverse cast of open-source contributors.
-
- Facets is released under the terms of the Ruby license, just like Ruby.
- The Ruby license is a dual GPLv2 license.
-
- "Facets", "Ruby Facets" and "All Base Common" are trademarks of Thomas Sawyer. All rights reserved.
-
-
-
- THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
- IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
- WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE.
-
The old Ruby Facets website was a static 100% XML/XSLT site. When I originally created
+
FROM THE ARCHIVE / 2009-07-21
New Website with Jekyll
This post is preserved from an earlier Facets release. For current installation and API guidance, use the guide.
+
The old Ruby Facets website was a static 100% XML/XSLT site. When I originally created
the site, I though XML/XSLT suredly was the pinnicale and proper way to build a
modern site --for no other reason that XSL is a pain in the ass! Well, we all know
the ultimate outcome of this story. XML/XSLT is turning out to be an exmplar of
@@ -80,55 +34,23 @@
New Website with Jekyll
The new Facets website runs of Jekyll, a static site generator supoprted by GitHub.
(another good site tool is Shunman)
-
- Copyright (c) 2005-2008 Thomas Sawyer & Contributors
-
- Ruby Facets was created by Thomas Sawyer (7rans), either written by hand or collected from a variety of Ruby resources.
- The system continues to be extended and improved by a diverse cast of open-source contributors.
-
- Facets is released under the terms of the Ruby license, just like Ruby.
- The Ruby license is a dual GPLv2 license.
-
- "Facets", "Ruby Facets" and "All Base Common" are trademarks of Thomas Sawyer. All rights reserved.
-
-
-
- THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
- IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
- WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE.
-
Facets 2.7 is most significant release of Facets since 2.4. Rather then trickle-release
+
FROM THE ARCHIVE / 2009-08-22
Facets 2.7 is a Significant Release
This post is preserved from an earlier Facets release. For current installation and API guidance, use the guide.
+
Facets 2.7 is most significant 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
@@ -194,55 +148,23 @@
General Deprecations
to 1.9, but at the very least we can be sure that Facets contributed to "airing the field"
that led to their addition. That's a great thing, as it means Facets is directly contributing
to Ruby's future. I hope that will continue.
-
- Copyright (c) 2005-2008 Thomas Sawyer & Contributors
-
- Ruby Facets was created by Thomas Sawyer (7rans), either written by hand or collected from a variety of Ruby resources.
- The system continues to be extended and improved by a diverse cast of open-source contributors.
-
- Facets is released under the terms of the Ruby license, just like Ruby.
- The Ruby license is a dual GPLv2 license.
-
- "Facets", "Ruby Facets" and "All Base Common" are trademarks of Thomas Sawyer. All rights reserved.
-
-
-
- THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
- IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
- WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE.
-
Facets 2.8 effectively completes the MORE library clean-up which peaked
+
FROM THE ARCHIVE / 2009-11-09
Facets 2.8 Release
This post is preserved from an earlier Facets release. For current installation and API guidance, use the guide.
+
Facets 2.8 effectively completes the MORE library clean-up which peaked
with the previous 2.7 release. In so doing, five additional libraries
have been deprecated:
@@ -134,55 +88,23 @@
Facets 2.8 Release
In addition to all this, we have recently set up a new Ruby 1.9 compliance procedure
using RunCodeRun.com. Actually RunCodeRun helps us to ensure 1.8.6 compabiltiy as well.
This is great tool for improving code quality, and comes highly recommended.
-
- Copyright (c) 2005-2008 Thomas Sawyer & Contributors
-
- Ruby Facets was created by Thomas Sawyer (7rans), either written by hand or collected from a variety of Ruby resources.
- The system continues to be extended and improved by a diverse cast of open-source contributors.
-
- Facets is released under the terms of the Ruby license, just like Ruby.
- The Ruby license is a dual GPLv2 license.
-
- "Facets", "Ruby Facets" and "All Base Common" are trademarks of Thomas Sawyer. All rights reserved.
-
-
-
- THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
- IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
- WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE.
-
Facets 2.9 is fairly extensive as it was originally intended to be v3.0.
+
FROM THE ARCHIVE / 2010-09-01
Facets 2.9 Release
This post is preserved from an earlier Facets release. For current installation and API guidance, use the guide.
+
Facets 2.9 is fairly extensive as it was originally intended to be v3.0.
After further consideration it was decided to reserve v3.0 for something a
little bolder (to be announced). The primary goal of this release was to
trim Facets down to a true core extensions library. All tertiary add-on classes
@@ -100,53 +54,23 @@
Facets 2.9 Release
Needless to say, it's a good idea to read it over to see what changes might
effect your usage --and it also gives you a glimpse at what other extensions are
available that you might not yet be familiar.
-
- Copyright (c) 2005-2008 Thomas Sawyer & Contributors
-
- Ruby Facets was created by Thomas Sawyer (7rans), either written by hand or collected from a variety of Ruby resources.
- The system continues to be extended and improved by a diverse cast of open-source contributors.
-
- Facets is released under the terms of the Ruby license, just like Ruby.
- The Ruby license is a dual GPLv2 license.
-
- "Facets", "Ruby Facets" and "All Base Common" are trademarks of Thomas Sawyer. All rights reserved.
-
-
-
- THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
- IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
- WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE.
-
- The source of Facets stregth is it's many contributors. Getting involved with Facets development is one of the best ways to get your ideas for Ruby extensions into the public forum.
+
+
+
OPEN SOURCE
Shape the next facet.
Facets was made by Rubyists sharing useful ideas. There is room for better methods, better tests, clearer docs, and thoughtful bug reports.
+
GET INVOLVED
Start where you are.
Browse the source to see how extensions are organized, or open an issue when something could work better.
Core extensions live under lib/core/facets, standard library extensions under lib/standard/facets, and unreleased Rails-compatible helpers under lib/rails/facets. Keep focused changes close to their tests and demos.
Thomas Sawyer began Facets in 2005. Many contributors have shaped its methods, tests, and documentation since then. Credits for individual pieces appear in the source, and the collection is distributed under the BSD 2-Clause License.
GitHub houses our working git repository.
-Anyone is welcome to fork this repository and contribute back to the master branch
-via pull requests. If you are not familiar with using GitHub, here is a
-overview.
The widely accepted practice of contributing to GitHub projects entails:
-
-
-
Fork rubyworks/facets
-
Create a topic branch: git checkout -b my_fix
-
Make your changes
-
Push your branch: git push origin my_fix
-
Open an Issue referencing your branch.
-
Please do not push to master on your fork!
-
-
-
-
Following this procedure will make everyone’s life easier.
-
-
As with all good libraries, testing is vital. Facets handles testing via two different
-libraries. Lemon is used for unit testing and QED is used for behavior specifications.
-Lemon was actaully designed specifially for Ruby Facets which forces tests to be on
-a per-method basis. QED is a tool for literate BDD. In fact Facets inline
-docuemtation is fully executable via QED.
-
-
Contact
-
-
If you have any questions, suggestions or contributions you'd like to make privately,
-you can contact Trans <transfire AT gmail DOT com>.
-
-
-
-
-
-
-
-
-
-
-
-
- Copyright (c) 2005-2008 Thomas Sawyer & Contributors
-
- Ruby Facets was created by Thomas Sawyer (7rans), either written by hand or collected from a variety of Ruby resources.
- The system continues to be extended and improved by a diverse cast of open-source contributors.
-
- Facets is released under the terms of the Ruby license, just like Ruby.
- The Ruby license is a dual GPLv2 license.
-
- "Facets", "Ruby Facets" and "All Base Common" are trademarks of Thomas Sawyer. All rights reserved.
-
-
-
- THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
- IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
- WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE.
-