sofa_blog 0.0.1 → 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 (111) hide show
  1. data/Gemfile +8 -1
  2. data/Gemfile.lock +83 -65
  3. data/LICENSE +1 -1
  4. data/README.md +27 -23
  5. data/Rakefile +8 -7
  6. data/VERSION +1 -1
  7. data/app/assets/images/rails.png +0 -0
  8. data/app/assets/javascripts/sofa_blog/application.js +7 -0
  9. data/app/assets/javascripts/sofa_blog/posts.js +2 -0
  10. data/app/assets/stylesheets/sofa_blog/admin.css +57 -0
  11. data/app/assets/stylesheets/sofa_blog/application.css +73 -0
  12. data/app/assets/stylesheets/sofa_blog/reset.css +1 -0
  13. data/app/controllers/application_controller.rb +5 -0
  14. data/app/controllers/sofa_blog/admin/base_controller.rb +3 -0
  15. data/app/controllers/sofa_blog/admin/comments_controller.rb +74 -0
  16. data/app/controllers/sofa_blog/admin/posts_controller.rb +55 -0
  17. data/app/controllers/sofa_blog/posts_controller.rb +13 -0
  18. data/app/helpers/sofa_blog/posts_helper.rb +2 -0
  19. data/app/helpers/sofa_blog_helper.rb +12 -0
  20. data/app/models/.gitkeep +0 -0
  21. data/app/models/sofa_blog/comment.rb +53 -0
  22. data/app/models/{blog_post.rb → sofa_blog/post.rb} +25 -25
  23. data/app/models/{blog_tag.rb → sofa_blog/tag.rb} +11 -10
  24. data/app/models/sofa_blog/tagging.rb +9 -0
  25. data/app/views/layouts/application.html.erb +17 -0
  26. data/app/views/sofa_blog/admin/_html_head.html.erb +1 -0
  27. data/app/views/sofa_blog/admin/_navigation.html.erb +1 -0
  28. data/app/views/sofa_blog/admin/comments/_comment.html.erb +21 -0
  29. data/app/views/sofa_blog/admin/comments/_form.html.erb +27 -0
  30. data/app/views/sofa_blog/admin/comments/_status.html.erb +7 -0
  31. data/app/views/sofa_blog/admin/comments/approve.js.erb +1 -0
  32. data/app/views/sofa_blog/admin/comments/disapprove.js.erb +1 -0
  33. data/app/views/sofa_blog/admin/comments/edit.html.erb +6 -0
  34. data/app/views/sofa_blog/admin/comments/index.html.erb +7 -0
  35. data/app/views/sofa_blog/admin/comments/new.html.erb +14 -0
  36. data/app/views/sofa_blog/admin/posts/_form.html.erb +35 -0
  37. data/app/views/sofa_blog/admin/posts/_post.html.erb +21 -0
  38. data/app/views/sofa_blog/admin/posts/edit.html.erb +5 -0
  39. data/app/views/sofa_blog/admin/posts/index.html.erb +7 -0
  40. data/app/views/sofa_blog/admin/posts/new.html.erb +5 -0
  41. data/app/views/sofa_blog/posts/_post.html.erb +21 -0
  42. data/app/views/sofa_blog/posts/index.html.erb +5 -0
  43. data/config/application.rb +48 -0
  44. data/config/boot.rb +6 -0
  45. data/config/database.yml +25 -0
  46. data/{tmp → config}/environment.rb +0 -1
  47. data/config/environments/development.rb +33 -0
  48. data/config/environments/production.rb +51 -0
  49. data/config/environments/test.rb +42 -0
  50. data/config/initializers/secret_token.rb +3 -0
  51. data/config/initializers/sofa_blog.rb +12 -0
  52. data/config/initializers/wrap_parameters.rb +14 -0
  53. data/config/locales/en.yml +5 -0
  54. data/config/routes.rb +14 -9
  55. data/config.ru +4 -0
  56. data/db/migrate/01_create_sofa_blog.rb +29 -28
  57. data/db/schema.rb +59 -0
  58. data/db/seeds.rb +7 -0
  59. data/lib/sofa_blog/configuration.rb +21 -0
  60. data/lib/sofa_blog/engine.rb +13 -10
  61. data/lib/sofa_blog/form_builder.rb +50 -0
  62. data/lib/sofa_blog.rb +21 -2
  63. data/script/rails +6 -0
  64. data/sofa_blog.gemspec +89 -47
  65. data/test/fixtures/.gitkeep +0 -0
  66. data/test/fixtures/sofa_blog/comments.yml +6 -0
  67. data/test/fixtures/sofa_blog/posts.yml +7 -0
  68. data/test/functional/.gitkeep +0 -0
  69. data/test/functional/sofa_blog/admin/comments_controller_test.rb +59 -0
  70. data/test/functional/sofa_blog/admin/posts_controller_test.rb +76 -0
  71. data/test/functional/sofa_blog/posts_controller_test.rb +7 -0
  72. data/test/test_helper.rb +37 -0
  73. data/test/unit/.gitkeep +0 -0
  74. data/test/unit/comment_test.rb +55 -0
  75. data/test/unit/helpers/sofa_blog/posts_helper_test.rb +4 -0
  76. data/test/unit/post_test.rb +44 -0
  77. data/test/unit/tag_test.rb +7 -0
  78. data/test/unit/tagging_test.rb +7 -0
  79. metadata +145 -103
  80. data/.DS_Store +0 -0
  81. data/app/.DS_Store +0 -0
  82. data/app/controllers/cms_admin/blog_comments_controller.rb +0 -66
  83. data/app/controllers/cms_admin/blog_posts_controller.rb +0 -48
  84. data/app/models/blog_comment.rb +0 -45
  85. data/app/models/blog_tagging.rb +0 -8
  86. data/app/views/.DS_Store +0 -0
  87. data/app/views/cms_admin/blog_comments/_blog_comment.html.erb +0 -22
  88. data/app/views/cms_admin/blog_comments/_form.html.erb +0 -24
  89. data/app/views/cms_admin/blog_comments/_status.html.erb +0 -7
  90. data/app/views/cms_admin/blog_comments/approve.rjs +0 -1
  91. data/app/views/cms_admin/blog_comments/disapprove.rjs +0 -1
  92. data/app/views/cms_admin/blog_comments/edit.html.erb +0 -7
  93. data/app/views/cms_admin/blog_comments/index.html.erb +0 -7
  94. data/app/views/cms_admin/blog_comments/new.html.erb +0 -6
  95. data/app/views/cms_admin/blog_posts/_blog_post.html.erb +0 -21
  96. data/app/views/cms_admin/blog_posts/_form.html.erb +0 -33
  97. data/app/views/cms_admin/blog_posts/edit.html.erb +0 -7
  98. data/app/views/cms_admin/blog_posts/index.html.erb +0 -8
  99. data/app/views/cms_admin/blog_posts/new.html.erb +0 -5
  100. data/app/views/sofa_blog/_head.html.erb +0 -1
  101. data/app/views/sofa_blog/_nav.html.erb +0 -1
  102. data/config/.DS_Store +0 -0
  103. data/doc/sofa.png +0 -0
  104. data/lib/generators/README +0 -12
  105. data/lib/generators/blog_generator.rb +0 -33
  106. data/public/stylesheets/content.css +0 -53
  107. data/tmp/application.rb +0 -15
  108. data/tmp/boot.rb +0 -13
  109. data/tmp/initializers/formatted_form_builder.rb +0 -141
  110. data/tmp/initializers/wristband.rb +0 -1
  111. /data/{public/javascripts/jquery.autocomplete.pack.js → app/assets/javascripts/sofa_blog/jquery.autocomplete.js} +0 -0
data/Gemfile CHANGED
@@ -1,3 +1,10 @@
1
1
  source 'http://rubygems.org'
2
2
 
3
- gem 'comfortable_mexican_sofa', '>=1.0.46'
3
+ gem 'rails', '>=3.1.0.rc8'
4
+ gem 'rinku', '>=1.2.2'
5
+ gem 'jquery-rails'
6
+
7
+ group :development do
8
+ gem 'sqlite3'
9
+ gem 'jeweler'
10
+ end
data/Gemfile.lock CHANGED
@@ -1,83 +1,101 @@
1
1
  GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
- abstract (1.0.0)
5
- actionmailer (3.0.4)
6
- actionpack (= 3.0.4)
7
- mail (~> 2.2.15)
8
- actionpack (3.0.4)
9
- activemodel (= 3.0.4)
10
- activesupport (= 3.0.4)
11
- builder (~> 2.1.2)
12
- erubis (~> 2.6.6)
13
- i18n (~> 0.4)
14
- rack (~> 1.2.1)
15
- rack-mount (~> 0.6.13)
16
- rack-test (~> 0.5.7)
17
- tzinfo (~> 0.3.23)
18
- active_link_to (0.0.6)
19
- activemodel (3.0.4)
20
- activesupport (= 3.0.4)
21
- builder (~> 2.1.2)
22
- i18n (~> 0.4)
23
- activerecord (3.0.4)
24
- activemodel (= 3.0.4)
25
- activesupport (= 3.0.4)
26
- arel (~> 2.0.2)
27
- tzinfo (~> 0.3.23)
28
- activeresource (3.0.4)
29
- activemodel (= 3.0.4)
30
- activesupport (= 3.0.4)
31
- activesupport (3.0.4)
32
- arel (2.0.9)
33
- builder (2.1.2)
34
- comfortable_mexican_sofa (1.0.46)
35
- active_link_to (>= 0.0.6)
36
- active_link_to (>= 0.0.6)
37
- mime-types
38
- paperclip (>= 2.3.8)
39
- paperclip (>= 2.3.8)
40
- rails (>= 3.0.3)
41
- rails (>= 3.0.3)
42
- erubis (2.6.6)
43
- abstract (>= 1.0.0)
44
- i18n (0.5.0)
45
- mail (2.2.15)
46
- activesupport (>= 2.3.6)
4
+ actionmailer (3.1.0.rc8)
5
+ actionpack (= 3.1.0.rc8)
6
+ mail (~> 2.3.0)
7
+ actionpack (3.1.0.rc8)
8
+ activemodel (= 3.1.0.rc8)
9
+ activesupport (= 3.1.0.rc8)
10
+ builder (~> 3.0.0)
11
+ erubis (~> 2.7.0)
12
+ i18n (~> 0.6)
13
+ rack (~> 1.3.2)
14
+ rack-cache (~> 1.0.3)
15
+ rack-mount (~> 0.8.2)
16
+ rack-test (~> 0.6.1)
17
+ sprockets (~> 2.0.0.beta.15)
18
+ activemodel (3.1.0.rc8)
19
+ activesupport (= 3.1.0.rc8)
20
+ bcrypt-ruby (~> 3.0.0)
21
+ builder (~> 3.0.0)
22
+ i18n (~> 0.6)
23
+ activerecord (3.1.0.rc8)
24
+ activemodel (= 3.1.0.rc8)
25
+ activesupport (= 3.1.0.rc8)
26
+ arel (~> 2.2.1)
27
+ tzinfo (~> 0.3.29)
28
+ activeresource (3.1.0.rc8)
29
+ activemodel (= 3.1.0.rc8)
30
+ activesupport (= 3.1.0.rc8)
31
+ activesupport (3.1.0.rc8)
32
+ multi_json (~> 1.0)
33
+ arel (2.2.1)
34
+ bcrypt-ruby (3.0.0)
35
+ builder (3.0.0)
36
+ erubis (2.7.0)
37
+ git (1.2.5)
38
+ hike (1.2.1)
39
+ i18n (0.6.0)
40
+ jeweler (1.6.4)
41
+ bundler (~> 1.0)
42
+ git (>= 1.2.5)
43
+ rake
44
+ jquery-rails (1.0.14)
45
+ railties (~> 3.0)
46
+ thor (~> 0.14)
47
+ mail (2.3.0)
47
48
  i18n (>= 0.4.0)
48
49
  mime-types (~> 1.16)
49
50
  treetop (~> 1.4.8)
50
51
  mime-types (1.16)
51
- paperclip (2.3.8)
52
- activerecord
53
- activesupport
54
- polyglot (0.3.1)
55
- rack (1.2.1)
56
- rack-mount (0.6.13)
52
+ multi_json (1.0.3)
53
+ polyglot (0.3.2)
54
+ rack (1.3.2)
55
+ rack-cache (1.0.3)
56
+ rack (>= 0.4)
57
+ rack-mount (0.8.2)
57
58
  rack (>= 1.0.0)
58
- rack-test (0.5.7)
59
+ rack-ssl (1.3.2)
60
+ rack
61
+ rack-test (0.6.1)
59
62
  rack (>= 1.0)
60
- rails (3.0.4)
61
- actionmailer (= 3.0.4)
62
- actionpack (= 3.0.4)
63
- activerecord (= 3.0.4)
64
- activeresource (= 3.0.4)
65
- activesupport (= 3.0.4)
63
+ rails (3.1.0.rc8)
64
+ actionmailer (= 3.1.0.rc8)
65
+ actionpack (= 3.1.0.rc8)
66
+ activerecord (= 3.1.0.rc8)
67
+ activeresource (= 3.1.0.rc8)
68
+ activesupport (= 3.1.0.rc8)
66
69
  bundler (~> 1.0)
67
- railties (= 3.0.4)
68
- railties (3.0.4)
69
- actionpack (= 3.0.4)
70
- activesupport (= 3.0.4)
70
+ railties (= 3.1.0.rc8)
71
+ railties (3.1.0.rc8)
72
+ actionpack (= 3.1.0.rc8)
73
+ activesupport (= 3.1.0.rc8)
74
+ rack-ssl (~> 1.3.2)
71
75
  rake (>= 0.8.7)
72
- thor (~> 0.14.4)
73
- rake (0.8.7)
76
+ rdoc (~> 3.4)
77
+ thor (~> 0.14.6)
78
+ rake (0.9.2)
79
+ rdoc (3.9.4)
80
+ rinku (1.2.2)
81
+ sprockets (2.0.0)
82
+ hike (~> 1.2)
83
+ rack (~> 1.0)
84
+ tilt (!= 1.3.0, ~> 1.1)
85
+ sqlite3 (1.3.4)
74
86
  thor (0.14.6)
75
- treetop (1.4.9)
87
+ tilt (1.3.3)
88
+ treetop (1.4.10)
89
+ polyglot
76
90
  polyglot (>= 0.3.1)
77
- tzinfo (0.3.24)
91
+ tzinfo (0.3.29)
78
92
 
79
93
  PLATFORMS
80
94
  ruby
81
95
 
82
96
  DEPENDENCIES
83
- comfortable_mexican_sofa (>= 1.0.46)
97
+ jeweler
98
+ jquery-rails
99
+ rails (>= 3.1.0.rc8)
100
+ rinku (>= 1.2.2)
101
+ sqlite3
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2011 Jack Neto, The Working Group Inc
1
+ Copyright (c) 2011 The Working Group
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
data/README.md CHANGED
@@ -1,7 +1,8 @@
1
1
  # Sofa Blog
2
2
 
3
- Sofa Blog is an extension for [ComfortableMexicanSofa](https://github.com/twg/comfortable-mexican-sofa) (CMS) that allows management of blog posts and comments.
3
+ Sofa Blog is an simple blog management engine for Rails 3.1 apps. As a bonus it integrates seamlessly with [ComfortableMexicanSofa](https://github.com/twg/comfortable-mexican-sofa) (microCMS)
4
4
 
5
+ ---
5
6
  ## Installation
6
7
 
7
8
  Add gem definition to your Gemfile:
@@ -14,17 +15,27 @@ Then from the Rails project's root run:
14
15
  rails g blog
15
16
  rake db:migrate
16
17
 
18
+ You can immediately access it by going to
19
+
20
+ /posts
21
+ /admin/posts
22
+
23
+
24
+ ---
25
+
17
26
  ## Usage
18
27
 
19
- After finishing installation you should be able to navigate to the CMS admin area (http://yoursite/cms-admin by default) and see a Blog Posts tab on the main navigation.
28
+ If you are using SofaBlog on it's own take a look in the initializer: `/config/initializers/sofa_blog.rb`. You probably want to set the admin controller to be something that handles user authentication within your app. Same goes for the `admin_route_prefix`.
29
+
30
+ If you are using SofaBlog in conjunction with ComfortableMexicanSofa everything will be configured automatically.
20
31
 
21
32
  ### The Blog Post
22
33
 
23
- @post = BlogPost.first # Grab the first post
34
+ @post = SofaBlog::Post.first # Grab the first post
24
35
  @post.title # The title of the post
25
36
  @post.author # The name of the author
26
37
  @post.content # The content of the post
27
- @post.published? # Returns true if the post has been published
38
+ @post.is_published? # Returns true if the post has been published
28
39
  @post.created_at # Created at
29
40
  @post.updated_at # Updated at
30
41
  @post.comments_count # The total number of comments
@@ -32,35 +43,28 @@ After finishing installation you should be able to navigate to the CMS admin are
32
43
 
33
44
  A blog post can be tagged with a comma separared list of words.
34
45
 
35
- @post.blog_tags.collect(&:name).join(', ') # Returns a comma-separated list of tags in the post
46
+ @post.tags.collect(&:name).join(', ') # Returns a comma-separated list of tags in the post
36
47
 
37
48
 
38
49
  A few scopes are also available for your convenience:
39
50
 
40
- BlogPost.published # All the published posts
41
- BlogPost.tagged_with(params[:tag_id].to_i) # All the posts tagged with a specific tag_id
42
- BlogPost.published.tagged_with(params[:tag_id].to_i) # All the published posts tagged with a specific tag_id
51
+ SofaBlog::Post.published # All the published posts
52
+ SofaBlog::Post.tagged_with(params[:tag_id].to_i) # All the posts tagged with a specific tag_id
53
+ SofaBlog::Post.published.tagged_with(params[:tag_id].to_i) # All the published posts tagged with a specific tag_id
43
54
 
44
55
  ### The Comments
45
56
 
46
- @comment = @post.blog_comments.first # Grab the first comment
47
- @comment.name # The name of the author
48
- @comment.email # The email of the author
49
- @comment.content # The comment
50
- @comment.created_at # Created at
51
- @comment.updated_at # Updated at
52
-
57
+ @comment = @post.comments.first # Grab the first comment
58
+ @comment.name # The name of the author
59
+ @comment.email # The email of the author
60
+ @comment.content # The comment
61
+ @comment.is_approved? # Returns true if the comment has been approved
62
+ @comment.created_at # Created at
63
+ @comment.updated_at # Updated at
64
+
53
65
 
54
- ## Dependencies
55
-
56
- Sofa Blog depends on:
57
-
58
- * **[ComfortableMexicanSofa](https://github.com/twg/comfortable-mexican-sofa)** - A tiny and powerful micro CMS for your Rails 3 application
59
-
60
66
  * * *
61
67
 
62
- ![Looks pretty comfortable to me. No idea what makes it Mexican.](https://github.com/twg/sofa-blog/raw/master/doc/sofa.png)
63
-
64
68
  Sofa Blog is released under the [MIT license](https://github.com/twg/sofa-blog/raw/master/LICENSE)
65
69
 
66
70
  Copyright 2011 Jack Neto, [The Working Group Inc](http://www.twg.ca)
data/Rakefile CHANGED
@@ -1,17 +1,18 @@
1
- require 'rubygems'
2
- require 'rake'
3
- require 'jeweler'
1
+ require File.expand_path('../config/application', __FILE__)
2
+
3
+ SofaBlog::Application.load_tasks
4
4
 
5
5
  begin
6
6
  require 'jeweler'
7
7
  Jeweler::Tasks.new do |gem|
8
8
  gem.name = 'sofa_blog'
9
- gem.summary = 'A blog extension for Comfortable Mexican Sofa'
9
+ gem.homepage = 'http://github.com/twg/sofa-blog'
10
+ gem.license = 'MIT'
11
+ gem.summary = 'SofaBlog is a blog engine for Rails 3.1 apps (and ComfortableMexicanSofa)'
10
12
  gem.description = ''
11
13
  gem.email = 'jack@theworkinggroup.ca'
12
- gem.homepage = 'http://github.com/twg/sofa-blog'
13
- gem.authors = ['Jack Neto', 'The Working Group Inc']
14
- gem.add_dependency('comfortable_mexican_sofa', '>=1.0.46')
14
+ gem.authors = ['Jack Neto', 'The Working Group Inc.']
15
+ gem.version = File.read('VERSION').chomp
15
16
  end
16
17
  Jeweler::GemcutterTasks.new
17
18
  rescue LoadError
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.1
1
+ 0.1.0
Binary file
@@ -0,0 +1,7 @@
1
+ // This is a manifest file that'll be compiled into including all the files listed below.
2
+ // Add new JavaScript/Coffee code in separate files in this directory and they'll automatically
3
+ // be included in the compiled file accessible from http://example.com/assets/application.js
4
+ // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
5
+ // the compiled file.
6
+ //
7
+ //= require_tree .
@@ -0,0 +1,2 @@
1
+ // Place all the behaviors and hooks related to the matching controller here.
2
+ // All this logic will automatically be available in application.js.
@@ -0,0 +1,57 @@
1
+ /* === List items === */
2
+ ul.list.posts li .item .label,
3
+ ul.list.comments li .item .label {
4
+ margin-left: 0px ! important;
5
+ }
6
+ ul.list.comments li .item .label .sublabel em {
7
+ margin-left: 5px;
8
+ }
9
+ ul.list.comments li .item .content {
10
+ font-size: 11px;
11
+ font-weight: normal;
12
+ margin: 5px 0px 0 35px;
13
+ }
14
+
15
+ /* === Tags === */
16
+ span.tag {
17
+ font-size: 10px;
18
+ padding: 1px 5px;
19
+ background-color: #d5d5d5;
20
+ border-radius: 2px;
21
+ -moz-border-radius: 2px;
22
+ }
23
+
24
+
25
+ /* === Autocomplete === */
26
+ .ac_results {
27
+ padding: 0px;
28
+ border: 1px solid #999;
29
+ background-color: white;
30
+ overflow: hidden;
31
+ z-index: 99999;
32
+ color: #666;
33
+ }
34
+ .ac_results ul {
35
+ width: 100%;
36
+ list-style-position: outside;
37
+ list-style: none;
38
+ padding: 0;
39
+ margin: 0;
40
+ }
41
+ .ac_results ul li {
42
+ margin: 0px;
43
+ padding: 2px 5px;
44
+ cursor: default;
45
+ display: block;
46
+ font-size: 12px;
47
+ line-height: 16px;
48
+ overflow: hidden;
49
+ }
50
+
51
+ .ac_odd {
52
+ background-color: #eee;
53
+ }
54
+ .ac_over {
55
+ background-color: #C4EAF6;
56
+ color: #000;
57
+ }
@@ -0,0 +1,73 @@
1
+ /*
2
+ = require ./reset
3
+ = require_self
4
+ */
5
+
6
+ body {
7
+ padding: 25px;
8
+ font: 13px/18px Arial, sans-serif;
9
+ }
10
+ h1 {
11
+ font: bold 26px/34px Arial, sans-serif;
12
+ margin-bottom: 15px;
13
+ }
14
+ h2 {
15
+ font: bold 18px/20px Arial, sans-serif;
16
+ margin-bottom: 10px;
17
+ }
18
+ a {
19
+ color: #3875D7;
20
+ text-decoration: none;
21
+ }
22
+ a:hover {
23
+ text-decoration: underline;
24
+ }
25
+ table.formatted td,
26
+ table.formatted th {
27
+ padding: 2px 5px;
28
+ border-bottom: 1px dotted #ccc;
29
+ }
30
+ table.formatted th {
31
+ background-color: #666;
32
+ color: #fff;
33
+ }
34
+ table.formatted td img {
35
+ float: left;
36
+ padding: 2px;
37
+ margin-right: 2px;
38
+ }
39
+ table.formatted td .sublabel {
40
+ font-size: 11px;
41
+ line-height: 11px;
42
+ color: #888;
43
+ }
44
+
45
+ .form_element {
46
+ overflow: hidden;
47
+ margin-bottom: 5px;
48
+ }
49
+ .form_element .label {
50
+ width: 125px;
51
+ float: left;
52
+ text-align: right;
53
+ }
54
+ .form_element .value,
55
+ .form_element .errors {
56
+ margin-left: 135px;
57
+ }
58
+ .form_element .value input[type='text'],
59
+ .form_element .value textarea {
60
+ width: 400px;
61
+ }
62
+
63
+ .jcrop-holder {
64
+ margin-bottom: 15px;
65
+ }
66
+
67
+ .flash{
68
+ border: 2px solid #ccc;
69
+ padding: 10px;
70
+ margin-bottom: 15px;
71
+ text-align: center;
72
+ }
73
+
@@ -0,0 +1 @@
1
+ html{color:#000;background:#FFF;}body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,button,textarea,p,blockquote,th,td{margin:0;padding:0;}table{border-collapse:collapse;border-spacing:0;}fieldset,img{border:0;}address,caption,cite,code,dfn,em,strong,th,var,optgroup{font-style:inherit;font-weight:inherit;}del,ins{text-decoration:none;}li{list-style:none;}caption,th{text-align:left;}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal;}q:before,q:after{content:'';}abbr,acronym{border:0;font-variant:normal;}sup{vertical-align:baseline;}sub{vertical-align:baseline;}legend{color:#000;}input,button,textarea,select,optgroup,option{font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;}input,button,textarea,select{*font-size:100%;}
@@ -0,0 +1,5 @@
1
+ class ApplicationController < ActionController::Base
2
+ protect_from_forgery
3
+
4
+ layout 'application'
5
+ end
@@ -0,0 +1,3 @@
1
+ class SofaBlog::Admin::BaseController < SofaBlog.config.admin_controller.to_s.constantize
2
+ # ...
3
+ end
@@ -0,0 +1,74 @@
1
+ class SofaBlog::Admin::CommentsController < SofaBlog::Admin::BaseController
2
+
3
+ before_filter :load_post
4
+ before_filter :load_comment, :only => [:show, :edit, :update, :destroy, :approve, :disapprove]
5
+ before_filter :build_comment, :only => [:new, :create]
6
+
7
+ def index
8
+ @comments = SofaBlog::Comment.order('created_at DESC')
9
+ end
10
+
11
+ def show
12
+ render
13
+ end
14
+
15
+ def new
16
+ render
17
+ end
18
+
19
+ def create
20
+ @comment.save!
21
+ flash[:notice] = 'Comment created'
22
+ redirect_to :action => :index
23
+ rescue ActiveRecord::RecordInvalid
24
+ flash.now[:error] = 'Failed to create Comment'
25
+ render :action => :new
26
+ end
27
+
28
+ def edit
29
+ render
30
+ end
31
+
32
+ def update
33
+ @comment.update_attributes(params[:comment])
34
+ flash[:notice] = 'Comment updated'
35
+ redirect_to :action => :index
36
+ rescue ActiveRecord::RecordInvalid
37
+ flash.now[:error] = 'Failed to update Comment'
38
+ render :action => :edit
39
+ end
40
+
41
+ def destroy
42
+ @comment.destroy
43
+ flash[:notice] = 'Comment removed'
44
+ redirect_to :action => :index
45
+ end
46
+
47
+ def approve
48
+ @comment.approve!
49
+ end
50
+
51
+ def disapprove
52
+ @comment.disapprove!
53
+ end
54
+
55
+ protected
56
+
57
+ def load_post
58
+ @post = SofaBlog::Post.find(params[:post_id])
59
+ rescue ActiveRecord::RecordNotFound
60
+ flash[:error] = 'Blog post not found'
61
+ redirect_to sofa_blog_admin_posts_path
62
+ end
63
+
64
+ def load_comment
65
+ @comment = SofaBlog::Comment.find(params[:id])
66
+ rescue ActiveRecord::RecordNotFound
67
+ flash[:error] = 'Comment not found'
68
+ redirect_to :action => :index
69
+ end
70
+
71
+ def build_comment
72
+ @comment = @post.comments.build(params[:comment])
73
+ end
74
+ end
@@ -0,0 +1,55 @@
1
+ class SofaBlog::Admin::PostsController < SofaBlog::Admin::BaseController
2
+
3
+ before_filter :build_post, :only => [:new, :create]
4
+ before_filter :load_post, :only => [:edit, :update, :destroy]
5
+
6
+ def index
7
+ @posts = SofaBlog::Post.order('created_at DESC')
8
+ end
9
+
10
+ def new
11
+ @post.is_published ||= true
12
+ end
13
+
14
+ def create
15
+ @post.save!
16
+ flash[:notice] = 'Blog post created'
17
+ redirect_to :action => :index
18
+ rescue ActiveRecord::RecordInvalid
19
+ flash.now[:error] = 'Failed to create BlogPost'
20
+ render :action => :new
21
+ end
22
+
23
+ def edit
24
+ render
25
+ end
26
+
27
+ def update
28
+ @post.update_attributes!(params[:post])
29
+ flash[:notice] = 'Blog post updated'
30
+ redirect_to :action => :index
31
+ rescue ActiveRecord::RecordInvalid
32
+ flash.now[:error] = 'Failed to update BlogPost'
33
+ render :action => :edit
34
+ end
35
+
36
+ def destroy
37
+ @post.destroy
38
+ flash[:notice] = 'Blog post removed'
39
+ redirect_to :action => :index
40
+ end
41
+
42
+ protected
43
+
44
+ def load_post
45
+ @post = SofaBlog::Post.find(params[:id])
46
+ rescue ActiveRecord::RecordNotFound
47
+ flash[:error] = 'Blog post not found'
48
+ redirect_to :action => :index
49
+ end
50
+
51
+ def build_post
52
+ @post = SofaBlog::Post.new(params[:post])
53
+ end
54
+
55
+ end
@@ -0,0 +1,13 @@
1
+ class SofaBlog::PostsController < ApplicationController
2
+ def index
3
+ @posts = SofaBlog::Post.published.all
4
+ rescue ActiveRecord::RecordNotFound
5
+ render :text => 'Post not found', :status => 404
6
+ end
7
+
8
+ def show
9
+ @post = SofaBlog::Post.find(params[:id])
10
+ rescue ActiveRecord::RecordNotFound
11
+ render :text => 'Post not found', :status => 404
12
+ end
13
+ end
@@ -0,0 +1,2 @@
1
+ module SofaBlog::PostsHelper
2
+ end
@@ -0,0 +1,12 @@
1
+ module SofaBlogHelper
2
+
3
+ def sofa_blog_form_for(record_or_name_or_array, *args, &proc)
4
+ options = args.extract_options!
5
+ form_for(
6
+ record_or_name_or_array,
7
+ *(args << options.merge(:builder => SofaBlog.config.form_builder.to_s.constantize)),
8
+ &proc
9
+ )
10
+ end
11
+
12
+ end
File without changes