ack_rocket_cms 0.7.2.1
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 +7 -0
- data/.gitignore +21 -0
- data/.rspec +1 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/.travis.yml +19 -0
- data/Gemfile +5 -0
- data/Gemfile.lock +244 -0
- data/LICENSE.txt +22 -0
- data/README.md +74 -0
- data/Rakefile +1 -0
- data/app/assets/javascripts/head.load.js +707 -0
- data/app/assets/javascripts/jquery.placeholder.js +157 -0
- data/app/assets/javascripts/rocket_cms.js.coffee +10 -0
- data/app/assets/javascripts/rocket_cms/flash.js.coffee +3 -0
- data/app/assets/javascripts/rocket_cms/map.js.coffee +22 -0
- data/app/assets/stylesheets/rocket_cms.css.sass +6 -0
- data/app/assets/stylesheets/rocket_cms/flash.css.sass +66 -0
- data/app/assets/stylesheets/rocket_cms/normalize.css.scss +406 -0
- data/app/controllers/concerns/no_cache.rb +12 -0
- data/app/controllers/concerns/rs_errors.rb +63 -0
- data/app/controllers/concerns/rs_menu.rb +45 -0
- data/app/controllers/concerns/rs_pages.rb +41 -0
- data/app/controllers/contacts_controller.rb +3 -0
- data/app/controllers/home_controller.rb +5 -0
- data/app/controllers/news_controller.rb +3 -0
- data/app/controllers/pages_controller.rb +4 -0
- data/app/controllers/search_controller.rb +4 -0
- data/app/mailers/contact_mailer.rb +15 -0
- data/app/models/concerns/boolean_field.rb +17 -0
- data/app/models/concerns/enableable.rb +8 -0
- data/app/models/concerns/geocodeable.rb +4 -0
- data/app/models/concerns/mappable.rb +95 -0
- data/app/models/concerns/seoable.rb +42 -0
- data/app/models/concerns/sitemap_data.rb +20 -0
- data/app/models/concerns/sort_field.rb +17 -0
- data/app/models/concerns/sortable.rb +8 -0
- data/app/models/contact_message.rb +11 -0
- data/app/models/menu.rb +11 -0
- data/app/models/news.rb +10 -0
- data/app/models/page.rb +11 -0
- data/app/views/blocks/_footer.html.haml +1 -0
- data/app/views/contact_mailer/new_message_email.html.haml +16 -0
- data/app/views/contacts/index.html.haml +10 -0
- data/app/views/contacts/new.html.haml +10 -0
- data/app/views/contacts/sent.html.haml +4 -0
- data/app/views/errors/_base.html.haml +3 -0
- data/app/views/errors/error_403.html.haml +1 -0
- data/app/views/errors/error_404.html.haml +1 -0
- data/app/views/errors/error_500.html.haml +1 -0
- data/app/views/home/index.html.haml +1 -0
- data/app/views/layouts/application.html.haml +23 -0
- data/app/views/layouts/application.html.slim +24 -0
- data/app/views/news/index.html.haml +9 -0
- data/app/views/news/show.html.haml +8 -0
- data/app/views/pages/show.html.haml +1 -0
- data/app/views/rails_admin/main/_check_boxes.html.haml +27 -0
- data/app/views/rails_admin/main/_enum_check_boxes.html.haml +5 -0
- data/app/views/rails_admin/main/_enum_radio_buttons.html.haml +5 -0
- data/app/views/rails_admin/main/_form_raw.html.haml +1 -0
- data/app/views/search/index.html.haml +19 -0
- data/app/views/shared/_admin_link.html.haml +3 -0
- data/app/views/shared/_messages.html.haml +7 -0
- data/app/views/shared/_meta.html.haml +6 -0
- data/app/views/shared/_obj.html.haml +20 -0
- data/app/views/shared/_og.html.haml +4 -0
- data/config/locales/en.rocket_admin.yml +6 -0
- data/config/locales/en.rs.yml +20 -0
- data/config/locales/ru.cancan.yml +4 -0
- data/config/locales/ru.devise.yml +65 -0
- data/config/locales/ru.kaminari.yml +17 -0
- data/config/locales/ru.models.yml +92 -0
- data/config/locales/ru.mongoid.yml +450 -0
- data/config/locales/ru.rails_admin.yml +148 -0
- data/config/locales/ru.rocket_admin.yml +6 -0
- data/config/locales/ru.rs.yml +20 -0
- data/config/locales/ru.simple_captcha.yml +3 -0
- data/config/locales/ru.simple_form.yml +9 -0
- data/lib/filename_to_slug.rb +34 -0
- data/lib/generators/rocket_cms/ability_generator.rb +15 -0
- data/lib/generators/rocket_cms/admin_generator.rb +21 -0
- data/lib/generators/rocket_cms/capify_generator.rb +40 -0
- data/lib/generators/rocket_cms/layout_generator.rb +15 -0
- data/lib/generators/rocket_cms/migration_generator.rb +19 -0
- data/lib/generators/rocket_cms/templates/Capfile +17 -0
- data/lib/generators/rocket_cms/templates/ability.erb +28 -0
- data/lib/generators/rocket_cms/templates/admin.erb +81 -0
- data/lib/generators/rocket_cms/templates/deploy.erb +47 -0
- data/lib/generators/rocket_cms/templates/dl.erb +30 -0
- data/lib/generators/rocket_cms/templates/migration_contact_messages.rb +15 -0
- data/lib/generators/rocket_cms/templates/migration_news.rb +21 -0
- data/lib/generators/rocket_cms/templates/migration_pages.rb +36 -0
- data/lib/generators/rocket_cms/templates/production.erb +8 -0
- data/lib/generators/rocket_cms/templates/unicorn.erb +66 -0
- data/lib/generators/rocket_cms/utils.rb +22 -0
- data/lib/manual_slug.rb +11 -0
- data/lib/manual_slug/active_record.rb +32 -0
- data/lib/manual_slug/mongoid.rb +36 -0
- data/lib/rails_admin/custom_show_in_app.rb +39 -0
- data/lib/rocket_cms.rb +88 -0
- data/lib/rocket_cms/admin.rb +152 -0
- data/lib/rocket_cms/configuration.rb +67 -0
- data/lib/rocket_cms/controller.rb +24 -0
- data/lib/rocket_cms/controllers/contacts.rb +70 -0
- data/lib/rocket_cms/controllers/news.rb +31 -0
- data/lib/rocket_cms/controllers/pages.rb +19 -0
- data/lib/rocket_cms/controllers/search.rb +45 -0
- data/lib/rocket_cms/elastic_search.rb +31 -0
- data/lib/rocket_cms/engine.rb +39 -0
- data/lib/rocket_cms/migration.rb +31 -0
- data/lib/rocket_cms/model.rb +25 -0
- data/lib/rocket_cms/models/active_record/contact_message.rb +14 -0
- data/lib/rocket_cms/models/active_record/menu.rb +14 -0
- data/lib/rocket_cms/models/active_record/news.rb +23 -0
- data/lib/rocket_cms/models/active_record/page.rb +17 -0
- data/lib/rocket_cms/models/contact_message.rb +27 -0
- data/lib/rocket_cms/models/menu.rb +29 -0
- data/lib/rocket_cms/models/mongoid/contact_message.rb +20 -0
- data/lib/rocket_cms/models/mongoid/menu.rb +12 -0
- data/lib/rocket_cms/models/mongoid/news.rb +27 -0
- data/lib/rocket_cms/models/mongoid/page.rb +26 -0
- data/lib/rocket_cms/models/news.rb +50 -0
- data/lib/rocket_cms/models/page.rb +76 -0
- data/lib/rocket_cms/patch.rb +58 -0
- data/lib/rocket_cms/rails_admin_menu.rb +145 -0
- data/lib/rocket_cms/simple_form_patch.rb +12 -0
- data/lib/rocket_cms/tasks.rb +13 -0
- data/lib/rocket_cms/version.rb +3 -0
- data/release.sh +13 -0
- data/rocket_cms.gemspec +54 -0
- data/template.rb +557 -0
- metadata +533 -0
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
module RocketCMS
|
|
2
|
+
def self.configuration
|
|
3
|
+
@configuration ||= Configuration.new
|
|
4
|
+
end
|
|
5
|
+
def self.config
|
|
6
|
+
@configuration ||= Configuration.new
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def self.configure
|
|
10
|
+
yield configuration
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
class Configuration
|
|
14
|
+
attr_accessor :news_image_styles
|
|
15
|
+
attr_accessor :news_per_page
|
|
16
|
+
attr_accessor :news_excerpt
|
|
17
|
+
|
|
18
|
+
attr_accessor :error_layout
|
|
19
|
+
attr_accessor :menu_max_depth
|
|
20
|
+
|
|
21
|
+
attr_accessor :search_enabled
|
|
22
|
+
attr_accessor :search_per_page
|
|
23
|
+
attr_accessor :search_models
|
|
24
|
+
|
|
25
|
+
attr_accessor :contacts_captcha
|
|
26
|
+
attr_accessor :contacts_fields
|
|
27
|
+
attr_accessor :contacts_message_required
|
|
28
|
+
attr_accessor :contacts_captcha_error_message
|
|
29
|
+
|
|
30
|
+
attr_accessor :localize
|
|
31
|
+
|
|
32
|
+
attr_accessor :recreate_contact_message_action
|
|
33
|
+
|
|
34
|
+
def initialize
|
|
35
|
+
@news_image_styles = {
|
|
36
|
+
main: '400x200>',
|
|
37
|
+
thumb: '200x100>',
|
|
38
|
+
}
|
|
39
|
+
@news_per_page = 10
|
|
40
|
+
@news_excerpt = 12
|
|
41
|
+
|
|
42
|
+
@error_layout = 'application'
|
|
43
|
+
@menu_max_depth = 2
|
|
44
|
+
|
|
45
|
+
@search_enabled = false
|
|
46
|
+
@search_per_page = 10
|
|
47
|
+
@search_models = []
|
|
48
|
+
|
|
49
|
+
@contacts_captcha = false
|
|
50
|
+
@contacts_fields = {}
|
|
51
|
+
@contacts_message_required = true
|
|
52
|
+
|
|
53
|
+
@contacts_captcha_error_message = "Код проверки введен неверно"
|
|
54
|
+
@recreate_contact_message_action = "new"
|
|
55
|
+
|
|
56
|
+
@localize = false
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def search_enabled=(val)
|
|
60
|
+
@search_enabled = val
|
|
61
|
+
if @search_enabled
|
|
62
|
+
@search_models << 'Page'
|
|
63
|
+
@search_models << 'News'
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
module RocketCMS::Controller
|
|
2
|
+
extend ActiveSupport::Concern
|
|
3
|
+
included do
|
|
4
|
+
include RsErrors
|
|
5
|
+
include RsPages
|
|
6
|
+
include RsMenu
|
|
7
|
+
protect_from_forgery with: :exception
|
|
8
|
+
helper_method :page_title
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
protected
|
|
12
|
+
|
|
13
|
+
def page_title
|
|
14
|
+
if @seo_page.nil?
|
|
15
|
+
Settings ? Settings.default_title : "" #temp
|
|
16
|
+
else
|
|
17
|
+
@seo_page.page_title
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def ckeditor_authenticate
|
|
22
|
+
redirect_to '/' unless user_signed_in? && current_user.has_role?('admin')
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
module RocketCMS
|
|
2
|
+
module Controllers
|
|
3
|
+
module Contacts
|
|
4
|
+
extend ActiveSupport::Concern
|
|
5
|
+
def index
|
|
6
|
+
@contact_message = ContactMessage.new
|
|
7
|
+
after_initialize
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def new
|
|
11
|
+
@contact_message = model.new
|
|
12
|
+
after_initialize
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def create
|
|
16
|
+
@contact_message = model.new(message_params)
|
|
17
|
+
after_initialize
|
|
18
|
+
if RocketCMS.configuration.contacts_captcha
|
|
19
|
+
meth = :save_with_captcha
|
|
20
|
+
else
|
|
21
|
+
meth = :save
|
|
22
|
+
end
|
|
23
|
+
if @contact_message.send(meth)
|
|
24
|
+
after_create
|
|
25
|
+
if request.xhr? && process_ajax
|
|
26
|
+
ajax_success
|
|
27
|
+
else
|
|
28
|
+
redirect_after_done
|
|
29
|
+
end
|
|
30
|
+
else
|
|
31
|
+
render_error
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def sent
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
private
|
|
39
|
+
def render_error
|
|
40
|
+
if request.xhr? && process_ajax
|
|
41
|
+
render json: {errors: @contact_message.errors}, status: 422
|
|
42
|
+
else
|
|
43
|
+
flash.now[:alert] = @contact_message.errors.full_messages.join("\n")
|
|
44
|
+
render action: RocketCMS.configuration.recreate_contact_message_action, status: 422
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
def process_ajax
|
|
48
|
+
true
|
|
49
|
+
end
|
|
50
|
+
def ajax_success
|
|
51
|
+
render json: {ok: true}
|
|
52
|
+
end
|
|
53
|
+
def redirect_after_done
|
|
54
|
+
redirect_to :contacts_sent
|
|
55
|
+
end
|
|
56
|
+
def after_initialize
|
|
57
|
+
# overrideable hook for updating message
|
|
58
|
+
end
|
|
59
|
+
def after_create
|
|
60
|
+
# overrideable hook for updating message
|
|
61
|
+
end
|
|
62
|
+
def model
|
|
63
|
+
ContactMessage
|
|
64
|
+
end
|
|
65
|
+
def message_params
|
|
66
|
+
params.require(:contact_message).permit(RocketCMS.configuration.contacts_fields.keys + [:name, :email, :phone, :content, :captcha, :captcha_key])
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
module RocketCMS
|
|
2
|
+
module Controllers
|
|
3
|
+
module News
|
|
4
|
+
extend ActiveSupport::Concern
|
|
5
|
+
|
|
6
|
+
def index
|
|
7
|
+
@news = model.enabled.after_now.by_date
|
|
8
|
+
|
|
9
|
+
unless RocketCMS.configuration.news_per_page.nil?
|
|
10
|
+
@news = @news.page(params[:page])
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def show
|
|
15
|
+
@news = model.after_now.find(params[:id])
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
private
|
|
19
|
+
def model
|
|
20
|
+
::News
|
|
21
|
+
end
|
|
22
|
+
def page_title
|
|
23
|
+
if @news.class.name == model.name
|
|
24
|
+
@news.page_title
|
|
25
|
+
else
|
|
26
|
+
super
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module RocketCMS
|
|
2
|
+
module Controllers
|
|
3
|
+
module Pages
|
|
4
|
+
extend ActiveSupport::Concern
|
|
5
|
+
def show
|
|
6
|
+
if @seo_page.nil? || !@seo_page.persisted?
|
|
7
|
+
unless params[:id].blank?
|
|
8
|
+
@seo_page = Page.enabled.find(params[:id])
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
if @seo_page.nil?
|
|
12
|
+
render_404
|
|
13
|
+
return
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
module RocketCMS
|
|
2
|
+
module Controllers
|
|
3
|
+
module Search
|
|
4
|
+
extend ActiveSupport::Concern
|
|
5
|
+
# def index
|
|
6
|
+
# if params[:query].blank?
|
|
7
|
+
# @results = []
|
|
8
|
+
# else
|
|
9
|
+
# @results = Mongoid::Elasticsearch.search({
|
|
10
|
+
# body: {
|
|
11
|
+
# query: {
|
|
12
|
+
# query_string: {
|
|
13
|
+
# query: Mongoid::Elasticsearch::Utils.clean(params[:query])
|
|
14
|
+
# }
|
|
15
|
+
# },
|
|
16
|
+
# highlight: {
|
|
17
|
+
# fields: {
|
|
18
|
+
# name: {},
|
|
19
|
+
# content: {}
|
|
20
|
+
# }
|
|
21
|
+
# }
|
|
22
|
+
# }},
|
|
23
|
+
# page: params[:page],
|
|
24
|
+
# per_page: RocketCMS.configuration.search_per_page,
|
|
25
|
+
# )
|
|
26
|
+
# end
|
|
27
|
+
# end
|
|
28
|
+
|
|
29
|
+
def index
|
|
30
|
+
if params[:q].blank?
|
|
31
|
+
@results = []
|
|
32
|
+
else
|
|
33
|
+
query = params[:q].to_s.gsub(/\P{Word}+/, ' ').gsub(/ +/, ' ').strip
|
|
34
|
+
@results = Page.search(query,
|
|
35
|
+
per_page: 10,
|
|
36
|
+
highlight: true,
|
|
37
|
+
suggest: true,
|
|
38
|
+
page: params[:page],
|
|
39
|
+
per_page: RocketCMS.configuration.search_per_page
|
|
40
|
+
)
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
module RocketCMS::ElasticSearch
|
|
2
|
+
extend ActiveSupport::Concern
|
|
3
|
+
included do
|
|
4
|
+
searchkick(
|
|
5
|
+
language: "Russian",
|
|
6
|
+
suggest: ["name"],
|
|
7
|
+
settings: {
|
|
8
|
+
analysis: {
|
|
9
|
+
analyzer: {
|
|
10
|
+
default_index: {
|
|
11
|
+
type: "custom",
|
|
12
|
+
tokenizer: "standard",
|
|
13
|
+
filter: ["standard", "lowercase", "asciifolding", "searchkick_index_shingle", "searchkick_stemmer", "snowball"]
|
|
14
|
+
|
|
15
|
+
# https://github.com/imotov/elasticsearch-analysis-morphology
|
|
16
|
+
# filter: ["standard", "lowercase", "asciifolding", "searchkick_index_shingle", "searchkick_stemmer", "snowball", "russian_morphology", "english_morphology"]
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
def search_data
|
|
24
|
+
{
|
|
25
|
+
_id: _id,
|
|
26
|
+
name: name,
|
|
27
|
+
content: SmartExcerpt.strip_tags(content),
|
|
28
|
+
}
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
module RocketCMS
|
|
2
|
+
class Engine < ::Rails::Engine
|
|
3
|
+
rake_tasks do
|
|
4
|
+
require File.expand_path('../tasks', __FILE__)
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
initializer "rocket_cms.email_defaults" do
|
|
8
|
+
# Write default email settings to DB so they can be changed.
|
|
9
|
+
|
|
10
|
+
#temp
|
|
11
|
+
begin
|
|
12
|
+
if Settings.table_exists?
|
|
13
|
+
Settings.default_email_from(default: 'noreply@gpk-holding.ru')
|
|
14
|
+
Settings.form_email(default: 'admin@gpk-holding.ru')
|
|
15
|
+
Settings.email_topic(default: 'с сайта')
|
|
16
|
+
end
|
|
17
|
+
rescue
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
initializer 'rocket_cms.paperclip' do
|
|
22
|
+
require 'paperclip/style'
|
|
23
|
+
module ::Paperclip
|
|
24
|
+
class Style
|
|
25
|
+
alias_method :processor_options_without_auto_orient, :processor_options
|
|
26
|
+
def processor_options
|
|
27
|
+
processor_options_without_auto_orient.merge(auto_orient: false)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
config.after_initialize do
|
|
34
|
+
# trigger autoload so models are registered in Mongoid::Elasticearch
|
|
35
|
+
RocketCMS.configuration.search_models.map(&:constantize)
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
module RocketCMS
|
|
2
|
+
module Migration
|
|
3
|
+
extend self
|
|
4
|
+
|
|
5
|
+
def seo_fields(t)
|
|
6
|
+
t.string :name, null: false
|
|
7
|
+
t.string :h1
|
|
8
|
+
t.string :title
|
|
9
|
+
t.text :keywords
|
|
10
|
+
t.text :description
|
|
11
|
+
t.string :robots
|
|
12
|
+
t.string :og_title
|
|
13
|
+
t.attachment :og_image
|
|
14
|
+
|
|
15
|
+
#if RocketCMS.localize
|
|
16
|
+
#t.column :name_translations, 'hstore'
|
|
17
|
+
#t.column :name_translations, 'hstore'
|
|
18
|
+
#end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def map_fields(t)
|
|
22
|
+
t.text :address
|
|
23
|
+
t.text :map_address
|
|
24
|
+
t.text :map_hint
|
|
25
|
+
t.float :latitude
|
|
26
|
+
t.float :longitude
|
|
27
|
+
t.float :lat
|
|
28
|
+
t.float :lon
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
module RocketCMS
|
|
2
|
+
module Model
|
|
3
|
+
extend ActiveSupport::Concern
|
|
4
|
+
included do
|
|
5
|
+
if RocketCMS.mongoid?
|
|
6
|
+
include Mongoid::Document
|
|
7
|
+
include Mongoid::Timestamps::Short
|
|
8
|
+
end
|
|
9
|
+
include ActiveModel::ForbiddenAttributesProtection
|
|
10
|
+
include BooleanField
|
|
11
|
+
include SortField
|
|
12
|
+
|
|
13
|
+
if RocketCMS.mongoid?
|
|
14
|
+
include Mongoid::Paperclip
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
include SmartExcerpt
|
|
18
|
+
include SimpleCaptcha::ModelHelpers
|
|
19
|
+
|
|
20
|
+
if RocketCMS.mongoid? && defined?(Trackable)
|
|
21
|
+
include Trackable
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
module RocketCMS
|
|
2
|
+
module Models
|
|
3
|
+
module ActiveRecord
|
|
4
|
+
module News
|
|
5
|
+
extend ActiveSupport::Concern
|
|
6
|
+
included do
|
|
7
|
+
unless RocketCMS.configuration.news_image_styles.nil?
|
|
8
|
+
has_attached_file :image, styles: RocketCMS.configuration.news_image_styles
|
|
9
|
+
validates_attachment_content_type :image, content_type: %w(image/gif image/jpeg image/jpg image/png), if: :image?
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
has_paper_trail
|
|
13
|
+
|
|
14
|
+
validates_lengths_from_database only: [:name, :title, :content, :excerpt, :h1, :keywords, :robots, :og_title]
|
|
15
|
+
|
|
16
|
+
scope :after_now, -> { where("time < ?", Time.now) }
|
|
17
|
+
scope :by_date, -> { order(time: :desc) }
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|