spokes_blog 0.0.2 → 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.
- checksums.yaml +4 -4
- data/lib/generators/spokes_blog/spokes_blog_generator.rb +41 -29
- data/lib/generators/spokes_blog/templates/controllers/admin/posts_controller.rb +3 -1
- data/lib/generators/spokes_blog/templates/controllers/posts_controller.rb +12 -1
- data/lib/generators/spokes_blog/templates/models/concerns/pageable.rb +1 -1
- data/lib/generators/spokes_blog/templates/models/post.rb +3 -0
- data/lib/generators/spokes_blog/templates/models/seo_meta.rb +1 -1
- data/lib/generators/spokes_blog/templates/presenters/post_presenter.rb +9 -1
- data/lib/generators/spokes_blog/templates/views/admin/_block_content_form.html.haml +1 -1
- data/lib/generators/spokes_blog/templates/views/admin/_form.html.haml +19 -12
- data/lib/generators/spokes_blog/templates/views/admin/_seo_meta_form.html.haml +7 -0
- data/lib/generators/spokes_blog/templates/views/admin/edit.html.haml +2 -0
- data/lib/generators/spokes_blog/templates/views/admin/index.html.haml +2 -2
- data/lib/generators/spokes_blog/templates/views/admin/new.html.haml +2 -1
- data/lib/generators/spokes_blog/templates/views/show.html.haml +1 -1
- data/lib/spokes_blog/version.rb +1 -1
- metadata +6 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6512cf9fc0e532bb2bcda3ef233435ff8341435c
|
4
|
+
data.tar.gz: 042c3f97f6342d2c94fec5f9dc488c94b59a6a12
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 182e4c97fd9107558abe9b2ddb0af5d2cf4fbbfbd25640fe83e8f32450ab47248333b8d8b153501aa339948001f7eee8d67e7083c12d0b9e13d19e851e778d92
|
7
|
+
data.tar.gz: a4d4e2b6700204f6a3f6b8b8d8cc147e8f2f6e026c9db8cf64d2e44cd09959934e807fe5a199fc50965fa0650e3f7e39b355ab610e4fe4431eb8c155039d0842
|
@@ -9,35 +9,40 @@ module SpokesBlog
|
|
9
9
|
generate "acts_as_taggable_on:migration"
|
10
10
|
end
|
11
11
|
|
12
|
-
def
|
13
|
-
#models and concerns
|
12
|
+
def copy_models_and_concerns
|
14
13
|
copy_file "models/block.rb", "app/models/spokes_blog/block.rb"
|
15
14
|
copy_file "models/post.rb", "app/models/spokes_blog/post.rb"
|
16
15
|
copy_file "models/seo_meta.rb", "app/models/spokes_blog/seo_meta.rb"
|
17
16
|
copy_file "models/concerns/pageable.rb", "app/models/spokes_blog/concerns/pageable.rb"
|
17
|
+
end
|
18
18
|
|
19
19
|
|
20
|
-
|
20
|
+
def copy_controllers
|
21
21
|
copy_file "controllers/admin/posts_controller.rb", "app/controllers/admin/spokes_blog/posts_controller.rb"
|
22
22
|
copy_file "controllers/posts_controller.rb", "app/controllers/spokes_blog/posts_controller.rb"
|
23
|
+
end
|
23
24
|
|
24
|
-
|
25
|
+
def copy_admin_views
|
25
26
|
copy_file "views/admin/index.html.haml", "app/views/admin/spokes_blog/posts/index.html.haml"
|
26
27
|
copy_file "views/admin/index.json.jbuilder", "app/views/admin/spokes_blog/posts/index.json.jbuilder"
|
27
28
|
copy_file "views/admin/new.html.haml", "app/views/admin/spokes_blog/posts/new.html.haml"
|
28
29
|
copy_file "views/admin/_form.html.haml", "app/views/admin/spokes_blog/posts/_form.html.haml"
|
29
30
|
copy_file "views/admin/_block_content_form.html.haml", "app/views/admin/spokes_blog/posts/_block_content_form.html.haml"
|
31
|
+
copy_file "views/admin/_seo_meta_form.html.haml", "app/views/admin_spokes_blog/posts/_seo_meta_form.html.haml"
|
32
|
+
end
|
30
33
|
|
31
|
-
|
34
|
+
def copy_user_views
|
32
35
|
copy_file "views/index.html.haml", "app/views/spokes_blog/posts/index.html.haml"
|
33
36
|
copy_file "views/show.html.haml", "app/views/spokes_blog/posts/show.html.haml"
|
37
|
+
end
|
34
38
|
|
35
39
|
|
36
|
-
|
40
|
+
def copy_presenters
|
37
41
|
copy_file "presenters/presenter.rb", "app/presenters/spokes_blog/presenter.rb"
|
38
42
|
copy_file "presenters/post_presenter.rb", "app/presenters/spokes_blog/post_presenter.rb"
|
43
|
+
end
|
39
44
|
|
40
|
-
|
45
|
+
def modify_or_create_user_model
|
41
46
|
if File.exist?(Rails.root.join('app', 'models', 'user.rb')) and
|
42
47
|
File.readlines(Rails.root.join('app', 'models', 'user.rb')).grep(/authored_posts/).size == 0
|
43
48
|
line = "class User < ActiveRecord::Base"
|
@@ -47,60 +52,67 @@ module SpokesBlog
|
|
47
52
|
else
|
48
53
|
copy_file "models/user.rb", "app/models/user.rb"
|
49
54
|
end
|
55
|
+
end
|
50
56
|
|
51
|
-
|
57
|
+
def add_default_routes
|
52
58
|
if File.readlines(Rails.root.join('config', 'routes.rb')).grep(/spokes_blog/).size == 0
|
53
59
|
line = "::Application.routes.draw do"
|
54
60
|
gsub_file Rails.root.join('config', 'routes.rb'), /(#{Regexp.escape(line)})/mi do |match|
|
55
61
|
%{#{match}
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
62
|
+
namespace :admin do
|
63
|
+
scope module: 'spokes_blog' do
|
64
|
+
resources :posts
|
65
|
+
end
|
66
|
+
end
|
61
67
|
|
62
|
-
|
63
|
-
|
64
|
-
|
68
|
+
scope module: 'spokes_blog' do
|
69
|
+
resources :posts, only: [:index]
|
70
|
+
end
|
71
|
+
get "/posts/:slug" => "spokes_blog/posts#show", as: :post_slug
|
72
|
+
}
|
65
73
|
end
|
66
74
|
end
|
75
|
+
end
|
67
76
|
|
68
|
-
|
77
|
+
def add_spokes_blog_models_to_load_path
|
69
78
|
if File.readlines(Rails.root.join("config", "application.rb")).grep(/spokes_blog config/).size == 0
|
70
79
|
line = "class Application < Rails::Application"
|
71
80
|
gsub_file Rails.root.join("config", "application.rb"), /(#{Regexp.escape(line)})/mi do |match|
|
72
81
|
%{#{match}
|
73
|
-
|
74
|
-
|
82
|
+
# spokes_blog config
|
83
|
+
config.autoload_paths += Dir[Rails.root.join('app', 'models', '{**/}')]}
|
75
84
|
end
|
76
85
|
end
|
86
|
+
end
|
77
87
|
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
88
|
+
def add_gems_to_gem_file
|
89
|
+
%w(acts-as-taggable-on haml kaminari).each do |gem|
|
90
|
+
add_gem_entry_to_gemfile(gem)
|
91
|
+
end
|
92
|
+
end
|
82
93
|
|
83
|
-
|
94
|
+
def create_migrations
|
95
|
+
@migration_count = 10
|
84
96
|
if Dir.glob("db/migrate/*_create_post.rb").empty?
|
85
|
-
sleep(1)
|
97
|
+
#sleep(1)
|
86
98
|
copy_file "migrations/post_migration.rb", "db/migrate/#{migration_timestamp}_create_post.rb"
|
87
99
|
end
|
88
100
|
if Dir.glob("db/migrate/*_create_block.rb").empty?
|
89
|
-
sleep(1)
|
101
|
+
#sleep(1)
|
90
102
|
copy_file "migrations/block_migration.rb", "db/migrate/#{migration_timestamp}_create_block.rb"
|
91
103
|
end
|
92
104
|
if Dir.glob("db/migrate/*_create_seo_meta.rb").empty?
|
93
|
-
sleep(1)
|
105
|
+
#sleep(1)
|
94
106
|
copy_file "migrations/seo_meta_migration.rb", "db/migrate/#{migration_timestamp}_create_seo_meta.rb"
|
95
107
|
end
|
96
|
-
|
97
108
|
end
|
98
109
|
|
99
110
|
private
|
100
111
|
|
101
112
|
def migration_timestamp
|
102
113
|
migration_number = Time.now.utc.strftime("%Y%m%d%H%M%S").to_i
|
103
|
-
migration_number +=
|
114
|
+
migration_number += @migration_count
|
115
|
+
@migration_count += 1
|
104
116
|
migration_number.to_s
|
105
117
|
end
|
106
118
|
|
@@ -47,7 +47,9 @@ class Admin::SpokesBlog::PostsController < ApplicationController
|
|
47
47
|
|
48
48
|
def post_params
|
49
49
|
params.require(:spokes_blog_post).permit(:title, :slug, :description, :tag_list,
|
50
|
-
:author_id,
|
50
|
+
:author_id, :state,
|
51
|
+
blocks_attributes: [:content, :id],
|
52
|
+
seo_meta_attributes: [:browser_title, :meta_description])
|
51
53
|
end
|
52
54
|
end
|
53
55
|
|
@@ -1,11 +1,12 @@
|
|
1
1
|
class SpokesBlog::PostsController < ApplicationController
|
2
|
+
around_filter :check_if_record_found, only: :show
|
2
3
|
|
3
4
|
def index
|
4
5
|
@posts = SpokesBlog::Post.published.page(params[:page]).per(10)
|
5
6
|
end
|
6
7
|
|
7
8
|
def show
|
8
|
-
@presenter = post_presenter.single_post(slug: params[:slug])
|
9
|
+
@presenter = SpokesBlog::Post.post_presenter.single_post(slug: params[:slug])
|
9
10
|
end
|
10
11
|
|
11
12
|
private
|
@@ -13,5 +14,15 @@ class SpokesBlog::PostsController < ApplicationController
|
|
13
14
|
def post_presenter
|
14
15
|
@post_presenter || @post_presenter = PostPresenter.new
|
15
16
|
end
|
17
|
+
|
18
|
+
def check_if_record_found
|
19
|
+
begin
|
20
|
+
yield
|
21
|
+
rescue ActiveRecord::RecordNotFound
|
22
|
+
#this should be handled in application controller
|
23
|
+
raise ActionController::RoutingError.new("Not Found")
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
16
27
|
end
|
17
28
|
|
@@ -6,10 +6,13 @@ class SpokesBlog::Post < ActiveRecord::Base
|
|
6
6
|
belongs_to :created_by, class_name: User
|
7
7
|
belongs_to :author, class_name: User
|
8
8
|
has_many :blocks, class_name: :'SpokesBlog::Block'
|
9
|
+
has_one :seo_meta, as: :seo_meta, class_name: :'SpokesBlog::SeoMeta'
|
9
10
|
|
10
11
|
accepts_nested_attributes_for :blocks,
|
11
12
|
reject_if: lambda { |attrs| attrs['content'].blank? }
|
12
13
|
|
14
|
+
accepts_nested_attributes_for :seo_meta
|
15
|
+
|
13
16
|
validates_presence_of :title, :slug
|
14
17
|
|
15
18
|
validates_format_of :slug, with: /\A[a-zA-Z0-9-]+\z/
|
@@ -1,7 +1,7 @@
|
|
1
1
|
class SpokesBlog::PostPresenter < Presenter
|
2
2
|
|
3
3
|
def single_post(params = {})
|
4
|
-
@post = Post.includes(:author).includes(:blocks).by_slug(params[:slug])
|
4
|
+
@post = SpokesBlog::Post.includes(:author).includes(:blocks).includes(:seo_meta).by_slug(params[:slug])
|
5
5
|
self
|
6
6
|
end
|
7
7
|
|
@@ -20,5 +20,13 @@ class SpokesBlog::PostPresenter < Presenter
|
|
20
20
|
def published_at
|
21
21
|
@post.updated_at.strftime("%A, %b %d, %Y")
|
22
22
|
end
|
23
|
+
|
24
|
+
def browser_title
|
25
|
+
@post.seo_meta.browser_title
|
26
|
+
end
|
27
|
+
|
28
|
+
def meta_description
|
29
|
+
@post.seo_meta.meta_description
|
30
|
+
end
|
23
31
|
end
|
24
32
|
|
@@ -1,18 +1,25 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
= f.text_field :title
|
1
|
+
%fieldset
|
2
|
+
= f.label :title
|
3
|
+
= f.text_field :title
|
5
4
|
|
6
|
-
|
7
|
-
|
5
|
+
= f.label :slug
|
6
|
+
= f.text_field :slug
|
8
7
|
|
9
|
-
|
10
|
-
|
8
|
+
= f.label :description
|
9
|
+
= f.text_area :description
|
11
10
|
|
12
|
-
|
11
|
+
= render "seo_meta_form", { f: f }
|
13
12
|
|
14
|
-
|
15
|
-
= f.text_field :tag_list
|
13
|
+
= render "block_content_form", { f: f }
|
16
14
|
|
17
|
-
|
15
|
+
= f.label :author_id
|
16
|
+
= f.select :author_id, options_from_collection_for_select(User.all.where(role: :admin), "id", "email", current_user.id)
|
17
|
+
|
18
|
+
= f.label :state
|
19
|
+
= f.select :state, options_from_collection_for_select(SpokesBlog::Post::STATES, :last, :first, @post.state)
|
20
|
+
|
21
|
+
= f.label :tags
|
22
|
+
= f.text_field :tag_list
|
23
|
+
|
24
|
+
= f.submit "Submit"
|
18
25
|
|
@@ -14,12 +14,12 @@
|
|
14
14
|
$(document).ready(function() {
|
15
15
|
$('.table').dataTable({
|
16
16
|
"bProcessing": true,
|
17
|
-
"sAjaxSource": "/admin/
|
17
|
+
"sAjaxSource": "/admin/posts.json",
|
18
18
|
"sDom": "<'row-fluid'<'span6'l><'span6'f>r>t<'row-fluid'<'span6'i><'span6'p>>",
|
19
19
|
"sPaginationType": "bootstrap"
|
20
20
|
});
|
21
21
|
|
22
|
-
$.extend($.
|
22
|
+
$.extend($.fn.dataTableExt.oStdClasses, {
|
23
23
|
"sWrapper": "dataTables_wrapper form-inline"
|
24
24
|
});
|
25
25
|
});
|
@@ -1 +1,2 @@
|
|
1
|
-
=
|
1
|
+
= form_for @post, url: admin_posts_path(@post) do |f|
|
2
|
+
= render "form", { f: f }
|
data/lib/spokes_blog/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spokes_blog
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matt Obarzanek
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-12-
|
12
|
+
date: 2013-12-04 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -45,14 +45,14 @@ dependencies:
|
|
45
45
|
requirements:
|
46
46
|
- - '>='
|
47
47
|
- !ruby/object:Gem::Version
|
48
|
-
version: '0'
|
48
|
+
version: '4.0'
|
49
49
|
type: :development
|
50
50
|
prerelease: false
|
51
51
|
version_requirements: !ruby/object:Gem::Requirement
|
52
52
|
requirements:
|
53
53
|
- - '>='
|
54
54
|
- !ruby/object:Gem::Version
|
55
|
-
version: '0'
|
55
|
+
version: '4.0'
|
56
56
|
- !ruby/object:Gem::Dependency
|
57
57
|
name: acts-as-taggable-on
|
58
58
|
requirement: !ruby/object:Gem::Requirement
|
@@ -122,7 +122,9 @@ files:
|
|
122
122
|
- lib/generators/spokes_blog/templates/views/admin/_block_content_form.html.haml
|
123
123
|
- lib/generators/spokes_blog/templates/views/admin/new.html.haml
|
124
124
|
- lib/generators/spokes_blog/templates/views/admin/index.html.haml
|
125
|
+
- lib/generators/spokes_blog/templates/views/admin/edit.html.haml
|
125
126
|
- lib/generators/spokes_blog/templates/views/admin/_form.html.haml
|
127
|
+
- lib/generators/spokes_blog/templates/views/admin/_seo_meta_form.html.haml
|
126
128
|
- lib/generators/spokes_blog/templates/views/show.html.haml
|
127
129
|
- lib/generators/spokes_blog/templates/views/index.html.haml
|
128
130
|
- lib/generators/spokes_blog/templates/controllers/admin/posts_controller.rb
|