Skip to content

Latest commit

 

History

History
150 lines (118 loc) · 7.63 KB

CHANGELOG.rdoc

File metadata and controls

150 lines (118 loc) · 7.63 KB

0.5.3

*Fixed a bug with date ranges in support.rb

0.5.2

*Fixed a bug with the naming of expansion variables when expanding embedded collections or hashes
*Refactored the cube processing logic a little to make processing an aggregation somewhat safe even
 while the aggregation is being queried, by not dropping cached aggregated data but simply overwriting it
 when map reduce is complete.

0.5.1

*Minor adjustment to prevent Cubicle from vomiting blood and pieces of chewed up cats when filtering a query
using MongoDB's new $or operator.

0.5.0

*Added the ability to define aggregations that expand embedded collections, such as hashes or arrays, using the
'expand' expression in the aggregation DSL. Bumping version to 0.5.0 (yes, quite a leap) because this was the last
missing piece of functionality before I feel the library is more or less functional for most uses. There is still
one more major aspect of Cubicle that needs some work, and that is how dates are handled. Once that is finished,
I think it will be ready for 1.0 as it is already in production use in two of our systems and being integrated
without troubles into a third.

0.1.31

*Added ability to filter aggregations from within the cubicle definition. Particularly useful in STI situations
 to prepare a cubicle for a particular value of _type.

0.1.30

*Added duration in weeks.

0.1.29

*Enabled custom configuring cubicle's mongo connection even if MongoMapper is present, to allow running map reduce jobs
on a slave while MongoMapper operates on the master.

0.1.28

*Updated to latest versions of MongoMapper, Mongo & BSON

0.1.26,0.1.27

*Included mustache dependency in gem (whoops) and fixed a bug where an error in cube processing would replace
 useful error information with nonsensical error information.

0.1.25

*Modified data extraction to ensure that member and query level aliases are respected in the final result. Also
stopped automatically dropping temporary map reduce tables during query execution for performance reasons. Instead,
added a static method to the Cubicle module, clear_temp_tables, which can be called at application startup or teardown:
Cubicle.clear_temp_tables()

0.1.24

*Added more detail to the profile for the 'find' action

0.1.23

*Fixed profiler's capped collection sizing bug (off by x1000)

0.1.22

*Added profiler, which is off by default, that will profile every operation performed by the aggregation engine
in a collection called cubicle.profiler. It uses a capped collection size at, by default, 250mb, but this can
be configured. Also added basic metadata table for overall aggregation definitions that will record the last processing
time, along with the duration of the processing job, in the collection cubicle.metadata

0.1.21

*Added metadata tables in the database for cubicle to manage aggregation info. This was necessary because previously
I was trying to overload the collection name with metadata, which was making the names longer than MongoDb could support
and causing errors. This change will enable richer monitoring and profiling and optimization in the near future.

0.1.20

*Updated to work with mongo driver 1.0 (and therefore latest versions of MongoMapper)

0.1.19

*Fixed bug that caused cubicle to hang when grouping by days

0.1.18

*Bug fixes

0.1.16

*Added a set of default constants for expression templates, such as date_today, date_today_iso, date_today_utc_iso, etc.
Also added the 'define' method to the query DSL (instead of simply the aggregation DSL) so that you can either define new
named expressions or override an existing named expression or date constant in a query context, instead of only at the
global level

0.1.15

*Added 'difference' calculated measure to aggregation DSL, used in the same was as 'ratio' - so, in your aggregation
definition, you can do 'difference :big_diff, :measure_one, :measure_two'
and the value of :big_diff will be measure_one - measure_two. Also monkey patched Mustache (per suggestion in the
mailing list) to turn of HTML escaping, so that the triple-curly syntax should not be required when using operators
in templated expressions.

0.1.14

*Incorporated the Mustache templating library into aggregation definitions allowing expression to reference previously
 defined dimensions, measures, or named expressions (using the syntax: define :expression_name, 'this.my_expression != "that"')
 Allows for definitions such as this:  avg :average_happy_defects, :expression=>'{{defects}} && this.type=="Happy"'
 Also available is 'time_now' to represent the Ruby's Time.now in the form of a javascript date, so '{{time_now}}' will
 become 'new Date(2342342)' where 2342342 is Time.now.to_i

0.1.13

*Previous feature broke ratios. Fixed now.

0.1.12

*Added distinct' option to 'count' measure, to allow measures which represent distinct counts of  given field/expression value.
ONLY works when the value being distinctly counted is a string.

0.1.11

*Fixed a bug when filtering categorized dimensions in transient queries

0.1.10

*enhanced cubicle aggregation manager to transparently convert several of the basic mongo operators (such as $ne,
$gt, $gte, etc) into javascript for use in the generated $where clause for transient queries. In practice, this
means that you can define a measure as an expression, say dimension :month, :expression=>"'2010-01'", and then
use that dimension name in a standard mongo driver compatible filter expression, without concern for whether
your query is a transient query or a regular query - cubicle will do the appropriate conversion to javascript
in the former case, translating :month=>{"$gte"=>"'2009-12'", "$lt"=>"'2010-02'"} into the functional equivalent of
"$where"=>"'2010-01' >= '2009-12' && '2010-01' < '2010-02'". Actually, an inline function is used to reduce IO
as repeating the expression for each comparison can get out of hand if your expression is large.

0.1.9

* Fixed problems with missing number in bucket intervals. Moved resolution of source measure javascript to
* last moment, to ensure dynamic values don't get accidentally cached too early.

0.1.8

* Added 'bucketize' aliased as 'categorize' to cubicle DSL to allow dimensions to be created from bucketizing
  (categorizing based on name) a measure value.

0.1.7

* Minor bug fixes

0.1.6

*Added generic 'condition' argument to member definitions, which allows the specification of a JavaScript expression
 which will determine if the measure (or dimension) expression will be evaluated. This capability was available
 before via the :expression option, but using a :condition modifier allows for more straightforward (readable) measure
 definitions and separates the definition of the actual value from the conditions under which the value is valid.

0.1.5

* Added duration_since (aliased as elapsed, age_since) to calculate the time elapsed since any
  given timestamp and the current execution time of the query.

0.1.4

* Cached aggregations were being stored on disk, but not properly utilized. This is now fixed.

0.1.3

  • Formalized flat (Cubicle::Data::Table) and hierarchical (Cubicle::Data::Hierarchy) data results from cubicle queries, and added client side support for rolling up measure values in hierarchical data so that no matter how a given query is organized hierarchically, a summary of aggregated measure values for each level of data will be available.

  • Re-organized codebase

  • Bug fixes

0.1.2

  • Added ability to calculate durations between two timestamps

  • Bug fixes

0.1.1

  • Fixed a bug that required a logger to be initialized for the thing to work

0.1.0

  • Initial release