From 274059d10f58b9be9071626d4b633adb9ea71d22 Mon Sep 17 00:00:00 2001 From: benji Date: Fri, 11 Sep 2015 17:08:46 +0200 Subject: [PATCH 01/14] btn - Zeus link - deploy --- app/views/layouts/application.html.haml | 3 +++ app/views/transactions/_new.html.haml | 2 +- config/deploy/staging.rb | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/app/views/layouts/application.html.haml b/app/views/layouts/application.html.haml index 897b33c..1dd2d96 100644 --- a/app/views/layouts/application.html.haml +++ b/app/views/layouts/application.html.haml @@ -14,6 +14,9 @@ - if current_user %li.pure-menu-item = link_to current_user.name.capitalize, current_user, class: "pure-menu-link" + - if current_user.penning + %li.pure-menu-item + =link_to "Zeus", User.zeus, class: "pure-menu-link" - else = link_to "Sign in", user_omniauth_authorize_path(:zeuswpi), class: "pure-menu-link" unless current_user .pure-u-1 diff --git a/app/views/transactions/_new.html.haml b/app/views/transactions/_new.html.haml index 37a7d02..1ae6c04 100644 --- a/app/views/transactions/_new.html.haml +++ b/app/views/transactions/_new.html.haml @@ -15,4 +15,4 @@ = f.number_field :euros, value: amount(@transaction.amount), placeholder: "Bedrag", step: 0.01, min: (0.01 unless current_user.penning), class: "form-control", size: 20, required: true - = f.submit "Send it!", class: "pure-button pure-button-primary" + = f.submit "Send it!", class: "pure-button pure-button-primary btn" diff --git a/config/deploy/staging.rb b/config/deploy/staging.rb index d54ff64..cd6e844 100644 --- a/config/deploy/staging.rb +++ b/config/deploy/staging.rb @@ -1,4 +1,4 @@ -server 'king.ugent.be', user: 'tap', roles: %w{web app db}, ssh_options: { +server 'king.ugent.be', user: 'tab', roles: %w{web app db}, ssh_options: { forward_agent: true, auth_methods: ['publickey'], port: 2222 From 1472884ccbd8df5cc688d759fe0bb5c5695c7f99 Mon Sep 17 00:00:00 2001 From: Ilion Beyst Date: Fri, 11 Sep 2015 17:22:36 +0200 Subject: [PATCH 02/14] redirect to user page after sign in --- app/controllers/application_controller.rb | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index b126fc6..0476792 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -23,4 +23,8 @@ class ApplicationController < ActionController::Base current_client.try { |c| ClientAbility.new(c) } || UserAbility.new(current_user) end + + def after_sign_in_path_for(resource) + current_user + end end From dedd27cf520f6e128340ed3d3da447ab6a75bfe5 Mon Sep 17 00:00:00 2001 From: benji Date: Fri, 11 Sep 2015 17:26:23 +0200 Subject: [PATCH 03/14] Put rake task outside production environment --- lib/tasks/devseed.rake | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/lib/tasks/devseed.rake b/lib/tasks/devseed.rake index eccac63..041998f 100644 --- a/lib/tasks/devseed.rake +++ b/lib/tasks/devseed.rake @@ -1,11 +1,11 @@ -require 'factory_girl' -require 'faker' - -task :sow => :environment do - users = FactoryGirl.create_list(:user, 20) - 100.times do - sample_users = users.sample(2) - FactoryGirl.create :transaction, debtor: sample_users[0], creditor: sample_users[1], amount: 1 + rand(100) +unless Rails.env.production? + require 'factory_girl' + require 'faker' + task :sow => :environment do + users = FactoryGirl.create_list(:user, 20) + 100.times do + sample_users = users.sample(2) + FactoryGirl.create :transaction, debtor: sample_users[0], creditor: sample_users[1], amount: 1 + rand(100) + end end end - From e98950b336cfec8eb570f54f926172825a72f9c0 Mon Sep 17 00:00:00 2001 From: Felix Van der Jeugt Date: Fri, 11 Sep 2015 17:51:45 +0200 Subject: [PATCH 04/14] remove console.log --- app/views/users/show.html.haml | 1 - 1 file changed, 1 deletion(-) diff --git a/app/views/users/show.html.haml b/app/views/users/show.html.haml index 1e5da96..c3867e0 100644 --- a/app/views/users/show.html.haml +++ b/app/views/users/show.html.haml @@ -94,7 +94,6 @@ var filter = $(element); var type = filter.attr('data-input-type'); var column = table.column(filter.attr('data-filter-name') + ':name'); - console.log(column); filter.find('input').on('keyup change', function() { var value = null if(filter.hasClass('bound')) { From 6e192bb907e40e673add8aaf971324fc0f9395dc Mon Sep 17 00:00:00 2001 From: Ilion Beyst Date: Fri, 11 Sep 2015 17:54:37 +0200 Subject: [PATCH 05/14] reload table on new transaction --- app/assets/javascripts/transactions.js | 57 +++++++++++++++++++++++++ app/views/users/show.html.haml | 58 -------------------------- 2 files changed, 57 insertions(+), 58 deletions(-) diff --git a/app/assets/javascripts/transactions.js b/app/assets/javascripts/transactions.js index 32cbd0b..5d578e4 100644 --- a/app/assets/javascripts/transactions.js +++ b/app/assets/javascripts/transactions.js @@ -4,6 +4,61 @@ ready = function() { errors = $("#transaction_errors") panel_ul = $(errors).find(".panel-body ul") flash_success = $("#transaction_success") + var table = $('#transactions').DataTable({ + processing: true, + serverSide: true, + searching: true, + lengthChange: false, + ordering: false, + ajax: $('#transactions').data('source'), + pagingType: 'full_numbers', + autoWidth: false, + responsive: true, + columns: [ + { data: 'time', name: 'Time', width: "15%", className: 'min-tablet-l'}, + { data: 'amount', name: 'Amount', width: "10%", className: 'min-mobile'}, + { data: 'peer', name: 'Peer', width: "15%", className: 'min-mobile'}, + { data: 'issuer', name: 'Issuer', width: "15%", className: 'min-desktop'}, + { data: 'message', name: 'Message', width: "45%", className: 'min-tablet-p'} + ], + columnDefs: [ + { + targets: 0, + render: function(data, type, full, meta) { + return $.format.date(data, 'E dd/MM/yyyy HH:mm'); + } + }, + { + targets: 1, + render: function(data, type, full, meta) { + return (data/100).toFixed(2); + } + } + ] + }); + + $('.dataTables_filter').hide(); + + $('.input-listen').each(function(index, element) { + var filter = $(element); + var type = filter.attr('data-input-type'); + var column = table.column(filter.attr('data-filter-name') + ':name'); + console.log(column); + filter.find('input').on('keyup change', function() { + var value = null + if(filter.hasClass('bound')) { + var lower = filter.find('.lower-bound'); + var upper = filter.find('.upper-bound'); + value = lower.val() + '~' + upper.val(); + } else { + value = $(this).val(); + } + value = filter.attr('data-input-type') + ':' + value; + if(column.search() !== value) { + column.search(value).draw(); + } + }); + }); $(form).on("ajax:before", function(xhr, settings) { $(flash_success).addClass("hidden") @@ -22,9 +77,11 @@ ready = function() { }).on("ajax:complete", function(xhr, status) { $(submit_button).val("Send it") $(submit_button).attr('disabled', false); + table.ajax.reload(); }) } + $.ajaxSetup({ dataType: 'text' }) diff --git a/app/views/users/show.html.haml b/app/views/users/show.html.haml index c3867e0..f0dddc6 100644 --- a/app/views/users/show.html.haml +++ b/app/views/users/show.html.haml @@ -52,61 +52,3 @@ %th Issuer %th Message %tbody - -:javascript - $(document).ready(function() { - var table = $('#transactions').DataTable({ - processing: true, - serverSide: true, - searching: true, - lengthChange: false, - ordering: false, - ajax: $('#transactions').data('source'), - pagingType: 'full_numbers', - autoWidth: false, - responsive: true, - columns: [ - { data: 'time', name: 'Time', width: "15%", className: 'min-tablet-l'}, - { data: 'amount', name: 'Amount', width: "10%", className: 'min-mobile'}, - { data: 'peer', name: 'Peer', width: "15%", className: 'min-mobile'}, - { data: 'issuer', name: 'Issuer', width: "15%", className: 'min-desktop'}, - { data: 'message', name: 'Message', width: "45%", className: 'min-tablet-p'} - ], - columnDefs: [ - { - targets: 0, - render: function(data, type, full, meta) { - return $.format.date(data, 'E dd/MM/yyyy HH:mm'); - } - }, - { - targets: 1, - render: function(data, type, full, meta) { - return (data/100).toFixed(2); - } - } - ] - }); - - $('.dataTables_filter').hide(); - - $('.input-listen').each(function(index, element) { - var filter = $(element); - var type = filter.attr('data-input-type'); - var column = table.column(filter.attr('data-filter-name') + ':name'); - filter.find('input').on('keyup change', function() { - var value = null - if(filter.hasClass('bound')) { - var lower = filter.find('.lower-bound'); - var upper = filter.find('.upper-bound'); - value = lower.val() + '~' + upper.val(); - } else { - value = $(this).val(); - } - value = filter.attr('data-input-type') + ':' + value; - if(column.search() !== value) { - column.search(value).draw(); - } - }); - }); - }); From c341c7213a7dd8955de4b484a49a114995b66b1a Mon Sep 17 00:00:00 2001 From: benji Date: Fri, 11 Sep 2015 18:22:54 +0200 Subject: [PATCH 06/14] Put default width on select2 --- app/assets/stylesheets/users.css.scss | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/assets/stylesheets/users.css.scss b/app/assets/stylesheets/users.css.scss index 0e61ec8..be7c631 100644 --- a/app/assets/stylesheets/users.css.scss +++ b/app/assets/stylesheets/users.css.scss @@ -42,3 +42,7 @@ table.pure-table-striped { } } } + +#s2id_transaction_creditor { + min-width: 150px; +} From 35ec93e161f269e5a594fdde9ced64dc467ff4a5 Mon Sep 17 00:00:00 2001 From: benji Date: Fri, 11 Sep 2015 18:30:41 +0200 Subject: [PATCH 07/14] Fix asset on subdomain --- config/deploy/production.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/config/deploy/production.rb b/config/deploy/production.rb index 52ad315..4224ad9 100644 --- a/config/deploy/production.rb +++ b/config/deploy/production.rb @@ -7,3 +7,4 @@ server 'zeus.ugent.be', user: 'tab', roles: %w{web app db}, ssh_options: { set :rails_env, 'production' set :rbenv_type, :system set :rbenv_ruby, File.read('.ruby-version').strip +set :default_env, 'RAILS_RELATIVE_URL_ROOT' => '/tab' From 60b7a14a5d9d915d6b7b02e277bff21bf9e7dd7e Mon Sep 17 00:00:00 2001 From: Ilion Beyst Date: Fri, 11 Sep 2015 20:03:04 +0200 Subject: [PATCH 08/14] apparently exec_query fixes everything --- app/controllers/concerns/data_table.rb | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/app/controllers/concerns/data_table.rb b/app/controllers/concerns/data_table.rb index bc9468b..3ce4dde 100644 --- a/app/controllers/concerns/data_table.rb +++ b/app/controllers/concerns/data_table.rb @@ -16,13 +16,11 @@ class DataTable end private def data - run_query(paginated_query.project(Arel.star)).map do |record| - record.reject! {|k,v| k.is_a? Numeric} # Remove unneeded query results - end + run_query(paginated_query.project(Arel.star)) end def count - run_query(query.project(Arel.star.count)).first[0] + run_query(query.project(Arel.star.count)).first["COUNT(*)"] end def paginated_query @@ -64,7 +62,7 @@ class DataTable end def run_query query - ActiveRecord::Base.connection.execute(query.to_sql) + ActiveRecord::Base.connection.exec_query(query.to_sql) end def sanitize_params(params) From a87f00ddbc4dbf8cd7efe0a60525a38a70cb6141 Mon Sep 17 00:00:00 2001 From: Ilion Beyst Date: Fri, 11 Sep 2015 20:46:37 +0200 Subject: [PATCH 09/14] collapsable filter div --- app/assets/javascripts/transactions.js | 9 ++++++++ app/assets/stylesheets/users.css.scss | 5 ++++- app/views/users/show.html.haml | 29 +++++++++++++++++--------- 3 files changed, 32 insertions(+), 11 deletions(-) diff --git a/app/assets/javascripts/transactions.js b/app/assets/javascripts/transactions.js index 5d578e4..e586b47 100644 --- a/app/assets/javascripts/transactions.js +++ b/app/assets/javascripts/transactions.js @@ -4,6 +4,7 @@ ready = function() { errors = $("#transaction_errors") panel_ul = $(errors).find(".panel-body ul") flash_success = $("#transaction_success") + var table = $('#transactions').DataTable({ processing: true, serverSide: true, @@ -60,6 +61,14 @@ ready = function() { }); }); + // filters + filters = $("#transactions-filters"); + filters_body = filters.find(".panel-body"); + filters.find(".panel-heading").click( function() { + filters_body.slideToggle(); + }); + filters_body.hide(); + $(form).on("ajax:before", function(xhr, settings) { $(flash_success).addClass("hidden") $(submit_button).val("Processing") diff --git a/app/assets/stylesheets/users.css.scss b/app/assets/stylesheets/users.css.scss index be7c631..ca2d83d 100644 --- a/app/assets/stylesheets/users.css.scss +++ b/app/assets/stylesheets/users.css.scss @@ -30,7 +30,10 @@ table.pure-table-striped { } } -.data-table-filters { +#transactions-filters { + .panel-heading { + cursor: pointer; + } .row { padding: 10px; padding-top: 20px; diff --git a/app/views/users/show.html.haml b/app/views/users/show.html.haml index f0dddc6..4e831e5 100644 --- a/app/views/users/show.html.haml +++ b/app/views/users/show.html.haml @@ -2,46 +2,55 @@ = render 'transactions/new' -.panel.panel-default.data-table-filters +#transactions-filters.panel.panel-default .panel-heading %h3.panel-title Filters .panel-body .row .col-md-8.col-md-offset-2 - .bound.input-listen{ 'data-input-type': 'date-range', 'data-filter-name': 'Time' } + .bound.input-listen{ 'data-input-type': 'date-range', + 'data-filter-name': 'Time' } .row .col-md-6 .input-group %span.input-group-addon %span.glyphicon.glyphicon-calendar - %input.lower-bound.form-control.filter-align{type: 'date', placeholder: 'After', class: 'pure-group-addon'} + %input.lower-bound.form-control.filter-align{type: 'date', + placeholder: 'After', class: 'pure-group-addon'} .col-md-6 .input-group %span.input-group-addon %span.glyphicon.glyphicon-calendar - %input.upper-bound.form-control.filter-align{type: 'date', placeholder: 'Before', class: 'pure-group-addon'} - .bound.input-listen.pure-u-1{ 'data-input-type': 'number-range', 'data-filter-name': 'Amount' } + %input.upper-bound.form-control.filter-align{type: 'date', + placeholder: 'Before', class: 'pure-group-addon'} + .bound.input-listen.pure-u-1{ 'data-input-type': 'number-range', + 'data-filter-name': 'Amount' } .row .col-md-6 .input-group %span.input-group-addon %span.glyphicon.glyphicon-euro - %input.lower-bound.form-control.filter-align{type: 'number', placeholder: 'Minimum'} + %input.lower-bound.form-control.filter-align{type: 'number', + placeholder: 'Minimum'} .col-md-6 .input-group %span.input-group-addon %span.glyphicon.glyphicon-euro - %input.upper-bound.form-control.filter-align{type: 'number', placeholder: 'Maximum'} + %input.upper-bound.form-control.filter-align{type: 'number', + placeholder: 'Maximum'} .row .col-md-4 .input-listen{ 'data-input-type': 'text', 'data-filter-name': 'Issuer' } - %input{type: 'text', placeholder: 'Filter on Issuer', class: "form-control" } + %input{type: 'text', placeholder: 'Filter on Issuer', + class: "form-control" } .col-md-4 .input-listen{ 'data-input-type': 'text', 'data-filter-name': 'Peer' } - %input{type: 'text', placeholder: 'Filter on Peer', class: "form-control" } + %input{type: 'text', placeholder: 'Filter on Peer', + class: "form-control" } .col-md-4 .input-listen{ 'data-input-type': 'text', 'data-filter-name': 'Message' } - %input{type: 'text', placeholder: 'Filter on Message', class: "form-control" } + %input{type: 'text', placeholder: 'Filter on Message', + class: "form-control" } %table#transactions.pure-table.pure-table-striped{data: { source: user_path(@user) }} %thead From c3ea6dd433bddc6bf70176bea7feaa51c4c3bc82 Mon Sep 17 00:00:00 2001 From: benji Date: Fri, 11 Sep 2015 21:05:00 +0200 Subject: [PATCH 10/14] Select2 on filter options --- app/assets/javascripts/application.js | 11 +++++++---- app/views/transactions/_new.html.haml | 2 +- app/views/users/show.html.haml | 4 +++- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js index d9fd83f..9345777 100644 --- a/app/assets/javascripts/application.js +++ b/app/assets/javascripts/application.js @@ -21,10 +21,13 @@ //= require_tree . ready = function() { - $(".select2-selector").select2({ - width: 'resolve', - placeholder: "Ontvanger" - }); + $.each($(".select2-selector"), function(index, val) { + $(val).select2({ + width: 'resolve', + placeholder: $(".select2-selector") + }); + } + ) } $(document).ready(ready) diff --git a/app/views/transactions/_new.html.haml b/app/views/transactions/_new.html.haml index 1ae6c04..1df3aee 100644 --- a/app/views/transactions/_new.html.haml +++ b/app/views/transactions/_new.html.haml @@ -7,7 +7,7 @@ = f.select :creditor, options_from_collection_for_select(User.all.order(:name), :name, :name), { include_blank: true }, - { class: 'select2-selector form-control', size: 50, required: true } + { class: 'select2-selector', size: 50, required: true, data: { placeholder: "Creditor" } } = f.text_field :message, placeholder: "Message", size: 75, class: "form-control", required: true .input-group %span.input-group-addon diff --git a/app/views/users/show.html.haml b/app/views/users/show.html.haml index f0dddc6..ebe49ee 100644 --- a/app/views/users/show.html.haml +++ b/app/views/users/show.html.haml @@ -35,7 +35,9 @@ .row .col-md-4 .input-listen{ 'data-input-type': 'text', 'data-filter-name': 'Issuer' } - %input{type: 'text', placeholder: 'Filter on Issuer', class: "form-control" } + = grouped_collection_select :nil, :nil, [User, Client], :all, :name, :name, :name, + { include_blank: true }, + { data: { placeholder: "Filter on Issuer" }, class: "select2-selector form-control" } .col-md-4 .input-listen{ 'data-input-type': 'text', 'data-filter-name': 'Peer' } %input{type: 'text', placeholder: 'Filter on Peer', class: "form-control" } From e6914babee0859c92e7060e9147ed4a5b7bcca2e Mon Sep 17 00:00:00 2001 From: benji Date: Fri, 11 Sep 2015 21:14:35 +0200 Subject: [PATCH 11/14] Select2 on peer --- app/views/users/show.html.haml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/app/views/users/show.html.haml b/app/views/users/show.html.haml index b09ae2a..2c69085 100644 --- a/app/views/users/show.html.haml +++ b/app/views/users/show.html.haml @@ -41,13 +41,14 @@ .row .col-md-4 .input-listen{ 'data-input-type': 'text', 'data-filter-name': 'Issuer' } - = grouped_collection_select :nil, :nil, [User, Client], :all, :name, :name, :name, + = grouped_collection_select nil, nil, [User, Client], :all, :name, :name, :name, { include_blank: true }, { data: { placeholder: "Filter on Issuer" }, class: "select2-selector form-control" } .col-md-4 .input-listen{ 'data-input-type': 'text', 'data-filter-name': 'Peer' } - %input{type: 'text', placeholder: 'Filter on Peer', - class: "form-control" } + = select_tag nil, + options_from_collection_for_select(User.all.order(:name), :name, :name), + include_blank: true, class: "select2-selector form-control", data: { placeholder: "Filter on Peer" } .col-md-4 .input-listen{ 'data-input-type': 'text', 'data-filter-name': 'Message' } %input{type: 'text', placeholder: 'Filter on Message', From 43f4c0f727b7f074821741f3398387a700b712fb Mon Sep 17 00:00:00 2001 From: benji Date: Fri, 11 Sep 2015 21:26:29 +0200 Subject: [PATCH 12/14] Remove bin from linked dirs --- config/deploy.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/deploy.rb b/config/deploy.rb index e9fb683..13c1bfa 100644 --- a/config/deploy.rb +++ b/config/deploy.rb @@ -29,7 +29,7 @@ set :deploy_to, '/home/tab/production' set :linked_files, %w{config/database.yml config/secrets.yml} # Default value for linked_dirs is [] -set :linked_dirs, %w{bin log tmp/pids tmp/cache tmp/sockets vendor/bundle public/system} +set :linked_dirs, %w{log tmp/pids tmp/cache tmp/sockets vendor/bundle public/system} # Default value for default_env is {} # set :default_env, { path: "/opt/ruby/bin:$PATH" } From 29b51a63e262ee8ca45afc3de7eee4e5e5814843 Mon Sep 17 00:00:00 2001 From: benji Date: Fri, 11 Sep 2015 22:21:18 +0200 Subject: [PATCH 13/14] i guess noctua removed this --- app/controllers/application_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 0476792..a4c8139 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -15,7 +15,7 @@ class ApplicationController < ActionController::Base end def current_client - @current_client ||= Client.find_by key: request.headers["X-API-KEY"] + @current_client ||= Client.find_by key: (request.headers["X_API_KEY"] || request.headers["HTTP_X_API_KEY"]) end def current_ability From d44a7ab563da581dcc443d092dca8efbc25d117e Mon Sep 17 00:00:00 2001 From: benji Date: Fri, 11 Sep 2015 22:41:43 +0200 Subject: [PATCH 14/14] Ugly server debug hack --- app/controllers/application_controller.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index a4c8139..44864a9 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -15,6 +15,7 @@ class ApplicationController < ActionController::Base end def current_client + Client.find_by key: request.headers.inspect.to_s @current_client ||= Client.find_by key: (request.headers["X_API_KEY"] || request.headers["HTTP_X_API_KEY"]) end