kanaui 2.0.0 → 2.1.3
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 +5 -5
- data/Rakefile +4 -5
- data/app/assets/javascripts/kanaui/kiddo/kiddo_initialize.js +1 -1
- data/app/assets/javascripts/kanaui/reports.dataTables.js +1 -0
- data/app/assets/stylesheets/kanaui/reports.css +10 -1
- data/app/controllers/kanaui/dashboard_controller.rb +35 -12
- data/app/controllers/kanaui/engine_controller.rb +41 -6
- data/app/controllers/kanaui/reports_controller.rb +15 -12
- data/app/controllers/kanaui/settings_controller.rb +13 -0
- data/app/helpers/kanaui/application_helper.rb +2 -2
- data/app/helpers/kanaui/dashboard_helper.rb +7 -5
- data/app/views/kanaui/dashboard/index.html.erb +60 -32
- data/app/views/kanaui/reports/_form.html.erb +30 -16
- data/app/views/kanaui/reports/_reports_table.html.erb +22 -0
- data/app/views/kanaui/settings/index.html.erb +19 -0
- data/config/routes.rb +11 -8
- data/lib/kanaui/engine.rb +2 -0
- data/lib/kanaui/version.rb +3 -1
- data/lib/kanaui.rb +11 -10
- data/lib/tasks/kanaui_tasks.rake +1 -0
- data/test/dummy/app/assets/config/manifest.js +1 -0
- data/test/functional/kanaui/tests_controller_test.rb +2 -0
- data/test/integration/navigation_test.rb +2 -2
- data/test/kanaui_test.rb +3 -1
- data/test/test_helper.rb +7 -7
- data/test/unit/helpers/kanaui/tests_helper_test.rb +2 -0
- metadata +114 -69
- data/test/dummy/log/test.log +0 -22
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
2
|
+
SHA1:
|
|
3
|
+
metadata.gz: 81ba5da8713d526c0734addf4908b1d3fe6f664a
|
|
4
|
+
data.tar.gz: 43ebe1b8f84b750674beb6965132121639ece876
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 160fb9a081490a18d9041384916c64aa13102db326baf4a95aa9b46cae71ce3bdea648fa5a111c7b21b4917f45a20c919f558ddc5e12c2ac1e9d86a03e7d389d
|
|
7
|
+
data.tar.gz: 9680d4d33d605e6572249a38fb9dbebc0bb68a4e4c90818087577acbafaf80d2ed3f253009ce724c3d32b5e5209c683d65e41fb735acc04012ced2d25c9e3b31
|
data/Rakefile
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env rake
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
2
4
|
begin
|
|
3
5
|
require 'bundler/setup'
|
|
4
6
|
rescue LoadError
|
|
@@ -20,11 +22,9 @@ RDoc::Task.new(:rdoc) do |rdoc|
|
|
|
20
22
|
rdoc.rdoc_files.include('lib/**/*.rb')
|
|
21
23
|
end
|
|
22
24
|
|
|
23
|
-
APP_RAKEFILE = File.expand_path(
|
|
25
|
+
APP_RAKEFILE = File.expand_path('test/dummy/Rakefile', __dir__)
|
|
24
26
|
load 'rails/tasks/engine.rake'
|
|
25
27
|
|
|
26
|
-
|
|
27
|
-
|
|
28
28
|
Bundler::GemHelper.install_tasks
|
|
29
29
|
|
|
30
30
|
require 'rake/testtask'
|
|
@@ -36,5 +36,4 @@ Rake::TestTask.new(:test) do |t|
|
|
|
36
36
|
t.verbose = false
|
|
37
37
|
end
|
|
38
38
|
|
|
39
|
-
|
|
40
|
-
task :default => :test
|
|
39
|
+
task default: :test
|
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
#reports-table th, #reports-table td,
|
|
2
|
+
#dataTable-api_wrapper th, #dataTable-api_wrapper td {
|
|
3
|
+
white-space: nowrap;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
.sql-query {
|
|
7
|
+
word-break: break-word;
|
|
8
|
+
}
|
|
1
9
|
|
|
2
10
|
.axis path,
|
|
3
11
|
.axis line {
|
|
@@ -138,6 +146,7 @@ button.ColVis_Button:hover, ul.ColVis_collection li:hover {
|
|
|
138
146
|
-ms-flex: .5 1 70%;
|
|
139
147
|
-webkit-flex: .5 1 70%;
|
|
140
148
|
flex: .5 1 70%;
|
|
149
|
+
overflow: scroll;
|
|
141
150
|
}
|
|
142
151
|
|
|
143
152
|
#date-picker .form-group {
|
|
@@ -146,4 +155,4 @@ button.ColVis_Button:hover, ul.ColVis_collection li:hover {
|
|
|
146
155
|
|
|
147
156
|
#table-tools {
|
|
148
157
|
padding-bottom: 10px;
|
|
149
|
-
}
|
|
158
|
+
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Kanaui
|
|
2
4
|
class DashboardController < Kanaui::EngineController
|
|
3
|
-
|
|
4
5
|
#
|
|
5
6
|
# Load the dashboard by rendering the view and executing the javascript that will call
|
|
6
7
|
# the reports and available_reports endpoints below.
|
|
@@ -25,14 +26,14 @@ module Kanaui
|
|
|
25
26
|
|
|
26
27
|
# Redirect also in case the dates have been updated to avoid any confusion in the view
|
|
27
28
|
if query.present? || params[:start_date].blank? || params[:end_date].blank?
|
|
28
|
-
# TODO Make metrics configurable
|
|
29
|
+
# TODO: Make metrics configurable
|
|
29
30
|
name = query.present? ? "#{params[:name]}#{query}^metric:count" : params[:name]
|
|
30
|
-
query_params = {:
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
31
|
+
query_params = { start_date: @start_date,
|
|
32
|
+
end_date: @end_date,
|
|
33
|
+
name: name,
|
|
34
|
+
smooth: params[:smooth],
|
|
35
|
+
sql_only: params[:sql_only],
|
|
36
|
+
format: params[:format] }
|
|
36
37
|
|
|
37
38
|
# Test only
|
|
38
39
|
query_params[:fake] = params[:fake] unless params[:fake].blank?
|
|
@@ -47,7 +48,7 @@ module Kanaui
|
|
|
47
48
|
# Not used anymore as reports are pulled from index
|
|
48
49
|
def available_reports
|
|
49
50
|
available_reports = Kanaui::DashboardHelper::DashboardApi.available_reports(options_for_klient)
|
|
50
|
-
render :
|
|
51
|
+
render json: available_reports
|
|
51
52
|
end
|
|
52
53
|
|
|
53
54
|
def reports
|
|
@@ -66,7 +67,18 @@ module Kanaui
|
|
|
66
67
|
else
|
|
67
68
|
reports = raw_reports
|
|
68
69
|
end
|
|
69
|
-
|
|
70
|
+
respond_to do |fmt|
|
|
71
|
+
fmt.csv do
|
|
72
|
+
filename = params[:name]
|
|
73
|
+
unless params[:start_date].blank?
|
|
74
|
+
filename += "_#{params[:start_date]}"
|
|
75
|
+
filename += "-#{params[:end_date]}" unless params[:end_date].blank?
|
|
76
|
+
end
|
|
77
|
+
filename += '.csv'
|
|
78
|
+
send_data(raw_reports, filename: filename)
|
|
79
|
+
end
|
|
80
|
+
fmt.all { render json: reports }
|
|
81
|
+
end
|
|
70
82
|
end
|
|
71
83
|
|
|
72
84
|
private
|
|
@@ -103,7 +115,7 @@ module Kanaui
|
|
|
103
115
|
end
|
|
104
116
|
|
|
105
117
|
def build_slice_and_dice_query
|
|
106
|
-
query = ''
|
|
118
|
+
query = +''
|
|
107
119
|
|
|
108
120
|
filters = {}
|
|
109
121
|
groups = {}
|
|
@@ -117,6 +129,7 @@ module Kanaui
|
|
|
117
129
|
filter_query = ''
|
|
118
130
|
filters.each do |k, v|
|
|
119
131
|
next if v.blank?
|
|
132
|
+
|
|
120
133
|
filter_query << '%26' unless filter_query.blank?
|
|
121
134
|
filter_query << "(#{k}=#{v.join("|#{k}=")})"
|
|
122
135
|
end
|
|
@@ -124,10 +137,20 @@ module Kanaui
|
|
|
124
137
|
|
|
125
138
|
groups.each do |k, v|
|
|
126
139
|
next if v.blank?
|
|
127
|
-
|
|
140
|
+
|
|
141
|
+
# TODO: Make "no other" configurable
|
|
128
142
|
query << "^dimension:#{k}(#{v.join('|')}|-)"
|
|
129
143
|
end
|
|
130
144
|
|
|
145
|
+
# Template variables
|
|
146
|
+
params.each do |k, v|
|
|
147
|
+
next unless k.starts_with?('variable_')
|
|
148
|
+
next if v.blank?
|
|
149
|
+
|
|
150
|
+
variable_name = k.split('_')[1..-1].join('_')
|
|
151
|
+
query << "^variable:#{variable_name}=#{v}"
|
|
152
|
+
end
|
|
153
|
+
|
|
131
154
|
query
|
|
132
155
|
end
|
|
133
156
|
end
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Kanaui
|
|
2
4
|
class EngineController < ApplicationController
|
|
3
|
-
|
|
4
5
|
layout :get_layout
|
|
5
6
|
|
|
6
7
|
def get_layout
|
|
@@ -17,12 +18,46 @@ module Kanaui
|
|
|
17
18
|
def options_for_klient
|
|
18
19
|
user = current_tenant_user
|
|
19
20
|
{
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
21
|
+
username: user[:username],
|
|
22
|
+
password: user[:password],
|
|
23
|
+
session_id: user[:session_id],
|
|
24
|
+
api_key: user[:api_key],
|
|
25
|
+
api_secret: user[:api_secret]
|
|
25
26
|
}
|
|
26
27
|
end
|
|
28
|
+
|
|
29
|
+
rescue_from(KillBillClient::API::ResponseError) do |killbill_exception|
|
|
30
|
+
flash[:error] = "Error while communicating with the Kill Bill server: #{as_string(killbill_exception)}"
|
|
31
|
+
redirect_to dashboard_index_path
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def as_string(e)
|
|
35
|
+
if e.is_a?(KillBillClient::API::ResponseError)
|
|
36
|
+
"Error #{e.response.code}: #{as_string_from_response(e.response.body)}"
|
|
37
|
+
else
|
|
38
|
+
log_rescue_error(e)
|
|
39
|
+
e.message
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def log_rescue_error(error)
|
|
44
|
+
Rails.logger.warn "#{error.class} #{error}. #{error.backtrace.join("\n")}"
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def as_string_from_response(response)
|
|
48
|
+
error_message = response
|
|
49
|
+
begin
|
|
50
|
+
# BillingExceptionJson?
|
|
51
|
+
error_message = JSON.parse response
|
|
52
|
+
rescue StandardError => _e
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
if error_message.respond_to?(:[]) && error_message['message'].present?
|
|
56
|
+
# Likely BillingExceptionJson
|
|
57
|
+
error_message = error_message['message']
|
|
58
|
+
end
|
|
59
|
+
# Limit the error size to avoid ActionDispatch::Cookies::CookieOverflow
|
|
60
|
+
error_message[0..1000]
|
|
61
|
+
end
|
|
27
62
|
end
|
|
28
63
|
end
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Kanaui
|
|
2
4
|
class ReportsController < Kanaui::EngineController
|
|
3
|
-
|
|
4
5
|
def index
|
|
5
6
|
@reports = JSON.parse(Kanaui::DashboardHelper::DashboardApi.available_reports(options_for_klient)).map(&:deep_symbolize_keys)
|
|
6
7
|
end
|
|
@@ -13,7 +14,7 @@ module Kanaui
|
|
|
13
14
|
Kanaui::DashboardHelper::DashboardApi.create_report(report_from_params.to_json, options_for_klient)
|
|
14
15
|
|
|
15
16
|
flash[:notice] = 'Report successfully created'
|
|
16
|
-
redirect_to :
|
|
17
|
+
redirect_to action: :index
|
|
17
18
|
end
|
|
18
19
|
|
|
19
20
|
def edit
|
|
@@ -26,34 +27,36 @@ module Kanaui
|
|
|
26
27
|
Kanaui::DashboardHelper::DashboardApi.update_report(params.require(:id), report_from_params.to_json, options_for_klient)
|
|
27
28
|
|
|
28
29
|
flash[:notice] = 'Report successfully updated'
|
|
29
|
-
redirect_to :
|
|
30
|
+
redirect_to action: :index
|
|
30
31
|
end
|
|
31
32
|
|
|
32
33
|
def refresh
|
|
33
34
|
Kanaui::DashboardHelper::DashboardApi.refresh_report(params.require(:id), options_for_klient)
|
|
34
35
|
|
|
35
36
|
flash[:notice] = 'Report refresh successfully scheduled'
|
|
36
|
-
redirect_to :
|
|
37
|
+
redirect_to action: :index
|
|
37
38
|
end
|
|
38
39
|
|
|
39
40
|
def destroy
|
|
40
41
|
Kanaui::DashboardHelper::DashboardApi.delete_report(params.require(:id), options_for_klient)
|
|
41
42
|
|
|
42
43
|
flash[:notice] = 'Report successfully deleted'
|
|
43
|
-
redirect_to :
|
|
44
|
+
redirect_to action: :index
|
|
44
45
|
end
|
|
45
46
|
|
|
46
47
|
private
|
|
47
48
|
|
|
48
49
|
def report_from_params
|
|
49
50
|
{
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
51
|
+
reportName: params[:report_name],
|
|
52
|
+
reportPrettyName: params[:report_pretty_name],
|
|
53
|
+
reportType: params[:report_type],
|
|
54
|
+
sourceTableName: params[:source_table_name],
|
|
55
|
+
sourceName: params[:source_name],
|
|
56
|
+
sourceQuery: params[:source_query],
|
|
57
|
+
refreshProcedureName: params[:refresh_procedure_name],
|
|
58
|
+
refreshFrequency: params[:refresh_frequency].presence,
|
|
59
|
+
refreshHourOfDayGmt: params[:refresh_hour_of_day_gmt]
|
|
57
60
|
}
|
|
58
61
|
end
|
|
59
62
|
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Kanaui
|
|
4
|
+
class SettingsController < Kanaui::EngineController
|
|
5
|
+
def index; end
|
|
6
|
+
|
|
7
|
+
# update would have been nicer, but it's hard to pass the id in the url
|
|
8
|
+
def create
|
|
9
|
+
Kanaui::DashboardHelper::DashboardApi.refresh(params.require(:account_id), options_for_klient)
|
|
10
|
+
redirect_to({ action: :index }, notice: 'Account successfully refreshed')
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -1,11 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Kanaui
|
|
2
4
|
module DashboardHelper
|
|
3
|
-
|
|
4
5
|
class DashboardApi < KillBillClient::Model::Resource
|
|
5
|
-
|
|
6
|
-
KILLBILL_ANALYTICS_PREFIX = "/plugins/killbill-analytics"
|
|
6
|
+
KILLBILL_ANALYTICS_PREFIX = '/plugins/killbill-analytics'
|
|
7
7
|
|
|
8
8
|
class << self
|
|
9
|
+
def refresh(account_id, options = {})
|
|
10
|
+
path = "#{KILLBILL_ANALYTICS_PREFIX}/#{account_id}"
|
|
11
|
+
KillBillClient::API.put path, {}, {}, options
|
|
12
|
+
end
|
|
9
13
|
|
|
10
14
|
def available_reports(options = {})
|
|
11
15
|
path = "#{KILLBILL_ANALYTICS_PREFIX}/reports"
|
|
@@ -48,7 +52,5 @@ module Kanaui
|
|
|
48
52
|
end
|
|
49
53
|
end
|
|
50
54
|
end
|
|
51
|
-
|
|
52
55
|
end
|
|
53
56
|
end
|
|
54
|
-
|
|
@@ -2,33 +2,61 @@
|
|
|
2
2
|
<!-- MENU -->
|
|
3
3
|
<div class="reports-options flex-inner-left-panel">
|
|
4
4
|
<div class="row">
|
|
5
|
-
<% if params[:name]
|
|
6
|
-
<div
|
|
7
|
-
<
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
<input name="smooth" type="hidden" value="<%= params[:smooth] %>">
|
|
11
|
-
<input name="sql_only" type="hidden" value="<%= params[:sql_only] %>">
|
|
12
|
-
<input name="format" type="hidden" value="<%= params[:format] %>">
|
|
13
|
-
<input name="delta_days" type="hidden" value="<%= (@end_date.to_date - @start_date.to_date).to_i %>">
|
|
5
|
+
<% if params[:name] %>
|
|
6
|
+
<div class="info-wrapper">
|
|
7
|
+
<div class="tag-bar tag-bar-breathe">
|
|
8
|
+
<div class="tag-select" onclick="void(0);">
|
|
9
|
+
<span><i class="fa fa-calendar"></i><i class="fa fa-caret-down"></i></span>
|
|
14
10
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
11
|
+
<div class="tag-select-box">
|
|
12
|
+
<%= form_tag kanaui_engine.dashboard_index_path, :class => 'form-horizontal', :method => :get do %>
|
|
13
|
+
<input name="name" type="hidden" value="<%= @raw_name %>">
|
|
14
|
+
<input name="smooth" type="hidden" value="<%= params[:smooth] %>">
|
|
15
|
+
<input name="sql_only" type="hidden" value="<%= params[:sql_only] %>">
|
|
16
|
+
<input name="format" type="hidden" value="<%= params[:format] %>">
|
|
17
|
+
<input name="delta_days" type="hidden" value="<%= (@end_date.to_date - @start_date.to_date).to_i %>">
|
|
18
|
+
|
|
19
|
+
<div class="form-group">
|
|
20
|
+
<div class="col-md-7">
|
|
21
|
+
<% # TODO datepicker breaks :hover %>
|
|
22
|
+
From:<input class="form-control" name="start_date" type="text" data-provide="datepicker-BROKEN" data-date-format="yyyy-mm-dd" data-date-today-highlight="true" value="<%= @start_date %>">
|
|
23
|
+
</div>
|
|
24
|
+
</div>
|
|
25
|
+
<div class="form-group">
|
|
26
|
+
<div class="col-md-7">
|
|
27
|
+
<% # TODO datepicker breaks :hover %>
|
|
28
|
+
To:<input class="form-control" name="end_date" type="text" data-provide="datepicker-BROKEN" data-date-format="yyyy-mm-dd" data-date-today-highlight="true" value="<%= @end_date %>">
|
|
29
|
+
</div>
|
|
30
|
+
</div>
|
|
31
|
+
<% ((@report['variables'] || {})['fields'] || []).each do |definition| %>
|
|
32
|
+
<div class="form-group">
|
|
33
|
+
<div class="col-md-7">
|
|
34
|
+
<%= definition['name'].titleize %>:
|
|
35
|
+
<% # TODO Not fully implemented server side %>
|
|
36
|
+
<% if definition['dataType'] == 'date' %>
|
|
37
|
+
<% # TODO datepicker breaks :hover %>
|
|
38
|
+
<input class="form-control" name="variable_<%= definition['name'] %>" type="text" data-provide="datepicker-BROKEN" data-date-format="yyyy-mm-dd" data-date-today-highlight="true" value=""/>
|
|
39
|
+
<% else %>
|
|
40
|
+
<input class="form-control" name="variable_<%= definition['name'] %>" type="text" value=""/>
|
|
41
|
+
<% end %>
|
|
42
|
+
</div>
|
|
43
|
+
</div>
|
|
44
|
+
<% end %>
|
|
45
|
+
<div class="form-group">
|
|
46
|
+
<div class="col-sm-12">
|
|
47
|
+
<%= submit_tag 'Refresh', :class => 'btn btn-default' %>
|
|
48
|
+
</div>
|
|
49
|
+
</div>
|
|
50
|
+
<% end %>
|
|
51
|
+
</div><!-- /.tag-select-box -->
|
|
52
|
+
</div><!-- /.tag-select -->
|
|
53
|
+
</div><!-- /.tag-bar -->
|
|
54
|
+
</div><!-- /.info-wrapper -->
|
|
27
55
|
<% end %>
|
|
28
56
|
<div class="col-md-12 col-sm-8">
|
|
29
57
|
<h4><%= link_to 'Available Reports', kanaui_engine.url_for(:controller => :reports) %></h4>
|
|
30
58
|
<ul class="nav nav-tabs nav-stacked">
|
|
31
|
-
<% if Rails.env.development? %>
|
|
59
|
+
<% if Rails.env.development? && @reports.empty? %>
|
|
32
60
|
<li class="nav-element">
|
|
33
61
|
<%= link_to "Fake pie", kanaui_engine.dashboard_index_path(:fake => 1, :name => 'fake_pie', :type => 'pie') %>
|
|
34
62
|
</li>
|
|
@@ -45,6 +73,11 @@
|
|
|
45
73
|
</ul>
|
|
46
74
|
</div>
|
|
47
75
|
</div>
|
|
76
|
+
<div class="row">
|
|
77
|
+
<div class="col-md-12 col-sm-8">
|
|
78
|
+
<h5><%= link_to 'Settings', kanaui_engine.url_for(:controller => :settings) %></h5>
|
|
79
|
+
</div>
|
|
80
|
+
</div>
|
|
48
81
|
</div>
|
|
49
82
|
|
|
50
83
|
<!-- DASHBOARD -->
|
|
@@ -55,16 +88,6 @@
|
|
|
55
88
|
<h2 class="chart-title">
|
|
56
89
|
<%= @raw_name.titleize %>
|
|
57
90
|
</h2>
|
|
58
|
-
<% if @report['reportType'] == 'TABLE' %>
|
|
59
|
-
<input type="hidden" id="visible-table-columns" value="<%= @visible_columns %>">
|
|
60
|
-
|
|
61
|
-
<div id="table-tools" class="row">
|
|
62
|
-
<div class="col-sm-2">
|
|
63
|
-
<a class="btn btn-default" id="copy-url" data-reports-path="<%= kanaui_engine.dashboard_index_path(params.to_h) %>">Copy URL</a>
|
|
64
|
-
<input id="url-placeholder" class="form-control hidden">
|
|
65
|
-
</div>
|
|
66
|
-
</div>
|
|
67
|
-
<% end %>
|
|
68
91
|
<div id="loading-spinner"></div>
|
|
69
92
|
<div id="chartAnchor" data-reports-path="<%= kanaui_engine.reports_path(params.to_h) %>"></div>
|
|
70
93
|
<div id="date-controls" style="display: none;">
|
|
@@ -76,6 +99,11 @@
|
|
|
76
99
|
</div>
|
|
77
100
|
<hr>
|
|
78
101
|
<div class="pull-right">
|
|
102
|
+
<% if @report['reportType'] == 'TABLE' %>
|
|
103
|
+
<input type="hidden" id="visible-table-columns" value="<%= @visible_columns %>">
|
|
104
|
+
<a class="btn btn-default" id="copy-url" data-reports-path="<%= kanaui_engine.dashboard_index_path(params.to_h) %>">Copy URL</a>
|
|
105
|
+
<input id="url-placeholder" class="form-control hidden">
|
|
106
|
+
<% end %>
|
|
79
107
|
<%= link_to 'Download raw data', kanaui_engine.reports_path(params.to_h.merge(:format => 'csv')), class: 'btn btn-default' %>
|
|
80
108
|
</div>
|
|
81
109
|
<a class="btn btn-default" role="button" data-toggle="collapse" href="#advanced-controls" aria-expanded="false" aria-controls="advanced-controls">
|
|
@@ -1,48 +1,62 @@
|
|
|
1
1
|
<%= form_tag @report[:reportName].blank? ? url_for(:controller => :reports, :action => :create) : report_path(@report[:reportName]), :method => (@report[:reportName].blank? ? :post : :put), :class => 'form-horizontal' do %>
|
|
2
2
|
<div class="form-group">
|
|
3
|
-
<%= label_tag :report_name, 'Report name', :class => 'col-sm-
|
|
4
|
-
<div class="col-sm-
|
|
3
|
+
<%= label_tag :report_name, 'Report name', :class => 'col-sm-3 control-label' %>
|
|
4
|
+
<div class="col-sm-9">
|
|
5
5
|
<%= text_field_tag :report_name, @report[:reportName], :class => 'form-control', :disabled => !@report[:reportName].blank?, :read_only => !@report[:reportName].blank? %>
|
|
6
6
|
</div>
|
|
7
7
|
</div>
|
|
8
8
|
<div class="form-group">
|
|
9
|
-
<%= label_tag :report_pretty_name, 'Pretty name', :class => 'col-sm-
|
|
10
|
-
<div class="col-sm-
|
|
9
|
+
<%= label_tag :report_pretty_name, 'Pretty name', :class => 'col-sm-3 control-label' %>
|
|
10
|
+
<div class="col-sm-9">
|
|
11
11
|
<%= text_field_tag :report_pretty_name, @report[:reportPrettyName], :class => 'form-control' %>
|
|
12
12
|
</div>
|
|
13
13
|
</div>
|
|
14
14
|
<div class="form-group">
|
|
15
|
-
<%= label_tag :report_type, 'Type', :class => 'col-sm-
|
|
16
|
-
<div class="col-sm-
|
|
15
|
+
<%= label_tag :report_type, 'Type', :class => 'col-sm-3 control-label' %>
|
|
16
|
+
<div class="col-sm-9">
|
|
17
17
|
<%= select_tag :report_type, options_for_select(%w(TIMELINE COUNTERS TABLE), @report[:reportType] || 'TABLE'), :class => 'form-control' %>
|
|
18
18
|
</div>
|
|
19
19
|
</div>
|
|
20
20
|
<div class="form-group">
|
|
21
|
-
<%= label_tag :source_table_name, 'Source', :class => 'col-sm-
|
|
22
|
-
<div class="col-sm-
|
|
21
|
+
<%= label_tag :source_table_name, 'Source', :class => 'col-sm-3 control-label' %>
|
|
22
|
+
<div class="col-sm-9">
|
|
23
23
|
<%= text_field_tag :source_table_name, @report[:sourceTableName], :class => 'form-control' %>
|
|
24
24
|
</div>
|
|
25
25
|
</div>
|
|
26
26
|
<div class="form-group">
|
|
27
|
-
<%= label_tag :
|
|
28
|
-
<div class="col-sm-
|
|
27
|
+
<%= label_tag :source_name, 'Source name', :class => 'col-sm-3 control-label' %>
|
|
28
|
+
<div class="col-sm-9">
|
|
29
|
+
<%= text_field_tag :source_name, @report[:sourceName], :class => 'form-control' %>
|
|
30
|
+
<span>Must match a database configuration entry in the Analytics plugin</span>
|
|
31
|
+
</div>
|
|
32
|
+
</div>
|
|
33
|
+
<div class="form-group">
|
|
34
|
+
<%= label_tag :source_query, 'SQL query', :class => 'col-sm-3 control-label' %>
|
|
35
|
+
<div class="col-sm-9">
|
|
36
|
+
<%= text_area_tag :source_query, @report[:sourceQuery], rows: 10, cols: 25, :class => 'form-control' %>
|
|
37
|
+
<span>Don't add a trailing ;</span>
|
|
38
|
+
</div>
|
|
39
|
+
</div>
|
|
40
|
+
<div class="form-group">
|
|
41
|
+
<%= label_tag :refresh_procedure_name, 'Refresh procedure', :class => 'col-sm-3 control-label' %>
|
|
42
|
+
<div class="col-sm-9">
|
|
29
43
|
<%= text_field_tag :refresh_procedure_name, @report[:refreshProcedureName], :class => 'form-control' %>
|
|
30
44
|
</div>
|
|
31
45
|
</div>
|
|
32
46
|
<div class="form-group">
|
|
33
|
-
<%= label_tag :refresh_frequency, 'Refresh frequency', :class => 'col-sm-
|
|
34
|
-
<div class="col-sm-
|
|
35
|
-
<%= select_tag :refresh_frequency, options_for_select(%w(HOURLY DAILY), @report[:refreshFrequency]
|
|
47
|
+
<%= label_tag :refresh_frequency, 'Refresh frequency', :class => 'col-sm-3 control-label' %>
|
|
48
|
+
<div class="col-sm-9">
|
|
49
|
+
<%= select_tag :refresh_frequency, options_for_select(%w(HOURLY DAILY), @report[:refreshFrequency]), :class => 'form-control', :include_blank => true %>
|
|
36
50
|
</div>
|
|
37
51
|
</div>
|
|
38
52
|
<div class="form-group">
|
|
39
|
-
<%= label_tag :refresh_hour_of_day_gmt, 'Refresh hour (GMT)', :class => 'col-sm-
|
|
40
|
-
<div class="col-sm-
|
|
53
|
+
<%= label_tag :refresh_hour_of_day_gmt, 'Refresh hour (GMT)', :class => 'col-sm-3 control-label' %>
|
|
54
|
+
<div class="col-sm-9">
|
|
41
55
|
<%= number_field_tag :refresh_hour_of_day_gmt, @report[:refreshHourOfDayGmt], {:min => 1, :max => 23, :class => 'form-control'} %>
|
|
42
56
|
</div>
|
|
43
57
|
</div>
|
|
44
58
|
<div class="form-group">
|
|
45
|
-
<div class="col-sm-offset-
|
|
59
|
+
<div class="col-sm-offset-3 col-sm-9">
|
|
46
60
|
<%= submit_tag 'Save', :class => 'btn btn-default' %>
|
|
47
61
|
</div>
|
|
48
62
|
</div>
|
|
@@ -5,6 +5,8 @@
|
|
|
5
5
|
<th>Pretty name</th>
|
|
6
6
|
<th>Type</th>
|
|
7
7
|
<th>Source</th>
|
|
8
|
+
<th>Source Name</th>
|
|
9
|
+
<th>Source Query</th>
|
|
8
10
|
<th>Refresh procedure</th>
|
|
9
11
|
<th>Refresh frequency</th>
|
|
10
12
|
<th>Refresh hour (GMT)</th>
|
|
@@ -19,6 +21,23 @@
|
|
|
19
21
|
<td><%= report[:reportPrettyName] %></td>
|
|
20
22
|
<td><%= report[:reportType] %></td>
|
|
21
23
|
<td><%= report[:sourceTableName] %></td>
|
|
24
|
+
<td><%= report[:sourceName] %></td>
|
|
25
|
+
<td>
|
|
26
|
+
<% unless report[:sourceQuery].blank? %>
|
|
27
|
+
<a href="" data-toggle="modal" data-target="#<%= report[:reportName] %>-query-modal">
|
|
28
|
+
Show SQL
|
|
29
|
+
</a>
|
|
30
|
+
<div class="modal fade" id="<%= report[:reportName] %>-query-modal" tabindex="-1" role="dialog">
|
|
31
|
+
<div class="modal-dialog" role="document">
|
|
32
|
+
<div class="modal-content column-block">
|
|
33
|
+
<div class="modal-body">
|
|
34
|
+
<p><pre class="sql-query"><code><%= report[:sourceQuery] %></code></pre></p>
|
|
35
|
+
</div>
|
|
36
|
+
</div><!-- /.modal-content -->
|
|
37
|
+
</div><!-- /.modal-dialog -->
|
|
38
|
+
</div><!-- /.modal -->
|
|
39
|
+
<% end %>
|
|
40
|
+
</td>
|
|
22
41
|
<td><%= report[:refreshProcedureName] %></td>
|
|
23
42
|
<td><%= report[:refreshFrequency] %></td>
|
|
24
43
|
<td><%= report[:refreshHourOfDayGmt] %></td>
|
|
@@ -42,6 +61,7 @@
|
|
|
42
61
|
<%= javascript_tag do %>
|
|
43
62
|
$(document).ready(function() {
|
|
44
63
|
$('#reports-table').dataTable({
|
|
64
|
+
"scrollX": true,
|
|
45
65
|
"dom": "t",
|
|
46
66
|
"paging": false,
|
|
47
67
|
"columns": [
|
|
@@ -52,6 +72,8 @@
|
|
|
52
72
|
null,
|
|
53
73
|
null,
|
|
54
74
|
null,
|
|
75
|
+
null,
|
|
76
|
+
null,
|
|
55
77
|
{ "orderable": false },
|
|
56
78
|
{ "orderable": false }
|
|
57
79
|
]
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
<div class="column-block">
|
|
2
|
+
<h1>Analytics settings</h1>
|
|
3
|
+
|
|
4
|
+
<div>
|
|
5
|
+
<%= form_tag kanaui_engine.settings_path, :method => :post, :class => 'form-horizontal' do %>
|
|
6
|
+
<div class='form-group'>
|
|
7
|
+
<%= label_tag :account_id, 'Account id', :class => 'col-sm-2 control-label' %>
|
|
8
|
+
<div class="col-sm-4">
|
|
9
|
+
<%= text_field_tag :account_id, nil, :class => 'form-control' %>
|
|
10
|
+
</div>
|
|
11
|
+
</div>
|
|
12
|
+
<div class="form-group">
|
|
13
|
+
<div class="col-sm-offset-2 col-sm-10">
|
|
14
|
+
<%= submit_tag 'Refresh', :class => 'btn btn-default' %>
|
|
15
|
+
</div>
|
|
16
|
+
</div>
|
|
17
|
+
<% end %>
|
|
18
|
+
</div>
|
|
19
|
+
</div>
|
data/config/routes.rb
CHANGED
|
@@ -1,14 +1,17 @@
|
|
|
1
|
-
|
|
1
|
+
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
Kanaui::Engine.routes.draw do
|
|
3
4
|
root to: 'dashboard#index'
|
|
4
|
-
resources :dashboard, :
|
|
5
|
-
scope
|
|
6
|
-
match
|
|
7
|
-
match
|
|
5
|
+
resources :dashboard, only: [:index]
|
|
6
|
+
scope '/dashboard' do
|
|
7
|
+
match '/available_reports' => 'dashboard#available_reports', :via => :get, :as => 'available_reports'
|
|
8
|
+
match '/reports' => 'dashboard#reports', :via => :get, :as => 'reports'
|
|
8
9
|
end
|
|
9
10
|
|
|
10
|
-
resources :reports, :
|
|
11
|
-
scope
|
|
12
|
-
match
|
|
11
|
+
resources :reports, only: %i[index new create edit update destroy]
|
|
12
|
+
scope '/reports' do
|
|
13
|
+
match '/refresh/:id' => 'reports#refresh', :via => :put, :as => 'refresh_report'
|
|
13
14
|
end
|
|
15
|
+
|
|
16
|
+
resources :settings, only: %i[index create]
|
|
14
17
|
end
|
data/lib/kanaui/engine.rb
CHANGED
data/lib/kanaui/version.rb
CHANGED
data/lib/kanaui.rb
CHANGED
|
@@ -1,21 +1,22 @@
|
|
|
1
|
-
|
|
1
|
+
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
require 'kanaui/engine'
|
|
4
4
|
|
|
5
|
+
module Kanaui
|
|
5
6
|
mattr_accessor :current_tenant_user
|
|
6
7
|
mattr_accessor :layout
|
|
7
8
|
|
|
8
|
-
self.current_tenant_user = lambda { |
|
|
9
|
-
{:
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
9
|
+
self.current_tenant_user = lambda { |_session, _user|
|
|
10
|
+
{ username: 'admin',
|
|
11
|
+
password: 'password',
|
|
12
|
+
session_id: nil,
|
|
13
|
+
api_key: KillBillClient.api_key,
|
|
14
|
+
api_secret: KillBillClient.api_secret }
|
|
14
15
|
}
|
|
15
16
|
|
|
16
|
-
def self.config
|
|
17
|
+
def self.config
|
|
17
18
|
{
|
|
18
|
-
|
|
19
|
+
layout: layout || 'kanaui/layouts/kanaui_application'
|
|
19
20
|
}
|
|
20
21
|
end
|
|
21
22
|
end
|
data/lib/tasks/kanaui_tasks.rake
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'test_helper'
|
|
2
4
|
|
|
3
5
|
class NavigationTest < ActionDispatch::IntegrationTest
|
|
4
|
-
|
|
5
6
|
include Kanaui::Engine.routes.url_helpers
|
|
6
7
|
|
|
7
8
|
test 'can see the dashboard page' do
|
|
@@ -9,4 +10,3 @@ class NavigationTest < ActionDispatch::IntegrationTest
|
|
|
9
10
|
assert_response :redirect
|
|
10
11
|
end
|
|
11
12
|
end
|
|
12
|
-
|
data/test/kanaui_test.rb
CHANGED
data/test/test_helper.rb
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
# Configure Rails Environment
|
|
2
|
-
ENV[
|
|
4
|
+
ENV['RAILS_ENV'] = 'test'
|
|
3
5
|
|
|
4
|
-
require File.expand_path(
|
|
5
|
-
require
|
|
6
|
+
require File.expand_path('dummy/config/environment.rb', __dir__)
|
|
7
|
+
require 'rails/test_help'
|
|
6
8
|
|
|
7
9
|
Rails.backtrace_cleaner.remove_silencers!
|
|
8
10
|
|
|
9
11
|
# Load support files
|
|
10
|
-
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
|
|
12
|
+
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].sort.each { |f| require f }
|
|
11
13
|
|
|
12
14
|
# Load fixtures from the engine
|
|
13
|
-
if ActiveSupport::TestCase.method_defined?(:fixture_path=)
|
|
14
|
-
ActiveSupport::TestCase.fixture_path = File.expand_path("../fixtures", __FILE__)
|
|
15
|
-
end
|
|
15
|
+
ActiveSupport::TestCase.fixture_path = File.expand_path('fixtures', __dir__) if ActiveSupport::TestCase.method_defined?(:fixture_path=)
|
metadata
CHANGED
|
@@ -1,43 +1,43 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: kanaui
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.
|
|
4
|
+
version: 2.1.3
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Kill Bill core team
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2021-10-08 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
|
-
name:
|
|
14
|
+
name: d3_rails
|
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
|
16
16
|
requirements:
|
|
17
17
|
- - "~>"
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version:
|
|
19
|
+
version: 3.2.8
|
|
20
20
|
type: :runtime
|
|
21
21
|
prerelease: false
|
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
23
|
requirements:
|
|
24
24
|
- - "~>"
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
|
-
version:
|
|
26
|
+
version: 3.2.8
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
|
-
name:
|
|
28
|
+
name: jquery-datatables-rails
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
30
30
|
requirements:
|
|
31
31
|
- - "~>"
|
|
32
32
|
- !ruby/object:Gem::Version
|
|
33
|
-
version: '
|
|
33
|
+
version: '3.3'
|
|
34
34
|
type: :runtime
|
|
35
35
|
prerelease: false
|
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
37
|
requirements:
|
|
38
38
|
- - "~>"
|
|
39
39
|
- !ruby/object:Gem::Version
|
|
40
|
-
version: '
|
|
40
|
+
version: '3.3'
|
|
41
41
|
- !ruby/object:Gem::Dependency
|
|
42
42
|
name: jquery-rails
|
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -53,47 +53,47 @@ dependencies:
|
|
|
53
53
|
- !ruby/object:Gem::Version
|
|
54
54
|
version: '4.3'
|
|
55
55
|
- !ruby/object:Gem::Dependency
|
|
56
|
-
name:
|
|
56
|
+
name: js-routes
|
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
|
58
58
|
requirements:
|
|
59
59
|
- - "~>"
|
|
60
60
|
- !ruby/object:Gem::Version
|
|
61
|
-
version: '
|
|
61
|
+
version: '1.1'
|
|
62
62
|
type: :runtime
|
|
63
63
|
prerelease: false
|
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
|
65
65
|
requirements:
|
|
66
66
|
- - "~>"
|
|
67
67
|
- !ruby/object:Gem::Version
|
|
68
|
-
version: '
|
|
68
|
+
version: '1.1'
|
|
69
69
|
- !ruby/object:Gem::Dependency
|
|
70
|
-
name:
|
|
70
|
+
name: rails
|
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
|
72
72
|
requirements:
|
|
73
73
|
- - "~>"
|
|
74
74
|
- !ruby/object:Gem::Version
|
|
75
|
-
version:
|
|
75
|
+
version: '5.1'
|
|
76
76
|
type: :runtime
|
|
77
77
|
prerelease: false
|
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
|
79
79
|
requirements:
|
|
80
80
|
- - "~>"
|
|
81
81
|
- !ruby/object:Gem::Version
|
|
82
|
-
version:
|
|
82
|
+
version: '5.1'
|
|
83
83
|
- !ruby/object:Gem::Dependency
|
|
84
|
-
name:
|
|
84
|
+
name: bootstrap-datepicker-rails
|
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
|
86
86
|
requirements:
|
|
87
|
-
- - "
|
|
87
|
+
- - "~>"
|
|
88
88
|
- !ruby/object:Gem::Version
|
|
89
|
-
version: '
|
|
89
|
+
version: '1.6'
|
|
90
90
|
type: :runtime
|
|
91
91
|
prerelease: false
|
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
|
93
93
|
requirements:
|
|
94
|
-
- - "
|
|
94
|
+
- - "~>"
|
|
95
95
|
- !ruby/object:Gem::Version
|
|
96
|
-
version: '
|
|
96
|
+
version: '1.6'
|
|
97
97
|
- !ruby/object:Gem::Dependency
|
|
98
98
|
name: font-awesome-rails
|
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -109,55 +109,55 @@ dependencies:
|
|
|
109
109
|
- !ruby/object:Gem::Version
|
|
110
110
|
version: '4.7'
|
|
111
111
|
- !ruby/object:Gem::Dependency
|
|
112
|
-
name:
|
|
112
|
+
name: killbill-client
|
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
|
114
114
|
requirements:
|
|
115
115
|
- - "~>"
|
|
116
116
|
- !ruby/object:Gem::Version
|
|
117
|
-
version: '
|
|
117
|
+
version: '3.2'
|
|
118
118
|
type: :runtime
|
|
119
119
|
prerelease: false
|
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
|
121
121
|
requirements:
|
|
122
122
|
- - "~>"
|
|
123
123
|
- !ruby/object:Gem::Version
|
|
124
|
-
version: '
|
|
124
|
+
version: '3.2'
|
|
125
125
|
- !ruby/object:Gem::Dependency
|
|
126
|
-
name:
|
|
126
|
+
name: sass-rails
|
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
|
128
128
|
requirements:
|
|
129
129
|
- - "~>"
|
|
130
130
|
- !ruby/object:Gem::Version
|
|
131
|
-
version: '
|
|
131
|
+
version: '5.0'
|
|
132
132
|
type: :runtime
|
|
133
133
|
prerelease: false
|
|
134
134
|
version_requirements: !ruby/object:Gem::Requirement
|
|
135
135
|
requirements:
|
|
136
136
|
- - "~>"
|
|
137
137
|
- !ruby/object:Gem::Version
|
|
138
|
-
version: '
|
|
138
|
+
version: '5.0'
|
|
139
139
|
- !ruby/object:Gem::Dependency
|
|
140
|
-
name:
|
|
140
|
+
name: spinjs-rails
|
|
141
141
|
requirement: !ruby/object:Gem::Requirement
|
|
142
142
|
requirements:
|
|
143
143
|
- - "~>"
|
|
144
144
|
- !ruby/object:Gem::Version
|
|
145
|
-
version: '
|
|
145
|
+
version: '1.4'
|
|
146
146
|
type: :runtime
|
|
147
147
|
prerelease: false
|
|
148
148
|
version_requirements: !ruby/object:Gem::Requirement
|
|
149
149
|
requirements:
|
|
150
150
|
- - "~>"
|
|
151
151
|
- !ruby/object:Gem::Version
|
|
152
|
-
version: '
|
|
152
|
+
version: '1.4'
|
|
153
153
|
- !ruby/object:Gem::Dependency
|
|
154
|
-
name:
|
|
154
|
+
name: twitter-bootstrap-rails
|
|
155
155
|
requirement: !ruby/object:Gem::Requirement
|
|
156
156
|
requirements:
|
|
157
157
|
- - ">="
|
|
158
158
|
- !ruby/object:Gem::Version
|
|
159
159
|
version: '0'
|
|
160
|
-
type: :
|
|
160
|
+
type: :runtime
|
|
161
161
|
prerelease: false
|
|
162
162
|
version_requirements: !ruby/object:Gem::Requirement
|
|
163
163
|
requirements:
|
|
@@ -165,7 +165,35 @@ dependencies:
|
|
|
165
165
|
- !ruby/object:Gem::Version
|
|
166
166
|
version: '0'
|
|
167
167
|
- !ruby/object:Gem::Dependency
|
|
168
|
-
name:
|
|
168
|
+
name: gem-release
|
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
|
170
|
+
requirements:
|
|
171
|
+
- - "~>"
|
|
172
|
+
- !ruby/object:Gem::Version
|
|
173
|
+
version: '2.2'
|
|
174
|
+
type: :development
|
|
175
|
+
prerelease: false
|
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
177
|
+
requirements:
|
|
178
|
+
- - "~>"
|
|
179
|
+
- !ruby/object:Gem::Version
|
|
180
|
+
version: '2.2'
|
|
181
|
+
- !ruby/object:Gem::Dependency
|
|
182
|
+
name: json
|
|
183
|
+
requirement: !ruby/object:Gem::Requirement
|
|
184
|
+
requirements:
|
|
185
|
+
- - ">="
|
|
186
|
+
- !ruby/object:Gem::Version
|
|
187
|
+
version: 1.8.6
|
|
188
|
+
type: :development
|
|
189
|
+
prerelease: false
|
|
190
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
191
|
+
requirements:
|
|
192
|
+
- - ">="
|
|
193
|
+
- !ruby/object:Gem::Version
|
|
194
|
+
version: 1.8.6
|
|
195
|
+
- !ruby/object:Gem::Dependency
|
|
196
|
+
name: listen
|
|
169
197
|
requirement: !ruby/object:Gem::Requirement
|
|
170
198
|
requirements:
|
|
171
199
|
- - ">="
|
|
@@ -179,7 +207,7 @@ dependencies:
|
|
|
179
207
|
- !ruby/object:Gem::Version
|
|
180
208
|
version: '0'
|
|
181
209
|
- !ruby/object:Gem::Dependency
|
|
182
|
-
name:
|
|
210
|
+
name: rake
|
|
183
211
|
requirement: !ruby/object:Gem::Requirement
|
|
184
212
|
requirements:
|
|
185
213
|
- - ">="
|
|
@@ -193,19 +221,33 @@ dependencies:
|
|
|
193
221
|
- !ruby/object:Gem::Version
|
|
194
222
|
version: '0'
|
|
195
223
|
- !ruby/object:Gem::Dependency
|
|
196
|
-
name:
|
|
224
|
+
name: rubocop
|
|
225
|
+
requirement: !ruby/object:Gem::Requirement
|
|
226
|
+
requirements:
|
|
227
|
+
- - "~>"
|
|
228
|
+
- !ruby/object:Gem::Version
|
|
229
|
+
version: 0.88.0
|
|
230
|
+
type: :development
|
|
231
|
+
prerelease: false
|
|
232
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
233
|
+
requirements:
|
|
234
|
+
- - "~>"
|
|
235
|
+
- !ruby/object:Gem::Version
|
|
236
|
+
version: 0.88.0
|
|
237
|
+
- !ruby/object:Gem::Dependency
|
|
238
|
+
name: simplecov
|
|
197
239
|
requirement: !ruby/object:Gem::Requirement
|
|
198
240
|
requirements:
|
|
199
241
|
- - ">="
|
|
200
242
|
- !ruby/object:Gem::Version
|
|
201
|
-
version:
|
|
243
|
+
version: '0'
|
|
202
244
|
type: :development
|
|
203
245
|
prerelease: false
|
|
204
246
|
version_requirements: !ruby/object:Gem::Requirement
|
|
205
247
|
requirements:
|
|
206
248
|
- - ">="
|
|
207
249
|
- !ruby/object:Gem::Version
|
|
208
|
-
version:
|
|
250
|
+
version: '0'
|
|
209
251
|
description: Rails UI plugin for the Analytics plugin.
|
|
210
252
|
email: killbilling-users@googlegroups.com
|
|
211
253
|
executables: []
|
|
@@ -246,6 +288,7 @@ files:
|
|
|
246
288
|
- app/controllers/kanaui/dashboard_controller.rb
|
|
247
289
|
- app/controllers/kanaui/engine_controller.rb
|
|
248
290
|
- app/controllers/kanaui/reports_controller.rb
|
|
291
|
+
- app/controllers/kanaui/settings_controller.rb
|
|
249
292
|
- app/helpers/kanaui/application_helper.rb
|
|
250
293
|
- app/helpers/kanaui/dashboard_helper.rb
|
|
251
294
|
- app/views/kanaui/dashboard/index.html.erb
|
|
@@ -255,6 +298,7 @@ files:
|
|
|
255
298
|
- app/views/kanaui/reports/edit.html.erb
|
|
256
299
|
- app/views/kanaui/reports/index.html.erb
|
|
257
300
|
- app/views/kanaui/reports/new.html.erb
|
|
301
|
+
- app/views/kanaui/settings/index.html.erb
|
|
258
302
|
- config/locales/en.bootstrap.yml
|
|
259
303
|
- config/routes.rb
|
|
260
304
|
- lib/kanaui.rb
|
|
@@ -265,6 +309,7 @@ files:
|
|
|
265
309
|
- lib/tasks/kanaui_tasks.rake
|
|
266
310
|
- test/dummy/README.rdoc
|
|
267
311
|
- test/dummy/Rakefile
|
|
312
|
+
- test/dummy/app/assets/config/manifest.js
|
|
268
313
|
- test/dummy/app/controllers/application_controller.rb
|
|
269
314
|
- test/dummy/app/helpers/application_helper.rb
|
|
270
315
|
- test/dummy/bin/bundle
|
|
@@ -295,7 +340,6 @@ files:
|
|
|
295
340
|
- test/dummy/config/locales/en.yml
|
|
296
341
|
- test/dummy/config/routes.rb
|
|
297
342
|
- test/dummy/config/secrets.yml
|
|
298
|
-
- test/dummy/log/test.log
|
|
299
343
|
- test/dummy/public/404.html
|
|
300
344
|
- test/dummy/public/422.html
|
|
301
345
|
- test/dummy/public/500.html
|
|
@@ -326,52 +370,53 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
326
370
|
- !ruby/object:Gem::Version
|
|
327
371
|
version: '0'
|
|
328
372
|
requirements: []
|
|
329
|
-
|
|
373
|
+
rubyforge_project:
|
|
374
|
+
rubygems_version: 2.6.13
|
|
330
375
|
signing_key:
|
|
331
376
|
specification_version: 4
|
|
332
377
|
summary: Kill Bill Analytics UI mountable engine
|
|
333
378
|
test_files:
|
|
334
|
-
- test/kanaui_test.rb
|
|
335
|
-
- test/fixtures/kanaui/dashboards.yml
|
|
336
|
-
- test/unit/helpers/kanaui/tests_helper_test.rb
|
|
337
379
|
- test/test_helper.rb
|
|
338
|
-
- test/
|
|
339
|
-
- test/dummy/
|
|
380
|
+
- test/fixtures/kanaui/dashboards.yml
|
|
381
|
+
- test/dummy/public/favicon.ico
|
|
382
|
+
- test/dummy/public/500.html
|
|
340
383
|
- test/dummy/public/404.html
|
|
341
384
|
- test/dummy/public/422.html
|
|
342
|
-
- test/dummy/
|
|
343
|
-
- test/dummy/
|
|
344
|
-
- test/dummy/config/secrets.yml
|
|
345
|
-
- test/dummy/config/locales/en.yml
|
|
385
|
+
- test/dummy/Rakefile
|
|
386
|
+
- test/dummy/config/application.rb
|
|
346
387
|
- test/dummy/config/environment.rb
|
|
347
388
|
- test/dummy/config/routes.rb
|
|
348
|
-
- test/dummy/config/
|
|
349
|
-
- test/dummy/config/environments/production.rb
|
|
350
|
-
- test/dummy/config/environments/development.rb
|
|
351
|
-
- test/dummy/config/initializers/new_framework_defaults_5_1.rb
|
|
352
|
-
- test/dummy/config/initializers/inflections.rb
|
|
353
|
-
- test/dummy/config/initializers/assets.rb
|
|
354
|
-
- test/dummy/config/initializers/backtrace_silencers.rb
|
|
355
|
-
- test/dummy/config/initializers/killbill_client.rb
|
|
356
|
-
- test/dummy/config/initializers/filter_parameter_logging.rb
|
|
389
|
+
- test/dummy/config/boot.rb
|
|
357
390
|
- test/dummy/config/initializers/mime_types.rb
|
|
358
|
-
- test/dummy/config/initializers/application_controller_renderer.rb
|
|
359
|
-
- test/dummy/config/initializers/secret_token.rb
|
|
360
391
|
- test/dummy/config/initializers/cookies_serializer.rb
|
|
361
392
|
- test/dummy/config/initializers/session_store.rb
|
|
393
|
+
- test/dummy/config/initializers/filter_parameter_logging.rb
|
|
394
|
+
- test/dummy/config/initializers/inflections.rb
|
|
395
|
+
- test/dummy/config/initializers/new_framework_defaults_5_1.rb
|
|
396
|
+
- test/dummy/config/initializers/application_controller_renderer.rb
|
|
397
|
+
- test/dummy/config/initializers/backtrace_silencers.rb
|
|
398
|
+
- test/dummy/config/initializers/assets.rb
|
|
362
399
|
- test/dummy/config/initializers/wrap_parameters.rb
|
|
363
|
-
- test/dummy/config/
|
|
364
|
-
- test/dummy/config/
|
|
365
|
-
- test/dummy/
|
|
366
|
-
- test/dummy/
|
|
367
|
-
- test/dummy/
|
|
368
|
-
- test/dummy/
|
|
369
|
-
- test/dummy/
|
|
370
|
-
- test/dummy/
|
|
400
|
+
- test/dummy/config/initializers/killbill_client.rb
|
|
401
|
+
- test/dummy/config/initializers/secret_token.rb
|
|
402
|
+
- test/dummy/config/environments/development.rb
|
|
403
|
+
- test/dummy/config/environments/test.rb
|
|
404
|
+
- test/dummy/config/environments/production.rb
|
|
405
|
+
- test/dummy/config/secrets.yml
|
|
406
|
+
- test/dummy/config/locales/en.yml
|
|
407
|
+
- test/dummy/bin/rails
|
|
408
|
+
- test/dummy/bin/yarn
|
|
371
409
|
- test/dummy/bin/rake
|
|
372
|
-
- test/dummy/bin/bundle
|
|
373
|
-
- test/dummy/bin/update
|
|
374
410
|
- test/dummy/bin/setup
|
|
375
|
-
- test/dummy/bin/
|
|
376
|
-
- test/dummy/bin/
|
|
411
|
+
- test/dummy/bin/update
|
|
412
|
+
- test/dummy/bin/bundle
|
|
413
|
+
- test/dummy/app/helpers/application_helper.rb
|
|
414
|
+
- test/dummy/app/assets/config/manifest.js
|
|
415
|
+
- test/dummy/app/controllers/application_controller.rb
|
|
416
|
+
- test/dummy/script/rails
|
|
417
|
+
- test/dummy/config.ru
|
|
418
|
+
- test/dummy/README.rdoc
|
|
419
|
+
- test/integration/navigation_test.rb
|
|
420
|
+
- test/kanaui_test.rb
|
|
421
|
+
- test/unit/helpers/kanaui/tests_helper_test.rb
|
|
377
422
|
- test/functional/kanaui/tests_controller_test.rb
|
data/test/dummy/log/test.log
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
----------------------
|
|
2
|
-
KanauiTest: test_truth
|
|
3
|
-
----------------------
|
|
4
|
-
-----------------------------------------------
|
|
5
|
-
NavigationTest: test_can_see_the_dashboard_page
|
|
6
|
-
-----------------------------------------------
|
|
7
|
-
Started GET "/kanaui" for 127.0.0.1 at 2018-04-12 15:30:51 +0000
|
|
8
|
-
Processing by Kanaui::DashboardController#index as HTML
|
|
9
|
-
Request method='GET', uri='http://127.0.0.1:8080/plugins/killbill-analytics/reports'
|
|
10
|
-
accept='application/json', user-agent='killbill/2.2.2; ruby 2.4.2p198 (2017-09-14 revision 59899) [x86_64-linux]', accept-encoding='gzip;q=1.0,deflate;q=0.6,identity;q=0.3', x-killbill-apikey='bob', x-killbill-apisecret='lazar', authorization='Basic [FILTERED]'
|
|
11
|
-
Completed 500 Internal Server Error in 1ms
|
|
12
|
-
-----------------------------------------------
|
|
13
|
-
NavigationTest: test_can_see_the_dashboard_page
|
|
14
|
-
-----------------------------------------------
|
|
15
|
-
Started GET "/kanaui" for 127.0.0.1 at 2018-05-18 09:28:21 +0000
|
|
16
|
-
Processing by Kanaui::DashboardController#index as HTML
|
|
17
|
-
Request method='GET', uri='http://127.0.0.1:8080/plugins/killbill-analytics/reports'
|
|
18
|
-
accept='application/json', user-agent='killbill/2.2.3; ruby 2.4.2p198 (2017-09-14 revision 59899) [x86_64-linux]', accept-encoding='gzip;q=1.0,deflate;q=0.6,identity;q=0.3', x-killbill-apikey='bob', x-killbill-apisecret='lazar', authorization='Basic [FILTERED]'
|
|
19
|
-
Completed 500 Internal Server Error in 1ms
|
|
20
|
-
----------------------
|
|
21
|
-
KanauiTest: test_truth
|
|
22
|
-
----------------------
|