Sha256: 432ae145d42dac57c5c93a9c46b4d35b33d0513041856df3cc2857dbfde7dfbf

Contents?: true

Size: 1.79 KB

Versions: 6

Compression:

Stored size: 1.79 KB

Contents

# encoding: utf-8
module Mongoid  #:nodoc:
  module Tracking
    # This internal class handles all interaction of an aggregation token.
    class TrackerAggregates

      def initialize(owner, token, key_selector, track_field = nil)
        @owner, @token = owner, token
        @key = key_selector
        @track_field = track_field

        @accessor = @owner.class.send(:internal_accessor_name, @token)
        @selector = {:ns => @token}
        @selector.merge!(:key => @key.first) if @key.first
        @criteria = @owner.send(@accessor).where(@selector)
      end

      # REFACTOR THIS
      # WE ARE DOING SOMETHING LIKE:
      #
      # => browsers("something").visits
      #
      # WHILE A BEST APPROACH IS LIKE
      #
      # => visits.browsers("something")

      # visits (Tracker) -> browsers (TrackerAggregates) -> count (to Criteria)
      #                                                  -> today (data)

      # Delegate all missing methods to the underlying Mongoid Criteria
      def method_missing(name, *args, &block)
        @criteria.send(name)

        # Delegate all missing methods to the underlying Mongoid Criteria
        # return @criteria.send(name) unless @owner.tracked_fields.member?(name)
        # super
        
        # Otherwise, it's a track method, so process it
        # @criteria.collect {|x| x.send(name, *args, &block) }
      end

      def today
        @criteria.collect {|c|
          [c.key, c.send(@track_field).today] if @track_field
        }
      end

      def yesterday
        @criteria.collect {|c|
          [c.key, c.send(@track_field).yesterday] if @track_field
        }
      end

      def last_days(how_much = 7)
        @criteria.collect {|c|
          [c.key, c.send(@track_field).last_days(how_much)] if @track_field
        }
      end

    end

  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
trackoid-0.1.8 lib/trackoid/tracker_aggregates.rb
trackoid-0.1.7 lib/trackoid/tracker_aggregates.rb
trackoid-0.1.6 lib/trackoid/tracker_aggregates.rb
trackoid-0.1.5 lib/trackoid/tracker_aggregates.rb
trackoid-0.1.4 lib/trackoid/tracker_aggregates.rb
trackoid-0.1.3 lib/trackoid/tracker_aggregates.rb