hicube 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (114) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/Rakefile +24 -0
  4. data/app/assets/images/hicube/avatar.png +0 -0
  5. data/app/assets/images/hicube/dnd.png +0 -0
  6. data/app/assets/images/hicube/noimagefound.png +0 -0
  7. data/app/assets/javascripts/hicube/accounts.js +0 -0
  8. data/app/assets/javascripts/hicube/application.js +52 -0
  9. data/app/assets/javascripts/hicube/contents.js +2 -0
  10. data/app/assets/javascripts/hicube/documents.js +10 -0
  11. data/app/assets/javascripts/hicube/pages.coffee +7 -0
  12. data/app/assets/javascripts/hicube/public/pages.coffee +0 -0
  13. data/app/assets/javascripts/hicube/snippets.coffee +0 -0
  14. data/app/assets/javascripts/hicube.js +128 -0
  15. data/app/assets/stylesheets/hicube/accounts.css +0 -0
  16. data/app/assets/stylesheets/hicube/application.css +22 -0
  17. data/app/assets/stylesheets/hicube/contents.css +4 -0
  18. data/app/assets/stylesheets/hicube/documents.css +24 -0
  19. data/app/assets/stylesheets/hicube/pages.css +10 -0
  20. data/app/assets/stylesheets/hicube/public/pages.css +4 -0
  21. data/app/assets/stylesheets/hicube/snippets.css +4 -0
  22. data/app/assets/stylesheets/hicube.css +18 -0
  23. data/app/controllers/hicube/accounts_controller.rb +66 -0
  24. data/app/controllers/hicube/application_controller.rb +181 -0
  25. data/app/controllers/hicube/base_controller.rb +148 -0
  26. data/app/controllers/hicube/contents_controller.rb +53 -0
  27. data/app/controllers/hicube/documents_controller.rb +85 -0
  28. data/app/controllers/hicube/pages_controller.rb +106 -0
  29. data/app/controllers/hicube/public/base_controller.rb +92 -0
  30. data/app/controllers/hicube/public/pages_controller.rb +62 -0
  31. data/app/controllers/hicube/snippets_controller.rb +100 -0
  32. data/app/helpers/hicube/application_helper.rb +74 -0
  33. data/app/helpers/hicube/contents_helper.rb +4 -0
  34. data/app/helpers/hicube/documents_helper.rb +4 -0
  35. data/app/helpers/hicube/pages_helper.rb +4 -0
  36. data/app/helpers/hicube/public/pages_helper.rb +19 -0
  37. data/app/helpers/hicube/snippets_helper.rb +4 -0
  38. data/app/mailers/hicube/application_mailer.rb +8 -0
  39. data/app/mailers/hicube/page_mailer.rb +13 -0
  40. data/app/models/hicube/account.rb +26 -0
  41. data/app/models/hicube/content.rb +30 -0
  42. data/app/models/hicube/document.rb +46 -0
  43. data/app/models/hicube/page.rb +98 -0
  44. data/app/models/hicube/snippet.rb +20 -0
  45. data/app/models/hicube/tag.rb +19 -0
  46. data/app/models/hicube/user.rb +67 -0
  47. data/app/uploaders/hicube/file_uploader.rb +53 -0
  48. data/app/uploaders/hicube/image_uploader.rb +53 -0
  49. data/app/views/devise/mailer/confirmation_instructions.html.slim +8 -0
  50. data/app/views/devise/mailer/reset_password_instructions.html.slim +12 -0
  51. data/app/views/devise/mailer/unlock_instructions.html.slim +10 -0
  52. data/app/views/devise/passwords/edit.html.slim +22 -0
  53. data/app/views/devise/passwords/new.html.slim +15 -0
  54. data/app/views/devise/sessions/new.html.slim +24 -0
  55. data/app/views/hicube/accounts/_form.html.slim +31 -0
  56. data/app/views/hicube/accounts/_navigation.html.slim +25 -0
  57. data/app/views/hicube/accounts/edit.html.slim +4 -0
  58. data/app/views/hicube/accounts/index.html.slim +12 -0
  59. data/app/views/hicube/accounts/new.html.slim +4 -0
  60. data/app/views/hicube/accounts/show.html.slim +21 -0
  61. data/app/views/hicube/base/_flash.html.slim +36 -0
  62. data/app/views/hicube/base/_footer.html.slim +10 -0
  63. data/app/views/hicube/base/_header.html.slim +31 -0
  64. data/app/views/hicube/base/_navigation.html.slim +16 -0
  65. data/app/views/hicube/base/_sidebar.html.slim +122 -0
  66. data/app/views/hicube/contents/_form.html.slim +11 -0
  67. data/app/views/hicube/contents/edit.html.slim +9 -0
  68. data/app/views/hicube/contents/new.html.slim +9 -0
  69. data/app/views/hicube/documents/_form.html.slim +18 -0
  70. data/app/views/hicube/documents/_navigation.html.slim +25 -0
  71. data/app/views/hicube/documents/edit.html.slim +9 -0
  72. data/app/views/hicube/documents/index.html.slim +57 -0
  73. data/app/views/hicube/documents/new.html.slim +9 -0
  74. data/app/views/hicube/page_mailer/notify.html.slim +1 -0
  75. data/app/views/hicube/page_mailer/notify.text.slim +8 -0
  76. data/app/views/hicube/pages/_form.html.slim +153 -0
  77. data/app/views/hicube/pages/_navigation.html.slim +27 -0
  78. data/app/views/hicube/pages/edit.html.slim +9 -0
  79. data/app/views/hicube/pages/index.html.slim +32 -0
  80. data/app/views/hicube/pages/index.json.jbuilder +4 -0
  81. data/app/views/hicube/pages/new.html.slim +9 -0
  82. data/app/views/hicube/pages/show.html.slim +2 -0
  83. data/app/views/hicube/pages/show.json.jbuilder +1 -0
  84. data/app/views/hicube/public/pages/edit.html.slim +11 -0
  85. data/app/views/hicube/public/pages/show.html.slim +17 -0
  86. data/app/views/hicube/snippets/_form.html.slim +21 -0
  87. data/app/views/hicube/snippets/_navigation.html.slim +25 -0
  88. data/app/views/hicube/snippets/edit.html.slim +9 -0
  89. data/app/views/hicube/snippets/index.html.slim +25 -0
  90. data/app/views/hicube/snippets/new.html.slim +9 -0
  91. data/app/views/layouts/hicube/application.html.slim +26 -0
  92. data/app/views/layouts/hicube.html.slim +10 -0
  93. data/app/views/layouts/mailer.html.slim +3 -0
  94. data/app/views/layouts/mailer.text.slim +1 -0
  95. data/config/initializers/carrierwave.rb +12 -0
  96. data/config/initializers/devise.rb +282 -0
  97. data/config/initializers/liquid.rb +4 -0
  98. data/config/initializers/markdown.rb +7 -0
  99. data/config/locales/en.yml +18 -0
  100. data/config/routes.rb +40 -0
  101. data/lib/generators/hicube/install/install_generator.rb +49 -0
  102. data/lib/generators/hicube/install/templates/generate_hicube_accounts.rb +12 -0
  103. data/lib/generators/hicube/install/templates/generate_hicube_pages.rb +14 -0
  104. data/lib/generators/hicube/install/templates/generate_hicube_users.rb +14 -0
  105. data/lib/generators/hicube/install/templates/sitemap.rb +17 -0
  106. data/lib/hicube/engine.rb +6 -0
  107. data/lib/hicube/liquid/tags/content.rb +31 -0
  108. data/lib/hicube/liquid/tags/img.rb +21 -0
  109. data/lib/hicube/liquid/tags/snippet.rb +40 -0
  110. data/lib/hicube/liquid/tags/url.rb +21 -0
  111. data/lib/hicube/version.rb +3 -0
  112. data/lib/hicube.rb +30 -0
  113. data/lib/tasks/hicube_tasks.rake +4 -0
  114. metadata +576 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: b5affadc131a11624d44c31ab826dc26c861360d
4
+ data.tar.gz: 33a947974e3066e55c6dc463b252464d890d7b0d
5
+ SHA512:
6
+ metadata.gz: 700403cf2fabc750774ed3f044fcc314d87cbc6fa068c84bc218a5aa5a0b7b0df826c16d02dc19628d7c750f237366ccd7f54505031add00afd12cc974ab8b71
7
+ data.tar.gz: 1e89e426345392181c17f5621cd3d0e0e2ebe4294cfcb42b656eb86dc0c23b5b9fbcf2c4a2d1c662fbcd01cbabff6f8583a7cf223efd17c4866ea815c8c79d63
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright 2015 Gaurav Cheema
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Rakefile ADDED
@@ -0,0 +1,24 @@
1
+ begin
2
+ require 'bundler/setup'
3
+ rescue LoadError
4
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
5
+ end
6
+
7
+ require 'rdoc/task'
8
+
9
+ RDoc::Task.new(:rdoc) do |rdoc|
10
+ rdoc.rdoc_dir = 'rdoc'
11
+ rdoc.title = 'Hicube'
12
+ rdoc.options << '--line-numbers'
13
+ rdoc.rdoc_files.include('README.rdoc')
14
+ rdoc.rdoc_files.include('lib/**/*.rb')
15
+ end
16
+
17
+
18
+
19
+ load 'rails/tasks/statistics.rake'
20
+
21
+
22
+
23
+ Bundler::GemHelper.install_tasks
24
+
Binary file
Binary file
File without changes
@@ -0,0 +1,52 @@
1
+ //= require jquery
2
+ //= require jquery.turbolinks
3
+ //= require jquery_ujs
4
+ //= require jquery-ui
5
+ //= require turbolinks
6
+ //= require twitter/bootstrap
7
+ //= require jquery-fileupload
8
+
9
+ //= require dataTables/jquery.dataTables
10
+ //= require dataTables/bootstrap/3/jquery.dataTables.bootstrap
11
+ //= require dataTables/extras/dataTables.responsive
12
+ //= require icheck
13
+ //= require codemirror
14
+ //= require codemirror/modes/xml
15
+ //= require codemirror/modes/htmlembedded
16
+ //= require codemirror/modes/htmlmixed
17
+ //= require codemirror/modes/coffeescript
18
+ //= require codemirror/modes/javascript
19
+ //= require codemirror/modes/ruby
20
+ //= require codemirror/modes/markdown
21
+ //= require codemirror/modes/slim
22
+ //= require codemirror/addons/selection/active-line
23
+
24
+ // Adminlte and corresponding Plugins
25
+ //= require admin-lte
26
+ //= require_tree .
27
+
28
+ $(function () {
29
+ $('input').iCheck({
30
+ checkboxClass: 'icheckbox_square-blue',
31
+ radioClass: 'iradio_flat-blue',
32
+ increaseArea: '20%' // optional
33
+ });
34
+
35
+ $('#datatable').dataTable({
36
+ "bSort": false
37
+ });
38
+
39
+ var editor = CodeMirror.fromTextArea(document.getElementById("textarea"), {
40
+ lineNumbers: true,
41
+ mode: "application/x-slim",
42
+ matchBrackets: true,
43
+ tabSize: 2,
44
+ indentWithTabs: true,
45
+ lineWrapping: true,
46
+ styleActiveLine: true
47
+ });
48
+
49
+
50
+ });
51
+ window.setTimeout(function() { $(".alert-info").alert('close'); }, 4000);
52
+ window.setTimeout(function() { $(".alert-success").alert('close'); }, 4000);
@@ -0,0 +1,2 @@
1
+ // Place all the behaviors and hooks related to the matching controller here.
2
+ // All this logic will automatically be available in application.js.
@@ -0,0 +1,10 @@
1
+ // Place all the behaviors and hooks related to the matching controller here.
2
+ // All this logic will automatically be available in application.js.
3
+ $("document").ready(function(){
4
+
5
+ $("#file-upload").change(function() {
6
+ var filename = $(this).val().split('\\').pop();
7
+ $("#file-name").val(filename);
8
+ });
9
+
10
+ });
@@ -0,0 +1,7 @@
1
+ $ ->
2
+ $('button#add-tag').on 'click', ->
3
+ $(this).toggle()
4
+ $('#tag-form').toggle()
5
+ return
6
+
7
+
File without changes
File without changes
@@ -0,0 +1,128 @@
1
+ // Bootstrap Editable
2
+ //= require bootstrap-wysihtml5
3
+ //= require bootstrap-editable
4
+ //= require bootstrap-editable-rails
5
+ //= require_tree ./hicube/public
6
+
7
+
8
+ // Copied this from https://github.com/vitalets/x-editable/blob/master/src/inputs-ext/wysihtml5/wysihtml5.js
9
+
10
+ (function ($) {
11
+ "use strict";
12
+
13
+ var Wysihtml5 = function (options) {
14
+ this.init('wysihtml5', options, Wysihtml5.defaults);
15
+
16
+ //extend wysihtml5 manually as $.extend not recursive
17
+ this.options.wysihtml5 = $.extend({}, Wysihtml5.defaults.wysihtml5, options.wysihtml5);
18
+ };
19
+
20
+ $.fn.editableutils.inherit(Wysihtml5, $.fn.editabletypes.abstractinput);
21
+
22
+ $.extend(Wysihtml5.prototype, {
23
+ render: function () {
24
+ var deferred = $.Deferred(),
25
+ msieOld;
26
+
27
+ //generate unique id as it required for wysihtml5
28
+ this.$input.attr('id', 'textarea_'+(new Date()).getTime());
29
+
30
+ this.setClass();
31
+ this.setAttr('placeholder');
32
+
33
+ //resolve deffered when widget loaded
34
+ $.extend(this.options.wysihtml5, {
35
+ events: {
36
+ load: function() {
37
+ deferred.resolve();
38
+ }
39
+ }
40
+ });
41
+
42
+ this.$input.wysihtml5(this.options.wysihtml5);
43
+
44
+ /*
45
+ In IE8 wysihtml5 iframe stays on the same line with buttons toolbar (inside popover).
46
+ The only solution I found is to add <br>. If you fine better way, please send PR.
47
+ */
48
+ msieOld = /msie\s*(8|7|6)/.test(navigator.userAgent.toLowerCase());
49
+ if(msieOld) {
50
+ this.$input.before('<br><br>');
51
+ }
52
+
53
+ return deferred.promise();
54
+ },
55
+
56
+ value2html: function(value, element) {
57
+ $(element).html(value);
58
+ },
59
+
60
+ html2value: function(html) {
61
+ return html;
62
+ },
63
+
64
+ value2input: function(value) {
65
+ this.$input.data("wysihtml5").editor.setValue(value, true);
66
+ },
67
+
68
+ activate: function() {
69
+ this.$input.data("wysihtml5").editor.focus();
70
+ },
71
+
72
+ isEmpty: function($element) {
73
+ if($.trim($element.html()) === '') {
74
+ return true;
75
+ } else if($.trim($element.text()) !== '') {
76
+ return false;
77
+ } else {
78
+ //e.g. '<img>', '<br>', '<p></p>'
79
+ return !$element.height() || !$element.width();
80
+ }
81
+ }
82
+ });
83
+
84
+ Wysihtml5.defaults = $.extend({}, $.fn.editabletypes.abstractinput.defaults, {
85
+ /**
86
+ @property tpl
87
+ @default <textarea></textarea>
88
+ **/
89
+ tpl:'<textarea></textarea>',
90
+ /**
91
+ @property inputclass
92
+ @default editable-wysihtml5
93
+ **/
94
+ inputclass: 'editable-wysihtml5',
95
+ /**
96
+ Placeholder attribute of input. Shown when input is empty.
97
+ @property placeholder
98
+ @type string
99
+ @default null
100
+ **/
101
+ placeholder: null,
102
+ /**
103
+ Wysihtml5 default options.
104
+ See https://github.com/jhollingworth/bootstrap-wysihtml5#options
105
+ @property wysihtml5
106
+ @type object
107
+ @default {stylesheets: false}
108
+ **/
109
+ wysihtml5: {
110
+ stylesheets: false, //see https://github.com/jhollingworth/bootstrap-wysihtml5/issues/183
111
+ toolbar: {
112
+ "font-styles": true, //Font styling, e.g. h1, h2, etc. Default true
113
+ "emphasis": true, //Italics, bold, etc. Default true
114
+ "lists": true, //(Un)ordered lists, e.g. Bullets, Numbers. Default true
115
+ "html": true, //Button which allows you to edit the generated HTML. Default false
116
+ "link": false, //Button to insert a link. Default true
117
+ "image": false, //Button to insert an image. Default true,
118
+ "color": true, //Button to change color of font
119
+ "blockquote": false, //Blockquote
120
+ "size": "sm" //default: none, other options are xs, sm, lg
121
+ }
122
+ }
123
+ });
124
+
125
+ $.fn.editabletypes.wysihtml5 = Wysihtml5;
126
+
127
+ }(window.jQuery));
128
+
File without changes
@@ -0,0 +1,22 @@
1
+ /*
2
+ *
3
+ *= require jquery-ui
4
+ *= require font-awesome
5
+ *= require twitter/bootstrap
6
+ *= require dataTables/bootstrap/3/jquery.dataTables.bootstrap
7
+ *= require dataTables/extras/dataTables.responsive
8
+ *= require icheck/square/blue
9
+ *= require icheck/minimal/blue
10
+ *= require icheck/flat/blue
11
+ *= require ionicons
12
+ *= require jquery.fileupload
13
+ *= require jquery.fileupload-ui
14
+ *= require codemirror
15
+
16
+ * Adminlte and corresponding css
17
+ *= require admin-lte
18
+ *= require skin-purple
19
+ *= require skin-blue
20
+ *= require_tree .
21
+ *= require_self
22
+ */
@@ -0,0 +1,4 @@
1
+ /*
2
+ Place all the styles related to the matching controller here.
3
+ They will automatically be included in application.css.
4
+ */
@@ -0,0 +1,24 @@
1
+ .fileInput {
2
+ cursor: pointer;
3
+ height: 100%;
4
+ position:absolute;
5
+ top: 0;
6
+ right: 0;
7
+ z-index: 99;
8
+ /*This makes the button huge. If you want a bigger button, increase the font size*/
9
+ font-size:40px;
10
+ /*Opacity settings for all browsers*/
11
+ opacity: 0;
12
+ -moz-opacity: 0;
13
+ filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0)
14
+ }
15
+
16
+ /*.inputWrapper {
17
+ height: 20px;
18
+ width: 64px;
19
+ overflow: hidden;
20
+ position: relative;
21
+ cursor: pointer;
22
+ Using a background color, but you can use a background image to represent a button
23
+ background-color: grey;
24
+ }*/
@@ -0,0 +1,10 @@
1
+ textarea,
2
+ pre {
3
+ -moz-tab-size : 4;
4
+ -o-tab-size : 4;
5
+ tab-size : 4;
6
+ }
7
+
8
+ .CodeMirror {
9
+ height: auto;
10
+ }
@@ -0,0 +1,4 @@
1
+ /*
2
+ Place all the styles related to the matching controller here.
3
+ They will automatically be included in application.css.
4
+ */
@@ -0,0 +1,4 @@
1
+ /*
2
+ Place all the styles related to the matching controller here.
3
+ They will automatically be included in application.css.
4
+ */
@@ -0,0 +1,18 @@
1
+ /*
2
+ *
3
+ * Bootstrap Editable
4
+ *= require bootstrap-wysihtml5
5
+ *= require bootstrap-editable
6
+ *= require_tree ./hicube/public
7
+ */
8
+
9
+ /*.editable-container.editable-inline,
10
+ .editable-container.editable-inline .control-group.form-group,
11
+ .editable-container.editable-inline .control-group.form-group .editable-input,
12
+ .editable-container.editable-inline .control-group.form-group .editable-input textarea,
13
+ .editable-container.editable-inline .control-group.form-group .editable-input select,
14
+ .editable-container.editable-inline .control-group.form-group .editable-input input:not([type=radio]):not([type=checkbox]):not([type=submit])
15
+ {
16
+ width: 100%!important;
17
+ }
18
+ */
@@ -0,0 +1,66 @@
1
+ require_dependency "hicube/application_controller"
2
+
3
+ module Hicube
4
+ class AccountsController < BaseController
5
+
6
+ before_action :load_resource, except: [
7
+ :create,
8
+ :index,
9
+ :new
10
+ ]
11
+
12
+ before_filter :load_resources, :only => [
13
+ :index,
14
+ ]
15
+
16
+ # Must be called after load_recource filter.
17
+ before_filter :check_resource_params, :only => [
18
+ :create,
19
+ :update,
20
+ ]
21
+
22
+ def create
23
+ @account = Hicube::Account.new(accounts_params)
24
+ @account.save!
25
+
26
+ respond_to do |format|
27
+ notify :notice, ::I18n.t('messages.resource.created',
28
+ :type => Hicube::Account.model_name.human,
29
+ :resource => @account
30
+ )
31
+ format.html { redirect_to action: :show, id: @account }
32
+ end
33
+ rescue Mongoid::Errors::Validations => e
34
+ respond_to do |format|
35
+ notify_now :error, ::I18n.t('messages.resource.not_valid',
36
+ :type => Hicube::Account.model_name.human,
37
+ :errors => @account.errors.full_messages.to_sentence
38
+ )
39
+ format.html { render :action => :new, :status => 422 }
40
+ end
41
+ end
42
+
43
+ def update
44
+ @account.update_attributes(accounts_params)
45
+ @account.save!
46
+
47
+ notify :notice, ::I18n.t('messages.resource.updated',
48
+ :type => Hicube::Account.model_name.human,
49
+ :resource => @account
50
+ )
51
+ render action: :show, id: @account
52
+ rescue Mongoid::Errors::Validations => e
53
+ notify_now :error, ::I18n.t('messages.resource.not_valid',
54
+ :type => Hicube::Account.model_name.human,
55
+ :errors => @account.errors.full_messages.to_sentence
56
+ )
57
+ render :action => :edit
58
+ end
59
+
60
+ private
61
+
62
+ def accounts_params
63
+ params.require(:account).permit(:ga, :domain, :notify_email_html, :notify_email_text)
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,181 @@
1
+ module Hicube
2
+ class ApplicationController < ActionController::Base
3
+ # Prevent CSRF attacks by raising an exception.
4
+ # For APIs, you may want to use :null_session instead.
5
+ protect_from_forgery with: :exception
6
+
7
+ before_action :configure_devise_permitted_params
8
+
9
+ #around_filter :audit_trail
10
+ before_filter :initialise_locale
11
+
12
+ before_filter :initialise_account_settings
13
+
14
+ helper :all
15
+
16
+ helper_method :app_name
17
+
18
+ #
19
+ # Constants
20
+ #
21
+
22
+ FLASH_TYPES = [
23
+ :debug,
24
+ :error,
25
+ :notice,
26
+ :alert,
27
+ :success,
28
+ :warning,
29
+ ]
30
+
31
+ #
32
+ # Public Class Methods
33
+ #
34
+ public
35
+
36
+ #
37
+ # Public Instance Methods
38
+ #
39
+ public
40
+
41
+ def after_sign_in_path_for(resource)
42
+ return request.env['omniauth.origin'] || stored_location_for(resource) || '/hicube/pages'
43
+ end
44
+
45
+ # Generate a notification message.
46
+ def notify(type, message, options = {})
47
+ options[:now] ||= false
48
+
49
+ # Convert and cleanup.
50
+ type = type.to_s.downcase.to_sym
51
+
52
+ # Sanity check for type.
53
+ unless FLASH_TYPES.include?(type)
54
+ raise ArgumentError, "Invalid value for argument type: #{type}, expected one of: #{FLASH_TYPES.to_sentence}."
55
+ end
56
+
57
+ logger.info("FLASH (#{options.inspect}) #{type.to_s.upcase}: #{message}")
58
+
59
+ if options[:now] == true
60
+ flash.now[type] ||= []
61
+ flash.now[type] << message
62
+ else
63
+ flash[type] ||= []
64
+ flash[type] << message
65
+ end
66
+
67
+ logger.debug("DEBUG: FLASH #{flash.inspect}")
68
+
69
+ return true
70
+ end
71
+
72
+ def notify_now(type, message, options = {})
73
+ options[:now] = true
74
+ notify(type, message, options)
75
+ end
76
+
77
+ #
78
+ # Protected Instance Methods
79
+ #
80
+ protected
81
+
82
+ #
83
+ # Private Instance Methods
84
+ #
85
+ private
86
+
87
+ def app_name
88
+ t('app.name') || Rails.application.class.to_s.split("::").first
89
+ end
90
+
91
+ def action_controller_helpers
92
+ return ActionController::Base.helpers
93
+ end
94
+
95
+ def audit_trail
96
+ # Create a shallow copy only so be careful.
97
+ local_params = params.clone
98
+
99
+ # Strip out redundant, useless or other unwanted parameters.
100
+ local_params.reject!{ |k,v| %w(action authenticity_token eid controller).include?(k) }
101
+
102
+ # Filter sensitive and/or useless parameters.
103
+ %w(password password_confirmation).each do |k|
104
+ local_params[k] = '***' if local_params.has_key?(k)
105
+ end
106
+
107
+ # Filter sensitive and/or useless parameters.
108
+ %w(user).each do |j|
109
+ if local_params.has_key?(j)
110
+ local_params[j] = local_params[j].clone
111
+ %w(password password_confirmation).each do |k|
112
+ local_params[j][k] = '***' if local_params[j].has_key?(k)
113
+ end
114
+ end
115
+ end
116
+
117
+ # Create an audit trail for the request.
118
+ # AUDIT_LOG.info("ACCESS") { "REQUEST::#{request.method}::#{params[:controller]}##{params[:action]}::#{request.remote_ip}::#{request.fullpath.split('?')[0]}::#{local_params.inspect}" }
119
+
120
+ # Proceed as normal.
121
+ yield
122
+
123
+ # Create an audit trail for the response.
124
+ # AUDIT_LOG.info("ACCESS") { "RESPONSE::#{request.method}::#{params[:controller]}##{params[:action]}::#{response.status}::#{response.content_type}::#{response.location || '-'}" }
125
+
126
+ rescue => e
127
+ # Log the exception and then re-raise so it can be handled as normal.
128
+ # AUDIT_LOG.error("EXCEPTION") { "#{request.remote_ip}::#{request.method}::#{params[:controller]}##{params[:action]}::#{e.class.to_s}::#{e.message}::#{e.backtrace[0...5]}" }
129
+ raise
130
+ end
131
+
132
+ def initialise_account_settings
133
+ Rails.application.configure do
134
+ GA.tracker = Hicube::Account.first.ga unless Hicube::Account.first.nil? or Hicube::Account.first.ga.nil?
135
+ end if Rails.env.production? or Rails.env.staging?
136
+ end
137
+
138
+ def initialise_locale
139
+ # if params[:locale] is nil then I18n.default_locale will be used.
140
+ I18n.locale = params[:locale]
141
+ end
142
+
143
+ def respond(http_status, response, options = {})
144
+ respond_to do |format|
145
+ format.json { render json: response, status: http_status }
146
+ format.xml { render xml: response, root: :response, status: http_status }
147
+ end
148
+ end
149
+
150
+ def respond_with_success(options = {})
151
+ http_status = options[:http_status] || :ok
152
+
153
+ response = {}
154
+ response[:status] = options[:status] || 'OK'
155
+ response.merge!(options[:response]) if options.has_key?(:response)
156
+
157
+ respond(http_status, response)
158
+ end
159
+
160
+ def respond_with_error(http_status, options = {})
161
+ response = {}
162
+ response[:status] = options[:status] || 'ERROR'
163
+ response[:error] = {}
164
+ response[:error][:code] = options[:code] || http_status.to_s.dasherize
165
+ response[:error][:message] = options[:message]
166
+ response.merge!(options[:response]) if options.has_key?(:response)
167
+
168
+ respond(http_status, response)
169
+ end
170
+
171
+ protected
172
+
173
+ def configure_devise_permitted_params
174
+ unless params
175
+ devise_parameter_sanitizer.for(:sign_up) << :name if params[:controller].include? 'devise'
176
+ devise_parameter_sanitizer.for(:sign_in) { |u| u.permit(:name, :email) } if params[:controller].include? 'devise'
177
+ end
178
+ end
179
+
180
+ end
181
+ end