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 +1 -1
- data/has-activity.gemspec +2 -2
- data/lib/has_activity/activitize_calculations.rb +14 -6
- metadata +13 -13
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
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.
|
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-
|
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
|
-
|
54
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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.
|
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-
|
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: &
|
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: *
|
24
|
+
version_requirements: *70095520508740
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rdoc
|
27
|
-
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: *
|
35
|
+
version_requirements: *70095520508060
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: bundler
|
38
|
-
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: *
|
46
|
+
version_requirements: *70095520507380
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: jeweler
|
49
|
-
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: *
|
57
|
+
version_requirements: *70095520506660
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: simplecov
|
60
|
-
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: *
|
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:
|
107
|
+
hash: 3293291275645446971
|
108
108
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
109
109
|
none: false
|
110
110
|
requirements:
|