blogit 0.0.4

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 (175) hide show
  1. data/MIT-LICENSE +20 -0
  2. data/README.md +3 -0
  3. data/Rakefile +39 -0
  4. data/app/assets/javascripts/blogit/index.js +1 -0
  5. data/app/assets/stylesheets/blogit/comments.css +16 -0
  6. data/app/assets/stylesheets/blogit/index.css +3 -0
  7. data/app/assets/stylesheets/blogit/posts.css +59 -0
  8. data/app/controllers/blogit/application_controller.rb +41 -0
  9. data/app/controllers/blogit/comments_controller.rb +44 -0
  10. data/app/controllers/blogit/posts_controller.rb +55 -0
  11. data/app/helpers/blogit/application_helper.rb +64 -0
  12. data/app/helpers/blogit/comments_helper.rb +19 -0
  13. data/app/helpers/blogit/posts_helper.rb +26 -0
  14. data/app/models/blogit/comment.rb +59 -0
  15. data/app/models/blogit/post.rb +57 -0
  16. data/app/views/blogit/comments/_comment.html.erb +16 -0
  17. data/app/views/blogit/comments/_form.html.erb +42 -0
  18. data/app/views/blogit/comments/create.js.erb +7 -0
  19. data/app/views/blogit/comments/destroy.js.erb +1 -0
  20. data/app/views/blogit/posts/_blog_post_spacer.html.erb +1 -0
  21. data/app/views/blogit/posts/_blogger_information.html.erb +4 -0
  22. data/app/views/blogit/posts/_comments_count.html.erb +5 -0
  23. data/app/views/blogit/posts/_form.html.erb +43 -0
  24. data/app/views/blogit/posts/_pagination.html.erb +1 -0
  25. data/app/views/blogit/posts/_post.html.erb +19 -0
  26. data/app/views/blogit/posts/_post_body.html.erb +1 -0
  27. data/app/views/blogit/posts/_post_head.html.erb +3 -0
  28. data/app/views/blogit/posts/_post_links.html.erb +5 -0
  29. data/app/views/blogit/posts/edit.html.erb +3 -0
  30. data/app/views/blogit/posts/index.html.erb +10 -0
  31. data/app/views/blogit/posts/new.html.erb +3 -0
  32. data/app/views/blogit/posts/show.html.erb +7 -0
  33. data/config/routes.rb +9 -0
  34. data/db/migrate/20110814091434_create_blog_posts.rb +12 -0
  35. data/db/migrate/20110814093229_create_blog_comments.rb +15 -0
  36. data/db/migrate/20110814103306_acts_as_taggable_on_migration.rb +28 -0
  37. data/lib/blogit.rb +24 -0
  38. data/lib/blogit/blogs.rb +19 -0
  39. data/lib/blogit/configuration.rb +74 -0
  40. data/lib/blogit/engine.rb +14 -0
  41. data/lib/blogit/parsers.rb +5 -0
  42. data/lib/blogit/parsers/html_parser.rb +9 -0
  43. data/lib/blogit/parsers/markdown_parser.rb +21 -0
  44. data/lib/blogit/parsers/textile_parser.rb +13 -0
  45. data/lib/blogit/version.rb +3 -0
  46. data/lib/generators/blogit/USAGE +8 -0
  47. data/lib/generators/blogit/install_generator.rb +15 -0
  48. data/lib/generators/templates/blogit.rb +42 -0
  49. data/lib/tasks/blog_tasks.rake +4 -0
  50. data/lib/validators.rb +3 -0
  51. data/lib/validators/absence_validator.rb +13 -0
  52. data/spec/blogit_spec.rb +20 -0
  53. data/spec/controllers/blogit/comments_controller_spec.rb +111 -0
  54. data/spec/controllers/blogit/posts_controller_spec.rb +261 -0
  55. data/spec/dummy/Rakefile +7 -0
  56. data/spec/dummy/app/assets/javascripts/application.js +3 -0
  57. data/spec/dummy/app/assets/stylesheets/application.css +18 -0
  58. data/spec/dummy/app/controllers/application_controller.rb +19 -0
  59. data/spec/dummy/app/controllers/people_controller.rb +83 -0
  60. data/spec/dummy/app/controllers/sessions_controller.rb +23 -0
  61. data/spec/dummy/app/controllers/users_controller.rb +83 -0
  62. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  63. data/spec/dummy/app/helpers/people_helper.rb +2 -0
  64. data/spec/dummy/app/helpers/sessions_helper.rb +2 -0
  65. data/spec/dummy/app/helpers/users_helper.rb +2 -0
  66. data/spec/dummy/app/models/person.rb +2 -0
  67. data/spec/dummy/app/models/user.rb +11 -0
  68. data/spec/dummy/app/views/layouts/application.html.erb +28 -0
  69. data/spec/dummy/app/views/people/_form.html.erb +21 -0
  70. data/spec/dummy/app/views/people/edit.html.erb +6 -0
  71. data/spec/dummy/app/views/people/index.html.erb +23 -0
  72. data/spec/dummy/app/views/people/new.html.erb +5 -0
  73. data/spec/dummy/app/views/people/show.html.erb +10 -0
  74. data/spec/dummy/app/views/sessions/new.html.erb +17 -0
  75. data/spec/dummy/app/views/users/_form.html.erb +25 -0
  76. data/spec/dummy/app/views/users/edit.html.erb +6 -0
  77. data/spec/dummy/app/views/users/index.html.erb +25 -0
  78. data/spec/dummy/app/views/users/new.html.erb +5 -0
  79. data/spec/dummy/app/views/users/show.html.erb +15 -0
  80. data/spec/dummy/config.ru +4 -0
  81. data/spec/dummy/config/application.rb +25 -0
  82. data/spec/dummy/config/boot.rb +10 -0
  83. data/spec/dummy/config/database.yml +25 -0
  84. data/spec/dummy/config/environment.rb +5 -0
  85. data/spec/dummy/config/environments/development.rb +30 -0
  86. data/spec/dummy/config/environments/production.rb +51 -0
  87. data/spec/dummy/config/environments/test.rb +39 -0
  88. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  89. data/spec/dummy/config/initializers/blogit.rb +40 -0
  90. data/spec/dummy/config/initializers/inflections.rb +10 -0
  91. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  92. data/spec/dummy/config/initializers/secret_token.rb +7 -0
  93. data/spec/dummy/config/initializers/session_store.rb +8 -0
  94. data/spec/dummy/config/initializers/wrap_parameters.rb +12 -0
  95. data/spec/dummy/config/locales/en.yml +5 -0
  96. data/spec/dummy/config/routes.rb +11 -0
  97. data/spec/dummy/db/development.sqlite3 +0 -0
  98. data/spec/dummy/db/migrate/20110814091304_create_users.rb +10 -0
  99. data/spec/dummy/db/migrate/20110819103335_create_people.rb +9 -0
  100. data/spec/dummy/db/schema.rb +71 -0
  101. data/spec/dummy/db/test.sqlite3 +0 -0
  102. data/spec/dummy/log/development.log +21145 -0
  103. data/spec/dummy/log/test.log +32053 -0
  104. data/spec/dummy/public/404.html +26 -0
  105. data/spec/dummy/public/422.html +26 -0
  106. data/spec/dummy/public/500.html +26 -0
  107. data/spec/dummy/public/favicon.ico +0 -0
  108. data/spec/dummy/script/rails +6 -0
  109. data/spec/dummy/test/fixtures/people.yml +7 -0
  110. data/spec/dummy/test/fixtures/users.yml +9 -0
  111. data/spec/dummy/test/functional/people_controller_test.rb +49 -0
  112. data/spec/dummy/test/functional/sessions_controller_test.rb +9 -0
  113. data/spec/dummy/test/functional/users_controller_test.rb +49 -0
  114. data/spec/dummy/test/unit/helpers/people_helper_test.rb +4 -0
  115. data/spec/dummy/test/unit/helpers/sessions_helper_test.rb +4 -0
  116. data/spec/dummy/test/unit/helpers/users_helper_test.rb +4 -0
  117. data/spec/dummy/test/unit/person_test.rb +7 -0
  118. data/spec/dummy/test/unit/user_test.rb +7 -0
  119. data/spec/dummy/tmp/cache/assets/BC4/870/sprockets%2F64a399278031122c8576726e146081d5 +0 -0
  120. data/spec/dummy/tmp/cache/assets/C49/710/sprockets%2F8a389a2323475a7053fc419c4103814f +0 -0
  121. data/spec/dummy/tmp/cache/assets/C9E/F00/sprockets%2Fdbb1755717649d42fe9df99326657618 +0 -0
  122. data/spec/dummy/tmp/cache/assets/CAA/0C0/sprockets%2Feec4505e23136c45e543a609b0c69554 +0 -0
  123. data/spec/dummy/tmp/cache/assets/CDE/240/sprockets%2Fcf7da81f64139020d3a4a78f904609c4 +0 -0
  124. data/spec/dummy/tmp/cache/assets/CEF/560/sprockets%2Fa1bf08ab120c72351b460a65e4800af6 +0 -0
  125. data/spec/dummy/tmp/cache/assets/CF0/1D0/sprockets%2F6fc757c2c8329244ca95d6909865bbc2 +0 -0
  126. data/spec/dummy/tmp/cache/assets/D08/D50/sprockets%2F36daa544802ddf93249b8d07dab81125 +0 -0
  127. data/spec/dummy/tmp/cache/assets/D0A/410/sprockets%2F7e74a40717d2324f9a30ddff29ea5124 +0 -0
  128. data/spec/dummy/tmp/cache/assets/D0E/C00/sprockets%2F3091a34f307d562f44ee24f4c776baa9 +0 -0
  129. data/spec/dummy/tmp/cache/assets/D0F/180/sprockets%2F1ea0059d1fca1d25898ff37c7c150944 +0 -0
  130. data/spec/dummy/tmp/cache/assets/D10/610/sprockets%2F5883b6e94dcea7e32d57de13201563c3 +0 -0
  131. data/spec/dummy/tmp/cache/assets/D11/D20/sprockets%2Fcac21eac42152981882bf9e489316af4 +0 -0
  132. data/spec/dummy/tmp/cache/assets/D1F/730/sprockets%2F2f81ed50f6f293b326c576a8528ce9f3 +0 -0
  133. data/spec/dummy/tmp/cache/assets/D22/380/sprockets%2Fda1670e413fe4633d84eb9394fd7797c +0 -0
  134. data/spec/dummy/tmp/cache/assets/D32/A10/sprockets%2F13fe41fee1fe35b49d145bcc06610705 +0 -0
  135. data/spec/dummy/tmp/cache/assets/D33/240/sprockets%2Ffd4446a4ab97006a073ba30d57fdd617 +0 -0
  136. data/spec/dummy/tmp/cache/assets/D34/140/sprockets%2F0d8b2740eca50a83fc91e51292f9f00c +0 -0
  137. data/spec/dummy/tmp/cache/assets/D34/680/sprockets%2Fb2cb3891a4cb197ecb1a37299d14c531 +0 -0
  138. data/spec/dummy/tmp/cache/assets/D3C/3A0/sprockets%2F40c65286b76c2cbc9d2bd92a60e7f126 +0 -0
  139. data/spec/dummy/tmp/cache/assets/D3D/C40/sprockets%2F4654852579bc0bea406bcd54d38a7dc3 +0 -0
  140. data/spec/dummy/tmp/cache/assets/D46/650/sprockets%2Ff56253b5f374fff1a33fbbc9881c9124 +0 -0
  141. data/spec/dummy/tmp/cache/assets/D54/ED0/sprockets%2F71c9fa01091d432b131da3bb73faf3d4 +0 -0
  142. data/spec/dummy/tmp/cache/assets/D58/1E0/sprockets%2Fdd863e40bd669f77bb549b257d88d6b5 +0 -0
  143. data/spec/dummy/tmp/cache/assets/D61/6F0/sprockets%2F02da53eeca228bcef0c49278517111fe +0 -0
  144. data/spec/dummy/tmp/cache/assets/D63/720/sprockets%2Fe625e6b0d13c0bd8ca548a48e1d4508b +0 -0
  145. data/spec/dummy/tmp/cache/assets/D70/D70/sprockets%2Fc9ac544160bbcc29d775b54ca8f0269f +0 -0
  146. data/spec/dummy/tmp/cache/assets/D73/220/sprockets%2F3dbc0a37f98fb43ec819b85a64d32c55 +0 -0
  147. data/spec/dummy/tmp/cache/assets/D7A/BD0/sprockets%2Ff645c87585af5bf4be27a271f20b39ff +0 -0
  148. data/spec/dummy/tmp/cache/assets/D80/960/sprockets%2F269feebf3271f38b09bd01e9b748f77d +0 -0
  149. data/spec/dummy/tmp/cache/assets/D82/800/sprockets%2F72f633d76779cbfb7d9a57b5623c3faf +0 -0
  150. data/spec/dummy/tmp/cache/assets/D84/210/sprockets%2Fabd0103ccec2b428ac62c94e4c40b384 +0 -0
  151. data/spec/dummy/tmp/cache/assets/D8D/EA0/sprockets%2Fe64949cb167a0aa27a33a1adf1d544be +0 -0
  152. data/spec/dummy/tmp/cache/assets/DCA/9B0/sprockets%2Fdf0e8f8a85e5d4056b3fe1cec3b7131a +0 -0
  153. data/spec/dummy/tmp/cache/assets/DF3/BA0/sprockets%2Ffddeae525be5a563ca0d194b614bf64b +0 -0
  154. data/spec/dummy/tmp/cache/assets/DFF/B40/sprockets%2Fe0d60af9df95b2a58c278acd3f2beb55 +0 -0
  155. data/spec/dummy/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af +0 -0
  156. data/spec/dummy/tmp/cache/assets/E0A/870/sprockets%2Fbba31cc2875be0fddf5901fef9b99e48 +0 -0
  157. data/spec/dummy/tmp/cache/assets/E27/590/sprockets%2F097d2347f3f9d2ec19abefaaa5dd0ec1 +0 -0
  158. data/spec/dummy/tmp/cache/assets/E30/DC0/sprockets%2F9ddd7093ee1d47cbacd526f4bdd36e3c +0 -0
  159. data/spec/dummy/tmp/cache/assets/E49/530/sprockets%2F10dadda372ee79deb251d7bbbb025cec +0 -0
  160. data/spec/dummy/tmp/cache/assets/E82/4C0/sprockets%2F0d49c3fa07b559dbecbaabf2a4bad9c8 +0 -0
  161. data/spec/dummy/tmp/pids/server.pid +1 -0
  162. data/spec/factories.rb +28 -0
  163. data/spec/helpers/blogit/application_helper_spec.rb +14 -0
  164. data/spec/helpers/blogit/posts_helper_spec.rb +34 -0
  165. data/spec/lib/blogs_spec.rb +23 -0
  166. data/spec/lib/configuration_spec.rb +57 -0
  167. data/spec/lib/parsers/html_parser_spec.rb +12 -0
  168. data/spec/lib/parsers/markdown_parser_spec.rb +12 -0
  169. data/spec/lib/parsers/textile_parser_spec.rb +12 -0
  170. data/spec/models/blogit/comment_spec.rb +64 -0
  171. data/spec/models/blogit/post_spec.rb +153 -0
  172. data/spec/spec_helper.rb +16 -0
  173. data/spec/support/authentication.rb +9 -0
  174. data/spec/support/configuration.rb +5 -0
  175. metadata +415 -0
@@ -0,0 +1,57 @@
1
+ module Blogit
2
+ class Post < ActiveRecord::Base
3
+
4
+ acts_as_taggable
5
+
6
+ self.table_name = "blog_posts"
7
+
8
+ paginates_per Blogit.configuration.posts_per_page
9
+
10
+ # ===============
11
+ # = Validations =
12
+ # ===============
13
+
14
+ validates :title, presence: true, length: { minimum: 10, maximum: 66 }
15
+ validates :body, presence: true, length: { minimum: 10 }
16
+ validates :blogger_id, presence: true
17
+
18
+ # =================
19
+ # = Assosciations =
20
+ # =================
21
+
22
+ belongs_to :blogger, :polymorphic => true
23
+
24
+ if Blogit.configuration.include_comments
25
+ has_many :comments, :class_name => "Blogit::Comment"
26
+ end
27
+
28
+ # ==========
29
+ # = Scopes =
30
+ # ==========
31
+
32
+ # Returns the blog posts paginated for the index page
33
+ # @scope class
34
+ scope :for_index, lambda { |page = 1| order("updated_at DESC").page(page) }
35
+
36
+ # ====================
37
+ # = Instance Methods =
38
+ # ====================
39
+
40
+ def to_param
41
+ "#{id}-#{title.parameterize}"
42
+ end
43
+
44
+ # If there's a current blogger and the display name method is set, returns the blogger's display name
45
+ # Otherwise, returns an empty string
46
+ def blogger_display_name
47
+ if self.blogger and !self.blogger.respond_to?(Blogit.configuration.blogger_display_name_method)
48
+ raise ConfigurationError,
49
+ "#{self.blogger.class}##{Blogit.configuration.blogger_display_name_method} is not defined"
50
+ elsif self.blogger.nil?
51
+ ""
52
+ else
53
+ self.blogger.send Blogit.configuration.blogger_display_name_method
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,16 @@
1
+ <%= content_tag(:article, id: "blog_comment_#{comment.id}", class: "blog_comment") do %>
2
+ <%= content_tag(:div, class: "blog_comment_name", id: "blog_comment_#{comment.id}_name") do %>
3
+ <%= comment.website? ? link_to(comment.name, comment.website) : comment.name %> wrote:
4
+ <% end %>
5
+
6
+ <%= content_tag(:div, comment.body, class: "blog_comment_body", id: "blog_comment_#{comment.id}_body") %>
7
+
8
+ <%= blog_comment_tag(:footer) do %>
9
+ Posted on <%= time_tag(post.created_at, Blogit.configuration.datetime_format) %>
10
+ <% end %>
11
+
12
+ <%= login_required(class: "actions") do %>
13
+ <%= link_to("delete", [post, comment], method: :delete) %>
14
+ <% end %>
15
+
16
+ <% end %>
@@ -0,0 +1,42 @@
1
+
2
+ <%= form_for [post, comment], remote: true,
3
+ html: {
4
+ class: "new_blog_comment", id: "new_blog_comment" } do |f| -%>
5
+
6
+ <p>Leave a comment</p>
7
+
8
+ <%= field class: "hidden" do %>
9
+ <%= f.label :nickname %>
10
+ <%= f.text_field :nickname %>
11
+ Hide me using CSS
12
+ <% end %>
13
+
14
+ <%= field do %>
15
+ <%= f.label :name, "Name *" %><br>
16
+ <%= f.text_field :name %>
17
+ <%= errors_on(comment, :name) %>
18
+ <% end %>
19
+
20
+ <%= field do %>
21
+ <%= f.label :email, "Email" %> (never displayed)<br>
22
+ <%= f.email_field :email %>
23
+ <%= errors_on(comment, :email) %>
24
+ <% end %>
25
+
26
+ <%= field do %>
27
+ <%= f.label :website, "Your Website" %><br>
28
+ <%= f.url_field :website %>
29
+ <%= errors_on(comment, :website) %>
30
+ <% end %>
31
+
32
+
33
+ <%= field do %>
34
+ <%= f.label :body, "Your comment *" %><br>
35
+ <%= f.text_area :body %><br>
36
+ <%= errors_on(comment, :body) %>
37
+ <% end %>
38
+
39
+ <%= actions do %>
40
+ <%= f.submit "Add Comment", :disable_with => 'Adding Comment...' %>
41
+ <% end %>
42
+ <% end -%>
@@ -0,0 +1,7 @@
1
+ var $form = $("form#new_blog_comment");
2
+ <% if comment.save %>
3
+ $("#comments").append("<%= escape_javascript(render(comment)) %>");
4
+ $form.get(0).reset();
5
+ <% else %>
6
+ $form.html("<%= escape_javascript(render('form')) %>");
7
+ <% end %>
@@ -0,0 +1 @@
1
+ $("#comment_<%= comment.id %>").remove();
@@ -0,0 +1 @@
1
+ <hr class="blog_post_spacer">
@@ -0,0 +1,4 @@
1
+ <%= blog_post_tag :footer do %>
2
+ Written by <%= post.blogger_display_name %> on
3
+ <%= time_tag(post.created_at, blogit_conf.datetime_format) %>
4
+ <% end %>
@@ -0,0 +1,5 @@
1
+ <%= content_tag(:div, class: "blog_post_comments_count", id: "blog_post_#{post.id}_comments_count") do %>
2
+ <%= link_to(post_path(post, anchor: "comments")) do %>
3
+ <%= pluralize post.comments_count, "comment" %>
4
+ <% end %>
5
+ <% end %>
@@ -0,0 +1,43 @@
1
+ <%= form_for(post, html: {class: "new_blog_post", id: "new_blog_post"}) do |f| %>
2
+
3
+ <% if post.errors.any? %>
4
+ <div id="error_explanation">
5
+ <h2><%= pluralize(post.errors.count, "error") %> prohibited this post from being saved:</h2>
6
+
7
+ <ul>
8
+ <% post.errors.full_messages.each do |msg| %>
9
+ <li><%= msg %></li>
10
+ <% end %>
11
+ </ul>
12
+ </div>
13
+ <% end %>
14
+
15
+ <fieldset>
16
+ <%= field do %>
17
+ <%= f.text_field :title, placeholder: "Give your post a title" %>
18
+ <% end %>
19
+
20
+ <%= field do %>
21
+ <%= f.text_area :body, placeholder: "Write something here..." %>
22
+ <% end %>
23
+ </fieldset>
24
+
25
+ <fieldset>
26
+
27
+ <%= field id: "new_blog_post_tag_field" do %>
28
+ <%= f.label :tag_list, "Tags" %>
29
+ <%= f.text_field :tag_list, placeholder: "tag one, tag two, etc..." %>
30
+ <% end %>
31
+
32
+ <p class="blog_post_tip">
33
+ Tip: you can style your post using <%= blogit_conf.default_parser %>
34
+ </p>
35
+
36
+ </fieldset>
37
+
38
+ <%= actions do %>
39
+ <%= f.submit %> or
40
+ <%= link_to("cancel", post.new_record? ? root_path : post_path(post)) %>
41
+ <% end %>
42
+
43
+ <% end %>
@@ -0,0 +1 @@
1
+ <%= paginate(posts) %>
@@ -0,0 +1,19 @@
1
+ <%= content_tag(:article, id: "blog_post_#{post.id}", class: "blog_post") do %>
2
+
3
+ <%# Render the header for this blog post %>
4
+ <%= render "blogit/posts/post_head", post: post %>
5
+
6
+ <%# Render the body of this blog post (as Markdown) %>
7
+ <%= render "blogit/posts/post_body", post: post %>
8
+
9
+ <%# Render admin links to edit/delete this post %>
10
+ <%= render "blogit/posts/post_links", post: post %>
11
+
12
+ <%# Render info about the person who wrote this post %>
13
+ <%= render "blogit/posts/blogger_information", post: post %>
14
+
15
+ <%# Render the no. of comments %>
16
+ <%= render "blogit/posts/comments_count",
17
+ post: post if defined?(show_comments_count) and show_comments_count %>
18
+
19
+ <% end %>
@@ -0,0 +1 @@
1
+ <%= format_content(post.body) %>
@@ -0,0 +1,3 @@
1
+ <%= blog_post_tag :header do %>
2
+ <%= content_tag(:h1, link_to(post.title, post)) %>
3
+ <% end %>
@@ -0,0 +1,5 @@
1
+ <%= login_required do %>
2
+ <%= actions do %>
3
+ <%= link_to("edit", edit_post_path(post)) %> | <%= link_to("delete", post, method: :destroy, confirm: "Are you sure you want to remove this post?") %>
4
+ <% end %>
5
+ <% end unless blogit_conf.author_edits_only and not this_blogger?(post) %>
@@ -0,0 +1,3 @@
1
+ <h2>Edit Blog Post #<%= post.id %></h2>
2
+
3
+ <%= render 'form' %>
@@ -0,0 +1,10 @@
1
+ <%= login_required class: "actions", id: "new_blog_post_link" do %>
2
+ <%= link_to 'New Blog post', new_post_path %>
3
+ <% end %>
4
+
5
+ <%= render partial: "blogit/posts/post",
6
+ collection: posts,
7
+ spacer_template: "blog_post_spacer",
8
+ locals: {show_comments_count: true} %>
9
+
10
+ <%= render "pagination" %>
@@ -0,0 +1,3 @@
1
+ <h2>Write a new blog post</h2>
2
+
3
+ <%= render 'form' %>
@@ -0,0 +1,7 @@
1
+ <%= render post %>
2
+ <% if blogit_conf.include_comments %>
3
+ <div id="comments">
4
+ <%= render comments %>
5
+ </div>
6
+ <%= render "blogit/comments/form" %>
7
+ <% end %>
data/config/routes.rb ADDED
@@ -0,0 +1,9 @@
1
+ Blogit::Engine.routes.draw do
2
+
3
+ resources :posts, except: [:index] do
4
+ resources :comments, only: [:create, :destroy]
5
+ end
6
+
7
+ match "/(page/:page)" => "posts#index"
8
+ root to: "posts#index"
9
+ end
@@ -0,0 +1,12 @@
1
+ class CreateBlogPosts < ActiveRecord::Migration
2
+ def change
3
+ create_table :blog_posts do |t|
4
+ t.string :title, null: false
5
+ t.text :body, null: false
6
+ t.references :blogger, polymorphic: true
7
+ t.integer :comments_count, default: 0, null: false
8
+ t.timestamps
9
+ end
10
+ add_index :blog_posts, [:blogger_type, :blogger_id]
11
+ end
12
+ end
@@ -0,0 +1,15 @@
1
+ class CreateBlogComments < ActiveRecord::Migration
2
+ def change
3
+ create_table :blog_comments do |t|
4
+ t.string :name, null: false
5
+ t.string :email, null: false
6
+ t.string :website
7
+ t.text :body, null: false
8
+ t.references :post, null: false
9
+ t.string :state
10
+
11
+ t.timestamps
12
+ end
13
+ add_index :blog_comments, :post_id
14
+ end
15
+ end
@@ -0,0 +1,28 @@
1
+ class ActsAsTaggableOnMigration < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :tags do |t|
4
+ t.string :name
5
+ end
6
+
7
+ create_table :taggings do |t|
8
+ t.references :tag
9
+
10
+ # You should make sure that the column created is
11
+ # long enough to store the required class names.
12
+ t.references :taggable, :polymorphic => true
13
+ t.references :tagger, :polymorphic => true
14
+
15
+ t.string :context
16
+
17
+ t.datetime :created_at
18
+ end
19
+
20
+ add_index :taggings, :tag_id
21
+ add_index :taggings, [:taggable_id, :taggable_type, :context]
22
+ end
23
+
24
+ def self.down
25
+ drop_table :taggings
26
+ drop_table :tags
27
+ end
28
+ end
data/lib/blogit.rb ADDED
@@ -0,0 +1,24 @@
1
+ require "blogit/configuration"
2
+ require "blogit/blogs"
3
+ require "blogit/engine"
4
+ require "blogit/parsers"
5
+ require "validators"
6
+
7
+ module Blogit
8
+
9
+ # Exception raised when gem may not be configured properly
10
+ class ConfigurationError < StandardError;end
11
+
12
+ # Set global configuration options for Blogit
13
+ # @see README.md
14
+ def self.configure(&block)
15
+ block.call(configuration)
16
+ end
17
+
18
+ # Returns Blogit's globalconfiguration. Will initialize a new instance
19
+ # if not already set
20
+ def self.configuration
21
+ @configuration ||= Configuration.new
22
+ end
23
+
24
+ end
@@ -0,0 +1,19 @@
1
+ module Blogit
2
+ module Blogs
3
+
4
+ def self.included(base)
5
+ base.extend ClassMethods
6
+ end
7
+
8
+ module ClassMethods
9
+
10
+ # When called within a model (usually User) this creates
11
+ # a has-many assosciation between the model and Blogit::Post
12
+ def blogs
13
+ has_many :blog_posts, :as => "blogger", :class_name => "Blogit::Post"
14
+ end
15
+
16
+ end
17
+
18
+ end
19
+ end
@@ -0,0 +1,74 @@
1
+ module Blogit
2
+ class Configuration
3
+
4
+ # Should we include comments for blog posts?
5
+ attr_accessor :include_comments
6
+
7
+ # The name of the controller method we'll call to return the current blogger.
8
+ attr_accessor :current_blogger_method
9
+
10
+ # what method do we call on blogger to return their display name?
11
+ # Defaults to :username
12
+ attr_accessor :blogger_display_name_method
13
+
14
+ # Which DateTime::FORMATS format do we use to display
15
+ # blog and comment publish time
16
+ # Defaults to :short
17
+ attr_accessor :datetime_format
18
+
19
+ # Number of posts to show per page
20
+ # @see https://github.com/amatsuda/kaminari
21
+ # @see Blogit::Post
22
+ attr_accessor :posts_per_page
23
+
24
+
25
+ # The name of the before filter we'll call to authenticate the current user.
26
+ # Defaults to :login_required
27
+ attr_accessor :authentication_method
28
+
29
+ # If set to true, only the user who authored the post may, edit or destroy.
30
+ # Defaults to false
31
+ # @note This has not been properly implemented yet
32
+ attr_accessor :author_edits_only
33
+
34
+ # If set to true, the comments form will POST and DELETE to the comments
35
+ # controller using AJAX calls.
36
+ # Defaults to true
37
+ attr_accessor :ajax_comments
38
+
39
+ # If set to true, the create, edit, update and destroy actions
40
+ # will be included. If set to false, you'll have to set these
41
+ # yourself elsewhere in the app
42
+ attr_accessor :include_admin_actions
43
+
44
+ # The default format for parsing the blog content.
45
+ # Defaults to :markdown
46
+ attr_accessor :default_parser
47
+
48
+ # When using redcarpet as content parser, pass these options as defaults
49
+ # Defaults to REDCARPET_OPTIONS
50
+ attr_accessor :redcarpet_options
51
+
52
+ REDCARPET_OPTIONS = [:hard_wrap, :filter_html, :autolink,
53
+ :no_intraemphasis, :fenced_code, :gh_blockcode]
54
+
55
+ def initialize
56
+ @include_comments = true
57
+ @current_blogger_method = :current_user
58
+ @blogger_display_name_method = :username
59
+ @datetime_format = :short
60
+ @posts_per_page = 5
61
+ @authentication_method = :login_required
62
+ @author_edits_only = false
63
+ @ajax_comments = true
64
+ @include_admin_actions = true
65
+ @default_parser = :markdown
66
+ @redcarpet_options = REDCARPET_OPTIONS
67
+ end
68
+
69
+ def default_parser_class
70
+ "Blogit::Parsers::#{@default_parser.to_s.classify}Parser".constantize
71
+ end
72
+
73
+ end
74
+ end