almanac 0.4.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (127) hide show
  1. data/MIT-LICENSE +20 -0
  2. data/README.md +76 -0
  3. data/Rakefile +40 -0
  4. data/app/assets/images/almanac/background.jpg +0 -0
  5. data/app/assets/images/almanac/icons/compose.png +0 -0
  6. data/app/assets/images/almanac/icons/feed.png +0 -0
  7. data/app/assets/images/almanac/icons/gear.png +0 -0
  8. data/app/assets/images/almanac/icons/glyphicons-halflings-white.png +0 -0
  9. data/app/assets/images/almanac/icons/glyphicons-halflings.png +0 -0
  10. data/app/assets/images/almanac/icons/upload.png +0 -0
  11. data/app/assets/images/almanac/logo.jpg +0 -0
  12. data/app/assets/javascripts/almanac/2-jquery.backstretch.js +357 -0
  13. data/app/assets/javascripts/almanac/3-pixastic.js +637 -0
  14. data/app/assets/javascripts/almanac/4-bootstrap-datepicker.js +454 -0
  15. data/app/assets/javascripts/almanac/5-main.coffee.erb +46 -0
  16. data/app/assets/javascripts/almanac/application.js +16 -0
  17. data/app/assets/stylesheets/almanac/1-datepicker.css +7 -0
  18. data/app/assets/stylesheets/almanac/2-main.css.scss +279 -0
  19. data/app/assets/stylesheets/almanac/application.css +15 -0
  20. data/app/controllers/almanac/application_controller.rb +24 -0
  21. data/app/controllers/almanac/blogs_controller.rb +64 -0
  22. data/app/controllers/almanac/comments_controller.rb +41 -0
  23. data/app/controllers/almanac/images_controller.rb +29 -0
  24. data/app/controllers/almanac/posts_controller.rb +109 -0
  25. data/app/helpers/almanac/application_helper.rb +4 -0
  26. data/app/models/almanac/blog.rb +32 -0
  27. data/app/models/almanac/comment.rb +20 -0
  28. data/app/models/almanac/image.rb +10 -0
  29. data/app/models/almanac/post.rb +55 -0
  30. data/app/views/almanac/blogs/_form.html.haml +76 -0
  31. data/app/views/almanac/blogs/_topbar.html.haml +5 -0
  32. data/app/views/almanac/blogs/edit.html.haml +4 -0
  33. data/app/views/almanac/blogs/new.html.haml +3 -0
  34. data/app/views/almanac/blogs/spam.html.haml +15 -0
  35. data/app/views/almanac/posts/_form.html.haml +52 -0
  36. data/app/views/almanac/posts/_post.html.haml +59 -0
  37. data/app/views/almanac/posts/edit.html.haml +1 -0
  38. data/app/views/almanac/posts/index.html.haml +30 -0
  39. data/app/views/almanac/posts/index.rss.builder +18 -0
  40. data/app/views/almanac/posts/new.html.haml +1 -0
  41. data/app/views/almanac/posts/show.html.haml +4 -0
  42. data/app/views/almanac/posts/tag.html.haml +22 -0
  43. data/app/views/layouts/almanac/_ga.html.haml +10 -0
  44. data/app/views/layouts/almanac/_twitter_follow.html.haml +2 -0
  45. data/app/views/layouts/almanac/application.html.haml +52 -0
  46. data/config/routes.rb +22 -0
  47. data/db/migrate/20121009222451_create_almanac_posts.rb +17 -0
  48. data/db/migrate/20121010033555_create_almanac_blogs.rb +14 -0
  49. data/db/migrate/20121017032059_add_excerpt_to_almanac_posts.rb +11 -0
  50. data/db/migrate/20121017210007_create_almanac_files.rb +15 -0
  51. data/db/migrate/20121017221819_rename_file_to_image.rb +9 -0
  52. data/db/migrate/20121025223403_add_image_fields_to_almanac_blogs.rb +13 -0
  53. data/db/migrate/20121029211221_add_new_fields_to_blogs.rb +15 -0
  54. data/db/migrate/20121029221815_acts_as_taggable_on_migration.rb +30 -0
  55. data/db/migrate/20121101030836_create_almanac_comments.rb +16 -0
  56. data/db/migrate/20121102181941_add_rakismet_fields_to_blogs.rb +13 -0
  57. data/db/migrate/20121102185130_add_spam_to_comments.rb +11 -0
  58. data/db/migrate/20121110000024_add_written_at_to_posts.rb +11 -0
  59. data/db/migrate/20121112205256_add_background_fields_to_blogs.rb +13 -0
  60. data/db/migrate/20121113010557_add_footer_to_almanac_blogs.rb +11 -0
  61. data/db/migrate/20121114043648_change_default_value_for_background_tiles_in_almanac_blogs.rb +9 -0
  62. data/lib/almanac.rb +16 -0
  63. data/lib/almanac/MarkdownParser.rb +18 -0
  64. data/lib/almanac/engine.rb +9 -0
  65. data/lib/almanac/version.rb +3 -0
  66. data/lib/tasks/almanac_tasks.rake +4 -0
  67. data/spec/controllers/blogs_controller_spec.rb +80 -0
  68. data/spec/controllers/comments_controller_spec.rb +51 -0
  69. data/spec/controllers/posts_controller_spec.rb +120 -0
  70. data/spec/dummy/README.rdoc +261 -0
  71. data/spec/dummy/Rakefile +7 -0
  72. data/spec/dummy/app/assets/javascripts/application.js +15 -0
  73. data/spec/dummy/app/assets/stylesheets/application.css +13 -0
  74. data/spec/dummy/app/controllers/application_controller.rb +3 -0
  75. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  76. data/spec/dummy/app/models/ability.rb +13 -0
  77. data/spec/dummy/app/models/user.rb +11 -0
  78. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  79. data/spec/dummy/config.ru +4 -0
  80. data/spec/dummy/config/application.rb +59 -0
  81. data/spec/dummy/config/boot.rb +10 -0
  82. data/spec/dummy/config/database.yml +25 -0
  83. data/spec/dummy/config/environment.rb +5 -0
  84. data/spec/dummy/config/environments/development.rb +37 -0
  85. data/spec/dummy/config/environments/production.rb +67 -0
  86. data/spec/dummy/config/environments/test.rb +37 -0
  87. data/spec/dummy/config/initializers/almanac.rb +1 -0
  88. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  89. data/spec/dummy/config/initializers/devise.rb +233 -0
  90. data/spec/dummy/config/initializers/dragonfly.rb +7 -0
  91. data/spec/dummy/config/initializers/inflections.rb +15 -0
  92. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  93. data/spec/dummy/config/initializers/secret_token.rb +7 -0
  94. data/spec/dummy/config/initializers/session_store.rb +8 -0
  95. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  96. data/spec/dummy/config/locales/en.yml +5 -0
  97. data/spec/dummy/config/routes.rb +14 -0
  98. data/spec/dummy/db/migrate/20121009230705_create_almanac_posts.rb +18 -0
  99. data/spec/dummy/db/migrate/20121010033827_create_almanac_blogs.rb +15 -0
  100. data/spec/dummy/db/migrate/20121102224650_add_excerpt_to_almanac_posts.rb +12 -0
  101. data/spec/dummy/db/migrate/20121102224651_create_almanac_files..rb +16 -0
  102. data/spec/dummy/db/migrate/20121102224652_rename_file_to_image.rb +10 -0
  103. data/spec/dummy/db/migrate/20121102224653_add_image_fields_to_almanac_blogs.rb +14 -0
  104. data/spec/dummy/db/migrate/20121102224654_add_new_fields_to_almanac_blogs.rb +16 -0
  105. data/spec/dummy/db/migrate/20121102224655_acts_as_taggable_on_migration.rb +31 -0
  106. data/spec/dummy/db/migrate/20121102224656_create_almanac_comments.rb +17 -0
  107. data/spec/dummy/db/migrate/20121102224657_add_rakismet_fields_to_almanac_blogs.rb +14 -0
  108. data/spec/dummy/db/migrate/20121102224658_add_spam_to_almanac_comments.rb +12 -0
  109. data/spec/dummy/db/migrate/20121106220325_devise_create_users.rb +46 -0
  110. data/spec/dummy/db/migrate/20121114032144_add_written_at_to_almanac_posts.rb +12 -0
  111. data/spec/dummy/db/migrate/20121114032145_add_background_fields_to_almanac_blogs.rb +14 -0
  112. data/spec/dummy/db/migrate/20121114032146_add_footer_to_almanac_blogs.rb +12 -0
  113. data/spec/dummy/db/schema.rb +98 -0
  114. data/spec/dummy/db/test.sqlite3 +0 -0
  115. data/spec/dummy/log/production.log +1 -0
  116. data/spec/dummy/log/test.log +2930 -0
  117. data/spec/dummy/public/404.html +26 -0
  118. data/spec/dummy/public/422.html +26 -0
  119. data/spec/dummy/public/500.html +25 -0
  120. data/spec/dummy/public/favicon.ico +0 -0
  121. data/spec/dummy/script/rails +6 -0
  122. data/spec/factories.rb +72 -0
  123. data/spec/models/blog_spec.rb +16 -0
  124. data/spec/models/comment_spec.rb +35 -0
  125. data/spec/models/post_spec.rb +79 -0
  126. data/spec/spec_helper.rb +37 -0
  127. metadata +485 -0
@@ -0,0 +1,26 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>The page you were looking for doesn't exist (404)</title>
5
+ <style type="text/css">
6
+ body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
7
+ div.dialog {
8
+ width: 25em;
9
+ padding: 0 4em;
10
+ margin: 4em auto 0 auto;
11
+ border: 1px solid #ccc;
12
+ border-right-color: #999;
13
+ border-bottom-color: #999;
14
+ }
15
+ h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <!-- This file lives in public/404.html -->
21
+ <div class="dialog">
22
+ <h1>The page you were looking for doesn't exist.</h1>
23
+ <p>You may have mistyped the address or the page may have moved.</p>
24
+ </div>
25
+ </body>
26
+ </html>
@@ -0,0 +1,26 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>The change you wanted was rejected (422)</title>
5
+ <style type="text/css">
6
+ body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
7
+ div.dialog {
8
+ width: 25em;
9
+ padding: 0 4em;
10
+ margin: 4em auto 0 auto;
11
+ border: 1px solid #ccc;
12
+ border-right-color: #999;
13
+ border-bottom-color: #999;
14
+ }
15
+ h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <!-- This file lives in public/422.html -->
21
+ <div class="dialog">
22
+ <h1>The change you wanted was rejected.</h1>
23
+ <p>Maybe you tried to change something you didn't have access to.</p>
24
+ </div>
25
+ </body>
26
+ </html>
@@ -0,0 +1,25 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>We're sorry, but something went wrong (500)</title>
5
+ <style type="text/css">
6
+ body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
7
+ div.dialog {
8
+ width: 25em;
9
+ padding: 0 4em;
10
+ margin: 4em auto 0 auto;
11
+ border: 1px solid #ccc;
12
+ border-right-color: #999;
13
+ border-bottom-color: #999;
14
+ }
15
+ h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <!-- This file lives in public/500.html -->
21
+ <div class="dialog">
22
+ <h1>We're sorry, but something went wrong.</h1>
23
+ </div>
24
+ </body>
25
+ </html>
File without changes
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+ # This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
3
+
4
+ APP_PATH = File.expand_path('../../config/application', __FILE__)
5
+ require File.expand_path('../../config/boot', __FILE__)
6
+ require 'rails/commands'
@@ -0,0 +1,72 @@
1
+ FactoryGirl.define do
2
+ sequence(:tag_list) {|n| "common,test#{n},rspec#{n},ruby#{n},#rails#{n}" }
3
+ sequence(:author_id)
4
+
5
+ factory :user, :class => User do
6
+ email { Faker::Internet.safe_email }
7
+ password { Faker::Lorem.characters(10) }
8
+ end
9
+
10
+ factory :post, :class => Almanac::Post do
11
+ title { Faker::Lorem.sentence(3) }
12
+ excerpt { Faker::Lorem.sentence(1) }
13
+ body { Faker::Lorem.paragraph(5) }
14
+ published true
15
+ tag_list { generate(:tag_list) }
16
+ author_id { generate(:author_id) }
17
+ written_at { Date.today }
18
+
19
+ factory :post_with_comments do
20
+ ignore do
21
+ comments_count 15
22
+ end
23
+
24
+ after(:create) do |post, evaluator|
25
+ create_list(:comment, evaluator.comments_count, post: post)
26
+ end
27
+ end
28
+
29
+ factory :post_draft do
30
+ published false
31
+ end
32
+
33
+ association :blog, factory: :blog
34
+ end
35
+
36
+ factory :comment, :class => Almanac::Comment do
37
+ author_name { Faker::Name.name }
38
+ author_email { Faker::Internet.safe_email }
39
+ body { Faker::Lorem.paragraph(1) }
40
+ association :post, factory: :post
41
+
42
+ factory :spam_comment do
43
+ spam true
44
+ end
45
+ end
46
+
47
+ factory :blog, :class => Almanac::Blog do
48
+ title { Faker::Lorem.sentence(2) }
49
+ description { Faker::Lorem.paragraph(3) }
50
+ author_id { generate(:author_id) }
51
+
52
+ factory :blog_with_posts do
53
+ ignore do
54
+ posts_count 15
55
+ end
56
+
57
+ after(:create) do |blog, evaluator|
58
+ create_list(:post, evaluator.posts_count, blog: blog)
59
+ end
60
+ end
61
+
62
+ factory :blog_with_posts_with_comments do
63
+ ignore do
64
+ posts_count 15
65
+ end
66
+
67
+ after(:create) do |blog, evaluator|
68
+ create_list(:post_with_comments, evaluator.posts_count, blog: blog)
69
+ end
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,16 @@
1
+ require 'spec_helper'
2
+
3
+ describe Almanac::Blog do
4
+ it "should be possible to create a valid blog" do
5
+ expect(create(:blog)).to eq(Almanac::Blog.first)
6
+ end
7
+
8
+ it "should not be possible to create a blog without a title" do
9
+ build(:blog, title: "").should_not be_valid
10
+ end
11
+
12
+ it "should not be possible to create more than one blog" do
13
+ create(:blog)
14
+ expect { create(:blog) }.to raise_error
15
+ end
16
+ end
@@ -0,0 +1,35 @@
1
+ require 'spec_helper'
2
+
3
+ describe Almanac::Comment do
4
+ it "should be possible to create a valid comment" do
5
+ create(:comment)
6
+
7
+ expect(Almanac::Comment.all.count).to eq(1)
8
+ end
9
+
10
+ it "should not be possible to create a comment without an author_name" do
11
+ build(:comment, author_name: "").should_not be_valid
12
+ end
13
+
14
+ it "should not be possible to create a comment without an author_email" do
15
+ build(:comment, author_email: "").should_not be_valid
16
+ end
17
+
18
+ it "should not be possible to create a comment without an body" do
19
+ build(:comment, body: "").should_not be_valid
20
+ end
21
+
22
+ it "should not be possible to create a comment without a post" do
23
+ build(:comment, post: nil).should_not be_valid
24
+ end
25
+
26
+ describe ".spam" do
27
+ it "should return spam comments" do
28
+ comments_count = 10
29
+ spam_comments_count = 5
30
+ post = create(:post_with_comments, comments_count: comments_count)
31
+ create_list(:spam_comment, spam_comments_count, post_id: post.id)
32
+ expect(Almanac::Comment.spam.count).to eq spam_comments_count
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,79 @@
1
+ require 'spec_helper'
2
+
3
+ describe Almanac::Post do
4
+ it "should be possible to create a valid post" do
5
+ create(:post)
6
+ expect(Almanac::Post.all.count).to eq(1)
7
+ end
8
+ it "should be possible to create a post draft without a title" do
9
+ build(:post_draft, title: "").should be_valid
10
+ end
11
+ it "should be possible to create a post draft without a body" do
12
+ build(:post_draft, body: "").should be_valid
13
+ end
14
+ it "should not be possible to create a post draft without a blog" do
15
+ build(:post_draft, blog_id: "").should_not be_valid
16
+ end
17
+ it "should not be possible to publish a post without a title" do
18
+ build(:post, title: "").should_not be_valid
19
+ end
20
+ it "should not be possible to publish a post without a body" do
21
+ build(:post, body: "").should_not be_valid
22
+ end
23
+ it "should not be possible to publish a post without a written_at" do
24
+ build(:post, written_at: nil).should_not be_valid
25
+ end
26
+ it "should be possible to publish a post without an excerpt" do
27
+ build(:post, excerpt: "").should be_valid
28
+ end
29
+ it "should not be possible to publish a post without a blog" do
30
+ build(:post, blog_id: "").should_not be_valid
31
+ end
32
+ it "should be possible to publish more than one post" do
33
+ create(:blog_with_posts, posts_count: 2)
34
+ expect(Almanac::Post.all.count).to eq(2)
35
+ end
36
+
37
+ describe ".recent" do
38
+ it "should return 10 recent posts" do
39
+ # TODO: figure out why this doesn't work in the model, but works in paginated views
40
+ #create(:blog_with_posts, posts_count: 12)
41
+ #expect(Almanac::Post.recent({}).count).to eq(10)
42
+ end
43
+ it "should not include drafts" do
44
+ posts_count = 4
45
+ drafts_count = 3
46
+ create(:blog_with_posts, posts_count: posts_count)
47
+ blog_id = Almanac::Post.first.blog_id
48
+ create_list(:post_draft, drafts_count, blog_id: blog_id)
49
+ expect(Almanac::Post.recent({}).count).to eq posts_count
50
+ end
51
+ end
52
+
53
+ describe ".drafts" do
54
+ it "should return only drafts" do
55
+ drafts_count = 3
56
+ create(:blog_with_posts, posts_count: 3)
57
+ blog_id = Almanac::Post.first.blog_id
58
+ create_list(:post_draft, drafts_count, blog_id: blog_id)
59
+ expect(Almanac::Post.drafts({}).count).to eq drafts_count
60
+ end
61
+ end
62
+
63
+ describe ".tagged" do
64
+ it "should return tagged posts" do
65
+ posts_count = 10
66
+ create(:blog_with_posts, posts_count: posts_count)
67
+ blog_id = Almanac::Post.first.blog_id
68
+ create_list(:post, 2, blog_id: blog_id, tag_list: "")
69
+ expect(Almanac::Post.tagged({ :tag_name => "common" }).count).to eq posts_count
70
+ end
71
+ it "should not return drafts" do
72
+ posts_count = 10
73
+ create(:blog_with_posts, posts_count: posts_count)
74
+ blog_id = Almanac::Post.first.blog_id
75
+ create_list(:post, 2, blog_id: blog_id, published: false)
76
+ expect(Almanac::Post.tagged({ :tag_name => "common" }).count).to eq posts_count
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,37 @@
1
+ ENV["RAILS_ENV"] ||= 'test'
2
+ ENGINE_RAILS_ROOT = File.join(File.dirname(__FILE__), '../')
3
+ require File.expand_path("../dummy/config/environment", __FILE__)
4
+ require 'rspec/rails'
5
+ require 'rspec/autorun'
6
+ require 'factory_girl_rails'
7
+ require 'database_cleaner'
8
+ require 'faker'
9
+ Dir[File.join(ENGINE_RAILS_ROOT, "spec/support/**/*.rb")].each {|f| require f }
10
+
11
+ RSpec.configure do |config|
12
+ config.include FactoryGirl::Syntax::Methods
13
+ config.include Devise::TestHelpers, :type => :controller
14
+ config.infer_base_class_for_anonymous_controllers = false
15
+ config.order = "random"
16
+
17
+ config.before(:suite) do
18
+ DatabaseCleaner.strategy = :transaction
19
+ DatabaseCleaner.clean_with(:truncation)
20
+ end
21
+
22
+ config.before(:each) do
23
+ DatabaseCleaner.start
24
+ end
25
+
26
+ config.before type: :controller do
27
+ user = create(:user)
28
+ sign_in = sign_in user
29
+ Almanac::ApplicationController.send(:define_method, :current_user) do
30
+ user
31
+ end
32
+ end
33
+
34
+ config.after(:each) do
35
+ DatabaseCleaner.clean
36
+ end
37
+ end
metadata ADDED
@@ -0,0 +1,485 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: almanac
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.4.4
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Vasily Vasinov
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-11-14 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rails
16
+ requirement: &70361439490280 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 3.2.8
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *70361439490280
25
+ - !ruby/object:Gem::Dependency
26
+ name: jquery-rails
27
+ requirement: &70361439489860 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *70361439489860
36
+ - !ruby/object:Gem::Dependency
37
+ name: haml
38
+ requirement: &70361439489400 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ type: :runtime
45
+ prerelease: false
46
+ version_requirements: *70361439489400
47
+ - !ruby/object:Gem::Dependency
48
+ name: haml-rails
49
+ requirement: &70361439488980 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ type: :runtime
56
+ prerelease: false
57
+ version_requirements: *70361439488980
58
+ - !ruby/object:Gem::Dependency
59
+ name: sass-rails
60
+ requirement: &70361439488560 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ type: :runtime
67
+ prerelease: false
68
+ version_requirements: *70361439488560
69
+ - !ruby/object:Gem::Dependency
70
+ name: bootstrap-rails-engine
71
+ requirement: &70361439488140 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :runtime
78
+ prerelease: false
79
+ version_requirements: *70361439488140
80
+ - !ruby/object:Gem::Dependency
81
+ name: devise
82
+ requirement: &70361439487720 !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ! '>='
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ type: :runtime
89
+ prerelease: false
90
+ version_requirements: *70361439487720
91
+ - !ruby/object:Gem::Dependency
92
+ name: cancan
93
+ requirement: &70361439487300 !ruby/object:Gem::Requirement
94
+ none: false
95
+ requirements:
96
+ - - ! '>='
97
+ - !ruby/object:Gem::Version
98
+ version: '0'
99
+ type: :runtime
100
+ prerelease: false
101
+ version_requirements: *70361439487300
102
+ - !ruby/object:Gem::Dependency
103
+ name: coffee-rails
104
+ requirement: &70361439486880 !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ type: :runtime
111
+ prerelease: false
112
+ version_requirements: *70361439486880
113
+ - !ruby/object:Gem::Dependency
114
+ name: uglifier
115
+ requirement: &70361439486460 !ruby/object:Gem::Requirement
116
+ none: false
117
+ requirements:
118
+ - - ! '>='
119
+ - !ruby/object:Gem::Version
120
+ version: '0'
121
+ type: :runtime
122
+ prerelease: false
123
+ version_requirements: *70361439486460
124
+ - !ruby/object:Gem::Dependency
125
+ name: kramdown
126
+ requirement: &70361439486040 !ruby/object:Gem::Requirement
127
+ none: false
128
+ requirements:
129
+ - - ! '>='
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: *70361439486040
135
+ - !ruby/object:Gem::Dependency
136
+ name: rack-cache
137
+ requirement: &70361439485620 !ruby/object:Gem::Requirement
138
+ none: false
139
+ requirements:
140
+ - - ! '>='
141
+ - !ruby/object:Gem::Version
142
+ version: '0'
143
+ type: :runtime
144
+ prerelease: false
145
+ version_requirements: *70361439485620
146
+ - !ruby/object:Gem::Dependency
147
+ name: dragonfly
148
+ requirement: &70361439485200 !ruby/object:Gem::Requirement
149
+ none: false
150
+ requirements:
151
+ - - ! '>='
152
+ - !ruby/object:Gem::Version
153
+ version: '0'
154
+ type: :runtime
155
+ prerelease: false
156
+ version_requirements: *70361439485200
157
+ - !ruby/object:Gem::Dependency
158
+ name: mini_magick
159
+ requirement: &70361439484640 !ruby/object:Gem::Requirement
160
+ none: false
161
+ requirements:
162
+ - - ! '>='
163
+ - !ruby/object:Gem::Version
164
+ version: '0'
165
+ type: :runtime
166
+ prerelease: false
167
+ version_requirements: *70361439484640
168
+ - !ruby/object:Gem::Dependency
169
+ name: will_paginate
170
+ requirement: &70361439484120 !ruby/object:Gem::Requirement
171
+ none: false
172
+ requirements:
173
+ - - ~>
174
+ - !ruby/object:Gem::Version
175
+ version: 3.0.3
176
+ type: :runtime
177
+ prerelease: false
178
+ version_requirements: *70361439484120
179
+ - !ruby/object:Gem::Dependency
180
+ name: will_paginate-bootstrap
181
+ requirement: &70361439474400 !ruby/object:Gem::Requirement
182
+ none: false
183
+ requirements:
184
+ - - ! '>='
185
+ - !ruby/object:Gem::Version
186
+ version: '0'
187
+ type: :runtime
188
+ prerelease: false
189
+ version_requirements: *70361439474400
190
+ - !ruby/object:Gem::Dependency
191
+ name: acts-as-taggable-on
192
+ requirement: &70361439473840 !ruby/object:Gem::Requirement
193
+ none: false
194
+ requirements:
195
+ - - ~>
196
+ - !ruby/object:Gem::Version
197
+ version: 2.3.1
198
+ type: :runtime
199
+ prerelease: false
200
+ version_requirements: *70361439473840
201
+ - !ruby/object:Gem::Dependency
202
+ name: rakismet
203
+ requirement: &70361439470620 !ruby/object:Gem::Requirement
204
+ none: false
205
+ requirements:
206
+ - - ! '>='
207
+ - !ruby/object:Gem::Version
208
+ version: '0'
209
+ type: :runtime
210
+ prerelease: false
211
+ version_requirements: *70361439470620
212
+ - !ruby/object:Gem::Dependency
213
+ name: database_cleaner
214
+ requirement: &70361439470160 !ruby/object:Gem::Requirement
215
+ none: false
216
+ requirements:
217
+ - - ! '>='
218
+ - !ruby/object:Gem::Version
219
+ version: '0'
220
+ type: :runtime
221
+ prerelease: false
222
+ version_requirements: *70361439470160
223
+ - !ruby/object:Gem::Dependency
224
+ name: sqlite3
225
+ requirement: &70361439469740 !ruby/object:Gem::Requirement
226
+ none: false
227
+ requirements:
228
+ - - ! '>='
229
+ - !ruby/object:Gem::Version
230
+ version: '0'
231
+ type: :development
232
+ prerelease: false
233
+ version_requirements: *70361439469740
234
+ - !ruby/object:Gem::Dependency
235
+ name: rspec-rails
236
+ requirement: &70361439469320 !ruby/object:Gem::Requirement
237
+ none: false
238
+ requirements:
239
+ - - ! '>='
240
+ - !ruby/object:Gem::Version
241
+ version: '0'
242
+ type: :development
243
+ prerelease: false
244
+ version_requirements: *70361439469320
245
+ - !ruby/object:Gem::Dependency
246
+ name: faker
247
+ requirement: &70361439468900 !ruby/object:Gem::Requirement
248
+ none: false
249
+ requirements:
250
+ - - ! '>='
251
+ - !ruby/object:Gem::Version
252
+ version: '0'
253
+ type: :development
254
+ prerelease: false
255
+ version_requirements: *70361439468900
256
+ - !ruby/object:Gem::Dependency
257
+ name: factory_girl_rails
258
+ requirement: &70361439468480 !ruby/object:Gem::Requirement
259
+ none: false
260
+ requirements:
261
+ - - ! '>='
262
+ - !ruby/object:Gem::Version
263
+ version: '0'
264
+ type: :development
265
+ prerelease: false
266
+ version_requirements: *70361439468480
267
+ description: Almanac is the most elegant mountable blog engine that can be easily
268
+ hooked up in the existing Rails application.
269
+ email:
270
+ - vasinov@me.com
271
+ executables: []
272
+ extensions: []
273
+ extra_rdoc_files: []
274
+ files:
275
+ - app/assets/images/almanac/background.jpg
276
+ - app/assets/images/almanac/icons/compose.png
277
+ - app/assets/images/almanac/icons/feed.png
278
+ - app/assets/images/almanac/icons/gear.png
279
+ - app/assets/images/almanac/icons/glyphicons-halflings-white.png
280
+ - app/assets/images/almanac/icons/glyphicons-halflings.png
281
+ - app/assets/images/almanac/icons/upload.png
282
+ - app/assets/images/almanac/logo.jpg
283
+ - app/assets/javascripts/almanac/2-jquery.backstretch.js
284
+ - app/assets/javascripts/almanac/3-pixastic.js
285
+ - app/assets/javascripts/almanac/4-bootstrap-datepicker.js
286
+ - app/assets/javascripts/almanac/5-main.coffee.erb
287
+ - app/assets/javascripts/almanac/application.js
288
+ - app/assets/stylesheets/almanac/1-datepicker.css
289
+ - app/assets/stylesheets/almanac/2-main.css.scss
290
+ - app/assets/stylesheets/almanac/application.css
291
+ - app/controllers/almanac/application_controller.rb
292
+ - app/controllers/almanac/blogs_controller.rb
293
+ - app/controllers/almanac/comments_controller.rb
294
+ - app/controllers/almanac/images_controller.rb
295
+ - app/controllers/almanac/posts_controller.rb
296
+ - app/helpers/almanac/application_helper.rb
297
+ - app/models/almanac/blog.rb
298
+ - app/models/almanac/comment.rb
299
+ - app/models/almanac/image.rb
300
+ - app/models/almanac/post.rb
301
+ - app/views/almanac/blogs/_form.html.haml
302
+ - app/views/almanac/blogs/_topbar.html.haml
303
+ - app/views/almanac/blogs/edit.html.haml
304
+ - app/views/almanac/blogs/new.html.haml
305
+ - app/views/almanac/blogs/spam.html.haml
306
+ - app/views/almanac/posts/_form.html.haml
307
+ - app/views/almanac/posts/_post.html.haml
308
+ - app/views/almanac/posts/edit.html.haml
309
+ - app/views/almanac/posts/index.html.haml
310
+ - app/views/almanac/posts/index.rss.builder
311
+ - app/views/almanac/posts/new.html.haml
312
+ - app/views/almanac/posts/show.html.haml
313
+ - app/views/almanac/posts/tag.html.haml
314
+ - app/views/layouts/almanac/_ga.html.haml
315
+ - app/views/layouts/almanac/_twitter_follow.html.haml
316
+ - app/views/layouts/almanac/application.html.haml
317
+ - config/routes.rb
318
+ - db/migrate/20121009222451_create_almanac_posts.rb
319
+ - db/migrate/20121010033555_create_almanac_blogs.rb
320
+ - db/migrate/20121017032059_add_excerpt_to_almanac_posts.rb
321
+ - db/migrate/20121017210007_create_almanac_files.rb
322
+ - db/migrate/20121017221819_rename_file_to_image.rb
323
+ - db/migrate/20121025223403_add_image_fields_to_almanac_blogs.rb
324
+ - db/migrate/20121029211221_add_new_fields_to_blogs.rb
325
+ - db/migrate/20121029221815_acts_as_taggable_on_migration.rb
326
+ - db/migrate/20121101030836_create_almanac_comments.rb
327
+ - db/migrate/20121102181941_add_rakismet_fields_to_blogs.rb
328
+ - db/migrate/20121102185130_add_spam_to_comments.rb
329
+ - db/migrate/20121110000024_add_written_at_to_posts.rb
330
+ - db/migrate/20121112205256_add_background_fields_to_blogs.rb
331
+ - db/migrate/20121113010557_add_footer_to_almanac_blogs.rb
332
+ - db/migrate/20121114043648_change_default_value_for_background_tiles_in_almanac_blogs.rb
333
+ - lib/almanac/engine.rb
334
+ - lib/almanac/MarkdownParser.rb
335
+ - lib/almanac/version.rb
336
+ - lib/almanac.rb
337
+ - lib/tasks/almanac_tasks.rake
338
+ - MIT-LICENSE
339
+ - Rakefile
340
+ - README.md
341
+ - spec/controllers/blogs_controller_spec.rb
342
+ - spec/controllers/comments_controller_spec.rb
343
+ - spec/controllers/posts_controller_spec.rb
344
+ - spec/dummy/app/assets/javascripts/application.js
345
+ - spec/dummy/app/assets/stylesheets/application.css
346
+ - spec/dummy/app/controllers/application_controller.rb
347
+ - spec/dummy/app/helpers/application_helper.rb
348
+ - spec/dummy/app/models/ability.rb
349
+ - spec/dummy/app/models/user.rb
350
+ - spec/dummy/app/views/layouts/application.html.erb
351
+ - spec/dummy/config/application.rb
352
+ - spec/dummy/config/boot.rb
353
+ - spec/dummy/config/database.yml
354
+ - spec/dummy/config/environment.rb
355
+ - spec/dummy/config/environments/development.rb
356
+ - spec/dummy/config/environments/production.rb
357
+ - spec/dummy/config/environments/test.rb
358
+ - spec/dummy/config/initializers/almanac.rb
359
+ - spec/dummy/config/initializers/backtrace_silencers.rb
360
+ - spec/dummy/config/initializers/devise.rb
361
+ - spec/dummy/config/initializers/dragonfly.rb
362
+ - spec/dummy/config/initializers/inflections.rb
363
+ - spec/dummy/config/initializers/mime_types.rb
364
+ - spec/dummy/config/initializers/secret_token.rb
365
+ - spec/dummy/config/initializers/session_store.rb
366
+ - spec/dummy/config/initializers/wrap_parameters.rb
367
+ - spec/dummy/config/locales/en.yml
368
+ - spec/dummy/config/routes.rb
369
+ - spec/dummy/config.ru
370
+ - spec/dummy/db/migrate/20121009230705_create_almanac_posts.rb
371
+ - spec/dummy/db/migrate/20121010033827_create_almanac_blogs.rb
372
+ - spec/dummy/db/migrate/20121102224650_add_excerpt_to_almanac_posts.rb
373
+ - spec/dummy/db/migrate/20121102224651_create_almanac_files..rb
374
+ - spec/dummy/db/migrate/20121102224652_rename_file_to_image.rb
375
+ - spec/dummy/db/migrate/20121102224653_add_image_fields_to_almanac_blogs.rb
376
+ - spec/dummy/db/migrate/20121102224654_add_new_fields_to_almanac_blogs.rb
377
+ - spec/dummy/db/migrate/20121102224655_acts_as_taggable_on_migration.rb
378
+ - spec/dummy/db/migrate/20121102224656_create_almanac_comments.rb
379
+ - spec/dummy/db/migrate/20121102224657_add_rakismet_fields_to_almanac_blogs.rb
380
+ - spec/dummy/db/migrate/20121102224658_add_spam_to_almanac_comments.rb
381
+ - spec/dummy/db/migrate/20121106220325_devise_create_users.rb
382
+ - spec/dummy/db/migrate/20121114032144_add_written_at_to_almanac_posts.rb
383
+ - spec/dummy/db/migrate/20121114032145_add_background_fields_to_almanac_blogs.rb
384
+ - spec/dummy/db/migrate/20121114032146_add_footer_to_almanac_blogs.rb
385
+ - spec/dummy/db/schema.rb
386
+ - spec/dummy/db/test.sqlite3
387
+ - spec/dummy/log/production.log
388
+ - spec/dummy/log/test.log
389
+ - spec/dummy/public/404.html
390
+ - spec/dummy/public/422.html
391
+ - spec/dummy/public/500.html
392
+ - spec/dummy/public/favicon.ico
393
+ - spec/dummy/Rakefile
394
+ - spec/dummy/README.rdoc
395
+ - spec/dummy/script/rails
396
+ - spec/factories.rb
397
+ - spec/models/blog_spec.rb
398
+ - spec/models/comment_spec.rb
399
+ - spec/models/post_spec.rb
400
+ - spec/spec_helper.rb
401
+ homepage: https://github.com/vasinov/almanac
402
+ licenses: []
403
+ post_install_message:
404
+ rdoc_options: []
405
+ require_paths:
406
+ - lib
407
+ required_ruby_version: !ruby/object:Gem::Requirement
408
+ none: false
409
+ requirements:
410
+ - - ! '>='
411
+ - !ruby/object:Gem::Version
412
+ version: '0'
413
+ required_rubygems_version: !ruby/object:Gem::Requirement
414
+ none: false
415
+ requirements:
416
+ - - ! '>='
417
+ - !ruby/object:Gem::Version
418
+ version: '0'
419
+ requirements: []
420
+ rubyforge_project:
421
+ rubygems_version: 1.8.11
422
+ signing_key:
423
+ specification_version: 3
424
+ summary: The most elegant blog engine for Rails apps.
425
+ test_files:
426
+ - spec/controllers/blogs_controller_spec.rb
427
+ - spec/controllers/comments_controller_spec.rb
428
+ - spec/controllers/posts_controller_spec.rb
429
+ - spec/dummy/app/assets/javascripts/application.js
430
+ - spec/dummy/app/assets/stylesheets/application.css
431
+ - spec/dummy/app/controllers/application_controller.rb
432
+ - spec/dummy/app/helpers/application_helper.rb
433
+ - spec/dummy/app/models/ability.rb
434
+ - spec/dummy/app/models/user.rb
435
+ - spec/dummy/app/views/layouts/application.html.erb
436
+ - spec/dummy/config/application.rb
437
+ - spec/dummy/config/boot.rb
438
+ - spec/dummy/config/database.yml
439
+ - spec/dummy/config/environment.rb
440
+ - spec/dummy/config/environments/development.rb
441
+ - spec/dummy/config/environments/production.rb
442
+ - spec/dummy/config/environments/test.rb
443
+ - spec/dummy/config/initializers/almanac.rb
444
+ - spec/dummy/config/initializers/backtrace_silencers.rb
445
+ - spec/dummy/config/initializers/devise.rb
446
+ - spec/dummy/config/initializers/dragonfly.rb
447
+ - spec/dummy/config/initializers/inflections.rb
448
+ - spec/dummy/config/initializers/mime_types.rb
449
+ - spec/dummy/config/initializers/secret_token.rb
450
+ - spec/dummy/config/initializers/session_store.rb
451
+ - spec/dummy/config/initializers/wrap_parameters.rb
452
+ - spec/dummy/config/locales/en.yml
453
+ - spec/dummy/config/routes.rb
454
+ - spec/dummy/config.ru
455
+ - spec/dummy/db/migrate/20121009230705_create_almanac_posts.rb
456
+ - spec/dummy/db/migrate/20121010033827_create_almanac_blogs.rb
457
+ - spec/dummy/db/migrate/20121102224650_add_excerpt_to_almanac_posts.rb
458
+ - spec/dummy/db/migrate/20121102224651_create_almanac_files..rb
459
+ - spec/dummy/db/migrate/20121102224652_rename_file_to_image.rb
460
+ - spec/dummy/db/migrate/20121102224653_add_image_fields_to_almanac_blogs.rb
461
+ - spec/dummy/db/migrate/20121102224654_add_new_fields_to_almanac_blogs.rb
462
+ - spec/dummy/db/migrate/20121102224655_acts_as_taggable_on_migration.rb
463
+ - spec/dummy/db/migrate/20121102224656_create_almanac_comments.rb
464
+ - spec/dummy/db/migrate/20121102224657_add_rakismet_fields_to_almanac_blogs.rb
465
+ - spec/dummy/db/migrate/20121102224658_add_spam_to_almanac_comments.rb
466
+ - spec/dummy/db/migrate/20121106220325_devise_create_users.rb
467
+ - spec/dummy/db/migrate/20121114032144_add_written_at_to_almanac_posts.rb
468
+ - spec/dummy/db/migrate/20121114032145_add_background_fields_to_almanac_blogs.rb
469
+ - spec/dummy/db/migrate/20121114032146_add_footer_to_almanac_blogs.rb
470
+ - spec/dummy/db/schema.rb
471
+ - spec/dummy/db/test.sqlite3
472
+ - spec/dummy/log/production.log
473
+ - spec/dummy/log/test.log
474
+ - spec/dummy/public/404.html
475
+ - spec/dummy/public/422.html
476
+ - spec/dummy/public/500.html
477
+ - spec/dummy/public/favicon.ico
478
+ - spec/dummy/Rakefile
479
+ - spec/dummy/README.rdoc
480
+ - spec/dummy/script/rails
481
+ - spec/factories.rb
482
+ - spec/models/blog_spec.rb
483
+ - spec/models/comment_spec.rb
484
+ - spec/models/post_spec.rb
485
+ - spec/spec_helper.rb