ifd_tools 0.1.0

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.
Files changed (137) hide show
  1. data/MIT-LICENSE +20 -0
  2. data/README.md +28 -0
  3. data/Rakefile +40 -0
  4. data/app/admin/emergency_messages.rb +33 -0
  5. data/app/admin/notifier_updates.rb +42 -0
  6. data/app/admin/software_updates.rb +42 -0
  7. data/app/admin/users.rb +48 -0
  8. data/app/assets/javascripts/ifd_tools/base.js +4 -0
  9. data/app/assets/javascripts/ifd_tools/fusion_charts.js +361 -0
  10. data/app/assets/stylesheets/ifd_tools/active_admin/_analytics.scss +32 -0
  11. data/app/assets/stylesheets/ifd_tools/active_admin/_cleanup.scss +15 -0
  12. data/app/assets/stylesheets/ifd_tools/active_admin/_footer.scss +87 -0
  13. data/app/assets/stylesheets/ifd_tools/active_admin/_square_admin_buttons.scss +27 -0
  14. data/app/assets/stylesheets/ifd_tools/base.scss +4 -0
  15. data/app/assets/swfs/FCF_Area2D.swf +0 -0
  16. data/app/assets/swfs/usa_map.swf +0 -0
  17. data/app/controllers/ifd_tools/application_controller.rb +4 -0
  18. data/app/helpers/ifd_tools/application_helper.rb +30 -0
  19. data/app/models/ifd_tools/emergency_message.rb +27 -0
  20. data/app/models/ifd_tools/notifier_update.rb +28 -0
  21. data/app/models/ifd_tools/software_update.rb +28 -0
  22. data/app/models/ifd_tools/tracking/application_event.rb +6 -0
  23. data/app/models/ifd_tools/tracking/event.rb +51 -0
  24. data/app/models/ifd_tools/tracking.rb +7 -0
  25. data/app/uploaders/software_uploader.rb +18 -0
  26. data/app/views/admin/customers/_trend.html.haml +7 -0
  27. data/app/views/admin/customers/_trend_info_sidebar.html.haml +11 -0
  28. data/app/views/admin/customers/demographic_data.builder +11 -0
  29. data/app/views/admin/customers/events_data.builder +6 -0
  30. data/app/views/admin/customers/filter_events.js.erb +6 -0
  31. data/app/views/admin/customers/trends.html.haml +11 -0
  32. data/app/views/admin/dashboard/_line_graph.html.haml +11 -0
  33. data/app/views/admin/dashboard/_usa_map.html.haml +2 -0
  34. data/app/views/admin/emergency_messages/_form.html.haml +6 -0
  35. data/app/views/admin/notifier_updates/_form.html.haml +9 -0
  36. data/app/views/admin/shared/_footer.html.haml +6 -0
  37. data/app/views/admin/software_updates/_form.html.haml +9 -0
  38. data/app/views/admin/users/_form.html.haml +9 -0
  39. data/app/views/api/emergency_messages.builder +12 -0
  40. data/app/views/api/notifier_updates.builder +15 -0
  41. data/app/views/api/software_updates.builder +15 -0
  42. data/app/views/api/track.builder +6 -0
  43. data/app/views/layouts/ifd_tools/application.html.erb +14 -0
  44. data/config/routes.rb +2 -0
  45. data/db/migrate/20121010183004_create_ifd_tools_emergency_messages.rb +11 -0
  46. data/db/migrate/20121011150939_create_ifd_tools_notifier_updates.rb +14 -0
  47. data/db/migrate/20121011151124_create_ifd_tools_software_updates.rb +14 -0
  48. data/db/migrate/20121011205911_devise_create_users.rb +57 -0
  49. data/db/migrate/20121012123505_create_customers.rb +52 -0
  50. data/db/migrate/20121012133303_create_ifd_tools_tracking_events.rb +14 -0
  51. data/lib/generators/ifd_tools/install/USAGE +5 -0
  52. data/lib/generators/ifd_tools/install/install_generator.rb +153 -0
  53. data/lib/generators/ifd_tools/install/templates/admin/customers.rb +108 -0
  54. data/lib/generators/ifd_tools/install/templates/admin/dashboard.rb +47 -0
  55. data/lib/generators/ifd_tools/install/templates/assets/active_admin.css.scss +7 -0
  56. data/lib/generators/ifd_tools/install/templates/assets/active_admin.js +2 -0
  57. data/lib/generators/ifd_tools/install/templates/assets/application.css.scss +46 -0
  58. data/lib/generators/ifd_tools/install/templates/assets/application.js +2 -0
  59. data/lib/generators/ifd_tools/install/templates/assets/ckeditor.js.coffee +13 -0
  60. data/lib/generators/ifd_tools/install/templates/capistrano/Capfile +5 -0
  61. data/lib/generators/ifd_tools/install/templates/capistrano/deploy/production.rb +2 -0
  62. data/lib/generators/ifd_tools/install/templates/capistrano/deploy/staging.rb +2 -0
  63. data/lib/generators/ifd_tools/install/templates/capistrano/deploy.rb +50 -0
  64. data/lib/generators/ifd_tools/install/templates/config/en.yml +17 -0
  65. data/lib/generators/ifd_tools/install/templates/config/ifd_tools.rb +4 -0
  66. data/lib/generators/ifd_tools/install/templates/config/schedule.rb.erb +28 -0
  67. data/lib/generators/ifd_tools/install/templates/controllers/api_controller.rb +8 -0
  68. data/lib/generators/ifd_tools/install/templates/controllers/application_controller.rb +19 -0
  69. data/lib/generators/ifd_tools/install/templates/controllers/customer_session_controller.rb +39 -0
  70. data/lib/generators/ifd_tools/install/templates/foreman/Procfile +2 -0
  71. data/lib/generators/ifd_tools/install/templates/layouts/application.html.haml +29 -0
  72. data/lib/generators/ifd_tools/install/templates/layouts/application_logged_out.html.haml +21 -0
  73. data/lib/generators/ifd_tools/install/templates/models/ability.rb +23 -0
  74. data/lib/generators/ifd_tools/install/templates/models/customer.rb +60 -0
  75. data/lib/generators/ifd_tools/install/templates/models/settings.rb +5 -0
  76. data/lib/generators/ifd_tools/install/templates/models/user.rb +31 -0
  77. data/lib/generators/ifd_tools/install/templates/settings/application.yml +16 -0
  78. data/lib/generators/ifd_tools/install/templates/views/customers/_form.html.haml +8 -0
  79. data/lib/ifd_tools/active_admin/base.rb +18 -0
  80. data/lib/ifd_tools/api_controller/emergency_messages.rb +9 -0
  81. data/lib/ifd_tools/api_controller/notifier_updates.rb +9 -0
  82. data/lib/ifd_tools/api_controller/software_updates.rb +9 -0
  83. data/lib/ifd_tools/api_controller/tracking.rb +44 -0
  84. data/lib/ifd_tools/api_controller_extensions.rb +18 -0
  85. data/lib/ifd_tools/configure.rb +27 -0
  86. data/lib/ifd_tools/date_time_additions.rb +11 -0
  87. data/lib/ifd_tools/engine.rb +17 -0
  88. data/lib/ifd_tools/states.rb +59 -0
  89. data/lib/ifd_tools/tracking/customer_tracking.rb +143 -0
  90. data/lib/ifd_tools/tracking/trackable.rb +28 -0
  91. data/lib/ifd_tools/validations/phone.rb +17 -0
  92. data/lib/ifd_tools/version.rb +3 -0
  93. data/lib/ifd_tools.rb +26 -0
  94. data/lib/tasks/ifd_tools_tasks.rake +2 -0
  95. data/test/dummy/README.rdoc +261 -0
  96. data/test/dummy/Rakefile +7 -0
  97. data/test/dummy/app/assets/javascripts/application.js +15 -0
  98. data/test/dummy/app/assets/stylesheets/application.css +13 -0
  99. data/test/dummy/app/controllers/application_controller.rb +3 -0
  100. data/test/dummy/app/helpers/application_helper.rb +2 -0
  101. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  102. data/test/dummy/config/application.rb +59 -0
  103. data/test/dummy/config/boot.rb +10 -0
  104. data/test/dummy/config/database.yml +25 -0
  105. data/test/dummy/config/environment.rb +5 -0
  106. data/test/dummy/config/environments/development.rb +37 -0
  107. data/test/dummy/config/environments/production.rb +67 -0
  108. data/test/dummy/config/environments/test.rb +37 -0
  109. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  110. data/test/dummy/config/initializers/inflections.rb +15 -0
  111. data/test/dummy/config/initializers/mime_types.rb +5 -0
  112. data/test/dummy/config/initializers/secret_token.rb +7 -0
  113. data/test/dummy/config/initializers/session_store.rb +8 -0
  114. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  115. data/test/dummy/config/locales/en.yml +5 -0
  116. data/test/dummy/config/routes.rb +4 -0
  117. data/test/dummy/config.ru +4 -0
  118. data/test/dummy/db/development.sqlite3 +0 -0
  119. data/test/dummy/db/schema.rb +24 -0
  120. data/test/dummy/log/development.log +15 -0
  121. data/test/dummy/public/404.html +26 -0
  122. data/test/dummy/public/422.html +26 -0
  123. data/test/dummy/public/500.html +25 -0
  124. data/test/dummy/public/favicon.ico +0 -0
  125. data/test/dummy/script/rails +6 -0
  126. data/test/fixtures/ifd_tools/emergency_messages.yml +11 -0
  127. data/test/fixtures/ifd_tools/notifier_updates.yml +17 -0
  128. data/test/fixtures/ifd_tools/software_updates.yml +17 -0
  129. data/test/fixtures/ifd_tools/tracking/events.yml +17 -0
  130. data/test/ifd_tools_test.rb +7 -0
  131. data/test/integration/navigation_test.rb +10 -0
  132. data/test/test_helper.rb +15 -0
  133. data/test/unit/ifd_tools/emergency_message_test.rb +9 -0
  134. data/test/unit/ifd_tools/notifier_update_test.rb +9 -0
  135. data/test/unit/ifd_tools/software_update_test.rb +9 -0
  136. data/test/unit/ifd_tools/tracking/event_test.rb +9 -0
  137. metadata +464 -0
@@ -0,0 +1,52 @@
1
+ class CreateCustomers < ActiveRecord::Migration
2
+ def change
3
+ create_table(:customers) do |t|
4
+ ## Database authenticatable
5
+ t.string :email, :null => false, :default => ""
6
+ t.string :encrypted_password, :null => false, :default => ""
7
+
8
+ ## Recoverable
9
+ t.string :reset_password_token
10
+ t.datetime :reset_password_sent_at
11
+
12
+ ## Rememberable
13
+ t.datetime :remember_created_at
14
+
15
+ ## Trackable
16
+ t.integer :sign_in_count, :default => 0
17
+ t.datetime :current_sign_in_at
18
+ t.datetime :last_sign_in_at
19
+ t.string :current_sign_in_ip
20
+ t.string :last_sign_in_ip
21
+
22
+ ## Confirmable
23
+ t.string :confirmation_token
24
+ t.datetime :confirmed_at
25
+ t.datetime :confirmation_sent_at
26
+ t.string :unconfirmed_email # Only if using reconfirmable
27
+
28
+ ## Token authenticatable
29
+ t.string :authentication_token
30
+
31
+ # Additional Fields
32
+ t.string :first_name
33
+ t.string :last_name
34
+ t.string :phone
35
+ t.string :street
36
+ t.string :city
37
+ t.string :state, length: 2
38
+ t.string :zip, length: 15
39
+ t.string :platform
40
+ t.string :status, default: "pending"
41
+ t.string :url
42
+
43
+ t.timestamps
44
+ end
45
+
46
+ add_index :customers, :email, :unique => true
47
+ add_index :customers, :reset_password_token, :unique => true
48
+ add_index :customers, :confirmation_token, :unique => true
49
+ add_index :customers, :authentication_token, :unique => true
50
+ add_index :customers, :platform
51
+ end
52
+ end
@@ -0,0 +1,14 @@
1
+ class CreateIfdToolsTrackingEvents < ActiveRecord::Migration
2
+ def change
3
+ create_table :ifd_tools_tracking_events do |t|
4
+ t.references :customer
5
+ t.string :ip_address
6
+ t.string :type
7
+ t.datetime :timestamp
8
+ t.string :platform
9
+ t.references :trackable, polymorphic: true
10
+ end
11
+ add_index :ifd_tools_tracking_events, :customer_id
12
+ add_index :ifd_tools_tracking_events, :trackable_id
13
+ end
14
+ end
@@ -0,0 +1,5 @@
1
+ Description:
2
+ This will install Devise, ActiveAdmin & configure a blank Rails application to useful defaults
3
+
4
+ Example:
5
+ rails generate ifd_tools:install
@@ -0,0 +1,153 @@
1
+ # http://rdoc.info/github/wycats/thor/master/Thor/Actions#inside-instance_method
2
+ # http://guides.rubyonrails.org/generators.html#customizing-your-workflow-by-changing-generators-templates
3
+ module IfdTools
4
+ class InstallGenerator < Rails::Generators::Base
5
+
6
+ desc "Will setup new Rails app for use with IfdTools"
7
+ source_root File.expand_path('../templates', __FILE__)
8
+
9
+ def add_gems
10
+ gem "capistrano", group: :development
11
+ gem "rvm-capistrano", group: :development
12
+ gem 'foreman', group: :development
13
+ gem 'thin'
14
+ end
15
+
16
+ def setup_delayed_job
17
+ generate "delayed_job:active_record"
18
+ end
19
+
20
+ def setup_wheneverize
21
+ gem 'whenever', require: false
22
+ template "config/schedule.rb.erb", "#{Rails.root}/config/schedule.rb"
23
+ end
24
+
25
+ def setup_active_admin
26
+ generate "active_admin:install", "User"
27
+ remove_file "#{Rails.root}/app/admin/user.rb", verbose: false
28
+ remove_file "#{Rails.root}/app/models/user.rb", verbose: false
29
+ template "models/user.rb", "#{Rails.root}/app/models/user.rb"
30
+ application(nil, env: :production) do
31
+ 'config.assets.precompile += %w( ckeditor/config.js active_admin.css active_admin.js active_admin/print.css )'
32
+ end
33
+ end
34
+
35
+ def cleanup_assets
36
+
37
+ remove_file "#{Rails.root}/app/assets/stylesheets/active_admin.css.scss", verbose: false
38
+ template "assets/active_admin.css.scss", "#{Rails.root}/app/assets/stylesheets/active_admin.css.scss"
39
+
40
+ remove_file "#{Rails.root}/app/assets/stylesheets/application.css", verbose: false
41
+ template "assets/application.css.scss", "#{Rails.root}/app/assets/stylesheets/application.css.scss"
42
+
43
+
44
+ %w(active_admin.js application.js).each do |js|
45
+ remove_file "#{Rails.root}/app/assets/javascripts/#{js}", verbose: false
46
+ template "assets/#{js}", "#{Rails.root}/app/assets/javascripts/#{js}"
47
+ end
48
+
49
+ empty_directory "#{Rails.root}/app/assets/javascripts/ckeditor", verbose: false
50
+ copy_file "assets/ckeditor.js.coffee", "#{Rails.root}/app/assets/javascripts/ckeditor/config.js.coffee"
51
+
52
+ remove_file "#{Rails.root}/app/assets/images/rails.png"
53
+ remove_file "#{Rails.root}/public/index.html"
54
+
55
+ end
56
+
57
+ def setup_foreman
58
+ template "foreman/Procfile", "#{Rails.root}/Procfile"
59
+ end
60
+
61
+ def setup_routes
62
+ route %q{match '/api/:action(.:format)', to: 'api'}
63
+ end
64
+
65
+ def set_defaults_in_application_config
66
+ application 'config.autoload_paths += %W(#{config.root}/lib)'
67
+ application "config.time_zone = 'Eastern Time (US & Canada)'"
68
+ application "config.assets.initialize_on_precompile = false"
69
+ end
70
+
71
+ def configure_devise_async
72
+ initializer "devise_async.rb", "Devise::Async.backend = :delayed_job"
73
+
74
+ devise_init = "#{Rails.root}/config/initializers/devise.rb"
75
+ gsub_file devise_init, %r{mailer = ".*"}, %q{mailer = "Devise::Async::Proxy"}
76
+ gsub_file devise_init, %r{mailer_sender = ".*"}, %q{mailer_sender = Settings.notifications_email}
77
+
78
+ uncomment_lines devise_init, /token_authentication_key/
79
+ uncomment_lines devise_init, /mailer = /
80
+ end
81
+
82
+ def setup_cancan
83
+ template "models/ability.rb", "#{Rails.root}/app/models/ability.rb"
84
+ remove_file "#{Rails.root}/app/controllers/application_controller.rb", verbose: false
85
+ template "controllers/application_controller.rb", "#{Rails.root}/app/controllers/application_controller.rb"
86
+ end
87
+
88
+ def install_settingslogic
89
+ gem "settingslogic"
90
+ template "models/settings.rb", "#{Rails.root}/app/models/settings.rb"
91
+ template "settings/application.yml", "#{Rails.root}/config/application.yml"
92
+ end
93
+
94
+ def install_migrations
95
+ Dir["#{Rails.root}/db/migrate/*.rb"].select { |f| f.end_with? "create_users.rb" }.map { |f| File.delete f }
96
+ rake "railties:install:migrations FROM=ifd_tools"
97
+ end
98
+
99
+ def setup_customers
100
+ template "models/customer.rb", "#{Rails.root}/app/models/customer.rb"
101
+ template "admin/customers.rb", "#{Rails.root}/app/admin/customers.rb"
102
+ template "controllers/customer_session_controller.rb", "#{Rails.root}/app/controllers/customer_session_controller.rb"
103
+ empty_directory "#{Rails.root}/app/views/admin/customers"
104
+ template "views/customers/_form.html.haml", "#{Rails.root}/app/views/admin/customers/_form.html.haml"
105
+ route "devise_for :customers, path: '', controllers: { sessions: 'customer_session' }"
106
+
107
+ remove_file "#{Rails.root}/config/locales/en.yml", verbose: false
108
+ template "config/en.yml", "#{Rails.root}/config/locales/en.yml"
109
+ end
110
+
111
+ def install_controllers
112
+ template "controllers/api_controller.rb", "#{Rails.root}/app/controllers/api_controller.rb"
113
+ end
114
+
115
+ def install_layouts
116
+ remove_file "#{Rails.root}/app/views/layouts/application.html.erb", verbose: false
117
+ template "layouts/application.html.haml", "#{Rails.root}/app/views/layouts/application.html.haml"
118
+ template "layouts/application_logged_out.html.haml", "#{Rails.root}/app/views/layouts/application_logged_out.html.haml"
119
+ end
120
+
121
+ def setup_capistrano
122
+ template "capistrano/Capfile", "#{Rails.root}/Capfile"
123
+ template "capistrano/deploy.rb", "#{Rails.root}/config/deploy.rb"
124
+
125
+ empty_directory "#{Rails.root}/config/deploy"
126
+ template "capistrano/deploy/staging.rb", "#{Rails.root}/config/deploy/staging.rb"
127
+ template "capistrano/deploy/production.rb", "#{Rails.root}/config/deploy/production.rb"
128
+
129
+ copy_file "#{Rails.root}/config/environments/production.rb", "#{Rails.root}/config/environments/staging.rb"
130
+ end
131
+
132
+ def install_our_initializer
133
+ template "config/ifd_tools.rb", "#{Rails.root}/config/initializers/ifd_tools.rb"
134
+ end
135
+
136
+ def install_dashboard
137
+ remove_file "#{Rails.root}/app/admin/dashboard.rb", verbose: false
138
+ template "admin/dashboard.rb", "#{Rails.root}/app/admin/dashboard.rb"
139
+ end
140
+
141
+ def add_to_gitignore
142
+ append_to_file "#{Rails.root}/.gitignore", <<-GITIGNORE
143
+ .DS_Store
144
+ /config/database.yml
145
+ GITIGNORE
146
+ end
147
+
148
+ def last_tasks
149
+ rake "db:migrate"
150
+ end
151
+
152
+ end
153
+ end
@@ -0,0 +1,108 @@
1
+ ActiveAdmin.register Customer do
2
+
3
+ config.sort_order = "last_name_asc"
4
+ controller.authorize_resource
5
+ controller.resources_configuration[:self][:finder] = :find_by_url!
6
+
7
+ before_filter only: [:activate, :deactivate] do
8
+ @customer = Customer.find_by_url! params[:id]
9
+ end
10
+
11
+ filter :last_name
12
+ filter :first_name
13
+ filter :email
14
+ filter :platform, as: :select, collection: %w(pc mac), member_label: :titleize
15
+ filter :phone
16
+ filter :state, as: :select, collection: IfdTools::States::all.invert
17
+ filter :created_at
18
+ filter :updated_at
19
+
20
+ scope :all
21
+ scope :pending, default: true
22
+ scope :active
23
+ scope :banned
24
+ scope :unconfirmed
25
+
26
+ action_item only: [:show, :edit] do
27
+ if resource.active?
28
+ link_to "Deactivate", [:deactivate, :admin, resource], title: "Deactivate this user", confirm: I18n.t('customer.deactivation_confirmation.singular')
29
+ else
30
+ link_to "Activate", [:activate, :admin, resource], title: "Activate this user", confirm: I18n.t('customer.activation_confirmation.singular')
31
+ end
32
+ end
33
+
34
+ batch_action :activate, confirm: I18n.t('customer.activation_confirmation.plural') do |ids|
35
+ Customer.find_each(conditions: { id: ids}) { |c| c.activate! }
36
+ redirect_to collection_path, notice: I18n.t('customer.activated', count: ids.count)
37
+ end
38
+
39
+ batch_action :deactivate, confirm: I18n.t('customer.deactivation_confirmation.plural') do |ids|
40
+ Customer.find_each(conditions: { id: ids}) { |c| c.deactivate! }
41
+ redirect_to collection_path, notice: I18n.t('customer.deactivated', count: ids.count)
42
+ end
43
+
44
+ csv do
45
+ column :id
46
+ column :email
47
+ column :first_name
48
+ column :last_name
49
+ column(:phone) { |c| phone_number(c.phone) }
50
+ column :state
51
+ column :status
52
+ column :platform
53
+ column :current_sign_in_at
54
+ column :last_sign_in_at
55
+ column :confirmed_at
56
+ column :confirmation_sent_at
57
+ end
58
+
59
+ index do
60
+ selectable_column
61
+ column(:last, sortable: :last_name) { |c| c.last_name }
62
+ column(:first, sortable: :first_name) { |c| c.first_name }
63
+ column(:email, sortable: :email) { |c| link_to c.email, "mailto:#{c.email}" if c.email.present? }
64
+ column(:phone, sortable: :phone) { |c| number_to_phone c.phone, area_code: true, delimiter: "." }
65
+ column("") do |c|
66
+ actions = link_to "View", [:admin, c], class: "member_link view_link"
67
+ actions << link_to("Edit", [:edit, :admin, c], class: "member_link edit_link")
68
+ actions << link_to("Delete", [:admin, c], method: :delete, confirm: "Are you sure you want to delete this Customer?", class: "member_link delete_link")
69
+ if c.active?
70
+ actions << link_to("Deactivate", [:deactivate, :admin, c], title: "Deactivate this user", confirm: I18n.t('customer.deactivation_confirmation.singular'), class: "member_link")
71
+ actions << link_to("Trends", [:trends, :admin, c], class: "member_link")
72
+ else
73
+ actions << link_to("Activate", [:activate, :admin, c], title: "Activate this user", confirm: I18n.t('customer.activation_confirmation.singular'), class: "member_link")
74
+ end
75
+ actions
76
+ end
77
+ end
78
+
79
+ form partial: "form"
80
+
81
+ show title: proc { "Customer: #{resource.full_name}" } do
82
+ panel "Customer Information" do
83
+ attributes_table_for resource do
84
+ row(:name) { resource.full_name }
85
+ row(:email) { mailto resource.email, resource.email if resource.email.present? }
86
+ row(:phone) { number_to_phone :phone, area_code: true, delimiter: "." }
87
+ row(:state)
88
+ row(:platform)
89
+ row(:created_at) { resource.created_at.humanize }
90
+ row(:updated_at) { resource.updated_at.humanize }
91
+ end
92
+ end
93
+ end
94
+
95
+ member_action :deactivate do
96
+ @customer.deactivate!
97
+ redirect_to collection_path, notice: I18n.t('customer.deactivated', count: 1)
98
+ end
99
+
100
+ member_action :activate do
101
+ @customer.activate!
102
+ redirect_to collection_path, notice: I18n.t('customer.approved', count: 1)
103
+ end
104
+
105
+ # Provides functionality for customer trends and for XML generation used on the dashboard
106
+ include IfdTools::Tracking::CustomerTracking
107
+
108
+ end
@@ -0,0 +1,47 @@
1
+ ActiveAdmin.register_page "Dashboard" do
2
+
3
+ menu :priority => 1, :label => proc{ I18n.t("active_admin.dashboard") }
4
+
5
+ content :title => proc{ I18n.t("active_admin.dashboard") } do
6
+
7
+ # First row of content
8
+ columns do
9
+ column do
10
+ panel "Top Users" do
11
+ div(id: :top_users_panel) { render "usa_map" }
12
+ end
13
+ end
14
+
15
+ column do
16
+ panel "Top Content" do
17
+ div(id: :top_content_panel) { render "line_graph" }
18
+ end
19
+ end
20
+ end
21
+
22
+ # Second row of content
23
+ columns do
24
+ column do
25
+ panel "Most Active Users" do
26
+ table_for Customer.top_users.limit(25) do
27
+ column(:name) { |c| link_to c.full_name, [:admin, c] }
28
+ column(:email) { |c| mail_to c.email, c.email }
29
+ column(:phone) { |c| number_to_phone c.phone, area_code: true }
30
+ column(:activity) { |c| c.tracking_events.count }
31
+ end
32
+ end
33
+ end
34
+ column do
35
+ panel "Most Active Content" do
36
+ table_for IfdTools::Tracking::Event.top_content do
37
+ column(:name) { |event| link_to event.trackable_title, [:admin, event.trackable_resource] }
38
+ column(:type) { |event| event.trackable_type }
39
+ column(:activity) { |event| event.trackable_activity }
40
+ end
41
+ end
42
+ end
43
+ end
44
+
45
+ end
46
+
47
+ end
@@ -0,0 +1,7 @@
1
+ // Active Admin CSS Styles
2
+ @import "active_admin/mixins";
3
+
4
+ $primary-color: #083974;
5
+
6
+ @import "active_admin/base";
7
+ @import "ifd_tools/base";
@@ -0,0 +1,2 @@
1
+ //= require active_admin/base
2
+ //= require ifd_tools/base
@@ -0,0 +1,46 @@
1
+ @import "compass/reset";
2
+ @import "compass/utilities";
3
+ @import "active_admin/mixins";
4
+ $primary-color: #083974;
5
+
6
+ @import "active_admin/base";
7
+ @import "ifd_tools/base";
8
+
9
+ #wrapper {
10
+ display:block;
11
+ width:auto;
12
+ }
13
+
14
+ #header {
15
+
16
+ #utility_nav {
17
+ @include clearfix;
18
+ font-size: 14px;
19
+ margin-right: 71px;
20
+ margin-top: 23px;
21
+ }
22
+ }
23
+
24
+ #content_wrapper{
25
+ margin: 20px auto !important;
26
+ width: 500px
27
+ }
28
+
29
+ body.logged_in .flash {
30
+ top:0px;
31
+ }
32
+
33
+ .devise_passwords, .devise_confirmations {
34
+ #active_admin_content {
35
+ form {
36
+ margin-bottom:15px;
37
+ div:last-child {
38
+ margin-top:10px;
39
+ }
40
+ }
41
+ }
42
+ }
43
+
44
+ .clearBoth {
45
+ clear:both;
46
+ }
@@ -0,0 +1,2 @@
1
+ //= require jquery
2
+ //= require jquery_ujs
@@ -0,0 +1,13 @@
1
+ # http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html
2
+ CKEDITOR.editorConfig = (config) ->
3
+
4
+ config.pasteFromWordPromptCleanup = true
5
+
6
+ config.toolbar_Full = [
7
+ { name: 'basicstyles', items : [ 'Bold','Italic','Underline','-','RemoveFormat' ] },
8
+ { name: 'links', items : [ 'Link','Unlink','Anchor' ] },
9
+ { name: 'clipboard', items : [ 'Cut','Copy','Paste','PasteText','PasteFromWord','-','Undo','Redo' ] },
10
+ { name: 'editing', items : [ 'Find','Replace','-','SelectAll','-','SpellChecker' ] }
11
+ ]
12
+
13
+ true
@@ -0,0 +1,5 @@
1
+ load 'deploy'
2
+ load 'deploy/assets'
3
+
4
+ Dir['vendor/gems/*/recipes/*.rb','vendor/plugins/*/recipes/*.rb'].each { |plugin| load(plugin) }
5
+ load 'config/deploy' # remove this line to skip loading any of the default tasks
@@ -0,0 +1,2 @@
1
+ set :rails_env, "production"
2
+ # set :deploy_to, "/var/www/vhosts/domain.com/httpdocs"
@@ -0,0 +1,2 @@
1
+ set :rails_env, "staging"
2
+ # set :deploy_to, "/var/www/vhosts/domain.com/httpdocs"
@@ -0,0 +1,50 @@
1
+ require 'bundler/capistrano'
2
+ require 'rvm/capistrano'
3
+ require "delayed/recipes"
4
+ require "whenever/capistrano"
5
+
6
+ set :stages, %w(staging production)
7
+ set :default_stage, "staging"
8
+ require 'capistrano/ext/multistage'
9
+
10
+ set :application, "Your application name here"
11
+ set :repository, "ssh repo from github"
12
+
13
+ set :scm, :git
14
+
15
+ # This is configured per env on this server
16
+ #set :deploy_to, "/var/www/vhosts/petsafe.gigmark.com/httpdocs"
17
+
18
+ set :deploy_via, :copy
19
+ set :user, 'ssh username'
20
+ set :use_sudo, false
21
+
22
+ set :shared_children, shared_children + %w{public/uploads}
23
+
24
+ set :whenever_roles, :app
25
+ set :whenever_identifier, :MAKE_SURE_TO_SET_THIS_UNIQUE_ON_SERVER
26
+ set :whenever_environment, defer { rails_env }
27
+ set :whenever_command, "bundle exec whenever"
28
+
29
+ set :bundle_flags, "--deployment"
30
+ set :bundle_without, [:development, :test]
31
+ set :rvm_type, :system
32
+
33
+ server "SERVER IP OR DOMAIN", :app, :web, :db, :primary => true
34
+
35
+ # Apache Passenger support
36
+ namespace :deploy do
37
+ task :start do ; end
38
+ task :stop do ; end
39
+ task :restart, :roles => :app, :except => { :no_release => true } do
40
+ run "#{try_sudo} touch #{File.join(current_path,'tmp','restart.txt')}"
41
+ end
42
+ task :config_symlink do
43
+ run "ln -s #{shared_path}/database.yml #{release_path}/config/database.yml"
44
+ end
45
+ end
46
+
47
+ after "deploy:stop", "delayed_job:stop"
48
+ after "deploy:start", "delayed_job:start"
49
+ after "deploy:restart", "delayed_job:restart"
50
+ before "deploy:assets:precompile", "deploy:config_symlink"
@@ -0,0 +1,17 @@
1
+ # Sample localization file for English. Add more files in this directory for other locales.
2
+ # See https://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale for starting points.
3
+
4
+ en:
5
+ customer:
6
+ activation_confirmation:
7
+ singular: "Are you sure you want to allow this customer access to the IFD and companion microsite?"
8
+ plural: "Are you sure you want to allow these customers access to the IFD and companion microsite?"
9
+ deactivation_confirmation:
10
+ singular: "Are you sure you want to block this customer from the IFD and companion microsite?"
11
+ plural: "Are you sure you want to block these customers from the IFD and companion microsite?"
12
+ approval_confirmation:
13
+ singular: "Are you sure you want to approve this customers and provide him access to the IFD and companion microsite?"
14
+ plural: "Are you sure you want to approve these customers and provide them access to the IFD and companion microsite?"
15
+ activated: "Succesfully activated %{count} customers."
16
+ deactivated: "Succesfully deactivated %{count} customers."
17
+ approved: "Succesfully approved %{count} customers."
@@ -0,0 +1,4 @@
1
+ IfdTools::Configure.setup do |config|
2
+ #config.dashboard_graph_color = "AFD8F8"
3
+ #config.dashboard_graph_main_color = "114B78"
4
+ end
@@ -0,0 +1,28 @@
1
+ # Use this file to easily define all of your cron jobs.
2
+ #
3
+ # It's helpful, but not entirely necessary to understand cron before proceeding.
4
+ # http://en.wikipedia.org/wiki/Cron
5
+
6
+ # Example:
7
+ #
8
+ # set :output, "/path/to/my/cron_log.log"
9
+ #
10
+ # every 2.hours do
11
+ # command "/usr/bin/some_great_command"
12
+ # runner "MyModel.some_method"
13
+ # rake "some:great:rake:task"
14
+ # end
15
+ #
16
+ # every 4.days do
17
+ # runner "AnotherModel.prune_old_records"
18
+ # end
19
+
20
+ # Learn more: http://github.com/javan/whenever
21
+
22
+ # custom job type to control delayed_job
23
+ job_type :delayed_job, 'cd :path;RAILS_ENV=:environment script/delayed_job ":task"'
24
+
25
+ # delayed job start on boot
26
+ every :reboot do
27
+ delayed_job "start"
28
+ end
@@ -0,0 +1,8 @@
1
+ class ApiController < ApplicationController
2
+
3
+ before_filter :authenticate_customer!, :except => [:software_updates, :emergency_messages, :notifier_updates]
4
+ respond_to :json, :xml
5
+
6
+ include IfdTools::ApiControllerExtensions
7
+
8
+ end
@@ -0,0 +1,19 @@
1
+ class ApplicationController < ActionController::Base
2
+
3
+ protect_from_forgery
4
+ layout :layout_by_resource
5
+
6
+ before_filter do
7
+ Time.zone = current_user.time_zone if current_user and !current_user.time_zone.blank?
8
+ end
9
+
10
+ rescue_from CanCan::AccessDenied do |exception|
11
+ redirect_to admin_dashboard_url, alert: exception.message
12
+ end
13
+
14
+ private
15
+ def layout_by_resource
16
+ devise_controller? ? 'application_logged_out' : 'application'
17
+ end
18
+
19
+ end
@@ -0,0 +1,39 @@
1
+ class CustomerSessionController < Devise::SessionsController
2
+
3
+ def create
4
+ @resource = warden.authenticate!(:scope => resource_name, :recall => "#{controller_path}#new")
5
+ respond_to do |format|
6
+ if @resource.banned?
7
+ reset_session
8
+ format.json do
9
+ render json: { response: 'failure', message: "Account has been suspended" }.to_json, status: :ok
10
+ end
11
+ format.html { redirect_to root_path }
12
+ elsif @resource.pending?
13
+ reset_session
14
+ format.json do
15
+ render json: { response: 'failure', message: "Account is pending approval" }.to_json, status: :ok
16
+ end
17
+ format.html { redirect_to root_path }
18
+ else
19
+ set_flash_message(:notice, :signed_in) if is_navigational_format?
20
+ result = sign_in(resource_name, @resource)
21
+ format.json do
22
+ render json: { response: 'success', auth_token: current_customer.authentication_token, first_name: current_customer.first_name, email: current_customer.email }.to_json, status: :ok
23
+ end
24
+ format.html do
25
+ respond_with @resource, :location => redirect_location(resource_name, @resource)
26
+ end
27
+ format.xml
28
+ end
29
+ end
30
+ end
31
+
32
+ def redirect_location(resource_name, resource)
33
+ root_path
34
+ end
35
+
36
+ def after_sign_out_path_for(r)
37
+ root_path
38
+ end
39
+ end
@@ -0,0 +1,2 @@
1
+ web: bundle exec rails server thin -p $PORT
2
+ worker: bundle exec rake jobs:work