rails_local_analytics 0.2.1 → 0.2.2

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fbb7ca6534efc3666a302a04271092906ec9b2fc65a316d82b7811e2dd962668
4
- data.tar.gz: 2cc17d06cf61d6b4b7fd2c559079965fa6c250b12d901b05a3317389e2d5b69d
3
+ metadata.gz: 6c1dffba4cbead6faa6192e3c1df830aa749f6f653bdc8f0eef6e9dbd3a2650b
4
+ data.tar.gz: b0b6a574e09786c7888c4e6194fff36616f9d0634d99773955e762417ee3c828
5
5
  SHA512:
6
- metadata.gz: 8d9e8dea022bb79486a8bc6395106841a4f9d056accf68f3534072bac1e205f40df426664ed071abd54715d38b0a00ef879aaa080b4a0a51f6ba3e31b207101e
7
- data.tar.gz: e249aa1fb3f83ccaf75ffdb774192de6549889b8fb38b3537f5a99cc5edc6aab7da7d1b01caccb6012ffa4c4695739f2a15107ecbc49804db9e3e61c856ea13f
6
+ metadata.gz: 021fcb8b029ce1d842415eb5a4a3ed39a433726851988891455f2aa1ec510a1f56acc9563bad3003b799624384a8ff74ef40183e0a81746df82bb1d3b68d2e24
7
+ data.tar.gz: 6c9d8b537f1de5f9b28b1b6e6baac6135a389a1ba65bb5dbc19a4ebdd7b73e1efaf855e6daaaa81b8b06b0a2d1913e0d0cdc97fd31635c794d545238751820c6
@@ -3,6 +3,7 @@ module RailsLocalAnalytics
3
3
  PER_PAGE_LIMIT = 1000
4
4
 
5
5
  helper_method :pagination_page_number
6
+ helper_method :display_columns
6
7
 
7
8
  def index
8
9
  params[:type] ||= "page"
@@ -17,17 +18,13 @@ module RailsLocalAnalytics
17
18
  return
18
19
  end
19
20
 
20
- if params[:group_by].present? && !@klass.display_columns.include?(params[:group_by])
21
- raise ArgumentError
22
- end
23
-
24
21
  if params[:start_date].present?
25
22
  @start_date = Date.parse(params[:start_date])
26
23
  else
27
24
  @start_date = Date.today
28
25
  end
29
26
 
30
- if params[:end_date]
27
+ if params[:end_date].present?
31
28
  @end_date = Date.parse(params[:end_date])
32
29
  else
33
30
  @end_date = Date.today
@@ -63,20 +60,18 @@ module RailsLocalAnalytics
63
60
 
64
61
  prev_start_date, prev_end_date = get_prev_dates(start_date, end_date)
65
62
 
66
- where_conditions = params.require(:conditions).permit(*@klass.display_columns)
63
+ difference_where_conditions = params.require(:conditions).permit(*display_columns)
67
64
 
68
65
  current_total = fetch_records(
69
66
  start_date,
70
67
  end_date,
71
- where_conditions: where_conditions,
72
- pluck_columns: ["SUM(total)"],
68
+ difference_where_conditions: difference_where_conditions,
73
69
  ).first
74
70
 
75
71
  prev_total = fetch_records(
76
72
  prev_start_date,
77
73
  prev_end_date,
78
- where_conditions: where_conditions,
79
- pluck_columns: ["SUM(total)"],
74
+ difference_where_conditions: difference_where_conditions,
80
75
  ).first
81
76
 
82
77
  if prev_total
@@ -90,13 +85,17 @@ module RailsLocalAnalytics
90
85
 
91
86
  private
92
87
 
93
- def fetch_records(start_date, end_date, where_conditions: nil, pluck_columns: nil)
88
+ def fetch_records(start_date, end_date, difference_where_conditions: nil)
89
+ aggregate_sql_field = "SUM(total)"
90
+
94
91
  tracked_requests = @klass
95
92
  .where("day >= ?", start_date)
96
93
  .where("day <= ?", end_date)
97
- .order(total: :desc)
94
+ .order("#{aggregate_sql_field} DESC")
98
95
 
99
- if where_conditions.nil? && pluck_columns.nil?
96
+ if difference_where_conditions
97
+ tracked_requests = tracked_requests.where(difference_where_conditions)
98
+ else
100
99
  tracked_requests = tracked_requests
101
100
  .limit(PER_PAGE_LIMIT)
102
101
  .offset(PER_PAGE_LIMIT * (pagination_page_number-1))
@@ -104,7 +103,7 @@ module RailsLocalAnalytics
104
103
  if params[:filter].present?
105
104
  col, val = params[:filter].split("==")
106
105
 
107
- if @klass.display_columns.include?(col)
106
+ if display_columns.include?(col)
108
107
  tracked_requests = tracked_requests.where(col => val)
109
108
  else
110
109
  raise ArgumentError
@@ -112,24 +111,43 @@ module RailsLocalAnalytics
112
111
  end
113
112
  end
114
113
 
115
- if where_conditions
116
- tracked_requests = tracked_requests.where(where_conditions)
117
- end
118
-
119
114
  if params[:search].present?
120
115
  tracked_requests = tracked_requests.multi_search(params[:search])
121
116
  end
122
117
 
123
- if params[:group_by].present?
124
- group_by_columns = [params[:group_by]]
125
- pluck_columns = [params[:group_by], "SUM(total)"]
118
+ if params[:group_by].blank?
119
+ pluck_columns = display_columns.dup
126
120
  else
127
- group_by_columns = @klass.display_columns
128
- pluck_columns ||= @klass.display_columns + ["SUM(total)"]
121
+ case params[:group_by]
122
+ when "url_hostname_and_path"
123
+ if display_columns.include?("url_hostname") && display_columns.include?("url_path")
124
+ pluck_columns = [:url_hostname, :url_path]
125
+ else
126
+ raise ArgumentError
127
+ end
128
+ when "referrer_hostname_and_path"
129
+ if display_columns.include?("referrer_hostname") && display_columns.include?("referrer_path")
130
+ pluck_columns = [:referrer_hostname, :referrer_path]
131
+ else
132
+ raise ArgumentError
133
+ end
134
+ when *display_columns
135
+ pluck_columns = [params[:group_by]]
136
+ else
137
+ raise ArgumentError
138
+ end
139
+ end
140
+
141
+ group_by = pluck_columns.dup
142
+
143
+ if difference_where_conditions
144
+ pluck_columns = [aggregate_sql_field]
145
+ else
146
+ pluck_columns << aggregate_sql_field
129
147
  end
130
148
 
131
149
  tracked_requests
132
- .group(*group_by_columns)
150
+ .group(*group_by)
133
151
  .pluck(*pluck_columns)
134
152
  end
135
153
 
@@ -151,5 +169,9 @@ module RailsLocalAnalytics
151
169
  return [prev_start_date, prev_end_date]
152
170
  end
153
171
 
172
+ def display_columns
173
+ @display_columns ||= @klass.display_columns
174
+ end
175
+
154
176
  end
155
177
  end
@@ -1,9 +1,41 @@
1
- <% data_columns = params[:group_by].present? ? [params[:group_by]] : @klass.display_columns %>
1
+ <%
2
+ data_columns = params[:group_by].present? ? [params[:group_by]] : display_columns
3
+
4
+ if data_columns.first == "url_hostname_and_path"
5
+ data_columns = ["URL Hostname", "URL Path"]
6
+ elsif data_columns.first == "referrer_hostname_and_path"
7
+ data_columns = ["Referrer Hostname", "Referrer Path"]
8
+ end
9
+ %>
10
+
11
+ <%
12
+ group_by_opts = [
13
+ ["All", nil],
14
+ ]
15
+
16
+ group_by_opts += display_columns.map{|x| [x.titleize.sub("Url ", "URL "), x] }
17
+
18
+ if display_columns.include?("url_hostname") && display_columns.include?("url_path")
19
+ index = group_by_opts.index(["URL Hostname", "url_hostname"])
20
+ group_by_opts.insert(
21
+ index,
22
+ ["URL Hostname and Path", "url_hostname_and_path"],
23
+ )
24
+ end
25
+
26
+ if display_columns.include?("referrer_hostname") && display_columns.include?("referrer_path")
27
+ index = group_by_opts.index(["Referrer Hostname", "referrer_hostname"])
28
+ group_by_opts.insert(
29
+ index,
30
+ ["Referrer Hostname and Path", "referrer_hostname_and_path"],
31
+ )
32
+ end
33
+ %>
2
34
 
3
35
  <div class="well well-sm">
4
36
  <%= form_tag url_for(params.except(:start_date, :to).to_unsafe_hash), method: "get", id: "search-form" do %>
5
37
  <div>
6
- <label style="margin-right: 10px;">Group By: <%= select_tag :group_by, options_for_select([["All", nil]] + @klass.display_columns.map{|x| [x.titleize.sub("Url ", "URL "), x]} , params[:group_by]) %></label>
38
+ <label style="margin-right: 10px;">Group By: <%= select_tag :group_by, options_for_select(group_by_opts, params[:group_by]) %></label>
7
39
 
8
40
  <label style="margin-right: 10px;">From: <%= date_field_tag :start_date, @start_date %></label>
9
41
  <label style="margin-right: 10px;">To: <%= date_field_tag :end_date, @end_date %></label>
@@ -1,3 +1,3 @@
1
1
  module RailsLocalAnalytics
2
- VERSION = "0.2.1".freeze
2
+ VERSION = "0.2.2".freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails_local_analytics
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Weston Ganger
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-12-05 00:00:00.000000000 Z
11
+ date: 2024-12-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec-html-matchers
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: database_cleaner
57
71
  requirement: !ruby/object:Gem::Requirement