blogelator 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE +20 -0
- data/README.md +86 -0
- data/Rakefile +29 -0
- data/app/assets/images/blogelator/blogelator-logo.svg +15 -0
- data/app/assets/javascripts/blogelator/admin.js +19 -0
- data/app/assets/javascripts/blogelator/application.js +2 -0
- data/app/assets/javascripts/blogelator/components/markdown_editor_component.js +187 -0
- data/app/assets/javascripts/blogelator/components/save_button_component.js +76 -0
- data/app/assets/javascripts/blogelator/config/marked.js +10 -0
- data/app/assets/javascripts/blogelator/config/router.js +9 -0
- data/app/assets/javascripts/blogelator/config/routes.js +13 -0
- data/app/assets/javascripts/blogelator/config/serializer.js +10 -0
- data/app/assets/javascripts/blogelator/config/store.js +10 -0
- data/app/assets/javascripts/blogelator/controllers/application_controller.js +11 -0
- data/app/assets/javascripts/blogelator/controllers/posts/posts_edit_controller.js +97 -0
- data/app/assets/javascripts/blogelator/controllers/posts/posts_index_controller.js +9 -0
- data/app/assets/javascripts/blogelator/controllers/posts/posts_new_controller.js +6 -0
- data/app/assets/javascripts/blogelator/controllers/posts/posts_show_controller.js +37 -0
- data/app/assets/javascripts/blogelator/models/post.js +34 -0
- data/app/assets/javascripts/blogelator/routes/index_route.js +10 -0
- data/app/assets/javascripts/blogelator/routes/posts_edit_route.js +36 -0
- data/app/assets/javascripts/blogelator/routes/posts_index_route.js +20 -0
- data/app/assets/javascripts/blogelator/routes/posts_new_route.js +53 -0
- data/app/assets/javascripts/blogelator/routes/posts_route.js +10 -0
- data/app/assets/javascripts/blogelator/routes/posts_show_route.js +14 -0
- data/app/assets/javascripts/blogelator/templates/application.handlebars +23 -0
- data/app/assets/javascripts/blogelator/templates/components/markdown-editor.handlebars +8 -0
- data/app/assets/javascripts/blogelator/templates/components/save-button.handlebars +8 -0
- data/app/assets/javascripts/blogelator/templates/posts/_footer.handlebars +0 -0
- data/app/assets/javascripts/blogelator/templates/posts/_form.handlebars +6 -0
- data/app/assets/javascripts/blogelator/templates/posts/_form_action_bar.handlebars +22 -0
- data/app/assets/javascripts/blogelator/templates/posts/_show_action_bar.handlebars +20 -0
- data/app/assets/javascripts/blogelator/templates/posts/edit.handlebars +1 -0
- data/app/assets/javascripts/blogelator/templates/posts/index.handlebars +30 -0
- data/app/assets/javascripts/blogelator/templates/posts/new.handlebars +1 -0
- data/app/assets/javascripts/blogelator/templates/posts/show.handlebars +22 -0
- data/app/assets/stylesheets/blogelator/admin/all.scss +7 -0
- data/app/assets/stylesheets/blogelator/admin/components/markdown_editor.scss +142 -0
- data/app/assets/stylesheets/blogelator/admin/components/save_button.scss +121 -0
- data/app/assets/stylesheets/blogelator/admin/layout.scss +94 -0
- data/app/assets/stylesheets/blogelator/admin/posts/_form.scss +12 -0
- data/app/assets/stylesheets/blogelator/admin/posts/_form_action_bar.scss +84 -0
- data/app/assets/stylesheets/blogelator/admin/posts/_posts_list.scss +43 -0
- data/app/assets/stylesheets/blogelator/admin/posts/edit.scss +7 -0
- data/app/assets/stylesheets/blogelator/admin/posts/index.scss +14 -0
- data/app/assets/stylesheets/blogelator/admin/posts/new.scss +16 -0
- data/app/assets/stylesheets/blogelator/admin/posts/show.scss +17 -0
- data/app/assets/stylesheets/blogelator/application/all.scss +19 -0
- data/app/assets/stylesheets/blogelator/application/layout.scss +49 -0
- data/app/assets/stylesheets/blogelator/application/posts/index.scss +50 -0
- data/app/assets/stylesheets/blogelator/application/posts/show.scss +64 -0
- data/app/assets/stylesheets/blogelator/mixins/blogelator_button.scss +57 -0
- data/app/assets/stylesheets/blogelator/mixins/blogelator_logo.scss +12 -0
- data/app/assets/stylesheets/blogelator/shared/post.scss +161 -0
- data/app/assets/stylesheets/blogelator/shared/typography/code_highlighting.scss +111 -0
- data/app/assets/stylesheets/blogelator/shared/typography/forms.scss +94 -0
- data/app/assets/stylesheets/blogelator/shared/typography/headings.scss +22 -0
- data/app/assets/stylesheets/blogelator/shared/typography/lists.scss +25 -0
- data/app/controllers/blogelator/admin/application_controller.rb +15 -0
- data/app/controllers/blogelator/admin/images_controller.rb +40 -0
- data/app/controllers/blogelator/admin/posts_controller.rb +67 -0
- data/app/controllers/blogelator/application_controller.rb +5 -0
- data/app/controllers/blogelator/posts_controller.rb +37 -0
- data/app/controllers/concerns/blogelator/admin/auth.rb +23 -0
- data/app/helpers/blogelator/admin/posts_helper.rb +7 -0
- data/app/helpers/blogelator/posts_helper.rb +28 -0
- data/app/models/blogelator/ability.rb +11 -0
- data/app/models/blogelator/html_renderer.rb +10 -0
- data/app/models/blogelator/post.rb +63 -0
- data/app/models/blogelator/tag.rb +5 -0
- data/app/serializers/blogelator/post_serializer.rb +6 -0
- data/app/views/blogelator/admin/posts/index.html.erb +0 -0
- data/app/views/blogelator/posts/_post.html.erb +14 -0
- data/app/views/blogelator/posts/index.html.erb +39 -0
- data/app/views/blogelator/posts/show.html.erb +27 -0
- data/app/views/layouts/blogelator/_footer.html.erb +3 -0
- data/app/views/layouts/blogelator/_head.html.erb +7 -0
- data/app/views/layouts/blogelator/_header.html.erb +7 -0
- data/app/views/layouts/blogelator/admin.html.erb +14 -0
- data/app/views/layouts/blogelator/application.html.erb +14 -0
- data/config/jshint.json +43 -0
- data/config/routes.rb +15 -0
- data/db/migrate/20140221192000_create_blogelator_posts.rb +12 -0
- data/db/migrate/20140221204230_add_slug_and_change_user_to_author.rb +6 -0
- data/db/migrate/20140221212026_create_blogelator_tags.rb +10 -0
- data/db/migrate/20140224024607_change_posts_properties_to_have_defaults.rb +14 -0
- data/db/migrate/20140224175024_add_slugs_to_existing_posts.rb +16 -0
- data/db/migrate/20140224192058_add_published_at_to_posts.rb +13 -0
- data/db/migrate/20140303015004_add_summary_to_posts.rb +9 -0
- data/lib/assets/stylesheets/blogelator/_variables_sample.scss +38 -0
- data/lib/blogelator.rb +27 -0
- data/lib/blogelator/engine.rb +35 -0
- data/lib/blogelator/version.rb +3 -0
- data/lib/generators/blogelator/install_generator.rb +94 -0
- data/spec/dummy/README.rdoc +28 -0
- data/spec/dummy/Rakefile +6 -0
- data/spec/dummy/app/assets/javascripts/application.js +1 -0
- data/spec/dummy/app/assets/javascripts/features/user_visits_admin_page_spec.js +12 -0
- data/spec/dummy/app/assets/javascripts/features/user_visits_post_page_spec.js +12 -0
- data/spec/dummy/app/assets/javascripts/fixtures/post.js +17 -0
- data/spec/dummy/app/assets/javascripts/test_helper.js +12 -0
- data/spec/dummy/app/assets/stylesheets/application.css +12 -0
- data/spec/dummy/app/assets/stylesheets/blogelator/_variables.scss +38 -0
- data/spec/dummy/app/assets/stylesheets/blogelator/admin.css.scss +4 -0
- data/spec/dummy/app/assets/stylesheets/blogelator/application.css.scss +4 -0
- data/spec/dummy/app/assets/stylesheets/test_helper.css +21 -0
- data/spec/dummy/app/controllers/application_controller.rb +9 -0
- data/spec/dummy/app/helpers/application_helper.rb +2 -0
- data/spec/dummy/app/models/blogelator/ability.rb +9 -0
- data/spec/dummy/app/views/layouts/application.html.erb +14 -0
- data/spec/dummy/app/views/q_unit/rails/test/index.html.erb +17 -0
- data/spec/dummy/app/views/qunit/rails/test/index.html.erb +17 -0
- data/spec/dummy/bin/bundle +3 -0
- data/spec/dummy/bin/rails +4 -0
- data/spec/dummy/bin/rake +4 -0
- data/spec/dummy/config.ru +4 -0
- data/spec/dummy/config/application.rb +24 -0
- data/spec/dummy/config/boot.rb +5 -0
- data/spec/dummy/config/database.yml +25 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config/environments/development.rb +32 -0
- data/spec/dummy/config/environments/production.rb +80 -0
- data/spec/dummy/config/environments/test.rb +36 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy/config/initializers/blogelator.rb +6 -0
- data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/spec/dummy/config/initializers/inflections.rb +16 -0
- data/spec/dummy/config/initializers/mime_types.rb +5 -0
- data/spec/dummy/config/initializers/secret_token.rb +12 -0
- data/spec/dummy/config/initializers/session_store.rb +3 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/spec/dummy/config/locales/en.yml +23 -0
- data/spec/dummy/config/routes.rb +3 -0
- data/spec/dummy/db/development.sqlite3 +0 -0
- data/spec/dummy/db/migrate/20140221215439_create_blogelator_posts.blogelator.rb +13 -0
- data/spec/dummy/db/migrate/20140221215440_add_slug_and_change_user_to_author.blogelator.rb +7 -0
- data/spec/dummy/db/migrate/20140224024931_create_blogelator_tags.blogelator.rb +11 -0
- data/spec/dummy/db/migrate/20140224025218_change_posts_properties_to_have_defaults.blogelator.rb +15 -0
- data/spec/dummy/db/migrate/20140224205646_add_slugs_to_existing_posts.blogelator.rb +17 -0
- data/spec/dummy/db/migrate/20140224205647_add_published_at_to_posts.blogelator.rb +14 -0
- data/spec/dummy/db/migrate/20140303015133_add_summary_to_posts.blogelator.rb +6 -0
- data/spec/dummy/db/production.sqlite3 +0 -0
- data/spec/dummy/db/schema.rb +37 -0
- data/spec/dummy/db/test.sqlite3 +0 -0
- data/spec/dummy/log/development.log +50393 -0
- data/spec/dummy/log/production.log +76 -0
- data/spec/dummy/log/test.log +11750 -0
- data/spec/dummy/public/404.html +58 -0
- data/spec/dummy/public/422.html +58 -0
- data/spec/dummy/public/500.html +57 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/dummy/public/index.html.erb +14 -0
- data/spec/dummy/tmp/ember-rails/ember-data.js +11132 -0
- data/spec/dummy/tmp/ember-rails/ember.js +42882 -0
- data/spec/factories/post.rb +11 -0
- data/spec/features/user_visits_blog_post_spec.rb +44 -0
- data/spec/features/user_visits_blog_spec.rb +85 -0
- data/spec/models/blogelator/post_spec.rb +95 -0
- data/spec/qunit_runner.js +148 -0
- data/spec/spec_helper.rb +34 -0
- metadata +764 -0
@@ -0,0 +1,14 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
|
4
|
+
<%= render partial: "layouts/blogelator/head" %>
|
5
|
+
|
6
|
+
<body class="<%= body_class %>">
|
7
|
+
<%= render partial: "layouts/blogelator/header" %>
|
8
|
+
<main>
|
9
|
+
<%= yield %>
|
10
|
+
</main>
|
11
|
+
<%= render partial: "layouts/blogelator/footer" %>
|
12
|
+
</body>
|
13
|
+
|
14
|
+
</html>
|
data/config/jshint.json
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
{
|
2
|
+
"camelcase": true,
|
3
|
+
"indent": 2,
|
4
|
+
"white": false,
|
5
|
+
"curly": true,
|
6
|
+
"eqeqeq": true,
|
7
|
+
"immed": true,
|
8
|
+
"latedef": true,
|
9
|
+
"newcap": true,
|
10
|
+
"noarg": true,
|
11
|
+
"sub": true,
|
12
|
+
"undef": true,
|
13
|
+
"boss": true,
|
14
|
+
"eqnull": true,
|
15
|
+
"browser": true,
|
16
|
+
"predef": {
|
17
|
+
"alert": true,
|
18
|
+
"confirm": true,
|
19
|
+
"console": true,
|
20
|
+
"test": true,
|
21
|
+
"equal": true,
|
22
|
+
"ok": true,
|
23
|
+
"sinon": true,
|
24
|
+
"require": true,
|
25
|
+
"$": true,
|
26
|
+
"jQuery": true,
|
27
|
+
"Ember": true,
|
28
|
+
"Handlebars": true,
|
29
|
+
"App": true,
|
30
|
+
"DS": true,
|
31
|
+
"marked": true,
|
32
|
+
"prettyPrintOne": true,
|
33
|
+
"CodeMirror": true,
|
34
|
+
"inlineAttach": true,
|
35
|
+
"moment": true,
|
36
|
+
"module": true,
|
37
|
+
"test": true,
|
38
|
+
"visit": true,
|
39
|
+
"find": true,
|
40
|
+
"andThen": true
|
41
|
+
}
|
42
|
+
}
|
43
|
+
|
data/config/routes.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
Blogelator::Engine.routes.draw do
|
2
|
+
# Admin Routes with Ember.Router location: 'history' support
|
3
|
+
get "/admin", to: "admin/posts#index"
|
4
|
+
get "/admin/*path", to: "admin/posts#index"
|
5
|
+
namespace :admin, path: "api" do
|
6
|
+
resources :images
|
7
|
+
resources :posts
|
8
|
+
end
|
9
|
+
|
10
|
+
# Public Routes
|
11
|
+
resources :posts, path: "/" do
|
12
|
+
get "/page/:page", action: "index", on: :collection
|
13
|
+
end
|
14
|
+
root to: "posts#index"
|
15
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
class ChangePostsPropertiesToHaveDefaults < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
Blogelator::Post.all.each do |post|
|
4
|
+
post.title = post.title.to_s
|
5
|
+
post.body_html = post.body_html.to_s
|
6
|
+
post.body_markdown = post.body_markdown.to_s
|
7
|
+
post.save
|
8
|
+
end
|
9
|
+
|
10
|
+
change_column :blogelator_posts, :title, :string, default: "", null: false
|
11
|
+
change_column :blogelator_posts, :body_html, :text, default: "", null: false
|
12
|
+
change_column :blogelator_posts, :body_markdown, :text, default: "", null: false
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
class AddSlugsToExistingPosts < ActiveRecord::Migration
|
2
|
+
def up
|
3
|
+
Blogelator::Post.all.each do |post|
|
4
|
+
post.slug = post.title.parameterize
|
5
|
+
existing_slug_count = post.class.where(slug: post.slug).count
|
6
|
+
if existing_slug_count > 0
|
7
|
+
post.slug = post.slug + "-#{existing_slug_count}"
|
8
|
+
end
|
9
|
+
post.save
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def down
|
14
|
+
# Do nothing
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
class AddPublishedAtToPosts < ActiveRecord::Migration
|
2
|
+
def up
|
3
|
+
add_column :blogelator_posts, :published_at, :datetime
|
4
|
+
Blogelator::Post.all.each do |post|
|
5
|
+
post.published_at = post.created_at
|
6
|
+
post.save
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
def down
|
11
|
+
remove_column :blogelator_posts, :published_at
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
@import "bourbon";
|
2
|
+
|
3
|
+
// Typography
|
4
|
+
$sans-serif: $helvetica;
|
5
|
+
$serif: $georgia;
|
6
|
+
|
7
|
+
$base-font-family: $sans-serif;
|
8
|
+
$header-font-family: $base-font-family;
|
9
|
+
|
10
|
+
// Sizes
|
11
|
+
$base-font-size: 16px;
|
12
|
+
$base-line-height: 1.5em;
|
13
|
+
$base-border-radius: em(3);
|
14
|
+
|
15
|
+
// Body Color
|
16
|
+
$base-body-color: #fff;
|
17
|
+
|
18
|
+
// Font Colors
|
19
|
+
$base-font-color: #3e3e3e;
|
20
|
+
$base-accent-color: #df0061;
|
21
|
+
|
22
|
+
// Text Link Colors
|
23
|
+
$base-link-color: $base-accent-color;
|
24
|
+
$hover-link-color: darken($base-accent-color, 8%);
|
25
|
+
|
26
|
+
// Border color
|
27
|
+
$base-border-color: #ddd;
|
28
|
+
|
29
|
+
// Flash Colors
|
30
|
+
$error-color: #fbe3e4;
|
31
|
+
$notice-color: #fff6bf;
|
32
|
+
$success-color: #e6efc2;
|
33
|
+
|
34
|
+
// Admin Colors
|
35
|
+
$admin-header-color: #444;
|
36
|
+
$admin-header-accent-color: $base-accent-color;
|
37
|
+
$admin-header-active-color: #fff;
|
38
|
+
$admin-header-highlight-color: lighten($base-accent-color, 20%);
|
data/lib/blogelator.rb
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
require "aws-sdk"
|
2
|
+
require "bourbon"
|
3
|
+
require "cancan"
|
4
|
+
require "deface"
|
5
|
+
require "ember-rails"
|
6
|
+
require "font-awesome-sass"
|
7
|
+
require "jquery-rails"
|
8
|
+
require "kaminari"
|
9
|
+
require "local_time"
|
10
|
+
require "neat"
|
11
|
+
require "pygments.rb"
|
12
|
+
require "redcarpet"
|
13
|
+
require "blogelator/engine"
|
14
|
+
require "blogelator/version"
|
15
|
+
|
16
|
+
module Blogelator
|
17
|
+
mattr_accessor :posts_per_page, :site_name, :s3_access_key_id,
|
18
|
+
:s3_bucket, :s3_secret_access_key, :user_class
|
19
|
+
|
20
|
+
def self.posts_per_page
|
21
|
+
@@posts_per_page ||= 5
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.site_name
|
25
|
+
@@site_name ||= "Blogelator"
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module Blogelator
|
2
|
+
class Engine < ::Rails::Engine
|
3
|
+
isolate_namespace Blogelator
|
4
|
+
|
5
|
+
# Precompile Blogelator Assets
|
6
|
+
initializer "blogelator.assets.precompile" do |app|
|
7
|
+
app.config.assets.precompile += %w(blogelator/application.css blogelator/admin.css blogelator/admin.js)
|
8
|
+
end
|
9
|
+
|
10
|
+
# Add Blogelator Handlebars Templates Path
|
11
|
+
initializer "blogelator.handlebars.config" do |app|
|
12
|
+
unless app.config.handlebars.templates_root.is_a?(Array)
|
13
|
+
app.config.handlebars.templates_root = [app.config.handlebars.templates_root]
|
14
|
+
end
|
15
|
+
if app.config.handlebars.templates_root.include?("templates")
|
16
|
+
app.config.handlebars.templates_root << "blogelator"
|
17
|
+
else
|
18
|
+
app.config.handlebars.templates_root << "blogelator/templates"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
# Load Rails Generators
|
23
|
+
generators do
|
24
|
+
require File.join(File.expand_path("../..", __FILE__), "generators", "blogelator", "install_generator.rb")
|
25
|
+
end
|
26
|
+
|
27
|
+
# RSpec Configuration
|
28
|
+
config.generators do |g|
|
29
|
+
g.test_framework :rspec, fixture: false
|
30
|
+
g.fixture_replacement :factory_girl, dir: "spec/factories"
|
31
|
+
g.assets false
|
32
|
+
g.helper false
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,94 @@
|
|
1
|
+
module Blogelator
|
2
|
+
class InstallGenerator < Rails::Generators::Base
|
3
|
+
source_root File.expand_path("../../../..", __FILE__)
|
4
|
+
|
5
|
+
def ask_questions
|
6
|
+
@site_name = ask("What is the name of your blog? [Blogelator]")
|
7
|
+
if @site_name.blank?
|
8
|
+
@site_name = "Blogelator"
|
9
|
+
end
|
10
|
+
|
11
|
+
@blogelator_route = ask("What route should be used to access the blog? [/blog]")
|
12
|
+
if @blogelator_route.blank?
|
13
|
+
@blogelator_route = "/blog"
|
14
|
+
end
|
15
|
+
|
16
|
+
@user_class = ask("What class is used for user authentication? [User]")
|
17
|
+
if @user_class.blank?
|
18
|
+
@user_class = "User"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def create_initializer_file
|
23
|
+
create_file "config/initializers/blogelator.rb", <<-INITIALIZER
|
24
|
+
Blogelator.posts_per_page = 5
|
25
|
+
Blogelator.site_name = "#{@site_name}"
|
26
|
+
Blogelator.user_class = "#{@user_class}"
|
27
|
+
Blogelator.s3_access_key_id = ENV["BLOGELATOR_S3_KEY"]
|
28
|
+
Blogelator.s3_secret_access_key = ENV["BLOGELATOR_S3_SECRET"]
|
29
|
+
Blogelator.s3_bucket = ENV["BLOGELATOR_S3_BUCKET"]
|
30
|
+
INITIALIZER
|
31
|
+
end
|
32
|
+
|
33
|
+
def create_stylesheets
|
34
|
+
create_file "app/assets/stylesheets/blogelator/application.css.scss", <<-APPLICATIONCSS
|
35
|
+
/*
|
36
|
+
*= require blogelator/application/all
|
37
|
+
*= require_self
|
38
|
+
*/
|
39
|
+
APPLICATIONCSS
|
40
|
+
|
41
|
+
create_file "app/assets/stylesheets/blogelator/admin.css.scss", <<-ADMINCSS
|
42
|
+
/*
|
43
|
+
*= require blogelator/admin/all
|
44
|
+
*= require_self
|
45
|
+
*/
|
46
|
+
ADMINCSS
|
47
|
+
end
|
48
|
+
|
49
|
+
def copy_variables_file
|
50
|
+
puts File.expand_path("../../../..", __FILE__)
|
51
|
+
source = "lib/assets/stylesheets/blogelator/_variables_sample.scss"
|
52
|
+
destination = "app/assets/stylesheets/blogelator/_variables.scss"
|
53
|
+
copy_file source, destination
|
54
|
+
end
|
55
|
+
|
56
|
+
def create_overrides_directory
|
57
|
+
empty_directory "app/overrides"
|
58
|
+
end
|
59
|
+
|
60
|
+
def configure_application
|
61
|
+
application <<-APP
|
62
|
+
|
63
|
+
config.to_prepare do
|
64
|
+
# Load application's model / class decorators
|
65
|
+
Dir.glob(File.join(File.dirname(__FILE__), "../app/**/*_decorator*.rb")) do |c|
|
66
|
+
Rails.configuration.cache_classes ? require(c) : load(c)
|
67
|
+
end
|
68
|
+
|
69
|
+
# Load application's view overrides
|
70
|
+
Dir.glob(File.join(File.dirname(__FILE__), "../app/overrides/*.rb")) do |c|
|
71
|
+
Rails.configuration.cache_classes ? require(c) : load(c)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
APP
|
75
|
+
end
|
76
|
+
|
77
|
+
def install_migrations
|
78
|
+
rake "blogelator:install:migrations"
|
79
|
+
end
|
80
|
+
|
81
|
+
def mount_engine
|
82
|
+
insert_into_file(File.join("config", "routes.rb"), :after => "Application.routes.draw do\n") do <<-MOUNTENGINE
|
83
|
+
# This line mounts Blogelator's routes to the path '#{@blogelator_route}'.
|
84
|
+
# This means, any requests to '#{@blogelator_route}', will go to Blogelator::PostsController.
|
85
|
+
# If you would like to change where this engine is mounted, simply change the :at option to something different.
|
86
|
+
#
|
87
|
+
# We ask that you don't use the :as option here, as Blogelator relies on it being the default of "blogelator"
|
88
|
+
mount Blogelator::Engine, at: "#{@blogelator_route}"
|
89
|
+
MOUNTENGINE
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
end
|
94
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
== README
|
2
|
+
|
3
|
+
This README would normally document whatever steps are necessary to get the
|
4
|
+
application up and running.
|
5
|
+
|
6
|
+
Things you may want to cover:
|
7
|
+
|
8
|
+
* Ruby version
|
9
|
+
|
10
|
+
* System dependencies
|
11
|
+
|
12
|
+
* Configuration
|
13
|
+
|
14
|
+
* Database creation
|
15
|
+
|
16
|
+
* Database initialization
|
17
|
+
|
18
|
+
* How to run the test suite
|
19
|
+
|
20
|
+
* Services (job queues, cache servers, search engines, etc.)
|
21
|
+
|
22
|
+
* Deployment instructions
|
23
|
+
|
24
|
+
* ...
|
25
|
+
|
26
|
+
|
27
|
+
Please feel free to use a different markup language if you do not plan to run
|
28
|
+
<tt>rake doc:app</tt>.
|
data/spec/dummy/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
//= require_self
|
@@ -0,0 +1,12 @@
|
|
1
|
+
test('User visits the admin page.', function() {
|
2
|
+
visit('/');
|
3
|
+
andThen(function() {
|
4
|
+
// List of posts
|
5
|
+
equal(find('.posts-list .post').length, 2, 'The index page should have 2 posts.');
|
6
|
+
equal(find('.posts-list .post:first .date').text().trim(), 'January 12, 2014', 'The date should be displayed for each post');
|
7
|
+
equal(find('.posts-list .post:first .summary').text().trim(), 'Hello world.', 'The summary should be displayed for each post');
|
8
|
+
|
9
|
+
// Main content area
|
10
|
+
equal(find('article.post h1').text().trim(), 'Ember Is Fun!', 'The first post title should be displayed');
|
11
|
+
});
|
12
|
+
});
|
@@ -0,0 +1,12 @@
|
|
1
|
+
test('User visits the the page for a post.', function() {
|
2
|
+
visit('/posts/1');
|
3
|
+
andThen(function() {
|
4
|
+
// List of posts
|
5
|
+
equal(find('.posts-list .post.active').length, 1, 'The post should be selected in the side bar');
|
6
|
+
|
7
|
+
// Main content area
|
8
|
+
equal(find('article.post h1').text().trim(), 'Ember Is Fun!', 'The selected post title should be displayed');
|
9
|
+
equal(find('article.post .date').text().trim(), 'January 12, 2014', 'The selected post date should be displayed');
|
10
|
+
ok(find('article.post .body').html().indexOf('<p>Hello world.</p>' > 0), 'The selected post body should be displayed');
|
11
|
+
});
|
12
|
+
});
|