rcms 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/stylesheets/rcms/mentions.scss +30 -0
- data/app/assets/stylesheets/rcms/news.scss +26 -0
- data/config/locales/rcms.ru.yml +47 -0
- data/lib/generators/rcms_feedback_generator.rb +25 -0
- data/lib/generators/rcms_mentions_generator.rb +38 -0
- data/lib/generators/rcms_news_generator.rb +40 -0
- data/lib/generators/templates/app/models/rcms/page.rb +0 -4
- data/lib/generators/templates_feedback/app/controllers/rcms/feedbacks_controller.rb +12 -0
- data/lib/generators/templates_feedback/app/mailers/.keep +0 -0
- data/lib/generators/templates_feedback/app/mailers/feedback_mailer.rb +13 -0
- data/lib/generators/templates_feedback/app/models/rcms/feedback.rb +28 -0
- data/lib/generators/templates_feedback/app/views/feedback_mailer/_form.html.slim +10 -0
- data/lib/generators/templates_feedback/app/views/feedback_mailer/feedback.html.slim +5 -0
- data/lib/generators/templates_feedback/app/views/feedback_mailer/plain.html.slim +1 -0
- data/lib/generators/templates_mentions/app/admin/rcms/mention.rb +15 -0
- data/lib/generators/templates_mentions/app/controllers/rcms/mentions_controller.rb +26 -0
- data/lib/generators/templates_mentions/app/models/rcms/mention.rb +19 -0
- data/lib/generators/templates_mentions/app/views/rcms/mentions/_dialog.html.slim +17 -0
- data/lib/generators/templates_mentions/app/views/rcms/mentions/_preview.html.slim +15 -0
- data/lib/generators/templates_mentions/migration.rb +16 -0
- data/lib/generators/templates_news/app/admin/rcms/news.rb +39 -0
- data/lib/generators/templates_news/app/controllers/rcms/news_controller.rb +16 -0
- data/lib/generators/templates_news/app/models/rcms/news.rb +27 -0
- data/lib/generators/templates_news/app/uploaders/rcms/news_image_uploader.rb +48 -0
- data/lib/generators/templates_news/app/views/rcms/news/_menu.html.slim +0 -0
- data/lib/generators/templates_news/app/views/rcms/news/index.html.slim +0 -0
- data/lib/generators/templates_news/app/views/rcms/news/show.html.slim +0 -0
- data/lib/generators/templates_news/migration.rb +19 -0
- data/lib/rcms/version.rb +1 -1
- metadata +28 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c38dccc02b702057f6ff1c64ff346be11fc94607
|
4
|
+
data.tar.gz: 4347c11e18b06616013d8819776d8571fcff09e7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e85e6d8a5f4c0424b377b08e132a3808df63c32a743f64606897d9769ed78850de0ec5fd702f290ddb3d7cfc14d1632e105c84a3df36af61abb24099ad0a4ac3
|
7
|
+
data.tar.gz: be2e5f1ac7eeb38045b7be76734e0cdfcc9f21923a5ea742d4dd181283080de738b96ebcf77cd90b30cdb6fd04e44d4c7090528288501544d7f7f6e509b2043f
|
@@ -0,0 +1,30 @@
|
|
1
|
+
$success-color: #4CAF50 !default;
|
2
|
+
|
3
|
+
.rcms-mention-form{
|
4
|
+
fieldset{
|
5
|
+
width: 350px;
|
6
|
+
margin: 30px auto;
|
7
|
+
}
|
8
|
+
}
|
9
|
+
|
10
|
+
.aside-mentions-list{
|
11
|
+
.fa{
|
12
|
+
color: rgba(0,0,0,0.3);
|
13
|
+
}
|
14
|
+
|
15
|
+
.mention-item{
|
16
|
+
.text{
|
17
|
+
padding-bottom: 15px;
|
18
|
+
margin-bottom: 15px;
|
19
|
+
border-bottom: 1px dashed #aeaeae;
|
20
|
+
height: 56px;
|
21
|
+
}
|
22
|
+
}
|
23
|
+
.username{
|
24
|
+
color: $success-color;
|
25
|
+
margin-right: 7px;
|
26
|
+
}
|
27
|
+
time{
|
28
|
+
color: #777;
|
29
|
+
}
|
30
|
+
}
|
@@ -0,0 +1,26 @@
|
|
1
|
+
.aside-news-list{
|
2
|
+
.news-item{
|
3
|
+
&:last-of-type .list-group-item-text{
|
4
|
+
border-bottom: none;
|
5
|
+
padding-bottom: 0;
|
6
|
+
margin-bottom: 0;
|
7
|
+
}
|
8
|
+
}
|
9
|
+
|
10
|
+
.list-group-item-text{
|
11
|
+
padding-bottom: 15px;
|
12
|
+
margin-bottom: 15px;
|
13
|
+
border-bottom: 1px dashed #888888;
|
14
|
+
}
|
15
|
+
|
16
|
+
.list-group-item-heading {
|
17
|
+
margin-top: 8px;
|
18
|
+
margin-bottom: 5px;
|
19
|
+
}
|
20
|
+
|
21
|
+
&.list-group .list-group-item .list-group-item-heading {
|
22
|
+
color: rgba(0, 0, 0, 0.77);
|
23
|
+
font-size: 18px;
|
24
|
+
line-height: 22px;
|
25
|
+
}
|
26
|
+
}
|
data/config/locales/rcms.ru.yml
CHANGED
@@ -3,6 +3,15 @@ ru:
|
|
3
3
|
none: 1
|
4
4
|
page:
|
5
5
|
not_found: Информационная страничка "%{slug}" не найдена.
|
6
|
+
feedback:
|
7
|
+
subject: "Обратная связь для %{contact}"
|
8
|
+
created: "Запрос отправлен"
|
9
|
+
news:
|
10
|
+
index_title: Новости
|
11
|
+
mentions:
|
12
|
+
created: Спасибо за Ваш отзыв
|
13
|
+
index_title: Все отзывы
|
14
|
+
|
6
15
|
activerecord:
|
7
16
|
models:
|
8
17
|
rcms/page:
|
@@ -11,6 +20,12 @@ ru:
|
|
11
20
|
many: Страниц
|
12
21
|
other: Страницы
|
13
22
|
|
23
|
+
rcms/mention:
|
24
|
+
one: Отзыв
|
25
|
+
few: Отзывов
|
26
|
+
many: Отзывы
|
27
|
+
other: Отзывы
|
28
|
+
|
14
29
|
rcms/partial:
|
15
30
|
one: Текст
|
16
31
|
few: Текса
|
@@ -28,22 +43,54 @@ ru:
|
|
28
43
|
many: Мета тегов
|
29
44
|
other: Мета теги
|
30
45
|
|
46
|
+
rcms/news:
|
47
|
+
one: Новость
|
48
|
+
few: Новостей
|
49
|
+
many: Новости
|
50
|
+
other: Новости
|
51
|
+
|
31
52
|
attributes:
|
53
|
+
rcms/mention:
|
54
|
+
updated_at: Редактировано
|
55
|
+
created_at: Создано
|
56
|
+
text: Отзыв
|
57
|
+
username: Имя
|
58
|
+
email: E-mail
|
59
|
+
is_published: Опубликован
|
60
|
+
|
61
|
+
|
62
|
+
rcms/news:
|
63
|
+
title: Заголовок
|
64
|
+
image: Файл изображения
|
65
|
+
remote_image_url: URL изображения
|
66
|
+
remote_image_url_hint: для загрузки из сети
|
67
|
+
slug: Url-ключ
|
68
|
+
description: Краткое описание
|
69
|
+
description_hint: будет в списках новостей вместо обрезанного поля "текст"
|
70
|
+
is_published: Опубликовано
|
71
|
+
text: Текст
|
72
|
+
slug_hint: "Url новости: %{path}"
|
73
|
+
updated_at: Редактировано
|
74
|
+
created_at: Создано
|
75
|
+
|
32
76
|
rcms/page:
|
33
77
|
title: Заголовок
|
34
78
|
slug: Url-ключ
|
35
79
|
text: Текст
|
36
80
|
slug_hint: "Url странички: %{path}"
|
37
81
|
updated_at: Редактировано
|
82
|
+
created_at: Создано
|
38
83
|
rcms/partial:
|
39
84
|
placement: Разположение
|
40
85
|
description: Описание (для админа)
|
41
86
|
text: Текст
|
87
|
+
created_at: Создано
|
42
88
|
updated_at: Редактировано
|
43
89
|
rcms/meta_page:
|
44
90
|
path: Путь
|
45
91
|
path_hint: например "/p-some-product-name"
|
46
92
|
meta_tags: Мета теги
|
93
|
+
created_at: Создано
|
47
94
|
updated_at: Редактировано
|
48
95
|
rcms/meta_tag:
|
49
96
|
key: Название тега
|
@@ -0,0 +1,25 @@
|
|
1
|
+
class RcmsFeedbackGenerator < Rails::Generators::Base
|
2
|
+
source_root File.expand_path("../templates_feedback", __FILE__)
|
3
|
+
|
4
|
+
def create_all_files
|
5
|
+
%w(feedbacks_controller.rb).each do |name|
|
6
|
+
copy_file "app/controllers/rcms/#{name}"
|
7
|
+
end
|
8
|
+
|
9
|
+
%w(feedback_mailer.rb).each do |name|
|
10
|
+
copy_file "app/mailers/#{name}"
|
11
|
+
end
|
12
|
+
|
13
|
+
%w(feedback.rb).each do |name|
|
14
|
+
copy_file "app/models/rcms/#{name}"
|
15
|
+
end
|
16
|
+
|
17
|
+
%w(feedback.html.slim plain.html.slim _form.html.slim).each do |name|
|
18
|
+
copy_file "app/views/feedback_mailer/#{name}"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def patch_routes
|
23
|
+
insert_into_file "config/routes.rb", " post 'rcms/feedbacks' => 'rcms/feedbacks#create', as: :rcms_feedbacks\n", :after => "Rails.application.routes.draw do\n"
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
class RcmsMentionsGenerator < Rails::Generators::Base
|
2
|
+
source_root File.expand_path("../templates_mentions", __FILE__)
|
3
|
+
include Rails::Generators::Migration
|
4
|
+
|
5
|
+
def self.next_migration_number(dirname)
|
6
|
+
Time.now.strftime("%Y%m%d%H%M%S")
|
7
|
+
end
|
8
|
+
|
9
|
+
def create_cmshelper_migration
|
10
|
+
migration_template "migration.rb", File.join('db/migrate', "create_rcms_mentions_tables.rb")
|
11
|
+
end
|
12
|
+
|
13
|
+
def create_all_files
|
14
|
+
Rails.cache.clear
|
15
|
+
|
16
|
+
%w(mention.rb).each do |name|
|
17
|
+
copy_file "app/admin/rcms/#{name}"
|
18
|
+
end
|
19
|
+
|
20
|
+
%w(mentions_controller.rb).each do |name|
|
21
|
+
copy_file "app/controllers/rcms/#{name}"
|
22
|
+
end
|
23
|
+
|
24
|
+
%w(mention.rb).each do |name|
|
25
|
+
copy_file "app/models/rcms/#{name}"
|
26
|
+
end
|
27
|
+
|
28
|
+
%w(_dialog.html.slim _preview.html.slim).each do |name|
|
29
|
+
copy_file "app/views/rcms/mentions/#{name}"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def patch_routes
|
34
|
+
insert_into_file "config/routes.rb",
|
35
|
+
" get 'mentions' => 'rcms/mentions#index', as: :rcms_mentions\n post 'mentions' => 'rcms/mentions#create'\n",
|
36
|
+
:after => "Rails.application.routes.draw do\n"
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
class RcmsNewsGenerator < Rails::Generators::Base
|
2
|
+
source_root File.expand_path("../templates_news", __FILE__)
|
3
|
+
include Rails::Generators::Migration
|
4
|
+
|
5
|
+
def self.next_migration_number(dirname)
|
6
|
+
Time.now.strftime("%Y%m%d%H%M%S")
|
7
|
+
end
|
8
|
+
|
9
|
+
def create_cmshelper_migration
|
10
|
+
migration_template "migration.rb", File.join('db/migrate', "create_rcms_news_tables.rb")
|
11
|
+
end
|
12
|
+
|
13
|
+
def create_all_files
|
14
|
+
Rails.cache.clear
|
15
|
+
|
16
|
+
%w(news.rb).each do |name|
|
17
|
+
copy_file "app/admin/rcms/#{name}"
|
18
|
+
end
|
19
|
+
|
20
|
+
%w(news_controller.rb).each do |name|
|
21
|
+
copy_file "app/controllers/rcms/#{name}"
|
22
|
+
end
|
23
|
+
|
24
|
+
%w(news.rb).each do |name|
|
25
|
+
copy_file "app/models/rcms/#{name}"
|
26
|
+
end
|
27
|
+
|
28
|
+
%w(news_image_uploader.rb).each do |name|
|
29
|
+
copy_file "app/uploaders/rcms/#{name}"
|
30
|
+
end
|
31
|
+
|
32
|
+
%w(_menu.html.slim index.html.slim show.html.slim).each do |name|
|
33
|
+
copy_file "app/views/rcms/news/#{name}"
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def patch_routes
|
38
|
+
insert_into_file "config/routes.rb", " get 'news' => 'rcms/news#index', as: :rcms_news\n get 'news-:slug' => 'rcms/news#show', as: :rcms_new\n", :after => "Rails.application.routes.draw do\n"
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
class Rcms::FeedbacksController < ApplicationController
|
2
|
+
def create
|
3
|
+
@feedback = Feedback.new( params.require(:rcms_feedback).permit(:username, :feedback_type, :text, :phone) )
|
4
|
+
if @feedback.valid?
|
5
|
+
FeedbackMailer.feedback(@feedback).deliver_now
|
6
|
+
flash[:success] = t('rcms.feedback.created')
|
7
|
+
redirect_to root_path
|
8
|
+
else
|
9
|
+
render :create
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
File without changes
|
@@ -0,0 +1,13 @@
|
|
1
|
+
class FeedbackMailer < ActionMailer::Base
|
2
|
+
def feedback(feedback)
|
3
|
+
@feedback = feedback
|
4
|
+
admin_emails = AdminUser.pluck(:email)
|
5
|
+
mail(to: admin_emails, subject: @feedback.subject)
|
6
|
+
end
|
7
|
+
|
8
|
+
def plain(text)
|
9
|
+
@text = text
|
10
|
+
admin_emails = AdminUser.pluck(:email)
|
11
|
+
mail(to: admin_emails, subject: text)
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
class Rcms::Feedback
|
2
|
+
include ActiveModel::Validations
|
3
|
+
include ActiveModel::Conversion
|
4
|
+
extend ActiveModel::Naming
|
5
|
+
|
6
|
+
attr_accessor :username
|
7
|
+
attr_accessor :feedback_type
|
8
|
+
attr_accessor :phone
|
9
|
+
attr_accessor :text
|
10
|
+
attr_accessor :email
|
11
|
+
|
12
|
+
validates_presence_of :phone
|
13
|
+
|
14
|
+
def subject
|
15
|
+
I18n.t('rcms.feedback.subject', contact: (phone||email))
|
16
|
+
end
|
17
|
+
|
18
|
+
def initialize(attributes = {})
|
19
|
+
attributes.each do |name, value|
|
20
|
+
send("#{name}=", value)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def persisted?
|
25
|
+
false
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
@@ -0,0 +1,10 @@
|
|
1
|
+
- feedback = @feedback || Rcms::Feedback.new(feedback_type: 'Позвоните мне')
|
2
|
+
= simple_form_for feedback, url: rcms_feedbacks_path do |f|
|
3
|
+
.hide
|
4
|
+
= f.input_field :feedback_type
|
5
|
+
.form-group
|
6
|
+
= f.input_field :username, placeholder: 'имя', required: true, class: 'form-control'
|
7
|
+
.clearfix
|
8
|
+
= f.input_field :phone, placeholder: 'номер телефона', required: true, class: 'form-control'
|
9
|
+
.clearfix
|
10
|
+
button.btn.btn-primary.btn-sm.pull-right Позвоните мне
|
@@ -0,0 +1 @@
|
|
1
|
+
== @text
|
@@ -0,0 +1,15 @@
|
|
1
|
+
ActiveAdmin.register Rcms::Mention do
|
2
|
+
# include AdminRedirects
|
3
|
+
|
4
|
+
permit_params :username, :text, :email, :is_published
|
5
|
+
|
6
|
+
form do |f|
|
7
|
+
f.inputs do
|
8
|
+
f.input :username
|
9
|
+
f.input :email
|
10
|
+
f.input :is_published
|
11
|
+
f.input :text
|
12
|
+
end
|
13
|
+
f.actions
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
class Rcms::MentionsController < ApplicationController
|
2
|
+
def index
|
3
|
+
@news = Rcms::News.all.page(params[:page]).per(10)
|
4
|
+
apply_meta_tags title: t('rcms.mentions.index_title')
|
5
|
+
end
|
6
|
+
|
7
|
+
def create
|
8
|
+
@mention = Rcms::Mention.new mention_params
|
9
|
+
|
10
|
+
@mention.is_published = true
|
11
|
+
if @mention.save
|
12
|
+
redirect_to after_create_path(@mention), flash: {success: t('rcms.mentions.created')}
|
13
|
+
else
|
14
|
+
render :create
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def after_create_path mention
|
19
|
+
root_path
|
20
|
+
end
|
21
|
+
|
22
|
+
protected
|
23
|
+
def mention_params
|
24
|
+
params.require(:rcms_mention).permit(:username, :email, :text)
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
class Rcms::Mention < ActiveRecord::Base
|
2
|
+
self.table_name = 'rcms_mentions'
|
3
|
+
|
4
|
+
scope :frontend, -> {where(is_published: true).order('id desc')}
|
5
|
+
scope :preview, -> {frontend.limit(4)}
|
6
|
+
|
7
|
+
validates_presence_of :username, :text
|
8
|
+
|
9
|
+
def get_short_desc l = 110
|
10
|
+
truncate(text, l)
|
11
|
+
end
|
12
|
+
|
13
|
+
def truncate text, l = 110
|
14
|
+
return nil if text.nil?
|
15
|
+
text = ActionView::Base.full_sanitizer.sanitize(text)
|
16
|
+
text.length > l ? text.truncate(l) : text
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
@@ -0,0 +1,17 @@
|
|
1
|
+
.modal#new-mention-dialog.rcms-mention-form
|
2
|
+
= simple_form_for @mention||Rcms::Mention.new, url: rcms_mentions_path do |f|
|
3
|
+
.modal-dialog
|
4
|
+
.modal-content
|
5
|
+
.modal-header
|
6
|
+
button.close aria-hidden="true" data-dismiss="modal" type="button" ×
|
7
|
+
h4.modal-title Новый отзыв
|
8
|
+
.modal-body
|
9
|
+
fieldset
|
10
|
+
.form-group
|
11
|
+
= f.input_field :username, class: 'form-control', placeholder: "Ваше имя", required: true
|
12
|
+
.form-group
|
13
|
+
= f.input_field :text, class: 'form-control', placeholder: "Отзыв", required: true
|
14
|
+
|
15
|
+
.modal-footer
|
16
|
+
button.btn.btn-default data-dismiss="modal" type="button" Отмена
|
17
|
+
button.btn.btn-success type="submit" оставить отзыв
|
@@ -0,0 +1,15 @@
|
|
1
|
+
.aside-mentions-list.row
|
2
|
+
- @mentions_preview.each do |mention|
|
3
|
+
.col-xs-6.mention-item
|
4
|
+
/.pull-left
|
5
|
+
i.fa.fa-quote-left
|
6
|
+
.pull-right
|
7
|
+
i.fa.fa-quote-right
|
8
|
+
span.username
|
9
|
+
= mention.username
|
10
|
+
time.small
|
11
|
+
= l(mention.created_at, format: :short)
|
12
|
+
.clearfix
|
13
|
+
.text
|
14
|
+
span.small
|
15
|
+
= mention.get_short_desc 120
|
@@ -0,0 +1,16 @@
|
|
1
|
+
class CreateRcmsMentionsTables < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
create_table :rcms_mentions do |t|
|
4
|
+
t.string :username
|
5
|
+
t.string :email
|
6
|
+
t.boolean :is_published
|
7
|
+
t.text :text
|
8
|
+
|
9
|
+
t.timestamps
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.down
|
14
|
+
drop_table :rcms_mentions
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
ActiveAdmin.register Rcms::News do
|
2
|
+
# include AdminRedirects
|
3
|
+
|
4
|
+
permit_params :slug, :title, :text, :image, :image_cache, :remote_image_url, :is_published, :description
|
5
|
+
|
6
|
+
form do |f|
|
7
|
+
f.inputs do
|
8
|
+
f.input :title
|
9
|
+
|
10
|
+
f.input :remote_image_url, as: :string, hint: t("activerecord.attributes.rcms/news.remote_image_url_hint")
|
11
|
+
f.input :image, as: :file, :hint => f.object.image.default? ? '' : "<img src='#{f.object.image.url(:list)}' />".html_safe
|
12
|
+
|
13
|
+
f.input :image_cache, as: :hidden
|
14
|
+
f.input :is_published
|
15
|
+
|
16
|
+
f.input :slug, hint: f.object.persisted? ? (t("activerecord.attributes.rcms/news.slug_hint", path: rcms_new_path(f.object))) : nil
|
17
|
+
f.input :description, hint: t("activerecord.attributes.rcms/news.description_hint")
|
18
|
+
f.inputs t("activerecord.attributes.rcms/page.text") do
|
19
|
+
f.cktext_area :text
|
20
|
+
end
|
21
|
+
end
|
22
|
+
f.actions
|
23
|
+
end
|
24
|
+
|
25
|
+
index do
|
26
|
+
selectable_column
|
27
|
+
column :id
|
28
|
+
column :image do |object|
|
29
|
+
"<img src='#{object.image.url(:list)}' height='40' />".html_safe
|
30
|
+
end
|
31
|
+
column :slug
|
32
|
+
column :title
|
33
|
+
column :updated_at
|
34
|
+
actions
|
35
|
+
end
|
36
|
+
|
37
|
+
filter :slug
|
38
|
+
filter :title
|
39
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
class Rcms::NewsController < ApplicationController
|
2
|
+
def index
|
3
|
+
@news = Rcms::News.all.page(params[:page]).per(10)
|
4
|
+
apply_meta_tags title: t('rcms.news.index_title')
|
5
|
+
end
|
6
|
+
|
7
|
+
def show
|
8
|
+
@news_article = retrieve slug_or_id
|
9
|
+
apply_meta_tags @news_article
|
10
|
+
end
|
11
|
+
|
12
|
+
def retrieve slug_or_id
|
13
|
+
Rcms::News.find slug_or_id
|
14
|
+
rescue
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
class Rcms::News < ActiveRecord::Base
|
2
|
+
self.table_name = 'rcms_news'
|
3
|
+
extend FriendlyId
|
4
|
+
friendly_id :title, use: [:slugged, :finders]
|
5
|
+
|
6
|
+
mount_uploader :image, Rcms::NewsImageUploader
|
7
|
+
|
8
|
+
scope :frontend, -> {where(is_published: true).order('id desc')}
|
9
|
+
scope :aside_menu, -> {frontend.limit(3)}
|
10
|
+
|
11
|
+
def get_short_desc l = 110
|
12
|
+
description.present? ? truncate(description, l) : truncate(text, l)
|
13
|
+
end
|
14
|
+
|
15
|
+
def truncate text, l = 110
|
16
|
+
return nil if text.nil?
|
17
|
+
text = ActionView::Base.full_sanitizer.sanitize(text)
|
18
|
+
text.length > l ? text.truncate(l) : text
|
19
|
+
end
|
20
|
+
|
21
|
+
protected
|
22
|
+
|
23
|
+
def should_generate_new_friendly_id?
|
24
|
+
!slug.present?
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
class Rcms::NewsImageUploader < CarrierWave::Uploader::Base
|
4
|
+
|
5
|
+
# Include RMagick or MiniMagick support:
|
6
|
+
include CarrierWave::RMagick
|
7
|
+
# include CarrierWave::MiniMagick
|
8
|
+
|
9
|
+
# Choose what kind of storage to use for this uploader:
|
10
|
+
storage :file
|
11
|
+
# storage :fog
|
12
|
+
|
13
|
+
def store_dir
|
14
|
+
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
|
15
|
+
end
|
16
|
+
|
17
|
+
def default_url
|
18
|
+
# For Rails 3.1+ asset pipeline compatibility:
|
19
|
+
# ActionController::Base.helpers.asset_path("images/#{fallback_dir}/" + [version_name, "default.png"].compact.join('_'))
|
20
|
+
ActionController::Base.helpers.asset_path("default.jpg")
|
21
|
+
end
|
22
|
+
|
23
|
+
def set_filename(name)
|
24
|
+
@filename = name
|
25
|
+
end
|
26
|
+
|
27
|
+
def extension_white_list
|
28
|
+
%w(jpg jpeg png bmp)
|
29
|
+
end
|
30
|
+
|
31
|
+
def default?
|
32
|
+
url == default_url
|
33
|
+
end
|
34
|
+
|
35
|
+
version :list do
|
36
|
+
process :resize_to_limit => [100, 100]
|
37
|
+
end
|
38
|
+
|
39
|
+
version :show do
|
40
|
+
process :resize_to_limit => [200, 200]
|
41
|
+
end
|
42
|
+
|
43
|
+
protected
|
44
|
+
|
45
|
+
def fallback_dir
|
46
|
+
model.class.to_s.underscore
|
47
|
+
end
|
48
|
+
end
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1,19 @@
|
|
1
|
+
class CreateRcmsNewsTables < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
create_table :rcms_news do |t|
|
4
|
+
t.string :image
|
5
|
+
t.string :title
|
6
|
+
t.string :description
|
7
|
+
t.string :slug
|
8
|
+
t.boolean :is_published
|
9
|
+
t.text :text
|
10
|
+
|
11
|
+
t.timestamps
|
12
|
+
end
|
13
|
+
add_index :rcms_news, :slug, unique: true
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.down
|
17
|
+
drop_table :rcms_news
|
18
|
+
end
|
19
|
+
end
|
data/lib/rcms/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rcms
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ruslan.palagin
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-10-
|
11
|
+
date: 2015-10-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -57,10 +57,15 @@ files:
|
|
57
57
|
- LICENSE.txt
|
58
58
|
- README.md
|
59
59
|
- Rakefile
|
60
|
+
- app/assets/stylesheets/rcms/mentions.scss
|
61
|
+
- app/assets/stylesheets/rcms/news.scss
|
60
62
|
- bin/console
|
61
63
|
- bin/setup
|
62
64
|
- config/locales/rcms.ru.yml
|
65
|
+
- lib/generators/rcms_feedback_generator.rb
|
63
66
|
- lib/generators/rcms_generator.rb
|
67
|
+
- lib/generators/rcms_mentions_generator.rb
|
68
|
+
- lib/generators/rcms_news_generator.rb
|
64
69
|
- lib/generators/templates/app/admin/rcms/meta_page.rb
|
65
70
|
- lib/generators/templates/app/admin/rcms/page.rb
|
66
71
|
- lib/generators/templates/app/admin/rcms/partial.rb
|
@@ -71,6 +76,27 @@ files:
|
|
71
76
|
- lib/generators/templates/app/models/rcms/partial.rb
|
72
77
|
- lib/generators/templates/app/views/rcms/pages/show.html.slim
|
73
78
|
- lib/generators/templates/migration.rb
|
79
|
+
- lib/generators/templates_feedback/app/controllers/rcms/feedbacks_controller.rb
|
80
|
+
- lib/generators/templates_feedback/app/mailers/.keep
|
81
|
+
- lib/generators/templates_feedback/app/mailers/feedback_mailer.rb
|
82
|
+
- lib/generators/templates_feedback/app/models/rcms/feedback.rb
|
83
|
+
- lib/generators/templates_feedback/app/views/feedback_mailer/_form.html.slim
|
84
|
+
- lib/generators/templates_feedback/app/views/feedback_mailer/feedback.html.slim
|
85
|
+
- lib/generators/templates_feedback/app/views/feedback_mailer/plain.html.slim
|
86
|
+
- lib/generators/templates_mentions/app/admin/rcms/mention.rb
|
87
|
+
- lib/generators/templates_mentions/app/controllers/rcms/mentions_controller.rb
|
88
|
+
- lib/generators/templates_mentions/app/models/rcms/mention.rb
|
89
|
+
- lib/generators/templates_mentions/app/views/rcms/mentions/_dialog.html.slim
|
90
|
+
- lib/generators/templates_mentions/app/views/rcms/mentions/_preview.html.slim
|
91
|
+
- lib/generators/templates_mentions/migration.rb
|
92
|
+
- lib/generators/templates_news/app/admin/rcms/news.rb
|
93
|
+
- lib/generators/templates_news/app/controllers/rcms/news_controller.rb
|
94
|
+
- lib/generators/templates_news/app/models/rcms/news.rb
|
95
|
+
- lib/generators/templates_news/app/uploaders/rcms/news_image_uploader.rb
|
96
|
+
- lib/generators/templates_news/app/views/rcms/news/_menu.html.slim
|
97
|
+
- lib/generators/templates_news/app/views/rcms/news/index.html.slim
|
98
|
+
- lib/generators/templates_news/app/views/rcms/news/show.html.slim
|
99
|
+
- lib/generators/templates_news/migration.rb
|
74
100
|
- lib/rcms.rb
|
75
101
|
- lib/rcms/application_controller.rb
|
76
102
|
- lib/rcms/router.rb
|