Sha256: 05593b83c194da0e59745798dba99a74774c7fa760e266e86dac6c0685fea4e3

Contents?: true

Size: 1.25 KB

Versions: 7

Compression:

Stored size: 1.25 KB

Contents

module Cohortly
  class StoredProcedures
    PROCS = [:day_of_year,
             :week_of_year,
             :week_key]
    
    def self.eval_js(javascript)
      Cohortly::Metric.database.eval(javascript)
    end

    def self.day_of_year
      <<-JS
      function(date) {
        var ms = date - new Date('' + date.getUTCFullYear() + '/1/1 UTC');
        return parseInt(ms / 60000 / 60 / 24, 10) + 1;
      }
    JS
    end

    def self.week_of_year
      <<-JS
      function(date) {
         var doy = day_of_year(date);
         var dow = date.getUTCDay();
         dow = ((dow === 0) ? 7 : dow);
         var rdow = 7 - dow;
         var woy = parseInt((doy + rdow) / 7, 10);
         return woy;
      }
    JS
    end

    def self.week_key
      <<-JS
      function(date) {
        var year = date.getYear() + 1900;
        var week = week_of_year(date);
        if(week < 10) { week = '0' + week }
        return year + '-' + week;                
      }
    JS
    end

    def self.store_procedures()
      PROCS.each do |proc_name|
        Cohortly::Metric.database.add_stored_function(proc_name.to_s, self.send(proc_name))
      end
    end

    def self.execute(proc_name, *args)
      Cohortly::Metric.database.eval(self.send(proc_name), *args)
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
cohortly-0.0.93 app/models/cohortly/stored_procedures.rb
cohortly-0.0.92 app/models/cohortly/stored_procedures.rb
cohortly-0.0.9.1 app/models/cohortly/stored_procedures.rb
cohortly-0.0.9 app/models/cohortly/stored_procedures.rb
cohortly-0.0.8 app/models/cohortly/stored_procedures.rb
cohortly-0.0.7 app/models/cohortly/stored_procedures.rb
cohortly-0.0.6 app/models/cohortly/stored_procedures.rb