ack_rocket_cms 0.7.7.1 → 0.8.0

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/Gemfile.lock +45 -45
  3. data/README.md +64 -5
  4. data/app/assets/javascripts/{rocket_cms.js.coffee → rocket_cms.coffee} +0 -3
  5. data/app/controllers/concerns/rs_errors.rb +8 -4
  6. data/app/controllers/concerns/rs_localizeable.rb +26 -0
  7. data/app/controllers/concerns/rs_menu.rb +9 -2
  8. data/app/controllers/concerns/rs_pages.rb +14 -3
  9. data/app/helpers/gzip_helper.rb +27 -0
  10. data/app/models/concerns/seoable.rb +19 -30
  11. data/app/models/seo.rb +16 -0
  12. data/app/views/devise/registrations/edit.html.slim +21 -0
  13. data/app/views/devise/registrations/new.html.slim +21 -0
  14. data/app/views/devise/sessions/new.html.slim +18 -19
  15. data/app/views/devise/shared/_links.html.slim +4 -18
  16. data/app/views/news/show.html.slim +1 -1
  17. data/config/locales/en.rs.yml +1 -1
  18. data/config/locales/ru.rs.yml +11 -1
  19. data/lib/generators/rocket_cms/migration_generator.rb +1 -1
  20. data/lib/generators/rocket_cms/templates/admin.erb +8 -0
  21. data/lib/generators/rocket_cms/templates/migration_news.rb +10 -5
  22. data/lib/generators/rocket_cms/templates/migration_pages.rb +14 -5
  23. data/lib/generators/rocket_cms/templates/migration_seos.rb +14 -0
  24. data/lib/rocket_cms.rb +4 -0
  25. data/lib/rocket_cms/admin.rb +35 -8
  26. data/lib/rocket_cms/configuration.rb +7 -1
  27. data/lib/rocket_cms/controllers/contacts.rb +2 -2
  28. data/lib/rocket_cms/controllers/news.rb +1 -1
  29. data/lib/rocket_cms/controllers/search.rb +17 -0
  30. data/lib/rocket_cms/engine.rb +3 -3
  31. data/lib/rocket_cms/migration.rb +14 -11
  32. data/lib/rocket_cms/models/active_record/menu.rb +3 -0
  33. data/lib/rocket_cms/models/active_record/news.rb +6 -3
  34. data/lib/rocket_cms/models/active_record/page.rb +3 -0
  35. data/lib/rocket_cms/models/active_record/seo.rb +17 -0
  36. data/lib/rocket_cms/models/contact_message.rb +1 -1
  37. data/lib/rocket_cms/models/embedded_gallery_image.rb +4 -0
  38. data/lib/rocket_cms/models/gallery.rb +2 -0
  39. data/lib/rocket_cms/models/gallery_image.rb +2 -0
  40. data/lib/rocket_cms/models/mongoid/contact_message.rb +5 -5
  41. data/lib/rocket_cms/models/mongoid/embedded_gallery_image.rb +0 -1
  42. data/lib/rocket_cms/models/mongoid/gallery.rb +0 -1
  43. data/lib/rocket_cms/models/mongoid/gallery_image.rb +0 -1
  44. data/lib/rocket_cms/models/mongoid/news.rb +3 -4
  45. data/lib/rocket_cms/models/mongoid/page.rb +3 -2
  46. data/lib/rocket_cms/models/mongoid/seo.rb +23 -0
  47. data/lib/rocket_cms/models/news.rb +13 -5
  48. data/lib/rocket_cms/models/page.rb +7 -3
  49. data/lib/rocket_cms/models/seo.rb +17 -0
  50. data/lib/rocket_cms/seo_helpers.rb +13 -0
  51. data/lib/rocket_cms/version.rb +1 -1
  52. data/template.rb +4 -7
  53. metadata +13 -3
@@ -14,6 +14,7 @@ module RocketCMS
14
14
  attr_accessor :news_image_styles
15
15
  attr_accessor :news_per_page
16
16
  attr_accessor :news_excerpt
17
+ attr_accessor :news_content_required
17
18
 
18
19
  attr_accessor :error_layout
19
20
  attr_accessor :menu_max_depth
@@ -27,6 +28,8 @@ module RocketCMS
27
28
  attr_accessor :contacts_message_required
28
29
  attr_accessor :contacts_captcha_error_message
29
30
 
31
+ attr_accessor :separate_seo_table
32
+
30
33
  attr_accessor :localize
31
34
 
32
35
  attr_accessor :recreate_contact_message_action
@@ -38,6 +41,7 @@ module RocketCMS
38
41
  }
39
42
  @news_per_page = 10
40
43
  @news_excerpt = 12
44
+ @news_content_required = true
41
45
 
42
46
  @error_layout = 'application'
43
47
  @menu_max_depth = 2
@@ -54,6 +58,8 @@ module RocketCMS
54
58
  @recreate_contact_message_action = "new"
55
59
 
56
60
  @localize = false
61
+
62
+ @separate_seo_table = false
57
63
  end
58
64
 
59
65
  def search_enabled=(val)
@@ -64,4 +70,4 @@ module RocketCMS
64
70
  end
65
71
  end
66
72
  end
67
- end
73
+ end
@@ -15,7 +15,7 @@ module RocketCMS
15
15
  def create
16
16
  @contact_message = model.new(message_params)
17
17
  after_initialize
18
- if RocketCMS.configuration.contacts_captcha
18
+ if RocketCMS.config.contacts_captcha
19
19
  meth = :save_with_captcha
20
20
  else
21
21
  meth = :save
@@ -63,7 +63,7 @@ module RocketCMS
63
63
  ContactMessage
64
64
  end
65
65
  def message_params
66
- params.require(:contact_message).permit(RocketCMS.configuration.contacts_fields.keys + [:name, :email, :phone, :content, :captcha, :captcha_key])
66
+ params.require(:contact_message).permit(RocketCMS.config.contacts_fields.keys + [:name, :email, :phone, :content, :captcha, :captcha_key])
67
67
  end
68
68
  end
69
69
  end
@@ -6,7 +6,7 @@ module RocketCMS
6
6
  def index
7
7
  @news = model.enabled.after_now.by_date
8
8
 
9
- unless RocketCMS.configuration.news_per_page.nil?
9
+ unless RocketCMS.config.news_per_page.nil?
10
10
  @news = @news.page(params[:page])
11
11
  end
12
12
  end
@@ -38,6 +38,23 @@ module RocketCMS
38
38
  page: params[:page],
39
39
  per_page: RocketCMS.configuration.search_per_page
40
40
  )
41
+ # @results = Mongoid::Elasticsearch.search({
42
+ # body: {
43
+ # query: {
44
+ # query_string: {
45
+ # query: Mongoid::Elasticsearch::Utils.clean(params[:query])
46
+ # }
47
+ # },
48
+ # highlight: {
49
+ # fields: {
50
+ # name: {},
51
+ # content: {}
52
+ # }
53
+ # }
54
+ # }},
55
+ # page: params[:page],
56
+ # per_page: RocketCMS.config.search_per_page,
57
+ # )
41
58
  end
42
59
  end
43
60
  end
@@ -31,12 +31,12 @@ module RocketCMS
31
31
 
32
32
  config.after_initialize do
33
33
  # trigger autoload so models are registered in Mongoid::Elasticearch
34
- RocketCMS.configuration.search_models.map(&:constantize)
34
+ RocketCMS.config.search_models.map(&:constantize)
35
35
 
36
36
  # Write default email settings to DB so they can be changed.
37
37
  if Settings.table_exists?
38
- Settings.default_email_from(default: 'noreply@rscx.ru')
39
- Settings.form_email(default: 'glebtv@ya.ru')
38
+ Settings.default_email_from(default: 'noreply@site.domain')
39
+ Settings.form_email(default: 'admin@site.domain')
40
40
  Settings.email_topic(default: 'с сайта')
41
41
  end
42
42
  end
@@ -3,19 +3,21 @@ module RocketCMS
3
3
  extend self
4
4
 
5
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
6
+ if RocketCMS.config.localize
7
+ t.column :h1_translations, 'hstore', default: {}
8
+ t.column :title_translations, 'hstore', default: {}
9
+ t.column :keywords_translations, 'hstore', default: {}
10
+ t.column :description_translations, 'hstore', default: {}
11
+ t.column :og_title_translations, 'hstore', default: {}
12
+ else
13
+ t.string :h1
14
+ t.string :title
15
+ t.text :keywords
16
+ t.text :description
17
+ t.string :og_title
18
+ end
11
19
  t.string :robots
12
- t.string :og_title
13
20
  t.attachment :og_image
14
-
15
- #if RocketCMS.localize
16
- #t.column :name_translations, 'hstore'
17
- #t.column :name_translations, 'hstore'
18
- #end
19
21
  end
20
22
 
21
23
  def map_fields(t)
@@ -29,3 +31,4 @@ module RocketCMS
29
31
  end
30
32
  end
31
33
  end
34
+
@@ -6,6 +6,9 @@ module RocketCMS
6
6
  included do
7
7
  has_paper_trail
8
8
  validates_lengths_from_database
9
+ if RocketCMS.config.localize
10
+ translates :name
11
+ end
9
12
  end
10
13
  end
11
14
  end
@@ -4,9 +4,8 @@ module RocketCMS
4
4
  module News
5
5
  extend ActiveSupport::Concern
6
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?
7
+ unless RocketCMS.config.news_image_styles.nil?
8
+ has_attached_file :image, styles: RocketCMS.config.news_image_styles
10
9
  end
11
10
 
12
11
  has_paper_trail
@@ -15,6 +14,10 @@ module RocketCMS
15
14
 
16
15
  scope :after_now, -> { where("time < ?", Time.now) }
17
16
  scope :by_date, -> { order(time: :desc) }
17
+
18
+ if RocketCMS.config.localize
19
+ translates :name, :excerpt, :content
20
+ end
18
21
  end
19
22
  end
20
23
  end
@@ -9,6 +9,9 @@ module RocketCMS
9
9
  has_paper_trail
10
10
  validates_lengths_from_database only: [:name, :title, :content, :excerpt, :h1, :keywords, :robots, :og_title, :regexp, :redirect, :fullpath]
11
11
  scope :sorted, -> { order(lft: :asc) }
12
+ if RocketCMS.config.localize
13
+ translates :name, :content
14
+ end
12
15
  end
13
16
  end
14
17
  end
@@ -0,0 +1,17 @@
1
+ module RocketCMS
2
+ module Models
3
+ module ActiveRecord
4
+ module Seo
5
+ extend ActiveSupport::Concern
6
+ included do
7
+ has_attached_file :og_image, styles: {thumb: "800x600>"}
8
+ if RocketCMS.config.localize
9
+ translates :h1, :title, :keywords, :description, :og_title
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+
17
+
@@ -10,7 +10,7 @@ module RocketCMS
10
10
  apply_simple_captcha message: RocketCMS.configuration.contacts_captcha_error_message
11
11
 
12
12
  validates_email_format_of :email, unless: 'email.blank?'
13
- if RocketCMS.configuration.contacts_message_required
13
+ if RocketCMS.config.contacts_message_required
14
14
  validates_presence_of :content
15
15
  end
16
16
  validate do
@@ -6,6 +6,10 @@ module RocketCMS
6
6
  include Enableable
7
7
  include Sortable
8
8
  include RocketCMS.orm_specific('EmbeddedGalleryImage')
9
+
10
+ included do
11
+ validates_attachment_content_type :image, content_type: /\Aimage\/.*\Z/, if: :image?
12
+ end
9
13
  end
10
14
  end
11
15
  end
@@ -11,6 +11,8 @@ module RocketCMS
11
11
  included do
12
12
  has_many :gallery_images
13
13
  field :name, type: String, localize: RocketCMS.configuration.localize
14
+
15
+ validates_attachment_content_type :image, content_type: /\Aimage\/.*\Z/, if: :image?
14
16
  end
15
17
  end
16
18
  end
@@ -9,6 +9,8 @@ module RocketCMS
9
9
  included do
10
10
  belongs_to :gallery
11
11
  field :name, type: String, localize: RocketCMS.configuration.localize
12
+
13
+ validates_attachment_content_type :image, content_type: /\Aimage\/.*\Z/, if: :image?
12
14
  end
13
15
  end
14
16
  end
@@ -4,11 +4,11 @@ module RocketCMS
4
4
  module ContactMessage
5
5
  extend ActiveSupport::Concern
6
6
  included do
7
- field :name, type: String, default: ""
8
- field :email, type: String, default: ""
9
- field :phone, type: String, default: ""
10
- field :content, type: String, default: ""
11
- RocketCMS.configuration.contacts_fields.each_pair do |fn, ft|
7
+ field :name, type: String
8
+ field :email, type: String
9
+ field :phone, type: String
10
+ field :content, type: String
11
+ RocketCMS.config.contacts_fields.each_pair do |fn, ft|
12
12
  next if ft.nil?
13
13
  field fn, type: ft
14
14
  end
@@ -11,7 +11,6 @@ module RocketCMS
11
11
  include EmbeddedElement
12
12
 
13
13
  has_mongoid_attached_file :image # need to override
14
- validates_attachment :image, content_type: { content_type: ["image/jpg", "image/jpeg", "image/png"] }
15
14
 
16
15
  def image_file_name=(val)
17
16
  return self[:image_file_name] = "" if val == ""
@@ -12,7 +12,6 @@ module RocketCMS
12
12
  scope :sorted, -> { order_by([:lft, :asc]) }
13
13
 
14
14
  has_mongoid_attached_file :image # need to override
15
- validates_attachment :image, content_type: { content_type: ["image/jpg", "image/jpeg", "image/png"] }
16
15
 
17
16
  def image_file_name=(val)
18
17
  return self[:image_file_name] = "" if val == ""
@@ -10,7 +10,6 @@ module RocketCMS
10
10
  scope :sorted, -> { order_by([:lft, :asc]) }
11
11
 
12
12
  has_mongoid_attached_file :image # need to override
13
- validates_attachment :image, content_type: { content_type: ["image/jpg", "image/jpeg", "image/png"] }
14
13
 
15
14
  def image_file_name=(val)
16
15
  return self[:image_file_name] = "" if val == ""
@@ -3,15 +3,14 @@ module RocketCMS
3
3
  module Mongoid
4
4
  module News
5
5
  extend ActiveSupport::Concern
6
- unless RocketCMS.configuration.news_image_styles.nil?
6
+ unless RocketCMS.config.news_image_styles.nil?
7
7
  include ::Mongoid::Paperclip
8
8
  end
9
9
  included do
10
10
  field :time, type: Time
11
11
  index({enabled: 1, time: 1})
12
- unless RocketCMS.configuration.news_image_styles.nil?
13
- has_mongoid_attached_file :image, styles: RocketCMS.configuration.news_image_styles
14
- validates_attachment_content_type :image, content_type: %w(image/gif image/jpeg image/jpg image/png), if: :image?
12
+ unless RocketCMS.config.news_image_styles.nil?
13
+ has_mongoid_attached_file :image, styles: RocketCMS.config.news_image_styles
15
14
 
16
15
  def image_file_name=(val)
17
16
  return self[:image_file_name] = "" if val == ""
@@ -6,9 +6,10 @@ module RocketCMS
6
6
  included do
7
7
  field :regexp, type: String, default: ""
8
8
  field :redirect, type: String, default: ""
9
- field :excerpt, type: String, localize: RocketCMS.configuration.localize, default: ""
10
- field :content, type: String, localize: RocketCMS.configuration.localize, default: ""
9
+ field :excerpt, type: String, localize: RocketCMS.config.localize, default: ""
10
+ field :content, type: String, localize: RocketCMS.config.localize, default: ""
11
11
  field :fullpath, type: String, default: ""
12
+
12
13
  has_and_belongs_to_many :menus, inverse_of: :pages
13
14
  acts_as_nested_set
14
15
 
@@ -0,0 +1,23 @@
1
+ module RocketCMS
2
+ module Models
3
+ module Mongoid
4
+ module Seo
5
+ extend ActiveSupport::Concern
6
+ include ::Mongoid::Paperclip
7
+ included do
8
+ field :name, type: String, localize: RocketCMS.config.localize
9
+ field :h1, type: String, localize: RocketCMS.config.localize
10
+
11
+ field :title, type: String, localize: RocketCMS.config.localize
12
+ field :keywords, type: String, localize: RocketCMS.config.localize
13
+ field :description, type: String, localize: RocketCMS.config.localize
14
+ field :robots, type: String, localize: RocketCMS.config.localize
15
+
16
+ field :og_title, type: String, localize: RocketCMS.config.localize
17
+ has_mongoid_attached_file :og_image, styles: {thumb: "800x600>"}
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+
@@ -9,21 +9,29 @@ module RocketCMS
9
9
  include SitemapData
10
10
  include RocketCMS.orm_specific('News')
11
11
 
12
- if RocketCMS.configuration.search_enabled
12
+ if RocketCMS.config.search_enabled
13
13
  include RocketCMS::ElasticSearch
14
14
  end
15
15
 
16
16
  included do
17
17
 
18
- validates_presence_of :name, :content
18
+ unless RocketCMS.config.news_image_styles.nil?
19
+ validates_attachment_content_type :image, content_type: /\Aimage\/.*\Z/, if: :image?
20
+ end
21
+
22
+ validates_presence_of :name
23
+ if RocketCMS.config.news_content_required
24
+ validates_presence_of :content
25
+ end
26
+
19
27
  before_validation do
20
28
  self.time = Time.now if self.time.blank?
21
29
  end
22
30
  scope :recent, ->(count = 5) { enabled.after_now.by_date.limit(count) }
23
- unless RocketCMS.configuration.news_per_page.nil?
24
- paginates_per RocketCMS.configuration.news_per_page
31
+ unless RocketCMS.config.news_per_page.nil?
32
+ paginates_per RocketCMS.config.news_per_page
25
33
  end
26
- smart_excerpt :excerpt, :content, RocketCMS.configuration.news_excerpt
34
+ smart_excerpt :excerpt, :content, RocketCMS.config.news_excerpt
27
35
  manual_slug :report_slug
28
36
 
29
37
  RocketCMS.apply_patches self
@@ -10,7 +10,7 @@ module RocketCMS
10
10
 
11
11
  include RocketCMS.orm_specific('Page')
12
12
 
13
- if RocketCMS.configuration.search_enabled
13
+ if RocketCMS.config.search_enabled
14
14
  include RocketCMS::ElasticSearch
15
15
  end
16
16
 
@@ -54,10 +54,14 @@ module RocketCMS
54
54
  url.match(clean_regexp)
55
55
  end
56
56
  end
57
-
57
+
58
+ def regexp_prefix
59
+ ""
60
+ end
61
+
58
62
  def clean_regexp
59
63
  if regexp.blank?
60
- /^#{Regexp.escape(fullpath)}$/
64
+ /^#{regexp_prefix}#{Regexp.escape(fullpath)}$/
61
65
  else
62
66
  begin
63
67
  /#{regexp}/
@@ -0,0 +1,17 @@
1
+ module RocketCMS
2
+ module Models
3
+ module Seo
4
+ extend ActiveSupport::Concern
5
+ include RocketCMS::Model
6
+ include Enableable
7
+ include RocketCMS.orm_specific('Seo')
8
+ include RocketCMS::SeoHelpers
9
+
10
+ included do
11
+ RocketCMS.apply_patches self
12
+ validates_attachment_content_type :og_image, content_type: /\Aimage\/.*\Z/, if: :og_image?
13
+ end
14
+ end
15
+ end
16
+ end
17
+
@@ -0,0 +1,13 @@
1
+ module RocketCMS
2
+ module SeoHelpers
3
+ extend ActiveSupport::Concern
4
+ def page_title
5
+ title.blank? ? name : title
6
+ end
7
+
8
+ def get_og_title
9
+ og_title.blank? ? name : og_title
10
+ end
11
+ end
12
+ end
13
+