has-activity 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.0
1
+ 0.3.0
data/has-activity.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "has-activity"
8
- s.version = "0.2.0"
8
+ s.version = "0.3.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Cary Dunn"]
12
- s.date = "2012-05-02"
12
+ s.date = "2012-05-08"
13
13
  s.description = "A simple way to grab recent activity on a given model grouped by hour, day, week or month (time series). Supports \"padding\" for intervals without activity."
14
14
  s.email = "cary.dunn@gmail.com"
15
15
  s.extra_rdoc_files = [
@@ -34,6 +34,9 @@ module HasActivity
34
34
  # default is "*". optionally put a custom aggregator ex "table.field".
35
35
  # * :count_distinct
36
36
  # default is false. optionally set to true for distinct counts on :count_on ex. "COUNT(DISTINCT table.field)".
37
+ # * :sum_on
38
+ # default is to :count_on. optionally put a custom aggregator ex "table.field" which will "SUM(table.field)"
39
+ # instead of COUNT.
37
40
  #
38
41
  def calculate_activity(between_start, between_end, options={})
39
42
  options[:padding] ||= true
@@ -41,6 +44,7 @@ module HasActivity
41
44
  options[:by] ||= :hour
42
45
  options[:on] ||= has_activity_options[:on]
43
46
  options[:count_on] ||= "*"
47
+ #options[:sum_on] ||= ""
44
48
  options[:count_distinct] = false unless options[:count_distinct]
45
49
 
46
50
  # TODO: check for index on :on column
@@ -50,8 +54,12 @@ module HasActivity
50
54
  raise "You cannot use custom #group filters with #activity_since" if self.group_values.present?
51
55
 
52
56
  activity_column = parse_activity_column(options[:on])
53
- count_column = parse_activity_column(options[:count_on])
54
- count_column = "DISTINCT(#{count_column})" if options[:count_distinct]
57
+ if options[:sum_on]
58
+ aggregate_column = "SUM(#{parse_activity_column(options[:sum_on])})"
59
+ else
60
+ aggregate_column = "COUNT(#{parse_activity_column(options[:count_on])})"
61
+ aggregate_column = "DISTINCT(#{aggregate_column})" if options[:count_distinct]
62
+ end
55
63
 
56
64
  activity_end_time = "'#{between_end.to_s(:db)}'"
57
65
 
@@ -59,7 +67,7 @@ module HasActivity
59
67
  when "hour"
60
68
  relation = self.select("
61
69
  #{activity_column} AS has_activity_timestamp,
62
- COUNT(#{count_column}) AS has_activity_count,
70
+ #{aggregate_column} AS has_activity_count,
63
71
  ((((YEAR(#{activity_end_time}) - YEAR(#{activity_column}))*365)+(DAYOFYEAR(#{activity_end_time})-DAYOFYEAR(#{activity_column})))*24)+(HOUR(#{activity_end_time})-HOUR(#{activity_column})) AS has_activity_hours_ago,
64
72
  CONCAT(YEAR(#{activity_column}), CONCAT(DAYOFYEAR(#{activity_column}), HOUR(#{activity_column}))) AS has_activity_uniqueness
65
73
  ")
@@ -68,7 +76,7 @@ module HasActivity
68
76
  when "day"
69
77
  relation = self.select("
70
78
  #{activity_column} AS has_activity_timestamp,
71
- COUNT(#{count_column}) AS has_activity_count,
79
+ #{aggregate_column} AS has_activity_count,
72
80
  DATEDIFF(#{activity_end_time}, #{activity_column}) AS has_activity_days_ago,
73
81
  CONCAT(YEAR(#{activity_column}), CONCAT(DAYOFYEAR(#{activity_column}))) AS has_activity_uniqueness
74
82
  ")
@@ -77,7 +85,7 @@ module HasActivity
77
85
  when "week"
78
86
  relation = self.select("
79
87
  #{activity_column} AS has_activity_timestamp,
80
- COUNT(#{count_column}) AS has_activity_count,
88
+ #{aggregate_column} AS has_activity_count,
81
89
  ((YEAR(#{activity_end_time}) - YEAR(#{activity_column}))*52)+(WEEK(#{activity_end_time})-WEEK(#{activity_column})) AS has_activity_weeks_ago,
82
90
  YEARWEEK(#{activity_column}) AS has_activity_uniqueness
83
91
  ")
@@ -86,7 +94,7 @@ module HasActivity
86
94
  when "month"
87
95
  relation = self.select("
88
96
  #{activity_column} AS has_activity_timestamp,
89
- COUNT(#{count_column}) AS has_activity_count,
97
+ #{aggregate_column} AS has_activity_count,
90
98
  ((YEAR(#{activity_end_time}) - YEAR(#{activity_column}))*12)+(MONTH(#{activity_end_time})-MONTH(#{activity_column})) AS has_activity_months_ago,
91
99
  CONCAT(YEAR(#{activity_column}), CONCAT(MONTH(#{activity_column}))) AS has_activity_uniqueness
92
100
  ")
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: has-activity
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-05-02 00:00:00.000000000 Z
12
+ date: 2012-05-08 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: shoulda
16
- requirement: &70254072540360 !ruby/object:Gem::Requirement
16
+ requirement: &70095520508740 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70254072540360
24
+ version_requirements: *70095520508740
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rdoc
27
- requirement: &70254072539680 !ruby/object:Gem::Requirement
27
+ requirement: &70095520508060 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '3.12'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70254072539680
35
+ version_requirements: *70095520508060
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: bundler
38
- requirement: &70254072539000 !ruby/object:Gem::Requirement
38
+ requirement: &70095520507380 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 1.0.0
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *70254072539000
46
+ version_requirements: *70095520507380
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: jeweler
49
- requirement: &70254069044600 !ruby/object:Gem::Requirement
49
+ requirement: &70095520506660 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: 1.8.3
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *70254069044600
57
+ version_requirements: *70095520506660
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: simplecov
60
- requirement: &70254069043860 !ruby/object:Gem::Requirement
60
+ requirement: &70095520528660 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,7 +65,7 @@ dependencies:
65
65
  version: '0'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *70254069043860
68
+ version_requirements: *70095520528660
69
69
  description: A simple way to grab recent activity on a given model grouped by hour,
70
70
  day, week or month (time series). Supports "padding" for intervals without activity.
71
71
  email: cary.dunn@gmail.com
@@ -104,7 +104,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
104
104
  version: '0'
105
105
  segments:
106
106
  - 0
107
- hash: -4197150481822050296
107
+ hash: 3293291275645446971
108
108
  required_rubygems_version: !ruby/object:Gem::Requirement
109
109
  none: false
110
110
  requirements: