has-activity 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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: