kanaui 0.5.0 → 0.5.1

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.
@@ -14,5 +14,15 @@ module Kanaui
14
14
  Kanaui.current_tenant_user.call(session, user)
15
15
  end
16
16
 
17
+ def options_for_klient
18
+ user = current_tenant_user
19
+ {
20
+ :username => user[:username],
21
+ :password => user[:password],
22
+ :session_id => user[:session_id],
23
+ :api_key => user[:api_key],
24
+ :api_secret => user[:api_secret]
25
+ }
26
+ end
17
27
  end
18
28
  end
@@ -0,0 +1,60 @@
1
+ module Kanaui
2
+ class ReportsController < Kanaui::EngineController
3
+
4
+ def index
5
+ @reports = JSON.parse(Kanaui::DashboardHelper::DashboardApi.available_reports(options_for_klient)).map(&:deep_symbolize_keys)
6
+ end
7
+
8
+ def new
9
+ @report = {}
10
+ end
11
+
12
+ def create
13
+ Kanaui::DashboardHelper::DashboardApi.create_report(report_from_params.to_json, options_for_klient)
14
+
15
+ flash[:notice] = 'Report successfully created'
16
+ redirect_to :action => :index
17
+ end
18
+
19
+ def edit
20
+ @report = JSON.parse(Kanaui::DashboardHelper::DashboardApi.available_reports(options_for_klient))
21
+ .find { |x| x['reportName'] == params.require(:id) }
22
+ .deep_symbolize_keys
23
+ end
24
+
25
+ def update
26
+ Kanaui::DashboardHelper::DashboardApi.update_report(params.require(:id), report_from_params.to_json, options_for_klient)
27
+
28
+ flash[:notice] = 'Report successfully updated'
29
+ redirect_to :action => :index
30
+ end
31
+
32
+ def refresh
33
+ Kanaui::DashboardHelper::DashboardApi.refresh_report(params.require(:id), options_for_klient)
34
+
35
+ flash[:notice] = 'Report refresh successfully scheduled'
36
+ redirect_to :action => :index
37
+ end
38
+
39
+ def destroy
40
+ Kanaui::DashboardHelper::DashboardApi.delete_report(params.require(:id), options_for_klient)
41
+
42
+ flash[:notice] = 'Report successfully deleted'
43
+ redirect_to :action => :index
44
+ end
45
+
46
+ private
47
+
48
+ def report_from_params
49
+ {
50
+ :reportName => params[:report_name],
51
+ :reportPrettyName => params[:report_pretty_name],
52
+ :reportType => params[:report_type],
53
+ :sourceTableName => params[:source_table_name],
54
+ :refreshProcedureName => params[:refresh_procedure_name],
55
+ :refreshFrequency => params[:refresh_frequency],
56
+ :refreshHourOfDayGmt => params[:refresh_hour_of_day_gmt]
57
+ }
58
+ end
59
+ end
60
+ end
@@ -13,13 +13,39 @@ module Kanaui
13
13
  response.body
14
14
  end
15
15
 
16
- def reports(start_date, end_date, name, smooth, format, options = {})
17
- path = "#{KILLBILL_ANALYTICS_PREFIX}/reports?format=json&startDate=#{start_date}&endDate=#{end_date}&name=#{name}"
16
+ def reports(start_date, end_date, name, smooth, sql_only, format, options = {})
17
+ path = "#{KILLBILL_ANALYTICS_PREFIX}/reports?format=#{format}&startDate=#{start_date}&endDate=#{end_date}&name=#{name}"
18
18
  path = "#{path}&smooth=#{smooth}" if smooth
19
+ path = "#{path}&sqlOnly=true" unless sql_only.blank?
19
20
  response = KillBillClient::API.get path, {}, options
20
21
  response.body
21
22
  end
22
23
 
24
+ def report_configuration(name, options = {})
25
+ path = "#{KILLBILL_ANALYTICS_PREFIX}/reports/#{name}"
26
+ response = KillBillClient::API.get path, {}, options
27
+ JSON.parse(response.body).symbolize_keys
28
+ end
29
+
30
+ def create_report(report, options = {})
31
+ path = "#{KILLBILL_ANALYTICS_PREFIX}/reports"
32
+ KillBillClient::API.post path, report, {}, options
33
+ end
34
+
35
+ def refresh_report(name, options = {})
36
+ path = "#{KILLBILL_ANALYTICS_PREFIX}/reports/#{name}?shouldRefresh=true"
37
+ KillBillClient::API.put path, {}, {}, options
38
+ end
39
+
40
+ def update_report(name, report, options = {})
41
+ path = "#{KILLBILL_ANALYTICS_PREFIX}/reports/#{name}"
42
+ KillBillClient::API.put path, report, {}, options
43
+ end
44
+
45
+ def delete_report(name, options = {})
46
+ path = "#{KILLBILL_ANALYTICS_PREFIX}/reports/#{name}"
47
+ KillBillClient::API.delete path, {}, {}, options
48
+ end
23
49
  end
24
50
  end
25
51
 
@@ -2,15 +2,19 @@
2
2
  <!-- MENU -->
3
3
  <div class="col-md-3 col-sm-12 col-lg-4 reports-options">
4
4
  <div class="row">
5
- <% if params['report1'] %>
5
+ <% if params[:name] && @report['reportType'] == 'TIMELINE' %>
6
6
  <div id="date-picker" class="col-md-12">
7
7
  <h4>End date</h4>
8
- <%= form_tag kanaui_engine.dashboard_index_path(params), :method => :get do %>
9
- <input name="report1" type="hidden" value="<%= params['report1'] %>">
8
+ <%= form_tag kanaui_engine.dashboard_index_path, :method => :get do %>
9
+ <input name="name" type="hidden" value="<%= @raw_name %>">
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 %>">
10
14
 
11
15
  <div class="form-group">
12
16
  <div class="col-md-5">
13
- <input class="form-control" name="endDate" type="text" data-provide="datepicker" data-date-format="yyyy-mm-dd" data-date-today-highlight="true" value="<%= @endDate %>">
17
+ <input class="form-control" name="end_date" type="text" data-provide="datepicker" data-date-format="yyyy-mm-dd" data-date-today-highlight="true" value="<%= @end_date %>">
14
18
  </div>
15
19
  </div>
16
20
  <div class="form-group">
@@ -20,19 +24,19 @@
20
24
  </div>
21
25
  <% end %>
22
26
  <div class="col-md-12 col-sm-8">
23
- <h4>Available Reports</h4>
27
+ <h4><%= link_to 'Available Reports', kanaui_engine.url_for(:controller => :reports) %></h4>
24
28
  <ul class="nav nav-tabs nav-stacked">
25
29
  <% if Rails.env.development? %>
26
30
  <li class="nav-element">
27
- <%= link_to "Fake pie", kanaui_engine.dashboard_index_path('report1' => 'fake_pie', 'fake' => 1, 'type' => 'pie') %>
31
+ <%= link_to "Fake pie", kanaui_engine.dashboard_index_path(:fake => 1, :name => 'fake_pie', :type => 'pie') %>
28
32
  </li>
29
33
  <li class="nav-element">
30
- <%= link_to "Fake line", kanaui_engine.dashboard_index_path('report1' => 'fake_line', 'fake' => 1, 'type' => 'line') %>
34
+ <%= link_to "Fake line", kanaui_engine.dashboard_index_path(:fake => 1, :name => 'fake_line', :type => 'line') %>
31
35
  </li>
32
36
  <% end %>
33
37
  <% @reports.each do |r| %>
34
- <% link = kanaui_engine.dashboard_index_path(:params => {'startDate' => @startDate, 'endDate' => @endDate, 'report1' => r['reportName']}) %>
35
- <li class="nav-element <%= params['report1'] == r['reportName'] ? 'current' : '' %>">
38
+ <% link = kanaui_engine.dashboard_index_path(params.merge(:name => r['reportName'])) %>
39
+ <li class="nav-element <%= params[:name] == r['reportName'] ? 'current' : '' %>">
36
40
  <%= link_to r['reportPrettyName'], link, :class => "truncate-text", title: r['reportName'].titleize %>
37
41
  </li>
38
42
  <% end %>
@@ -44,22 +48,93 @@
44
48
  <!-- DASHBOARD -->
45
49
  <div class="col-md-9 col-sm-12 col-lg-8">
46
50
  <div class="row">
47
- <% if params['report1'] %>
51
+ <% if params[:name] %>
48
52
  <h2 class="chart-title">
49
- <%= params['report1'].titleize %>
53
+ <%= @raw_name.titleize %>
50
54
  </h2>
51
55
  <div id="loading-spinner"></div>
52
- <div id="chartAnchor" data-reports-path="<%= kanaui_engine.reports_path(params.merge!(name: params['report1'])) %>"></div>
53
- <div id="date-controls">
56
+ <div id="chartAnchor" data-reports-path="<%= kanaui_engine.reports_path(params) %>"></div>
57
+ <div id="date-controls" style="display: none;">
54
58
  <ul class="nav nav-pills nav-justified">
55
59
  <% @available_start_dates.each do |key, value| %>
56
- <li><%= link_to key, kanaui_engine.dashboard_index_path(params.merge!(startDate: value)) %></li>
60
+ <li><%= link_to key, kanaui_engine.dashboard_index_path(params.merge(:start_date => value)) %></li>
57
61
  <% end %>
58
62
  </ul>
59
63
  </div>
60
64
  <hr>
61
65
  <div class="pull-right">
62
- <%= link_to 'Download raw data', kanaui_engine.reports_path(params.merge!(name: params['report1'])), class: 'btn btn-default' %>
66
+ <%= link_to 'Download raw data', kanaui_engine.reports_path(params.merge(:format => 'csv')), class: 'btn btn-default' %>
67
+ </div>
68
+ <a class="btn btn-default" role="button" data-toggle="collapse" href="#advanced-controls" aria-expanded="false" aria-controls="advanced-controls">
69
+ Advanced controls
70
+ </a>
71
+ <div class="collapse" id="advanced-controls">
72
+ <div class="well">
73
+ <ul>
74
+ <% if @report['reportType'] == 'TIMELINE' %>
75
+ <% at_least_two_months = params[:start_date].blank? || params[:end_date].blank? || (params[:end_date].to_date.beginning_of_month - 1.month > params[:start_date].to_date) %>
76
+ <% at_least_two_weeks = params[:start_date].blank? || params[:end_date].blank? || (params[:end_date].to_date.beginning_of_week - 1.week > params[:start_date].to_date) %>
77
+ <% if params[:smooth] != 'AVERAGE_WEEKLY' && at_least_two_weeks %>
78
+ <li><%= link_to 'Weekly average', kanaui_engine.dashboard_index_path(params.merge(:smooth => 'AVERAGE_WEEKLY')) %></li>
79
+ <% end %>
80
+ <% if params[:smooth] != 'AVERAGE_MONTHLY' && at_least_two_months %>
81
+ <li><%= link_to 'Monthly average', kanaui_engine.dashboard_index_path(params.merge(:smooth => 'AVERAGE_MONTHLY')) %></li>
82
+ <% end %>
83
+ <% if params[:smooth] != 'SUM_WEEKLY' && at_least_two_weeks %>
84
+ <li><%= link_to 'Weekly sum', kanaui_engine.dashboard_index_path(params.merge(:smooth => 'SUM_WEEKLY')) %></li>
85
+ <% end %>
86
+ <% if params[:smooth] != 'SUM_MONTHLY' && at_least_two_months %>
87
+ <li><%= link_to 'Monthly sum', kanaui_engine.dashboard_index_path(params.merge(:smooth => 'SUM_MONTHLY')) %></li>
88
+ <% end %>
89
+ <% end %>
90
+ <% filter_fields = ((@report['schema'] || {})['fields'] || []).select { |field| !field['distinctValues'].blank? && field['dataType'] =~ /char/ } # To ignore tenant_record_id %>
91
+ <% unless filter_fields.empty? %>
92
+ <li>Slicing & Dicing:
93
+ <%= form_tag kanaui_engine.dashboard_index_path(params), :method => :get, :class => 'form-horizontal' do %>
94
+ <input name="start_date" type="hidden" value="<%= @start_date %>">
95
+ <input name="end_date" type="hidden" value="<%= @end_date %>">
96
+ <input name="name" type="hidden" value="<%= @raw_name %>">
97
+ <input name="smooth" type="hidden" value="<%= params[:smooth] %>">
98
+ <input name="sql_only" type="hidden" value="<%= params[:sql_only] %>">
99
+ <input name="format" type="hidden" value="<%= params[:format] %>">
100
+
101
+ <fieldset class="form-group">
102
+ <legend>Filters</legend>
103
+ <% filter_fields.each do |field| %>
104
+ <div class="form-group">
105
+ <%= label_tag "filter_#{field['name']}", field['name'], :class => 'col-sm-2 control-label' %>
106
+ <div class="col-sm-10">
107
+ <%= select_tag "filter_#{field['name']}", options_for_select(field['distinctValues']), :multiple => true, :class => 'form-control' %>
108
+ </div>
109
+ </div>
110
+ <% end %>
111
+ </fieldset>
112
+ <fieldset class="form-group">
113
+ <legend>Dimensions to plot</legend>
114
+ <% filter_fields.each do |field| %>
115
+ <div class="form-group">
116
+ <%= label_tag "group_#{field['name']}", field['name'], :class => 'col-sm-2 control-label' %>
117
+ <div class="col-sm-10">
118
+ <%= select_tag "group_#{field['name']}", options_for_select(field['distinctValues']), :multiple => true, :class => 'form-control' %>
119
+ </div>
120
+ </div>
121
+ <% end %>
122
+ </fieldset>
123
+
124
+ <div class="form-group">
125
+ <div class="col-sm-offset-2 col-sm-10">
126
+ <%= submit_tag 'Refresh', :class => 'btn btn-default' %>
127
+ </div>
128
+ </div>
129
+ <% end %>
130
+ </li>
131
+ <li>Current Analytics query:&nbsp;<%= link_to '<i class="fa fa-question-circle"></i>'.html_safe, 'http://docs.killbill.io/latest/userguide_analytics.html#_dashboard_api', :target => '_blank' %>
132
+ <pre><%= params[:name] -%></pre>
133
+ </li>
134
+ <% end %>
135
+ <li><%= link_to 'SQL query', kanaui_engine.reports_path(params.merge(:sql_only => true)) %></li>
136
+ </ul>
137
+ </div>
63
138
  </div>
64
139
  <% end %>
65
140
  </div>
@@ -0,0 +1,49 @@
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
+ <div class="form-group">
3
+ <%= label_tag :report_name, 'Report name', :class => 'col-sm-2 control-label' %>
4
+ <div class="col-sm-10">
5
+ <%= text_field_tag :report_name, @report[:reportName], :class => 'form-control', :disabled => !@report[:reportName].blank?, :read_only => !@report[:reportName].blank? %>
6
+ </div>
7
+ </div>
8
+ <div class="form-group">
9
+ <%= label_tag :report_pretty_name, 'Pretty name', :class => 'col-sm-2 control-label' %>
10
+ <div class="col-sm-10">
11
+ <%= text_field_tag :report_pretty_name, @report[:reportPrettyName], :class => 'form-control' %>
12
+ </div>
13
+ </div>
14
+ <div class="form-group">
15
+ <%= label_tag :report_type, 'Type', :class => 'col-sm-2 control-label' %>
16
+ <div class="col-sm-10">
17
+ <%= select_tag :report_type, options_for_select(%w(TIMELINE COUNTERS TABLE), @report[:reportType] || 'TABLE'), :class => 'form-control' %>
18
+ </div>
19
+ </div>
20
+ <div class="form-group">
21
+ <%= label_tag :source_table_name, 'Source', :class => 'col-sm-2 control-label' %>
22
+ <div class="col-sm-10">
23
+ <%= text_field_tag :source_table_name, @report[:sourceTableName], :class => 'form-control' %>
24
+ </div>
25
+ </div>
26
+ <div class="form-group">
27
+ <%= label_tag :refresh_procedure_name, 'Refresh procedure', :class => 'col-sm-2 control-label' %>
28
+ <div class="col-sm-10">
29
+ <%= text_field_tag :refresh_procedure_name, @report[:refreshProcedureName], :class => 'form-control' %>
30
+ </div>
31
+ </div>
32
+ <div class="form-group">
33
+ <%= label_tag :refresh_frequency, 'Refresh frequency', :class => 'col-sm-2 control-label' %>
34
+ <div class="col-sm-10">
35
+ <%= select_tag :refresh_frequency, options_for_select(%w(HOURLY DAILY), @report[:refreshFrequency] || 'HOURLY'), :class => 'form-control' %>
36
+ </div>
37
+ </div>
38
+ <div class="form-group">
39
+ <%= label_tag :refresh_hour_of_day_gmt, 'Refresh hour (GMT)', :class => 'col-sm-2 control-label' %>
40
+ <div class="col-sm-10">
41
+ <%= number_field_tag :refresh_hour_of_day_gmt, @report[:refreshHourOfDayGmt], {:min => 1, :max => 23, :class => 'form-control'} %>
42
+ </div>
43
+ </div>
44
+ <div class="form-group">
45
+ <div class="col-sm-offset-2 col-sm-10">
46
+ <%= submit_tag 'Save', :class => 'btn btn-default' %>
47
+ </div>
48
+ </div>
49
+ <% end %>
@@ -0,0 +1,60 @@
1
+ <table id="reports-table" class="table table-condensed table-striped mobile-data">
2
+ <thead>
3
+ <tr>
4
+ <th>Name</th>
5
+ <th>Pretty name</th>
6
+ <th>Type</th>
7
+ <th>Source</th>
8
+ <th>Refresh procedure</th>
9
+ <th>Refresh frequency</th>
10
+ <th>Refresh hour (GMT)</th>
11
+ <th>Fields</th>
12
+ <th></th>
13
+ </tr>
14
+ </thead>
15
+ <tbody>
16
+ <% reports.each do |report| %>
17
+ <tr>
18
+ <td><%= report[:reportName] %></td>
19
+ <td><%= report[:reportPrettyName] %></td>
20
+ <td><%= report[:reportType] %></td>
21
+ <td><%= report[:sourceTableName] %></td>
22
+ <td><%= report[:refreshProcedureName] %></td>
23
+ <td><%= report[:refreshFrequency] %></td>
24
+ <td><%= report[:refreshHourOfDayGmt] %></td>
25
+ <td>
26
+ <ul>
27
+ <% report[:schema][:fields].each do |field| %>
28
+ <li><%= field[:name] %> (<%= field[:dataType] %>)</li>
29
+ <% end %>
30
+ </ul>
31
+ </td>
32
+ <td>
33
+ <%= link_to '<i class="fa fa-refresh"></i>'.html_safe, refresh_report_path(report[:reportName]), :method => :put %>
34
+ <%= link_to '<i class="fa fa-pencil"></i>'.html_safe, edit_report_path(report[:reportName]) %>
35
+ <%= link_to '&nbsp;<i class="fa fa-times"></i>'.html_safe, report_path(report[:reportName]), :method => :delete %>
36
+ </td>
37
+ </tr>
38
+ <% end %>
39
+ </tbody>
40
+ </table>
41
+
42
+ <%= javascript_tag do %>
43
+ $(document).ready(function() {
44
+ $('#reports-table').dataTable({
45
+ "dom": "t",
46
+ "paging": false,
47
+ "columns": [
48
+ null,
49
+ null,
50
+ null,
51
+ null,
52
+ null,
53
+ null,
54
+ null,
55
+ { "orderable": false },
56
+ { "orderable": false }
57
+ ]
58
+ });
59
+ });
60
+ <% end %>
@@ -0,0 +1,10 @@
1
+ <div class="register">
2
+ <div class="col-md-8 col-md-offset-2">
3
+
4
+ <div class="column-block">
5
+ <h1>Update report</h1>
6
+ <%= render 'form' %>
7
+ </div>
8
+
9
+ </div>
10
+ </div>
@@ -0,0 +1,17 @@
1
+ <div class="search">
2
+
3
+ <div class="column-block">
4
+
5
+ <h1>Configured reports
6
+ <%= link_to '&nbsp;<i class="fa fa-plus-square"></i>'.html_safe, new_report_path %>
7
+ </h1>
8
+
9
+ <%= render :partial => 'kanaui/reports/reports_table', :locals => {:reports => @reports} %>
10
+
11
+ </div>
12
+
13
+ <hr/>
14
+
15
+ <h1><%= link_to 'Dashboard', dashboard_index_path %></h1>
16
+
17
+ </div>
@@ -0,0 +1,10 @@
1
+ <div class="register">
2
+ <div class="col-md-8 col-md-offset-2">
3
+
4
+ <div class="column-block">
5
+ <h1>Add new report</h1>
6
+ <%= render 'form' %>
7
+ </div>
8
+
9
+ </div>
10
+ </div>
@@ -1,10 +1,14 @@
1
1
  Kanaui::Engine.routes.draw do
2
2
 
3
3
  root to: 'dashboard#index'
4
- resources :dashboard, :only => [ :index ]
4
+ resources :dashboard, :only => [:index]
5
5
  scope "/dashboard" do
6
6
  match "/available_reports" => "dashboard#available_reports", :via => :get, :as => "available_reports"
7
7
  match "/reports" => "dashboard#reports", :via => :get, :as => "reports"
8
8
  end
9
9
 
10
+ resources :reports, :only => [:index, :new, :create, :edit, :update, :destroy]
11
+ scope "/reports" do
12
+ match "/refresh/:id" => "reports#refresh", :via => :put, :as => "refresh_report"
13
+ end
10
14
  end
@@ -1,3 +1,3 @@
1
1
  module Kanaui
2
- VERSION = "0.5.0"
2
+ VERSION = "0.5.1"
3
3
  end
metadata CHANGED
@@ -1,323 +1,323 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kanaui
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.5.1
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: 2016-11-13 00:00:00.000000000 Z
11
+ date: 2017-02-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: rails
15
- version_requirements: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ~>
18
- - !ruby/object:Gem::Version
19
- version: 4.2.1
20
14
  requirement: !ruby/object:Gem::Requirement
21
15
  requirements:
22
- - - ~>
16
+ - - "~>"
23
17
  - !ruby/object:Gem::Version
24
18
  version: 4.2.1
19
+ name: rails
25
20
  prerelease: false
26
21
  type: :runtime
27
- - !ruby/object:Gem::Dependency
28
- name: js-routes
29
22
  version_requirements: !ruby/object:Gem::Requirement
30
23
  requirements:
31
- - - ~>
24
+ - - "~>"
32
25
  - !ruby/object:Gem::Version
33
- version: '1.1'
26
+ version: 4.2.1
27
+ - !ruby/object:Gem::Dependency
34
28
  requirement: !ruby/object:Gem::Requirement
35
29
  requirements:
36
- - - ~>
30
+ - - "~>"
37
31
  - !ruby/object:Gem::Version
38
32
  version: '1.1'
33
+ name: js-routes
39
34
  prerelease: false
40
35
  type: :runtime
41
- - !ruby/object:Gem::Dependency
42
- name: jquery-rails
43
36
  version_requirements: !ruby/object:Gem::Requirement
44
37
  requirements:
45
- - - ~>
38
+ - - "~>"
46
39
  - !ruby/object:Gem::Version
47
- version: 3.0.4
40
+ version: '1.1'
41
+ - !ruby/object:Gem::Dependency
48
42
  requirement: !ruby/object:Gem::Requirement
49
43
  requirements:
50
- - - ~>
44
+ - - "~>"
51
45
  - !ruby/object:Gem::Version
52
46
  version: 3.0.4
47
+ name: jquery-rails
53
48
  prerelease: false
54
49
  type: :runtime
55
- - !ruby/object:Gem::Dependency
56
- name: jquery-datatables-rails
57
50
  version_requirements: !ruby/object:Gem::Requirement
58
51
  requirements:
59
- - - ~>
52
+ - - "~>"
60
53
  - !ruby/object:Gem::Version
61
- version: 3.3.0
54
+ version: 3.0.4
55
+ - !ruby/object:Gem::Dependency
62
56
  requirement: !ruby/object:Gem::Requirement
63
57
  requirements:
64
- - - ~>
58
+ - - "~>"
65
59
  - !ruby/object:Gem::Version
66
60
  version: 3.3.0
61
+ name: jquery-datatables-rails
67
62
  prerelease: false
68
63
  type: :runtime
69
- - !ruby/object:Gem::Dependency
70
- name: money-rails
71
64
  version_requirements: !ruby/object:Gem::Requirement
72
65
  requirements:
73
- - - ~>
66
+ - - "~>"
74
67
  - !ruby/object:Gem::Version
75
- version: 1.3.0
68
+ version: 3.3.0
69
+ - !ruby/object:Gem::Dependency
76
70
  requirement: !ruby/object:Gem::Requirement
77
71
  requirements:
78
- - - ~>
72
+ - - "~>"
79
73
  - !ruby/object:Gem::Version
80
74
  version: 1.3.0
75
+ name: money-rails
81
76
  prerelease: false
82
77
  type: :runtime
83
- - !ruby/object:Gem::Dependency
84
- name: d3_rails
85
78
  version_requirements: !ruby/object:Gem::Requirement
86
79
  requirements:
87
- - - ~>
80
+ - - "~>"
88
81
  - !ruby/object:Gem::Version
89
- version: 3.2.8
82
+ version: 1.3.0
83
+ - !ruby/object:Gem::Dependency
90
84
  requirement: !ruby/object:Gem::Requirement
91
85
  requirements:
92
- - - ~>
86
+ - - "~>"
93
87
  - !ruby/object:Gem::Version
94
88
  version: 3.2.8
89
+ name: d3_rails
95
90
  prerelease: false
96
91
  type: :runtime
97
- - !ruby/object:Gem::Dependency
98
- name: twitter-bootstrap-rails
99
92
  version_requirements: !ruby/object:Gem::Requirement
100
93
  requirements:
101
- - - ~>
94
+ - - "~>"
102
95
  - !ruby/object:Gem::Version
103
- version: 3.2.0
96
+ version: 3.2.8
97
+ - !ruby/object:Gem::Dependency
104
98
  requirement: !ruby/object:Gem::Requirement
105
99
  requirements:
106
- - - ~>
100
+ - - "~>"
107
101
  - !ruby/object:Gem::Version
108
102
  version: 3.2.0
103
+ name: twitter-bootstrap-rails
109
104
  prerelease: false
110
105
  type: :runtime
111
- - !ruby/object:Gem::Dependency
112
- name: spinjs-rails
113
106
  version_requirements: !ruby/object:Gem::Requirement
114
107
  requirements:
115
- - - ~>
108
+ - - "~>"
116
109
  - !ruby/object:Gem::Version
117
- version: '1.4'
110
+ version: 3.2.0
111
+ - !ruby/object:Gem::Dependency
118
112
  requirement: !ruby/object:Gem::Requirement
119
113
  requirements:
120
- - - ~>
114
+ - - "~>"
121
115
  - !ruby/object:Gem::Version
122
116
  version: '1.4'
117
+ name: spinjs-rails
123
118
  prerelease: false
124
119
  type: :runtime
125
- - !ruby/object:Gem::Dependency
126
- name: bootstrap-datepicker-rails
127
120
  version_requirements: !ruby/object:Gem::Requirement
128
121
  requirements:
129
- - - ~>
122
+ - - "~>"
130
123
  - !ruby/object:Gem::Version
131
- version: 1.4.0
124
+ version: '1.4'
125
+ - !ruby/object:Gem::Dependency
132
126
  requirement: !ruby/object:Gem::Requirement
133
127
  requirements:
134
- - - ~>
128
+ - - "~>"
135
129
  - !ruby/object:Gem::Version
136
130
  version: 1.4.0
131
+ name: bootstrap-datepicker-rails
137
132
  prerelease: false
138
133
  type: :runtime
139
- - !ruby/object:Gem::Dependency
140
- name: momentjs-rails
141
134
  version_requirements: !ruby/object:Gem::Requirement
142
135
  requirements:
143
- - - ~>
136
+ - - "~>"
144
137
  - !ruby/object:Gem::Version
145
- version: 2.10.6
138
+ version: 1.4.0
139
+ - !ruby/object:Gem::Dependency
146
140
  requirement: !ruby/object:Gem::Requirement
147
141
  requirements:
148
- - - ~>
142
+ - - "~>"
149
143
  - !ruby/object:Gem::Version
150
144
  version: 2.10.6
145
+ name: momentjs-rails
151
146
  prerelease: false
152
147
  type: :runtime
153
- - !ruby/object:Gem::Dependency
154
- name: killbill-client
155
148
  version_requirements: !ruby/object:Gem::Requirement
156
149
  requirements:
157
- - - ~>
150
+ - - "~>"
158
151
  - !ruby/object:Gem::Version
159
- version: '1.0'
152
+ version: 2.10.6
153
+ - !ruby/object:Gem::Dependency
160
154
  requirement: !ruby/object:Gem::Requirement
161
155
  requirements:
162
- - - ~>
156
+ - - "~>"
163
157
  - !ruby/object:Gem::Version
164
158
  version: '1.0'
159
+ name: killbill-client
165
160
  prerelease: false
166
161
  type: :runtime
167
- - !ruby/object:Gem::Dependency
168
- name: devise
169
162
  version_requirements: !ruby/object:Gem::Requirement
170
163
  requirements:
171
- - - ~>
164
+ - - "~>"
172
165
  - !ruby/object:Gem::Version
173
- version: 3.4.1
166
+ version: '1.0'
167
+ - !ruby/object:Gem::Dependency
174
168
  requirement: !ruby/object:Gem::Requirement
175
169
  requirements:
176
- - - ~>
170
+ - - "~>"
177
171
  - !ruby/object:Gem::Version
178
172
  version: 3.4.1
173
+ name: devise
179
174
  prerelease: false
180
175
  type: :runtime
181
- - !ruby/object:Gem::Dependency
182
- name: cancan
183
176
  version_requirements: !ruby/object:Gem::Requirement
184
177
  requirements:
185
- - - ~>
178
+ - - "~>"
186
179
  - !ruby/object:Gem::Version
187
- version: 1.6.10
180
+ version: 3.4.1
181
+ - !ruby/object:Gem::Dependency
188
182
  requirement: !ruby/object:Gem::Requirement
189
183
  requirements:
190
- - - ~>
184
+ - - "~>"
191
185
  - !ruby/object:Gem::Version
192
186
  version: 1.6.10
187
+ name: cancan
193
188
  prerelease: false
194
189
  type: :runtime
195
- - !ruby/object:Gem::Dependency
196
- name: carmen-rails
197
190
  version_requirements: !ruby/object:Gem::Requirement
198
191
  requirements:
199
- - - ~>
192
+ - - "~>"
200
193
  - !ruby/object:Gem::Version
201
- version: 1.0.0
194
+ version: 1.6.10
195
+ - !ruby/object:Gem::Dependency
202
196
  requirement: !ruby/object:Gem::Requirement
203
197
  requirements:
204
- - - ~>
198
+ - - "~>"
205
199
  - !ruby/object:Gem::Version
206
200
  version: 1.0.0
201
+ name: carmen-rails
207
202
  prerelease: false
208
203
  type: :runtime
209
- - !ruby/object:Gem::Dependency
210
- name: symmetric-encryption
211
204
  version_requirements: !ruby/object:Gem::Requirement
212
205
  requirements:
213
- - - ~>
206
+ - - "~>"
214
207
  - !ruby/object:Gem::Version
215
- version: 3.6.0
208
+ version: 1.0.0
209
+ - !ruby/object:Gem::Dependency
216
210
  requirement: !ruby/object:Gem::Requirement
217
211
  requirements:
218
- - - ~>
212
+ - - "~>"
219
213
  - !ruby/object:Gem::Version
220
214
  version: 3.6.0
215
+ name: symmetric-encryption
221
216
  prerelease: false
222
217
  type: :runtime
223
- - !ruby/object:Gem::Dependency
224
- name: fakeweb
225
218
  version_requirements: !ruby/object:Gem::Requirement
226
219
  requirements:
227
- - - ~>
220
+ - - "~>"
228
221
  - !ruby/object:Gem::Version
229
- version: '1.3'
222
+ version: 3.6.0
223
+ - !ruby/object:Gem::Dependency
230
224
  requirement: !ruby/object:Gem::Requirement
231
225
  requirements:
232
- - - ~>
226
+ - - "~>"
233
227
  - !ruby/object:Gem::Version
234
228
  version: '1.3'
229
+ name: fakeweb
235
230
  prerelease: false
236
231
  type: :development
237
- - !ruby/object:Gem::Dependency
238
- name: rake
239
232
  version_requirements: !ruby/object:Gem::Requirement
240
233
  requirements:
241
- - - '>='
234
+ - - "~>"
242
235
  - !ruby/object:Gem::Version
243
- version: 0.8.7
236
+ version: '1.3'
237
+ - !ruby/object:Gem::Dependency
244
238
  requirement: !ruby/object:Gem::Requirement
245
239
  requirements:
246
- - - '>='
240
+ - - ">="
247
241
  - !ruby/object:Gem::Version
248
242
  version: 0.8.7
243
+ name: rake
249
244
  prerelease: false
250
245
  type: :development
251
- - !ruby/object:Gem::Dependency
252
- name: simplecov
253
246
  version_requirements: !ruby/object:Gem::Requirement
254
247
  requirements:
255
- - - '>='
248
+ - - ">="
256
249
  - !ruby/object:Gem::Version
257
- version: '0'
250
+ version: 0.8.7
251
+ - !ruby/object:Gem::Dependency
258
252
  requirement: !ruby/object:Gem::Requirement
259
253
  requirements:
260
- - - '>='
254
+ - - ">="
261
255
  - !ruby/object:Gem::Version
262
256
  version: '0'
257
+ name: simplecov
263
258
  prerelease: false
264
259
  type: :development
265
- - !ruby/object:Gem::Dependency
266
- name: activerecord-jdbc-adapter
267
260
  version_requirements: !ruby/object:Gem::Requirement
268
261
  requirements:
269
- - - ~>
262
+ - - ">="
270
263
  - !ruby/object:Gem::Version
271
- version: 1.3.9
264
+ version: '0'
265
+ - !ruby/object:Gem::Dependency
272
266
  requirement: !ruby/object:Gem::Requirement
273
267
  requirements:
274
- - - ~>
268
+ - - "~>"
275
269
  - !ruby/object:Gem::Version
276
270
  version: 1.3.9
271
+ name: activerecord-jdbc-adapter
277
272
  prerelease: false
278
273
  type: :development
279
- - !ruby/object:Gem::Dependency
280
- name: activerecord-jdbcmysql-adapter
281
274
  version_requirements: !ruby/object:Gem::Requirement
282
275
  requirements:
283
- - - ~>
276
+ - - "~>"
284
277
  - !ruby/object:Gem::Version
285
278
  version: 1.3.9
279
+ - !ruby/object:Gem::Dependency
286
280
  requirement: !ruby/object:Gem::Requirement
287
281
  requirements:
288
- - - ~>
282
+ - - "~>"
289
283
  - !ruby/object:Gem::Version
290
284
  version: 1.3.9
285
+ name: activerecord-jdbcmysql-adapter
291
286
  prerelease: false
292
287
  type: :development
293
- - !ruby/object:Gem::Dependency
294
- name: activerecord-jdbcsqlite3-adapter
295
288
  version_requirements: !ruby/object:Gem::Requirement
296
289
  requirements:
297
- - - ~>
290
+ - - "~>"
298
291
  - !ruby/object:Gem::Version
299
292
  version: 1.3.9
293
+ - !ruby/object:Gem::Dependency
300
294
  requirement: !ruby/object:Gem::Requirement
301
295
  requirements:
302
- - - ~>
296
+ - - "~>"
303
297
  - !ruby/object:Gem::Version
304
298
  version: 1.3.9
299
+ name: activerecord-jdbcsqlite3-adapter
305
300
  prerelease: false
306
301
  type: :development
307
- - !ruby/object:Gem::Dependency
308
- name: jdbc-mysql
309
302
  version_requirements: !ruby/object:Gem::Requirement
310
303
  requirements:
311
- - - ~>
304
+ - - "~>"
312
305
  - !ruby/object:Gem::Version
313
- version: 5.1.25
306
+ version: 1.3.9
307
+ - !ruby/object:Gem::Dependency
314
308
  requirement: !ruby/object:Gem::Requirement
315
309
  requirements:
316
- - - ~>
310
+ - - "~>"
317
311
  - !ruby/object:Gem::Version
318
312
  version: 5.1.25
313
+ name: jdbc-mysql
319
314
  prerelease: false
320
315
  type: :development
316
+ version_requirements: !ruby/object:Gem::Requirement
317
+ requirements:
318
+ - - "~>"
319
+ - !ruby/object:Gem::Version
320
+ version: 5.1.25
321
321
  description: Rails UI plugin for the Analytics plugin.
322
322
  email: killbilling-users@googlegroups.com
323
323
  executables: []
@@ -350,24 +350,24 @@ files:
350
350
  - app/assets/javascripts/kanaui/kiddo/kiddo_initialize.js
351
351
  - app/assets/javascripts/kanaui/kiddo/renderer.js
352
352
  - app/assets/javascripts/kanaui/kiddo/settings.js
353
- - app/assets/javascripts/kanaui/killbill.js
354
- - app/assets/javascripts/kanaui/purl.js
355
353
  - app/assets/javascripts/kanaui/reports.dataTables.js
356
- - app/assets/javascripts/kanaui/reports.graphs.js
357
- - app/assets/javascripts/kanaui/reports.js
358
- - app/assets/javascripts/kanaui/reports.urls.js
359
- - app/assets/javascripts/kanaui/tests.js
360
354
  - app/assets/stylesheets/application.css
361
355
  - app/assets/stylesheets/bootstrap_and_overrides.css
362
356
  - app/assets/stylesheets/kanaui/kanaui.css
363
357
  - app/assets/stylesheets/kanaui/reports.css
364
358
  - app/controllers/kanaui/dashboard_controller.rb
365
359
  - app/controllers/kanaui/engine_controller.rb
360
+ - app/controllers/kanaui/reports_controller.rb
366
361
  - app/helpers/kanaui/application_helper.rb
367
362
  - app/helpers/kanaui/dashboard_helper.rb
368
363
  - app/models/kanaui/dashboard.rb
369
364
  - app/views/kanaui/dashboard/index.html.erb
370
365
  - app/views/kanaui/layouts/kanaui_application.html.erb
366
+ - app/views/kanaui/reports/_form.html.erb
367
+ - app/views/kanaui/reports/_reports_table.html.erb
368
+ - app/views/kanaui/reports/edit.html.erb
369
+ - app/views/kanaui/reports/index.html.erb
370
+ - app/views/kanaui/reports/new.html.erb
371
371
  - config/locales/en.bootstrap.yml
372
372
  - config/routes.rb
373
373
  - lib/kanaui.rb
@@ -418,17 +418,17 @@ require_paths:
418
418
  - lib
419
419
  required_ruby_version: !ruby/object:Gem::Requirement
420
420
  requirements:
421
- - - '>='
421
+ - - ">="
422
422
  - !ruby/object:Gem::Version
423
423
  version: '0'
424
424
  required_rubygems_version: !ruby/object:Gem::Requirement
425
425
  requirements:
426
- - - '>='
426
+ - - ">="
427
427
  - !ruby/object:Gem::Version
428
428
  version: '0'
429
429
  requirements: []
430
430
  rubyforge_project:
431
- rubygems_version: 2.4.6
431
+ rubygems_version: 2.4.8
432
432
  signing_key:
433
433
  specification_version: 4
434
434
  summary: Kill Bill Analytics UI mountable engine