cornerstone 0.0.1 → 0.0.5

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 (177) hide show
  1. data/.gitignore +6 -0
  2. data/.rspec +1 -0
  3. data/Gemfile +23 -0
  4. data/Gemfile.lock +168 -0
  5. data/Guardfile +22 -0
  6. data/README.rdoc +4 -1
  7. data/Rakefile +11 -1
  8. data/TODO +11 -0
  9. data/VERSION +1 -0
  10. data/app/assets/images/.gitkeep +0 -0
  11. data/app/assets/javascripts/.gitkeep +0 -0
  12. data/app/assets/javascripts/cornerstone.js +11 -0
  13. data/app/assets/javascripts/cornerstone/discussions.js +2 -0
  14. data/app/assets/javascripts/cornerstone/help.js +2 -0
  15. data/app/assets/stylesheets/.gitkeep +0 -0
  16. data/app/assets/stylesheets/cornerstone.css +8 -0
  17. data/app/assets/stylesheets/cornerstone/discussions.css +4 -0
  18. data/app/assets/stylesheets/cornerstone/help.css +4 -0
  19. data/app/controllers/.gitkeep +0 -0
  20. data/app/controllers/cornerstone/admin/application_controller.rb +7 -0
  21. data/app/controllers/cornerstone/admin/articles_controller.rb +61 -0
  22. data/app/controllers/cornerstone/admin/categories_controller.rb +46 -0
  23. data/app/controllers/cornerstone/admin/discussions_controller.rb +32 -0
  24. data/app/controllers/cornerstone/application_controller.rb +6 -0
  25. data/app/controllers/cornerstone/discussions_controller.rb +58 -0
  26. data/app/controllers/cornerstone/help_controller.rb +11 -0
  27. data/app/controllers/cornerstone/posts_controller.rb +66 -0
  28. data/app/helpers/.gitkeep +0 -0
  29. data/app/helpers/cornerstone/application_helper.rb +5 -0
  30. data/app/helpers/cornerstone/discussions_helper.rb +16 -0
  31. data/app/helpers/cornerstone/help_helper.rb +4 -0
  32. data/app/mailers/cornerstone/cornerstone_mailer.rb +31 -0
  33. data/app/models/.gitkeep +0 -0
  34. data/app/models/cornerstone/article.rb +20 -0
  35. data/app/models/cornerstone/category.rb +45 -0
  36. data/app/models/cornerstone/discussion.rb +90 -0
  37. data/app/models/cornerstone/post.rb +103 -0
  38. data/app/models/cornerstone/post_observer.rb +23 -0
  39. data/app/views/.gitkeep +0 -0
  40. data/app/views/cornerstone/admin/articles/_article.html.erb +9 -0
  41. data/app/views/cornerstone/admin/articles/_form.html.erb +22 -0
  42. data/app/views/cornerstone/admin/articles/edit.html.erb +7 -0
  43. data/app/views/cornerstone/admin/articles/index.html.erb +25 -0
  44. data/app/views/cornerstone/admin/articles/new.html.erb +6 -0
  45. data/app/views/cornerstone/admin/articles/show.html.erb +4 -0
  46. data/app/views/cornerstone/admin/categories/_category.html.erb +12 -0
  47. data/app/views/cornerstone/admin/categories/_form.html.erb +17 -0
  48. data/app/views/cornerstone/admin/categories/edit.html.erb +6 -0
  49. data/app/views/cornerstone/admin/categories/index.html.erb +11 -0
  50. data/app/views/cornerstone/admin/categories/new.html.erb +6 -0
  51. data/app/views/cornerstone/admin/discussions/edit.html.erb +7 -0
  52. data/app/views/cornerstone/cornerstone_mailer/new_discussion.html.erb +14 -0
  53. data/app/views/cornerstone/cornerstone_mailer/new_discussion.text.erb +5 -0
  54. data/app/views/cornerstone/cornerstone_mailer/new_discussion_user.html.erb +7 -0
  55. data/app/views/cornerstone/cornerstone_mailer/new_post.html.erb +7 -0
  56. data/app/views/cornerstone/cornerstone_mailer/new_post.text.erb +8 -0
  57. data/app/views/cornerstone/discussions/_discussion.html.erb +12 -0
  58. data/app/views/cornerstone/discussions/_discussion_category.html.erb +14 -0
  59. data/app/views/cornerstone/discussions/_form.html.erb +33 -0
  60. data/app/views/cornerstone/discussions/_latest_discussion.html.erb +4 -0
  61. data/app/views/cornerstone/discussions/categorical_index.html.erb +27 -0
  62. data/app/views/cornerstone/discussions/index.html.erb +25 -0
  63. data/app/views/cornerstone/discussions/new.html.erb +6 -0
  64. data/app/views/cornerstone/discussions/show.html.erb +19 -0
  65. data/app/views/cornerstone/help/index.html.erb +7 -0
  66. data/app/views/cornerstone/posts/_fields.html.erb +44 -0
  67. data/app/views/cornerstone/posts/_form.html.erb +19 -0
  68. data/app/views/cornerstone/posts/_post.html.erb +17 -0
  69. data/app/views/cornerstone/posts/edit.html.erb +9 -0
  70. data/app/views/cornerstone/shared/_errors.html.erb +11 -0
  71. data/app/views/cornerstone/shared/_flash_messages.html.erb +15 -0
  72. data/app/views/layouts/cornerstone/application.html.erb +16 -0
  73. data/config/cucumber.yml +8 -0
  74. data/config/locales/cornerstone.action_mailer.en.yml +9 -0
  75. data/config/routes.rb +24 -0
  76. data/cornerstone-0.0.1.gem +0 -0
  77. data/cornerstone.gemspec +33 -0
  78. data/db/migrate/20110723004024_create_cornerstone_discussions.rb +17 -0
  79. data/db/migrate/20110804190853_create_cornerstone_categories.rb +15 -0
  80. data/db/migrate/20110809233551_create_cornerstone_posts.rb +13 -0
  81. data/db/migrate/20111006172857_create_cornerstone_articles.rb +12 -0
  82. data/lib/cornerstone.rb +6 -0
  83. data/lib/cornerstone/acts_as_cornerstone_user.rb +79 -0
  84. data/lib/cornerstone/config.rb +33 -0
  85. data/lib/cornerstone/controller_additions.rb +25 -0
  86. data/lib/cornerstone/engine.rb +8 -1
  87. data/lib/cornerstone/exceptions.rb +16 -0
  88. data/lib/cornerstone/helpers.rb +35 -0
  89. data/lib/tasks/cucumber.rake +65 -0
  90. data/lib/templates/cornerstone_config.rb +31 -0
  91. data/script/cucumber +10 -0
  92. data/script/rails +7 -0
  93. data/spec/controllers/cornerstone/admin/articles_controller_spec.rb +250 -0
  94. data/spec/controllers/cornerstone/admin/categories_controller_spec.rb +205 -0
  95. data/spec/controllers/cornerstone/admin/discussions_controller_spec.rb +95 -0
  96. data/spec/controllers/cornerstone/application_controller_spec.rb +34 -0
  97. data/spec/controllers/cornerstone/discussions_controller_spec.rb +157 -0
  98. data/spec/controllers/cornerstone/help_controller_spec.rb +20 -0
  99. data/spec/controllers/cornerstone/posts_controller_spec.rb +212 -0
  100. data/spec/dummy/Rakefile +7 -0
  101. data/spec/dummy/app/assets/javascripts/application.js +9 -0
  102. data/spec/dummy/app/assets/javascripts/tester.js +2 -0
  103. data/spec/dummy/app/assets/stylesheets/application.css +7 -0
  104. data/spec/dummy/app/assets/stylesheets/tester.css +4 -0
  105. data/spec/dummy/app/controllers/application_controller.rb +3 -0
  106. data/spec/dummy/app/controllers/tester_controller.rb +7 -0
  107. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  108. data/spec/dummy/app/helpers/tester_helper.rb +6 -0
  109. data/spec/dummy/app/mailers/.gitkeep +0 -0
  110. data/spec/dummy/app/models/.gitkeep +0 -0
  111. data/spec/dummy/app/models/user.rb +23 -0
  112. data/spec/dummy/app/views/devise/confirmations/new.html.erb +12 -0
  113. data/spec/dummy/app/views/devise/mailer/confirmation_instructions.html.erb +5 -0
  114. data/spec/dummy/app/views/devise/mailer/reset_password_instructions.html.erb +8 -0
  115. data/spec/dummy/app/views/devise/mailer/unlock_instructions.html.erb +7 -0
  116. data/spec/dummy/app/views/devise/passwords/edit.html.erb +16 -0
  117. data/spec/dummy/app/views/devise/passwords/new.html.erb +12 -0
  118. data/spec/dummy/app/views/devise/registrations/edit.html.erb +29 -0
  119. data/spec/dummy/app/views/devise/registrations/new.html.erb +22 -0
  120. data/spec/dummy/app/views/devise/sessions/new.html.erb +19 -0
  121. data/spec/dummy/app/views/devise/shared/_links.erb +25 -0
  122. data/spec/dummy/app/views/devise/unlocks/new.html.erb +12 -0
  123. data/spec/dummy/app/views/layouts/application.html.erb +15 -0
  124. data/spec/dummy/app/views/tester/index.html.erb +14 -0
  125. data/spec/dummy/config.ru +4 -0
  126. data/spec/dummy/config/application.rb +42 -0
  127. data/spec/dummy/config/boot.rb +10 -0
  128. data/spec/dummy/config/database.yml +28 -0
  129. data/spec/dummy/config/environment.rb +5 -0
  130. data/spec/dummy/config/environments/development.rb +31 -0
  131. data/spec/dummy/config/environments/production.rb +54 -0
  132. data/spec/dummy/config/environments/test.rb +39 -0
  133. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  134. data/spec/dummy/config/initializers/cornerstone_config.rb +30 -0
  135. data/spec/dummy/config/initializers/devise.rb +204 -0
  136. data/spec/dummy/config/initializers/inflections.rb +10 -0
  137. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  138. data/spec/dummy/config/initializers/secret_token.rb +7 -0
  139. data/spec/dummy/config/initializers/session_store.rb +8 -0
  140. data/spec/dummy/config/initializers/wrap_parameters.rb +12 -0
  141. data/spec/dummy/config/locales/devise.en.yml +53 -0
  142. data/spec/dummy/config/locales/en.yml +5 -0
  143. data/spec/dummy/config/routes.rb +65 -0
  144. data/spec/dummy/db/migrate/20110724011421_create_user.rb +11 -0
  145. data/spec/dummy/db/migrate/20110724194307_devise_create_users.rb +41 -0
  146. data/spec/dummy/db/migrate/20110804174004_add_name_to_user.rb +5 -0
  147. data/spec/dummy/db/schema.rb +76 -0
  148. data/spec/dummy/log/.gitkeep +0 -0
  149. data/spec/dummy/public/404.html +26 -0
  150. data/spec/dummy/public/422.html +26 -0
  151. data/spec/dummy/public/500.html +26 -0
  152. data/spec/dummy/public/favicon.ico +0 -0
  153. data/spec/dummy/script/rails +6 -0
  154. data/spec/dummy/test/functional/tester_controller_test.rb +9 -0
  155. data/spec/dummy/test/unit/helpers/tester_helper_test.rb +4 -0
  156. data/spec/fixtures/cornerstone/cornerstone_mailer/new_discussion +3 -0
  157. data/spec/lib/cornerstone/acts_as_cornerstone_user_spec.rb +56 -0
  158. data/spec/lib/cornerstone/helpers_spec.rb +32 -0
  159. data/spec/mailers/cornerstone/cornerstone_mailer_spec.rb +55 -0
  160. data/spec/models/cornerstone/article_spec.rb +25 -0
  161. data/spec/models/cornerstone/category_spec.rb +97 -0
  162. data/spec/models/cornerstone/discussion_spec.rb +243 -0
  163. data/spec/models/cornerstone/post_observer_spec.rb +65 -0
  164. data/spec/models/cornerstone/post_spec.rb +210 -0
  165. data/spec/requests/emails_spec.rb +51 -0
  166. data/spec/requests/interact_discussions_spec.rb +103 -0
  167. data/spec/requests/manage_articles_spec.rb +59 -0
  168. data/spec/requests/manage_categories_spec.rb +64 -0
  169. data/spec/requests/view_home_spec.rb +26 -0
  170. data/spec/spec_helper.rb +40 -0
  171. data/spec/support/devise.rb +4 -0
  172. data/spec/support/factories.rb +62 -0
  173. data/spec/support/general_helper_methods.rb +20 -0
  174. data/spec/support/mailer_macros.rb +15 -0
  175. data/spec/support/mass_assignment.rb +46 -0
  176. data/tmp/log/development.log +0 -0
  177. metadata +301 -20
@@ -0,0 +1,17 @@
1
+ <div class="post">
2
+ <% if post.created_by?(current_cornerstone_user) %>
3
+ <div class="actions">
4
+ <%= link_to "EDIT", edit_discussion_post_path(discussion, post) %> |
5
+ <%= link_to "REMOVE", [discussion, post], :method => :delete,
6
+ :confirm => 'Are you sure?' %>
7
+ </div>
8
+ <% end %>
9
+ <div class="author">
10
+ <span class="author_name"><%= post.author_name %></span>
11
+ <p class="date"><%= l(post.created_at) %></p>
12
+ </div>
13
+ <div class="body">
14
+ <%= post.body %>
15
+ </div>
16
+ </div>
17
+
@@ -0,0 +1,9 @@
1
+ <h1>Editing Post for <%= @discussion.subject %></h1>
2
+
3
+ <%= form_for([@discussion, @post]) do |f| %>
4
+ <%= render :partial => 'cornerstone/shared/errors',
5
+ :locals => {:rails_model => @post} %>
6
+ <%= render :partial => "cornerstone/posts/fields", :locals => {:p => f} %>
7
+
8
+ <%= f.submit "Update" %>
9
+ <% end %>
@@ -0,0 +1,11 @@
1
+ <% if rails_model.errors.any? %>
2
+ <div id="errors">
3
+ <span class="error_statement"><%= pluralize(rails_model.errors.size, "error") %> prohibited this <%= rails_model.class.name.downcase %> from being saved</span>
4
+ <ul>
5
+ <% rails_model.errors.full_messages.each do |msg| %>
6
+ <li><%= msg %></li>
7
+ <% end %>
8
+ </ul>
9
+ </div>
10
+ <% end %>
11
+
@@ -0,0 +1,15 @@
1
+ <% if flash[:notice] || flash[:alert] %>
2
+ <div id="flash_messages">
3
+ <% if flash[:notice] %>
4
+ <div id="flash_notice">
5
+ <%= flash[:notice] %>
6
+ </div>
7
+ <% end %>
8
+ <% if flash[:alert] %>
9
+ <div id="flash_alert">
10
+ <%= flash[:alert] %>
11
+ </div>
12
+ <% end %>
13
+ </div>
14
+ <% end %>
15
+
@@ -0,0 +1,16 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>Cornerstone</title>
5
+ <%= stylesheet_link_tag "cornerstone" %>
6
+ <%= javascript_include_tag "cornerstone" %>
7
+ <%= csrf_meta_tags %>
8
+ </head>
9
+ <body>
10
+
11
+ <%= render :partial => "cornerstone/shared/flash_messages" %>
12
+ <%= yield %>
13
+
14
+ </body>
15
+ </html>
16
+
@@ -0,0 +1,8 @@
1
+ <%
2
+ rerun = File.file?('rerun.txt') ? IO.read('rerun.txt') : ""
3
+ rerun_opts = rerun.to_s.strip.empty? ? "--format #{ENV['CUCUMBER_FORMAT'] || 'progress'} features" : "--format #{ENV['CUCUMBER_FORMAT'] || 'pretty'} #{rerun}"
4
+ std_opts = "--format #{ENV['CUCUMBER_FORMAT'] || 'pretty'} --strict --tags ~@wip"
5
+ %>
6
+ default: <%= std_opts %> features
7
+ wip: --tags @wip:3 --wip features
8
+ rerun: <%= rerun_opts %> --format rerun --out rerun.txt --strict --tags ~@wip
@@ -0,0 +1,9 @@
1
+ en:
2
+ cornerstone:
3
+ cornerstone_mailer:
4
+ new_discussion:
5
+ subject: "Cornerstone: A new discussion has been created."
6
+ new_discussion_user:
7
+ subject: "Cornerstone: You created a new discussion."
8
+ new_post:
9
+ subject: "Cornerstone: New reply for - %{topic}"
@@ -0,0 +1,24 @@
1
+ Cornerstone::Engine.routes.draw do
2
+
3
+
4
+
5
+ resources :discussions, :except => [:show] do
6
+ resources :posts, :only => [:create, :edit, :update, :destroy]
7
+ end
8
+
9
+ # Custom routes to handle show for discussions and discussion categories
10
+ get "/discussions/:category/:id" => "discussions#show", :as => "category_discussion"
11
+ get "/discussions/:category" => "discussions#category", :as => "discussions_category"
12
+
13
+
14
+ root :to => "help#index"
15
+
16
+ namespace :admin do
17
+ root :to => "admin#dashboard"
18
+ resources :categories, :except => :show
19
+ resources :articles
20
+ resources :discussions, :only => [:edit, :update]
21
+ end
22
+
23
+ end
24
+
Binary file
@@ -0,0 +1,33 @@
1
+ Gem::Specification.new do |s|
2
+ s.author = "Adam St. John"
3
+ s.email = "astjohn@gmail.com"
4
+ s.date = Date.today.to_s
5
+ s.name = "cornerstone"
6
+ s.summary = "A rails engine for customer care."
7
+ s.description = "Cornerstone provides customer care capabilities to an existing" \
8
+ " application by adding things like discussions and a knowledge base."
9
+ s.homepage = "https://github.com/astjohn/cornerstone"
10
+
11
+ s.files = `git ls-files`.split("\n")
12
+ s.version = IO.read(File.join(File.dirname(__FILE__), 'VERSION'))
13
+
14
+ s.rdoc_options = ["--charset=UTF-8"]
15
+ s.require_paths = ["lib"]
16
+
17
+
18
+ s.add_dependency('rails', '>= 3.1.0')
19
+ s.add_dependency('i18n')
20
+
21
+ s.add_development_dependency('bundler', '~> 1.0.0')
22
+ s.add_development_dependency('sqlite3')
23
+ s.add_development_dependency('rspec-rails')
24
+ s.add_development_dependency('factory_girl_rails')
25
+ s.add_development_dependency('devise')
26
+ s.add_development_dependency('capybara')
27
+ s.add_development_dependency('launchy')
28
+ s.add_development_dependency('guard-rspec')
29
+ s.add_development_dependency('libnotify')
30
+ s.add_development_dependency('rb-inotify')
31
+ s.add_development_dependency('database_cleaner')
32
+
33
+ end
@@ -0,0 +1,17 @@
1
+ class CreateCornerstoneDiscussions < ActiveRecord::Migration
2
+ def change
3
+ create_table :cornerstone_discussions do |t|
4
+ t.integer :user_id
5
+ t.integer :category_id
6
+ t.string :subject
7
+ t.string :status, :default => Cornerstone::Config.discussion_statuses.first
8
+ t.boolean :privte, :default => 0
9
+ t.integer :reply_count, :default => 0
10
+ t.string :latest_post_author
11
+ t.datetime :latest_post_date
12
+
13
+ t.timestamps
14
+ end
15
+ end
16
+ end
17
+
@@ -0,0 +1,15 @@
1
+ class CreateCornerstoneCategories < ActiveRecord::Migration
2
+ def change
3
+ create_table :cornerstone_categories do |t|
4
+ t.string :name
5
+ t.string :category_type
6
+ t.text :description
7
+ t.integer :item_count, :default => 0
8
+ t.string :latest_discussion_author
9
+ t.datetime :latest_discussion_date
10
+
11
+ t.timestamps
12
+ end
13
+ end
14
+ end
15
+
@@ -0,0 +1,13 @@
1
+ class CreateCornerstonePosts < ActiveRecord::Migration
2
+ def change
3
+ create_table :cornerstone_posts do |t|
4
+ t.integer :discussion_id
5
+ t.integer :user_id
6
+ t.string :name
7
+ t.string :email
8
+ t.text :body
9
+ t.timestamps
10
+ end
11
+ end
12
+ end
13
+
@@ -0,0 +1,12 @@
1
+ class CreateCornerstoneArticles < ActiveRecord::Migration
2
+ def change
3
+ create_table :cornerstone_articles do |t|
4
+ t.string :title
5
+ t.text :body
6
+ t.integer :category_id
7
+
8
+ t.timestamps
9
+ end
10
+ end
11
+ end
12
+
@@ -1,5 +1,11 @@
1
1
  require "cornerstone/engine"
2
+ require "cornerstone/acts_as_cornerstone_user"
3
+ require "cornerstone/config"
4
+ require "cornerstone/controller_additions"
5
+ require "cornerstone/exceptions"
6
+ require "cornerstone/helpers"
2
7
 
3
8
  module Cornerstone
9
+
4
10
  end
5
11
 
@@ -0,0 +1,79 @@
1
+ module Cornerstone
2
+
3
+ module ActsAsCornerstoneUser
4
+
5
+ extend ActiveSupport::Concern
6
+
7
+ included do
8
+ userclass = self.name
9
+
10
+ # == Associations
11
+ has_many :cornerstone_discussions, :foreign_key => :user_id,
12
+ :class_name => "::Cornerstone::Discussion"
13
+ has_many :cornerstone_posts, :foreign_key => :user_id,
14
+ :class_name => "::Cornerstone::Post"
15
+
16
+ # TODO: dependent destroy? - how to handle when user account deleted?
17
+ # - perhaps this can be an option specified in initializer
18
+
19
+ # == Accessibility
20
+ cattr_accessor :cornerstone_name_method, :cornerstone_email_method,
21
+ :cornerstone_admin
22
+
23
+ # TODO: Might need support for multiple user models such as AdminUser... etc.
24
+ # send belongs_to user relationships
25
+ Cornerstone::Discussion.send(:belongs_to, :user, :class_name => userclass)
26
+ Cornerstone::Post.send(:belongs_to, :user, :class_name => userclass)
27
+ end
28
+
29
+ module ClassMethods
30
+
31
+ # Method placed within User model of parent application and used to set
32
+ # Cornerstone options for the model.
33
+ def acts_as_cornerstone_user(options = {})
34
+ # == Options
35
+
36
+ # TODO: CHECK that the methods given actually exist and raise error if not
37
+ # CHECK that values given are good types
38
+ self.cornerstone_name_method = options[:user_name] if options[:user_name]
39
+ self.cornerstone_email_method = options[:user_email] if options[:user_email]
40
+ self.cornerstone_admin = options[:admin] if options[:admin]
41
+ end
42
+ end
43
+
44
+ module InstanceMethods
45
+
46
+ # return the user's name
47
+ def cornerstone_name
48
+ if self.cornerstone_name_method.present?
49
+ self.send(self.cornerstone_name_method)
50
+ else
51
+ "Not Available"
52
+ end
53
+ end
54
+
55
+ # return the user's email
56
+ def cornerstone_email
57
+ if self.cornerstone_email_method.present?
58
+ self.send(self.cornerstone_email_method)
59
+ else
60
+ "Not Available"
61
+ end
62
+ end
63
+
64
+ # Return true if this user is an administrator
65
+ def cornerstone_admin?
66
+ case
67
+ when self.cornerstone_admin.is_a?(TrueClass)
68
+ true
69
+ when self.cornerstone_admin.respond_to?(:call)
70
+ self.cornerstone_admin.call
71
+ else
72
+ false
73
+ end
74
+ end
75
+ end
76
+
77
+ end
78
+
79
+ end
@@ -0,0 +1,33 @@
1
+ module Cornerstone
2
+
3
+ # This module stores configuration options for Cornerstone
4
+ module Config
5
+
6
+ # Configure Cornerstone. Run rails generate cornerstone_install to create
7
+ # a fresh initializer with all configuration values.
8
+ def self.setup
9
+ yield self
10
+ end
11
+
12
+
13
+ # == User specified options
14
+
15
+ # The method used to access the authenticated user
16
+ mattr_accessor :auth_with
17
+ @@auth_with = :warden
18
+
19
+ # Discussion Statuses
20
+ mattr_accessor :discussion_statuses
21
+ @@discussion_statuses = ["Open", "Resolved"]
22
+
23
+ # Mailer 'from' address
24
+ mattr_accessor :mailer_from
25
+ @@mailer_from = "no-reply@cornerstone.com"
26
+
27
+ # List of admin emails
28
+ mattr_accessor :admin_emails
29
+ @@admin_emails = []
30
+
31
+ end
32
+
33
+ end
@@ -0,0 +1,25 @@
1
+ module Cornerstone
2
+
3
+ # Convenience methods added to ApplicationController.
4
+ module ControllerAdditions
5
+ extend ActiveSupport::Concern
6
+
7
+ included do
8
+ end
9
+
10
+ module ClassMethods
11
+ # Returns true if user is authorized for controller action, otherwise
12
+ # raise error
13
+ def authorize_cornerstone_admin!(*args)
14
+ self.before_filter(*args) do |controller|
15
+ raise Cornerstone::AccessDenied unless cornerstone_admin?
16
+ end
17
+ end
18
+ end
19
+
20
+ end
21
+
22
+ ActionController::Base.send :include, Cornerstone::ControllerAdditions
23
+
24
+ end
25
+
@@ -2,6 +2,13 @@ module Cornerstone
2
2
  class Engine < Rails::Engine
3
3
  engine_name "cornerstone"
4
4
  isolate_namespace Cornerstone
5
+
6
+ config.generators do |g|
7
+ g.template_engine :erb
8
+ g.test_framework :rspec
9
+ end
10
+
11
+ config.active_record.observers = :"cornerstone/post_observer"
12
+
5
13
  end
6
14
  end
7
-
@@ -0,0 +1,16 @@
1
+ module Cornerstone
2
+
3
+ class AccessDenied < StandardError
4
+ attr_writer :default_message
5
+
6
+ def initialize(message = nil)
7
+ @message = message
8
+ @default_message = I18n.t(:"unauthorized.default", :default => "You are not authorized to access this page.")
9
+ end
10
+
11
+ def to_s
12
+ @message || @default_message
13
+ end
14
+ end
15
+ end
16
+
@@ -0,0 +1,35 @@
1
+ module Cornerstone
2
+
3
+ # Convenience methods added to ApplicationController.
4
+ module Helpers
5
+ extend ActiveSupport::Concern
6
+
7
+ included do
8
+ helper_method :current_cornerstone_user, :cornerstone_admin?
9
+ end
10
+
11
+ module InstanceMethods
12
+
13
+ # To determine if a user from the main application is signed in
14
+ # Returns the user object or nil
15
+ def current_cornerstone_user
16
+ if Config.auth_with == :warden
17
+ env['warden'].user if env['warden']
18
+ elsif Config.auth_with.respond_to?(:call)
19
+ Config.auth_with.call(self)
20
+ end
21
+ end
22
+
23
+ # Return true if cornerstone_user is an administrator
24
+ def cornerstone_admin?
25
+ current_cornerstone_user && current_cornerstone_user.cornerstone_admin?
26
+ end
27
+
28
+ end
29
+
30
+ end
31
+
32
+ ActionController::Base.send :include, Cornerstone::Helpers
33
+
34
+ end
35
+