kublog 0.0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (184) hide show
  1. data/.gitignore +9 -0
  2. data/Gemfile +8 -0
  3. data/Gemfile.lock +177 -0
  4. data/MIT-LICENSE +20 -0
  5. data/README.rdoc +102 -0
  6. data/Rakefile +39 -0
  7. data/app/assets/images/kublog/.gitkeep +0 -0
  8. data/app/assets/images/kublog/missing_image.png +0 -0
  9. data/app/assets/javascripts/kublog/application.js +13 -0
  10. data/app/assets/javascripts/kublog/categories.js.coffee +48 -0
  11. data/app/assets/javascripts/kublog/comments.js.coffee +30 -0
  12. data/app/assets/javascripts/kublog/email.js.coffee +32 -0
  13. data/app/assets/javascripts/kublog/images.js.coffee +77 -0
  14. data/app/assets/javascripts/kublog/posts.js.coffee +44 -0
  15. data/app/assets/javascripts/kublog/shared.js.coffee.erb +19 -0
  16. data/app/assets/javascripts/kublog/wysiwyg.controls.js.coffee +68 -0
  17. data/app/assets/plugins/kublog/ajaxyupload/images/ajax-loader.gif +0 -0
  18. data/app/assets/plugins/kublog/ajaxyupload/javascripts/jquery.ajaxyupload.js +126 -0
  19. data/app/assets/plugins/kublog/fancybox/images/blank.gif +0 -0
  20. data/app/assets/plugins/kublog/fancybox/images/fancy_close.png +0 -0
  21. data/app/assets/plugins/kublog/fancybox/images/fancy_loading.png +0 -0
  22. data/app/assets/plugins/kublog/fancybox/images/fancy_nav_left.png +0 -0
  23. data/app/assets/plugins/kublog/fancybox/images/fancy_nav_right.png +0 -0
  24. data/app/assets/plugins/kublog/fancybox/images/fancy_shadow_e.png +0 -0
  25. data/app/assets/plugins/kublog/fancybox/images/fancy_shadow_n.png +0 -0
  26. data/app/assets/plugins/kublog/fancybox/images/fancy_shadow_ne.png +0 -0
  27. data/app/assets/plugins/kublog/fancybox/images/fancy_shadow_nw.png +0 -0
  28. data/app/assets/plugins/kublog/fancybox/images/fancy_shadow_s.png +0 -0
  29. data/app/assets/plugins/kublog/fancybox/images/fancy_shadow_se.png +0 -0
  30. data/app/assets/plugins/kublog/fancybox/images/fancy_shadow_sw.png +0 -0
  31. data/app/assets/plugins/kublog/fancybox/images/fancy_shadow_w.png +0 -0
  32. data/app/assets/plugins/kublog/fancybox/images/fancy_title_left.png +0 -0
  33. data/app/assets/plugins/kublog/fancybox/images/fancy_title_main.png +0 -0
  34. data/app/assets/plugins/kublog/fancybox/images/fancy_title_over.png +0 -0
  35. data/app/assets/plugins/kublog/fancybox/images/fancy_title_right.png +0 -0
  36. data/app/assets/plugins/kublog/fancybox/images/fancybox-x.png +0 -0
  37. data/app/assets/plugins/kublog/fancybox/images/fancybox-y.png +0 -0
  38. data/app/assets/plugins/kublog/fancybox/images/fancybox.png +0 -0
  39. data/app/assets/plugins/kublog/fancybox/javascripts/fancybox-1.3.4.js +46 -0
  40. data/app/assets/plugins/kublog/fancybox/stylesheets/fancybox-1.3.4.css +359 -0
  41. data/app/assets/plugins/kublog/livequery/javascripts/jquery.livequery.js +250 -0
  42. data/app/assets/plugins/kublog/wysiwyg/images/ajax-loader.gif +0 -0
  43. data/app/assets/plugins/kublog/wysiwyg/images/jquery.wysiwyg.bg.png +0 -0
  44. data/app/assets/plugins/kublog/wysiwyg/images/jquery.wysiwyg.gif +0 -0
  45. data/app/assets/plugins/kublog/wysiwyg/images/jquery.wysiwyg.jpg +0 -0
  46. data/app/assets/plugins/kublog/wysiwyg/images/jquery.wysiwyg.no-alpha.gif +0 -0
  47. data/app/assets/plugins/kublog/wysiwyg/javascripts/jquery.wysiwyg.js +2377 -0
  48. data/app/assets/plugins/kublog/wysiwyg/javascripts/wysiwyg.image.js +284 -0
  49. data/app/assets/plugins/kublog/wysiwyg/javascripts/wysiwyg.link.js +249 -0
  50. data/app/assets/plugins/kublog/wysiwyg/stylesheets/jquery.wysiwyg.css +94 -0
  51. data/app/assets/stylesheets/kublog/application.css +9 -0
  52. data/app/assets/stylesheets/kublog/categories.css +4 -0
  53. data/app/assets/stylesheets/kublog/comments.css +4 -0
  54. data/app/assets/stylesheets/kublog/email.css +7 -0
  55. data/app/assets/stylesheets/kublog/images.css +41 -0
  56. data/app/assets/stylesheets/kublog/posts.css +39 -0
  57. data/app/controllers/kublog/application_controller.rb +12 -0
  58. data/app/controllers/kublog/categories_controller.rb +47 -0
  59. data/app/controllers/kublog/comments_controller.rb +37 -0
  60. data/app/controllers/kublog/images_controller.rb +44 -0
  61. data/app/controllers/kublog/posts_controller.rb +66 -0
  62. data/app/helpers/kublog/application_helper.rb +4 -0
  63. data/app/helpers/kublog/posts_helper.rb +38 -0
  64. data/app/mailers/kublog/post_mailer.rb +11 -0
  65. data/app/models/kublog/category.rb +26 -0
  66. data/app/models/kublog/comment.rb +46 -0
  67. data/app/models/kublog/image.rb +23 -0
  68. data/app/models/kublog/post.rb +51 -0
  69. data/app/presenters/kublog/post_presenter.rb +23 -0
  70. data/app/presenters/kublog/posts_presenter.rb +29 -0
  71. data/app/uploaders/kublog/file_uploader.rb +56 -0
  72. data/app/views/kublog/post_mailer/new_post.html.erb +1 -0
  73. data/app/views/kublog/post_mailer/new_post.liquid.html.erb +7 -0
  74. data/app/views/kublog/posts/_email_form.html.erb +13 -0
  75. data/app/views/kublog/posts/_form.html.erb +71 -0
  76. data/app/views/kublog/posts/_image_form.html.erb +26 -0
  77. data/app/views/kublog/posts/edit.html.erb +3 -0
  78. data/app/views/kublog/posts/index.atom.builder +15 -0
  79. data/app/views/kublog/posts/index.html.erb +36 -0
  80. data/app/views/kublog/posts/new.html.erb +3 -0
  81. data/app/views/kublog/posts/show.html.erb +46 -0
  82. data/app/views/layouts/kublog/application.html.erb +14 -0
  83. data/config/locales/kublog/en.yml +54 -0
  84. data/config/routes.rb +13 -0
  85. data/db/migrate/20110816211552_create_kublog_posts.rb +27 -0
  86. data/db/migrate/20110817215828_create_kublog_images.rb +11 -0
  87. data/db/migrate/20110818181434_create_kublog_categories.rb +11 -0
  88. data/db/migrate/20110822194341_create_kublog_comments.rb +14 -0
  89. data/kublog.gemspec +39 -0
  90. data/lib/kublog.rb +92 -0
  91. data/lib/kublog/author.rb +13 -0
  92. data/lib/kublog/engine.rb +5 -0
  93. data/lib/kublog/notifiable.rb +26 -0
  94. data/lib/kublog/notification/email.rb +86 -0
  95. data/lib/kublog/notification/email_job.rb +14 -0
  96. data/lib/kublog/notification/fb_post.rb +43 -0
  97. data/lib/kublog/notification/fb_post_job.rb +16 -0
  98. data/lib/kublog/notification/tweet.rb +68 -0
  99. data/lib/kublog/notification/tweet_job.rb +16 -0
  100. data/lib/kublog/user_integration/common.rb +31 -0
  101. data/lib/kublog/user_integration/devise.rb +23 -0
  102. data/lib/kublog/version.rb +3 -0
  103. data/lib/kublog/xhr_upload/file_helper.rb +36 -0
  104. data/lib/tasks/kublog_tasks.rake +4 -0
  105. data/script/rails +6 -0
  106. data/test/dummy/Rakefile +7 -0
  107. data/test/dummy/app/assets/javascripts/application.js +9 -0
  108. data/test/dummy/app/assets/javascripts/sessions.js +2 -0
  109. data/test/dummy/app/assets/javascripts/users.js +2 -0
  110. data/test/dummy/app/assets/stylesheets/application.css +157 -0
  111. data/test/dummy/app/assets/stylesheets/sessions.css +4 -0
  112. data/test/dummy/app/assets/stylesheets/users.css +4 -0
  113. data/test/dummy/app/controllers/application_controller.rb +19 -0
  114. data/test/dummy/app/controllers/sessions_controller.rb +22 -0
  115. data/test/dummy/app/controllers/users_controller.rb +17 -0
  116. data/test/dummy/app/helpers/application_helper.rb +2 -0
  117. data/test/dummy/app/helpers/error_messages_helper.rb +23 -0
  118. data/test/dummy/app/helpers/layout_helper.rb +22 -0
  119. data/test/dummy/app/helpers/sessions_helper.rb +2 -0
  120. data/test/dummy/app/helpers/users_helper.rb +2 -0
  121. data/test/dummy/app/mailers/.gitkeep +0 -0
  122. data/test/dummy/app/models/.gitkeep +0 -0
  123. data/test/dummy/app/models/ability.rb +2 -0
  124. data/test/dummy/app/models/user.rb +25 -0
  125. data/test/dummy/app/views/layouts/_account.html.erb +8 -0
  126. data/test/dummy/app/views/layouts/application.html.erb +29 -0
  127. data/test/dummy/app/views/layouts/kublog/application.html.erb +31 -0
  128. data/test/dummy/app/views/sessions/new.html.erb +15 -0
  129. data/test/dummy/app/views/users/new.html.erb +28 -0
  130. data/test/dummy/config.ru +4 -0
  131. data/test/dummy/config/application.rb +42 -0
  132. data/test/dummy/config/boot.rb +10 -0
  133. data/test/dummy/config/database.yml +25 -0
  134. data/test/dummy/config/environment.rb +5 -0
  135. data/test/dummy/config/environments/development.rb +38 -0
  136. data/test/dummy/config/environments/production.rb +51 -0
  137. data/test/dummy/config/environments/test.rb +39 -0
  138. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  139. data/test/dummy/config/initializers/inflections.rb +10 -0
  140. data/test/dummy/config/initializers/mime_types.rb +5 -0
  141. data/test/dummy/config/initializers/secret_token.rb +7 -0
  142. data/test/dummy/config/initializers/session_store.rb +8 -0
  143. data/test/dummy/config/initializers/wrap_parameters.rb +12 -0
  144. data/test/dummy/config/locales/en.yml +54 -0
  145. data/test/dummy/config/routes.rb +13 -0
  146. data/test/dummy/db/migrate/20110816225222_create_users.rb +11 -0
  147. data/test/dummy/db/migrate/20110819135547_create_delayed_jobs.rb +21 -0
  148. data/test/dummy/db/schema.rb +96 -0
  149. data/test/dummy/lib/assets/.gitkeep +0 -0
  150. data/test/dummy/log/.gitkeep +0 -0
  151. data/test/dummy/public/404.html +26 -0
  152. data/test/dummy/public/422.html +26 -0
  153. data/test/dummy/public/500.html +26 -0
  154. data/test/dummy/public/favicon.ico +0 -0
  155. data/test/dummy/script/delayed_job +5 -0
  156. data/test/dummy/script/rails +6 -0
  157. data/test/dummy/test/fixtures/users.yml +9 -0
  158. data/test/dummy/test/functional/sessions_controller_test.rb +7 -0
  159. data/test/dummy/test/functional/users_controller_test.rb +7 -0
  160. data/test/dummy/test/unit/helpers/sessions_helper_test.rb +4 -0
  161. data/test/dummy/test/unit/helpers/users_helper_test.rb +4 -0
  162. data/test/dummy/test/unit/user_test.rb +7 -0
  163. data/test/factories.rb +9 -0
  164. data/test/fixtures/kublog/categories.yml +7 -0
  165. data/test/fixtures/kublog/comments.yml +7 -0
  166. data/test/fixtures/kublog/images.yml +9 -0
  167. data/test/fixtures/kublog/posts.yml +9 -0
  168. data/test/functional/kublog/categories_controller_test.rb +9 -0
  169. data/test/functional/kublog/comments_controller_test.rb +9 -0
  170. data/test/functional/kublog/images_controller_test.rb +9 -0
  171. data/test/functional/kublog/post_mailer_test.rb +9 -0
  172. data/test/functional/kublog/posts_controller_test.rb +9 -0
  173. data/test/integration/navigation_test.rb +10 -0
  174. data/test/kublog_test.rb +7 -0
  175. data/test/test_helper.rb +12 -0
  176. data/test/unit/helpers/kublog/categories_helper_test.rb +6 -0
  177. data/test/unit/helpers/kublog/comments_helper_test.rb +6 -0
  178. data/test/unit/helpers/kublog/images_helper_test.rb +6 -0
  179. data/test/unit/helpers/kublog/posts_helper_test.rb +6 -0
  180. data/test/unit/kublog/category_test.rb +9 -0
  181. data/test/unit/kublog/comment_test.rb +9 -0
  182. data/test/unit/kublog/image_test.rb +9 -0
  183. data/test/unit/kublog/post_test.rb +19 -0
  184. metadata +439 -0
@@ -0,0 +1,3 @@
1
+ <h1><%= t('.title') %></h1>
2
+
3
+ <%= render 'form', :post => @post %>
@@ -0,0 +1,46 @@
1
+ <div class='post-actions'>
2
+ <h2><%= t('.post_actions') %></h2>
3
+ <ul>
4
+ <% if is_admin? %>
5
+ <li><%= link_to t('.edit'), [:edit, @presenter.post] %></li>
6
+ <li><%= link_to t('.delete'), @presenter.post, :method => :delete, :confirm => t('.confirm') %></li>
7
+ <% end %>
8
+ <li> <%= link_to 'All posts', posts_path %></li>
9
+ </ul>
10
+ </div>
11
+ <div class='post-title'>
12
+ <h1><%= @presenter.post %></h1>
13
+ <span class='published-at'><%= l @presenter.post.updated_at, :format => :short %></span>
14
+ </div>
15
+ <div class='post-pody'>
16
+ <%= @presenter.post.body.html_safe %>
17
+ </div>
18
+ <div class='post-comments'>
19
+ <% @presenter.comments.each do |comment| %>
20
+ <div class='comment <%= admin_comment?(comment) %>'>
21
+ <h4><%= comment.author %></h4>
22
+ <p class='body'><%= comment.body %></p>
23
+ <span><%= l comment.created_at, :format => :short %></span>
24
+ <% if is_admin? %>
25
+ <div class='admin-actions'>
26
+ <%= link_to t('.delete'), post_comment_path(@presenter.post, comment),
27
+ :method => :delete, :confirm => t('.confirm'),
28
+ :class=> 'delete' %>
29
+ </div>
30
+ <% end %>
31
+ </div>
32
+ <% end %>
33
+ </div>
34
+ <div class='new-comment'>
35
+ <h2><%= t('.new_comment') %></h2>
36
+ <%= form_for [@presenter.post, Kublog::Comment.new], :remote => true do |f| %>
37
+ <%= f.text_area :body, :rows => 5, :cols => 20, :class => 'small' %> <br />
38
+ <% unless current_user %>
39
+ <%= f.label :author_name %><br />
40
+ <%= f.text_field :author_name %> <br />
41
+ <%= f.label :author_email %><br />
42
+ <%= f.text_field :author_email %> <br />
43
+ <% end %>
44
+ <%= f.submit %>
45
+ <% end %>
46
+ </div>
@@ -0,0 +1,14 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>Kublog</title>
5
+ <%= stylesheet_link_tag "kublog/application" %>
6
+ <%= javascript_include_tag "kublog/application" %>
7
+ <%= csrf_meta_tags %>
8
+ </head>
9
+
10
+ <body id='kublog'>
11
+ <%= yield %>
12
+ </body>
13
+
14
+ </html>
@@ -0,0 +1,54 @@
1
+ en:
2
+ kublog:
3
+ posts:
4
+ index:
5
+ edit: 'edit'
6
+ delete: 'delete'
7
+ category_delete_confirm: 'Are you sure? All posts under this category will be left uncategorized'
8
+ edit_category_prompt: 'New name:'
9
+ actions: 'Actions'
10
+ categories: 'Categories'
11
+ new:
12
+ title: 'Building a Post'
13
+ edit:
14
+ title: 'Editing a Post'
15
+ show:
16
+ edit: 'Edit'
17
+ delete: 'Delete'
18
+ confirm: 'Are you sure?'
19
+ new_comment: 'New Comment'
20
+ post_actions: 'Post Actions'
21
+ form:
22
+ or: 'or'
23
+ cancel: 'cancel'
24
+ format_email: 'Format E-Mail'
25
+ link_to_tweet: 'A link to this post will be appended'
26
+ link_to_facebook: "Will be published as link to this post"
27
+ image_form:
28
+ insert_image: 'Insert Image'
29
+ or: 'or'
30
+ cancel: 'cancel'
31
+ insert_size: 'Size'
32
+ alt: 'Alt Text'
33
+ post_mailer:
34
+ new_post:
35
+ greetings: 'Greetings'
36
+ activerecord:
37
+ models:
38
+ 'kublog/opst': 'Post'
39
+ attributes:
40
+ 'kublog/post':
41
+ title: 'Title'
42
+ body: 'Body'
43
+ category_id: 'Category'
44
+ 'kublog/comment':
45
+ author_name: 'Name'
46
+ author_email: 'E-mail'
47
+ helpers:
48
+ label:
49
+ post:
50
+ title: 'Title'
51
+ body: 'Body'
52
+ email_notify: 'Notify users via E-mail'
53
+ twitter_notify: 'Notify users via Twitter'
54
+ facebook_notify: 'Notify users via Facebook'
@@ -0,0 +1,13 @@
1
+ Kublog::Engine.routes.draw do
2
+ root :to => 'posts#index'
3
+ resources :posts do
4
+ resources :comments
5
+ collection do
6
+ post :check
7
+ put :check
8
+ end
9
+ end
10
+ resources :images
11
+ resources :categories
12
+ match '/:id', :to => 'posts#show', :as => 'quickie'
13
+ end
@@ -0,0 +1,27 @@
1
+ class CreateKublogPosts < ActiveRecord::Migration
2
+ def change
3
+ create_table :kublog_posts do |t|
4
+ t.string :title
5
+ t.text :body
6
+ t.boolean :email_notify, :default => false
7
+ t.text :email_body
8
+ t.integer :users_notified
9
+ t.boolean :twitter_notify, :default => false
10
+ t.string :tweet_id
11
+ t.string :tweet_text
12
+ t.boolean :facebook_notify, :default => false
13
+ t.text :facebook_text
14
+ t.references :user
15
+ t.references :category
16
+ t.string :intended_for
17
+ t.string :slug
18
+ t.timestamps
19
+ end
20
+
21
+ add_index :kublog_posts, :title
22
+ add_index :kublog_posts, :user_id
23
+ add_index :kublog_posts, :category_id
24
+ add_index :kublog_posts, :slug, :unique => true
25
+ end
26
+ end
27
+
@@ -0,0 +1,11 @@
1
+ class CreateKublogImages < ActiveRecord::Migration
2
+ def change
3
+ create_table :kublog_images do |t|
4
+ t.string :alt
5
+ t.string :file
6
+ t.integer :file_width
7
+ t.integer :file_height
8
+ t.timestamps
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ class CreateKublogCategories < ActiveRecord::Migration
2
+ def change
3
+ create_table :kublog_categories do |t|
4
+ t.string :name
5
+ t.string :slug
6
+ t.timestamps
7
+ end
8
+ add_index :kublog_categories, :name
9
+ add_index :kublog_categories, :slug, :unique => true
10
+ end
11
+ end
@@ -0,0 +1,14 @@
1
+ class CreateKublogComments < ActiveRecord::Migration
2
+ def change
3
+ create_table :kublog_comments do |t|
4
+ t.text :body
5
+ t.references :user
6
+ t.references :post
7
+ t.string :author_name
8
+ t.string :author_email
9
+ t.timestamps
10
+ end
11
+ add_index :kublog_comments, :post_id
12
+ add_index :kublog_comments, :user_id
13
+ end
14
+ end
@@ -0,0 +1,39 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "kublog/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "kublog"
7
+ s.version = Kublog::VERSION
8
+ s.authors = ["Adrian Cuadros"]
9
+ s.email = ["adrian@innku.com"]
10
+ s.homepage = "http://rutanet.com/blog"
11
+ s.summary = %q{Product Blog Engine, simple, social and fully integrated with your Users}
12
+ s.description = %q{Rails Mountable Engine that sets up your Product Blog, share your posts on facebook, twitter and E-mail your users with your latest product news}
13
+
14
+ s.rubyforge_project = "kublog"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib"]
20
+
21
+ # Runtime dependencies
22
+ s.add_runtime_dependency "rails", '~>3.1.0.rc5'
23
+ s.add_runtime_dependency "jquery-rails", '~>1.0.13'
24
+ s.add_runtime_dependency 'coffee-script', '~>2.2.0'
25
+ s.add_runtime_dependency "friendly_id", "~> 4.0.0.beta8"
26
+ s.add_runtime_dependency "sanitize", '~>2.0.3'
27
+
28
+ # This gems should stop being dependencies but optional with certain features
29
+ s.add_runtime_dependency "rmagick", '~>2.13.1'
30
+ s.add_runtime_dependency "carrierwave", '~>0.5.7'
31
+ s.add_runtime_dependency 'liquid', '~>2.2.2'
32
+ s.add_runtime_dependency 'twitter', '~>1.6.2'
33
+ s.add_runtime_dependency 'fb_graph', '~>1.9.5'
34
+
35
+ # Development dependencies
36
+ s.add_development_dependency "factory_girl_rails"
37
+ s.add_development_dependency "sqlite3"
38
+
39
+ end
@@ -0,0 +1,92 @@
1
+ require "rails"
2
+ require 'coffee-script'
3
+ require "jquery-rails"
4
+ require "twitter"
5
+ require "fb_graph"
6
+ require "friendly_id"
7
+ require "carrierwave"
8
+ require "rmagick"
9
+ require "sanitize"
10
+ require "liquid"
11
+
12
+ require "kublog/engine"
13
+ require "kublog/version"
14
+
15
+ module Kublog
16
+
17
+ autoload :Notifiable, 'kublog/notifiable'
18
+ autoload :Author, 'kublog/author'
19
+
20
+ module Notification
21
+ autoload :Email, 'kublog/notification/email'
22
+ autoload :EmailJob, 'kublog/notification/email_job'
23
+ autoload :Tweet, 'kublog/notification/tweet'
24
+ autoload :TweetJob, 'kublog/notification/tweet_job'
25
+ autoload :FbPost, 'kublog/notification/fb_post'
26
+ autoload :FbPostJob, 'kublog/notification/fb_post_job'
27
+ end
28
+
29
+ module XhrUpload
30
+ autoload :FileHelper, 'kublog/xhr_upload/file_helper'
31
+ end
32
+
33
+ module UserIntegration
34
+ autoload :Common, 'kublog/user_integration/common'
35
+ autoload :Devise, 'kublog/user_integration/devise'
36
+ end
37
+
38
+ mattr_accessor :default_url_options
39
+ @@default_url_options = {:host => 'www.example.com'}
40
+
41
+ mattr_accessor :user_kinds
42
+ @@user_kinds = []
43
+
44
+ mattr_reader :notification_processing
45
+ @@notification_processing = :immediately
46
+
47
+ mattr_accessor :image_storage
48
+ @@image_storage = :file
49
+
50
+ mattr_accessor :author_class
51
+ @@author_class = 'User'
52
+
53
+ def self.notification_processing=(method='')
54
+ @@notification_processing = method.to_sym
55
+ if @@notification_processing == :delayed_job
56
+ unless defined? Delayed::Job
57
+ raise 'You must require delayed_job in your Gemfile to use this feature'
58
+ end
59
+ end
60
+ end
61
+
62
+ KublogTwitter = Twitter.clone
63
+ mattr_accessor :twitter_client
64
+ @@twitter_client = KublogTwitter::Client.new
65
+
66
+ mattr_accessor :facebook_client
67
+
68
+ mattr_accessor :blog_name
69
+ @@blog_name = 'Kublog::Blog'
70
+
71
+ def self.facebook_page_token=(token)
72
+ @@facebook_client = FbGraph::User.me(token)
73
+ end
74
+
75
+ def self.setup
76
+ yield self
77
+ end
78
+
79
+ def self.twitter
80
+ yield @@twitter_client
81
+ end
82
+
83
+ def self.asset_path(path)
84
+ ["/assets", self.root_path , path].join
85
+ end
86
+
87
+ def self.root_path
88
+ Engine.routes.url_helpers.root_path
89
+ end
90
+
91
+
92
+ end
@@ -0,0 +1,13 @@
1
+ # Module to be included in user that enables him to be
2
+ # published in Posts
3
+
4
+ module Kublog
5
+ module Author
6
+
7
+ def self.included(base)
8
+ Kublog.author_class = base.name
9
+ base.send :has_many, :posts, :class_name => 'Kublog::Post'
10
+ end
11
+
12
+ end
13
+ end
@@ -0,0 +1,5 @@
1
+ module Kublog
2
+ class Engine < Rails::Engine
3
+ isolate_namespace Kublog
4
+ end
5
+ end
@@ -0,0 +1,26 @@
1
+ # Module to be included in User if it wants to implement notifications
2
+ # Sets class options to see if the user has required the module
3
+ # And defaults notification for every user to true
4
+
5
+ module Kublog
6
+ module Notifiable
7
+
8
+ def self.included(base)
9
+ base.class_eval do
10
+ @@kublog_notifiable = true
11
+ cattr_accessor :kublog_notifiable
12
+ end
13
+ base.send :include, InstanceMethods
14
+ end
15
+
16
+ # Defaults notification setting to true
17
+ # If User Kinds are being used, this should be
18
+ # Overriden
19
+ module InstanceMethods
20
+ def notify_post?(post)
21
+ true
22
+ end
23
+ end
24
+
25
+ end
26
+ end
@@ -0,0 +1,86 @@
1
+ # This class includes the interface to all the different
2
+ # Delivery methods and requires the one that the user chose
3
+ # in the configuration File
4
+
5
+ module Kublog
6
+ module Notification
7
+ module Email
8
+
9
+ # Sets callbacks for E-mail delivery
10
+ # Includes necessary methods for e-mail notification callback
11
+ # and requires appropriate method of notification (Immediate, Delayed Job..)
12
+ def self.included(base)
13
+
14
+ base.send :after_create, :notify_email
15
+ base.send :before_validation, :build_email_body, :on => :create
16
+
17
+ base.send :include, case Kublog.notification_processing.try(:to_sym)
18
+ when :delayed_job then DelayedJob
19
+ else Immediate
20
+ end
21
+
22
+ base.send :include, InstanceMethods
23
+
24
+ # Defines a for_x type of method for each user kind
25
+ # Designed to interface with the user to selectively deliver E-mails
26
+ Kublog.user_kinds.each do |user_kind|
27
+ define_method "for_#{user_kind}?" do
28
+ self.intended_for.include?(user_kind)
29
+ end
30
+ end
31
+ end
32
+
33
+ module InstanceMethods
34
+
35
+ # Called to notify users after the creation of a post
36
+ # probably should happen after publication
37
+ def notify_email
38
+ klass = user.class
39
+ if klass.try(:kublog_notifiable) && self.email_notify
40
+ notifications_sent = 0
41
+ klass.find_each do |user|
42
+ if user.notify_post?(self)
43
+ post_deliver(self, user)
44
+ notifications_sent += 1
45
+ end
46
+ end
47
+ self.update_attribute :users_notified, notifications_sent
48
+ end
49
+ end
50
+
51
+ protected
52
+
53
+ # Opens the ERB and Liquid Template set in the mailer view folders
54
+ # sets the context variables and processes them before to remove erb section
55
+ def build_email_body
56
+ if self.email_body.blank? && !Sanitize.clean(self.body).blank?
57
+ template_path = "app/views/kublog/post_mailer/new_post.liquid.html.erb"
58
+ template = File.open(File.join(Rails.root, template_path))
59
+ read_erb_template(template)
60
+ end
61
+ end
62
+
63
+ def read_erb_template(template)
64
+ post = self
65
+ self.email_body = ERB.new(template.read).result(binding)
66
+ end
67
+
68
+ end
69
+
70
+ # Queues Process on DJ
71
+ module DelayedJob
72
+ def post_deliver(post, user)
73
+ Delayed::Job.enqueue(EmailJob.new(post, user))
74
+ end
75
+ end
76
+
77
+ # Delivers Immediately
78
+ module Immediate
79
+ def post_deliver(post,user)
80
+ PostMailer.new_post(post,user).deliver
81
+ end
82
+ end
83
+
84
+ end
85
+ end
86
+ end