h2. Gorillib: infochimps' lightweight subset of ruby convenience methods
We love the conveniences provided by active_support and extlib, we just don't love them at the same time and on top of each other. active_support is slow to load, has many dependencies, and is all intertwingled. We had too many collisions between active_support 2.x and 3.x and extlib.
What gorillib gives you is clarity over what features are brought in. If you want to *just* get Object#blank?
, just require 'gorillib/object/blank'
. No dependencies, no codependents.
* No creep: include only what you need
* No dependencies unless audaciously advertised.
* Upwards compatible with active_record and extlib
- the active_support components have significantly more robust internationalization, and some functions have rich option sets in active_support vs. basic functionality in gorillib. So the rule is if you were happy with gorillib you'll be happy with active_support, but not vice-versa.
h3. require 'gorillib/receiver'
Gorillib has at least one powerful addition to the canon: the receiver mixin.
* lightweight
* gives you weak type safety but doesn't jack around with setters/getters.
* object/hash semantics
h3. require 'gorillib'
* require 'gorrillib/base'
h3. require 'gorillib/base'
requires the following libraries:
* gorillib/object/blank
* gorillib/hash/reverse_merge
* gorillib/hash/compact
* gorillib/array/compact_blank
* gorillib/object/try
h3. require 'gorillib/some'
requires @gorillib/base@ and the following additional libraries:
* gorillib/logger/log.rb
* set
* time
* date
* gorillib/array/extract_options
* gorillib/enumerable/sum
* gorillib/datetime/flat
* gorillib/datetime/parse
* gorillib/hash/zip
* gorillib/hash/slice
* gorillib/hash/keys
* gorillib/metaprogramming/class_attribute
* gorillib/metaprogramming/cattr_accessor
* gorillib/metaprogramming/singleton_class
* gorillib/metaprogramming/remove_method
---------------------------------------------------------------------------
h3. gorillib/array
* *gorrillib/array/extract_options*
- Array extract_options!
- Hash extractable_options? (helper method)
* *gorrillib/array/compact_blank*
- Array compact_blank, compact_blank!
* *gorrillib/array/deep_compact*
- Array deep_compact, deep_compact!
h3. gorillib/datetime
* *gorillib/datetime/flat*
- Date, Time to_flat
* *gorillib/datetime/parse*
- Time parse_safely
h3. gorillib/enumerable
* *gorillib/enumerable/sum*
- Enumerable sum
h3. gorillib/hash
* *gorillib/hash/compact*
- Hash compact, compact!, compact_blank, compact_blank!
* *gorrilib/hash/deep_compact*
- Hash deep_compact, deep_compact!
* *gorrilib/hash/deep_merge*
- Hash deep_merge, deep_merge!
* *gorillib/hash/keys*
- Hash stringify_keys, stringify_keys!, symbolize_keys, symbolize_keys!
- Hash assert_valid_keys
* *gorillib/hash/reverse_merge*
- Hash reverse_merge, reverse_merge!
* *gorillib/hash/slice*
- Hash slice, slice!, extract!
* *gorillib/hash/zip*
- Hash Hash.zip
h3. gorillib/logger
* *gorillib/logger/log*
- Unless the top-level constant ::Log has been defined, opens a new Logger to STDERR and assigns it to ::Log
h3. gorillib/metaprogramming
* *gorillib/metaprogramming/aliasing*
- alias_method_chain
* *gorillib/metaprogramming/class_attribute*
- Class class_attribute
* *gorillib/metaprogramming/remove_method* _required with class_attribute_
- Module remove_possible_method, redefine_method
* *gorillib/metaprogramming/singleton_class* _required with class_attribute_
- Kernel singleton_class
* *gorillib/metaprogramming/cattr_accessor*
- Class# cattr_reader, cattr_writer, cattr_accessor
* *gorillib/metaprogramming/mattr_accessor*
- Class# mattr_reader, mattr_writer, mattr_accessor
* *gorillib/metaprogramming/delegation*
- Module# delegate
h3. gorillib/numeric
* *gorillib/numeric/clamp*
- Numeric clamp -- coerce a number to lie within a certain min/max
h3. gorillib/object
* *gorillib/object/blank*
- Object blank?, present? (and specialized for all other classes)
* *gorillib/object/try*
- Object try
* *gorillib/object/try_dup*
- Object try_dup
h3. gorillib/string
* *gorillib/string/constantize*
- String constantize
* *gorillib/string/inflections*:
- String camelize
- String snakeize
- String underscore
- String demodulize
* *gorillib/string/human*
- String titleize
- String humainze
- Array as_sentence
* *gorillib/string/truncate*
- String truncate
---------------------------------------------------------------------------
h2. Maybe and No
h4. Maybe
* *Mash*
* *Receiver*
* *Struct*
* *gorillib/string/escaping*: _DEPENDENCIES_: htmlentities, addressable/uri
- String xml_escape
- String url_escape
- String escape_regexp, unescape_regexp
* *extlib/module/find_const*
- Module find_const
h4. No
* String classify -- this singularizes. You want camelize unless you're in ActiveSupport
* Object tap isn't necessary -- included in 1.8.7+
* Symbol to_proc isn't necessary -- included in 1.8.7+
* Class class_inheritable_attribute -- use class_attribute instead
* Object to_flat on anything but Time and Date -- poorly-defined
* Object returning -- deprecated in favor of #tap
---------------------------------------------------------------------------
h2. Credits & Copyright
Most of this code is ripped from active_support and extlib -- their license
carries over. Everything else is Copyright (c) 2011 Infochimps. See LICENSE.txt
for further details.