biovision-post 0.1.180127 → 0.2.180325

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 (53) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/articles_controller.rb +2 -2
  3. data/app/controllers/blog_posts_controller.rb +2 -2
  4. data/app/controllers/news_controller.rb +2 -2
  5. data/app/controllers/post_categories_controller.rb +4 -4
  6. data/app/controllers/posts_controller.rb +5 -15
  7. data/app/helpers/biovision_posts_helper.rb +4 -4
  8. data/app/models/concerns/post_child_with_priority.rb +49 -0
  9. data/app/models/post.rb +21 -15
  10. data/app/models/post_link.rb +15 -0
  11. data/app/models/post_note.rb +16 -0
  12. data/app/models/post_reference.rb +19 -0
  13. data/app/models/post_type.rb +3 -1
  14. data/app/services/post_manager.rb +9 -6
  15. data/app/services/post_manager/article_handler.rb +2 -2
  16. data/app/services/post_manager/blog_post_handler.rb +2 -2
  17. data/app/services/post_manager/news_handler.rb +2 -2
  18. data/app/views/admin/index/dashboard/_biovision_post.html.erb +1 -1
  19. data/app/views/admin/post_categories/entity/_in_list.html.erb +3 -3
  20. data/app/views/admin/post_categories/show.html.erb +3 -3
  21. data/app/views/admin/post_types/entity/_in_list.html.erb +1 -1
  22. data/app/views/admin/post_types/new_post.html.erb +1 -1
  23. data/app/views/admin/post_types/show.html.erb +2 -2
  24. data/app/views/admin/posts/entity/_in_list.html.erb +17 -3
  25. data/app/views/admin/posts/show.html.erb +4 -2
  26. data/app/views/articles/category.html.erb +1 -1
  27. data/app/views/blog_posts/category.html.erb +1 -1
  28. data/app/views/index/dashboard/_biovision_post.html.erb +5 -0
  29. data/app/views/news/category.html.erb +1 -1
  30. data/app/views/post_categories/edit.html.erb +1 -1
  31. data/app/views/posts/_form.html.erb +160 -22
  32. data/app/views/posts/_post.html.erb +1 -1
  33. data/app/views/posts/edit.html.erb +1 -1
  34. data/app/views/posts/entity/_metadata.html.erb +10 -6
  35. data/config/locales/posts-en.yml +4 -3
  36. data/config/locales/posts-ru.yml +3 -2
  37. data/config/routes.rb +39 -35
  38. data/db/migrate/20170930000001_create_post_types.rb +1 -0
  39. data/db/migrate/20170930000003_create_posts.rb +2 -0
  40. data/db/migrate/20171218111111_add_meta_fields_to_posts.rb +1 -1
  41. data/db/migrate/20171219111112_add_author_fields_to_posts.rb +1 -1
  42. data/db/migrate/20180124111113_add_language_to_posts.rb +1 -1
  43. data/db/migrate/20180318215555_add_active_to_post_types.rb +11 -0
  44. data/db/migrate/20180321100000_create_post_references.rb +21 -0
  45. data/db/migrate/20180321100001_create_post_notes.rb +18 -0
  46. data/db/migrate/20180321100002_create_post_links.rb +20 -0
  47. data/lib/biovision/post/engine.rb +2 -3
  48. data/lib/biovision/post/version.rb +1 -1
  49. metadata +11 -6
  50. data/app/views/index/index/_recent_posts.html.erb +0 -5
  51. data/app/views/posts/edit.js.erb +0 -1
  52. data/app/views/posts/form/_wysiwyg.html.erb +0 -14
  53. data/app/views/posts/new.js.erb +0 -1
@@ -4,7 +4,7 @@
4
4
  <% if post.editable_by? current_user %>
5
5
  <ul class="actions">
6
6
  <% if UserPrivilege.user_in_group?(current_user, :editors) %>
7
- <li><%= gear_icon(admin_post_path(post.id)) %></li>
7
+ <li><%= gear_icon(admin_post_path(id: post.id)) %></li>
8
8
  <% end %>
9
9
  <% unless post.locked? %>
10
10
  <li><%= edit_icon(handler.edit_path) %></li>
@@ -4,7 +4,7 @@
4
4
  <h1><%= t('.heading') %></h1>
5
5
 
6
6
  <ul class="actions">
7
- <li><%= back_icon(admin_post_path(@entity.id)) %></li>
7
+ <li><%= back_icon(admin_post_path(id: @entity.id)) %></li>
8
8
  <li class="danger"><%= destroy_icon(@entity) %></li>
9
9
  </ul>
10
10
 
@@ -1,12 +1,16 @@
1
1
  <% content_for :meta_description, (entity.meta_description.blank? ? entity.lead : entity.meta_description) %>
2
2
  <% content_for :meta_type, 'article' %>
3
3
  <% content_for :meta_type_extension do %>
4
- <meta property="og:article:published_time" content="<%= entity.created_at.strftime('%Y-%m-%d') %>"/>
5
- <meta property="og:article:modified_time" content="<%= entity.updated_at.strftime('%Y-%m-%d') %>"/>
6
- <% if entity.show_owner? %>
7
- <meta property="og:article:author" content="<%= entity.user.screen_name %>"/>
8
- <% end %>
4
+ <meta property="og:article:published_time" content="<%= entity.created_at.strftime('%Y-%m-%d') %>"/>
5
+ <meta property="og:article:modified_time" content="<%= entity.updated_at.strftime('%Y-%m-%d') %>"/>
6
+ <% if entity.show_owner? %>
7
+ <meta property="og:article:author" content="<%= entity.user.screen_name %>"/>
8
+ <% end %>
9
9
  <% end %>
10
10
  <% content_for :meta_image, (request.protocol + request.host_with_port + entity.image.url) unless entity.image.blank? %>
11
- <% content_for :meta_title, entity.meta_title unless entity.meta_title.blank? %>
11
+ <% if entity.meta_title.blank? %>
12
+ <% content_for :meta_title, entity.title %>
13
+ <% else %>
14
+ <% content_for :meta_title, entity.meta_title %>
15
+ <% end %>
12
16
  <% content_for :meta_keywords, entity.meta_keywords unless entity.meta_keywords.blank? %>
@@ -132,11 +132,12 @@ en:
132
132
  author_name: "If specified, shown instead of current user"
133
133
  author_title: "For example, occupation of status"
134
134
  author_url: "If specified, author name will link here"
135
- image: "Maximum dimensions is 3000×3000, format — JPG or PNG."
135
+ image: "Maximum dimensions are 3000×3000, format — JPG or PNG."
136
136
  image_alt_text: "Brief description of image. Maximum 200 chars."
137
137
  image_author_link: "Will be opened when one clicks on author name."
138
138
  image_author_name: "Person or organization name. Will be shown near image."
139
139
  image_name: "Will be shown as image caption."
140
+ language_id: "Language"
140
141
  lead: "Post essence, maximum 350 chars."
141
142
  meta_description: "50–55 words. Maximum 250 chars"
142
143
  meta_keywords: "Maximum 250 chars."
@@ -151,8 +152,8 @@ en:
151
152
  post:
152
153
  source: "Source"
153
154
  index:
154
- index:
155
- recent_posts:
155
+ dashboard:
156
+ biovision_post:
156
157
  heading: "Recent posts"
157
158
  articles:
158
159
  index:
@@ -137,6 +137,7 @@ ru:
137
137
  image_author_link: "Будет открываться при нажатии на имя автора картинки."
138
138
  image_author_name: "ФИО или название организации. Будет отображаться в подписи к картинке."
139
139
  image_name: "Будет отображаться в качестве подписи к картинке."
140
+ language_id: "Язык"
140
141
  lead: "Краткая суть, максимум 350 символов."
141
142
  meta_description: "50–55 слов. Максимум 250 символов."
142
143
  meta_keywords: "Максимум 250 символов."
@@ -151,8 +152,8 @@ ru:
151
152
  post:
152
153
  source: "Источник"
153
154
  index:
154
- index:
155
- recent_posts:
155
+ dashboard:
156
+ biovision_post:
156
157
  heading: "Недавние публикации"
157
158
  articles:
158
159
  index:
data/config/routes.rb CHANGED
@@ -2,47 +2,51 @@ Rails.application.routes.draw do
2
2
  category_slug_pattern = /[a-z]+[-_0-9a-z]*[0-9a-z]/
3
3
  post_slug_pattern = /[a-z0-9]+[-_.a-z0-9]*[a-z0-9]+/
4
4
 
5
- resources :post_categories, except: [:index, :show]
6
- resources :posts, except: [:new]
5
+ resources :post_categories, :posts, only: [:update, :destroy]
7
6
 
8
- scope :articles, controller: :articles do
9
- get '/' => :index, as: :articles
10
- get '/:category_slug' => :category, as: :articles_category, constraints: { category_slug: category_slug_pattern }
11
- get '/:post_id-:post_slug' => :show, as: :show_article, constraints: { post_id: /\d+/, post_slug: post_slug_pattern }
12
- end
7
+ scope '/(:locale)', constraints: { locale: /[a-z]{2}/ } do
8
+ resources :post_categories, except: [:index, :show, :update, :destroy]
9
+ resources :posts, except: [:new, :update, :destroy]
13
10
 
14
- scope :news, controller: :news do
15
- get '/' => :index, as: :news_index
16
- get '/:category_slug' => :category, as: :news_category, constraints: { category_slug: category_slug_pattern }
17
- get '/:post_id-:post_slug' => :show, as: :show_news, constraints: { post_id: /\d+/, post_slug: post_slug_pattern }
18
- end
11
+ scope :articles, controller: :articles do
12
+ get '/' => :index, as: :articles
13
+ get '/:category_slug' => :category, as: :articles_category, constraints: { category_slug: category_slug_pattern }
14
+ get '/:post_id-:post_slug' => :show, as: :show_article, constraints: { post_id: /\d+/, post_slug: post_slug_pattern }
15
+ end
19
16
 
20
- scope :blog_posts, controller: :blog_posts do
21
- get '/' => :index, as: :blog_posts
22
- get '/:category_slug' => :category, as: :blog_posts_category, constraints: { category_slug: category_slug_pattern }
23
- get '/:post_id-:post_slug' => :show, as: :show_blog_post, constraints: { post_id: /\d+/, post_slug: post_slug_pattern }
24
- end
17
+ scope :news, controller: :news do
18
+ get '/' => :index, as: :news_index
19
+ get '/:category_slug' => :category, as: :news_category, constraints: { category_slug: category_slug_pattern }
20
+ get '/:post_id-:post_slug' => :show, as: :show_news, constraints: { post_id: /\d+/, post_slug: post_slug_pattern }
21
+ end
25
22
 
26
- namespace :admin do
27
- resources :post_types, only: [:index, :show] do
28
- member do
29
- get :post_categories
30
- get :new_post
31
- end
23
+ scope :blog_posts, controller: :blog_posts do
24
+ get '/' => :index, as: :blog_posts
25
+ get '/:category_slug' => :category, as: :blog_posts_category, constraints: { category_slug: category_slug_pattern }
26
+ get '/:post_id-:post_slug' => :show, as: :show_blog_post, constraints: { post_id: /\d+/, post_slug: post_slug_pattern }
32
27
  end
33
- resources :post_categories, only: [:show] do
34
- member do
35
- put 'lock', defaults: { format: :json }
36
- delete 'lock', action: :unlock, defaults: { format: :json }
37
- post 'priority', defaults: { format: :json }
38
- post 'toggle', defaults: { format: :json }
28
+
29
+ namespace :admin do
30
+ resources :post_types, only: [:index, :show] do
31
+ member do
32
+ get :post_categories
33
+ get :new_post
34
+ end
39
35
  end
40
- end
41
- resources :posts, only: [:index, :show] do
42
- member do
43
- put 'lock', defaults: { format: :json }
44
- delete 'lock', action: :unlock, defaults: { format: :json }
45
- post 'toggle', defaults: { format: :json }
36
+ resources :post_categories, only: [:show] do
37
+ member do
38
+ put 'lock', defaults: { format: :json }
39
+ delete 'lock', action: :unlock, defaults: { format: :json }
40
+ post 'priority', defaults: { format: :json }
41
+ post 'toggle', defaults: { format: :json }
42
+ end
43
+ end
44
+ resources :posts, only: [:index, :show] do
45
+ member do
46
+ put 'lock', defaults: { format: :json }
47
+ delete 'lock', action: :unlock, defaults: { format: :json }
48
+ post 'toggle', defaults: { format: :json }
49
+ end
46
50
  end
47
51
  end
48
52
  end
@@ -3,6 +3,7 @@ class CreatePostTypes < ActiveRecord::Migration[5.1]
3
3
  unless PostType.table_exists?
4
4
  create_table :post_types do |t|
5
5
  t.timestamps
6
+ t.boolean :active, default: true, null: false
6
7
  t.integer :posts_count, default: 0, null: false
7
8
  t.integer :category_depth, limit: 2, default: 0
8
9
  t.string :name, null: false
@@ -47,6 +47,8 @@ class CreatePosts < ActiveRecord::Migration[5.1]
47
47
  execute "create index posts_created_at_month_idx on posts using btree (date_trunc('month', created_at), post_type_id, user_id);"
48
48
 
49
49
  add_foreign_key :posts, :posts, column: :original_post_id, on_update: :cascade, on_delete: :nullify
50
+
51
+ add_index :posts, :created_at
50
52
  end
51
53
  end
52
54
 
@@ -10,6 +10,6 @@ class AddMetaFieldsToPosts < ActiveRecord::Migration[5.1]
10
10
  end
11
11
 
12
12
  def down
13
- # No need to rollback
13
+ # No need to rollback
14
14
  end
15
15
  end
@@ -6,6 +6,6 @@ class AddAuthorFieldsToPosts < ActiveRecord::Migration[5.1]
6
6
  end
7
7
 
8
8
  def down
9
- # no rollback
9
+ # no rollback
10
10
  end
11
11
  end
@@ -6,6 +6,6 @@ class AddLanguageToPosts < ActiveRecord::Migration[5.1]
6
6
  end
7
7
 
8
8
  def down
9
- # no rollback
9
+ # no rollback
10
10
  end
11
11
  end
@@ -0,0 +1,11 @@
1
+ class AddActiveToPostTypes < ActiveRecord::Migration[5.1]
2
+ def up
3
+ unless column_exists? :post_types, :active
4
+ add_column :post_types, :active, :boolean, default: true, null: false
5
+ end
6
+ end
7
+
8
+ def down
9
+ # no rollback
10
+ end
11
+ end
@@ -0,0 +1,21 @@
1
+ class CreatePostReferences < ActiveRecord::Migration[5.1]
2
+ def up
3
+ unless PostReference.table_exists?
4
+ create_table :post_references do |t|
5
+ t.timestamps
6
+ t.references :post, null: false, foreign_key: { on_update: :cascade, on_delete: :cascade }
7
+ t.integer :priority, limit: 2, default: 1, null: false
8
+ t.string :authors
9
+ t.string :title, null: false
10
+ t.string :url
11
+ t.string :publishing_info
12
+ end
13
+ end
14
+ end
15
+
16
+ def down
17
+ if PostReference.table_exists?
18
+ drop_table :post_references
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,18 @@
1
+ class CreatePostNotes < ActiveRecord::Migration[5.1]
2
+ def up
3
+ unless PostNote.table_exists?
4
+ create_table :post_notes do |t|
5
+ t.timestamps
6
+ t.references :post, null: false, foreign_key: { on_update: :cascade, on_delete: :cascade }
7
+ t.integer :priority, limit: 2, default: 1, null: false
8
+ t.text :text, null: false
9
+ end
10
+ end
11
+ end
12
+
13
+ def down
14
+ if PostNote.table_exists?
15
+ drop_table :post_notes
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,20 @@
1
+ class CreatePostLinks < ActiveRecord::Migration[5.1]
2
+ def up
3
+ unless PostLink.table_exists?
4
+ create_table :post_links do |t|
5
+ t.timestamps
6
+ t.references :post, null: false, foreign_key: { on_update: :cascade, on_delete: :cascade }
7
+ t.integer :other_post_id, null: false
8
+ t.integer :priority, limit: 2, default: 1, null: false
9
+ end
10
+
11
+ add_foreign_key :post_links, :posts, column: :other_post_id, on_update: :cascade, on_delete: :cascade
12
+ end
13
+ end
14
+
15
+ def down
16
+ if PostLink.table_exists?
17
+ drop_table :post_links
18
+ end
19
+ end
20
+ end
@@ -8,12 +8,11 @@ module Biovision
8
8
  class Engine < ::Rails::Engine
9
9
  config.generators do |g|
10
10
  g.test_framework :rspec
11
- g.fixture_replacement :factory_girl, :dir => 'spec/factories'
11
+ g.fixture_replacement :factory_bot, :dir => 'spec/factories'
12
12
  end
13
13
 
14
14
  config.assets.precompile << %w(admin.scss)
15
- config.assets.precompile << %w(biovision/base/icons/*)
16
- config.assets.precompile << %w(biovision/base/placeholders/*)
15
+ config.assets.precompile << %w(biovision/base/**/*)
17
16
  end
18
17
  end
19
18
  end
@@ -1,5 +1,5 @@
1
1
  module Biovision
2
2
  module Post
3
- VERSION = '0.1.180127'
3
+ VERSION = '0.2.180325'
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: biovision-post
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.180127
4
+ version: 0.2.180325
5
5
  platform: ruby
6
6
  authors:
7
7
  - Maxim Khan-Magomedov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-01-28 00:00:00.000000000 Z
11
+ date: 2018-03-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -138,8 +138,12 @@ files:
138
138
  - app/mailers/biovision/post/application_mailer.rb
139
139
  - app/models/application_record.rb
140
140
  - app/models/biovision/post/application_record.rb
141
+ - app/models/concerns/post_child_with_priority.rb
141
142
  - app/models/post.rb
142
143
  - app/models/post_category.rb
144
+ - app/models/post_link.rb
145
+ - app/models/post_note.rb
146
+ - app/models/post_reference.rb
143
147
  - app/models/post_type.rb
144
148
  - app/services/post_manager.rb
145
149
  - app/services/post_manager/article_handler.rb
@@ -168,7 +172,7 @@ files:
168
172
  - app/views/blog_posts/index.html.erb
169
173
  - app/views/blog_posts/index.jbuilder
170
174
  - app/views/blog_posts/show.html.erb
171
- - app/views/index/index/_recent_posts.html.erb
175
+ - app/views/index/dashboard/_biovision_post.html.erb
172
176
  - app/views/layouts/biovision/post/application.html.erb
173
177
  - app/views/news/category.html.erb
174
178
  - app/views/news/index.html.erb
@@ -187,11 +191,8 @@ files:
187
191
  - app/views/posts/_post.html.erb
188
192
  - app/views/posts/_preview.html.erb
189
193
  - app/views/posts/edit.html.erb
190
- - app/views/posts/edit.js.erb
191
194
  - app/views/posts/entity/_metadata.html.erb
192
195
  - app/views/posts/entity/_publisher.html.erb
193
- - app/views/posts/form/_wysiwyg.html.erb
194
- - app/views/posts/new.js.erb
195
196
  - app/views/posts/show.html.erb
196
197
  - config/locales/posts-en.yml
197
198
  - config/locales/posts-ru.yml
@@ -202,6 +203,10 @@ files:
202
203
  - db/migrate/20171218111111_add_meta_fields_to_posts.rb
203
204
  - db/migrate/20171219111112_add_author_fields_to_posts.rb
204
205
  - db/migrate/20180124111113_add_language_to_posts.rb
206
+ - db/migrate/20180318215555_add_active_to_post_types.rb
207
+ - db/migrate/20180321100000_create_post_references.rb
208
+ - db/migrate/20180321100001_create_post_notes.rb
209
+ - db/migrate/20180321100002_create_post_links.rb
205
210
  - lib/biovision/post.rb
206
211
  - lib/biovision/post/engine.rb
207
212
  - lib/biovision/post/version.rb
@@ -1,5 +0,0 @@
1
- <section class="recent-posts">
2
- <h2><%= t('.heading') %></h2>
3
-
4
- <%= render partial: 'posts/list', locals: { collection: collection } %>
5
- </section>
@@ -1 +0,0 @@
1
- <%= render partial: 'shared/forms/list_of_errors', locals: { entity: @entity, form_id: 'post-form' } %>
@@ -1,14 +0,0 @@
1
- <script src="//cdn.ckeditor.com/4.7.3/full/ckeditor.js"></script>
2
- <script>
3
- 'use strict';
4
-
5
- document.addEventListener('DOMContentLoaded', function () {
6
- const editor = document.getElementById('post_body');
7
-
8
- CKEDITOR.replace(editor, {
9
- filebrowserUploadUrl: '/media_files/ckeditor',
10
- removePlugins: 'forms,save,preview,flash,bidi,language,print,templates,newpage,iframe,about,scayt,wsc',
11
- // extraPlugins: 'embed'
12
- });
13
- });
14
- </script>
@@ -1 +0,0 @@
1
- <%= render partial: 'shared/forms/list_of_errors', locals: { entity: @entity, form_id: 'post-form' } %>