hancock_cms_pages 1.0.0 → 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/concerns/hancock/pages/blocksetable.rb +48 -14
  3. data/app/controllers/concerns/hancock/pages/localizeable.rb +5 -5
  4. data/app/controllers/concerns/hancock/pages/nav_menu.rb +10 -5
  5. data/app/controllers/concerns/hancock/pages/seo_pages.rb +3 -3
  6. data/app/helpers/hancock/pages/blocksets_helper.rb +26 -0
  7. data/app/helpers/hancock/pages/pages_helper.rb +11 -0
  8. data/app/models/concerns/hancock/pages/connectable.rb +1 -1
  9. data/app/views/blocks/_cached_blockset_navigation.html.slim +26 -0
  10. data/app/views/blocks/_cached_navigation.html.slim +26 -0
  11. data/app/views/blocks/_header.html.slim +9 -1
  12. data/app/views/hancock/pages/pages/show.html.slim +14 -1
  13. data/app/views/shared/_obj.html.slim +21 -25
  14. data/config/locales/hancock.pages.ru.yml +5 -0
  15. data/hancock_cms_pages.gemspec +3 -3
  16. data/lib/generators/hancock/pages/config/{install_generator.rb → config_generator.rb} +0 -0
  17. data/lib/generators/hancock/pages/config/templates/hancock_pages.erb +19 -6
  18. data/lib/generators/hancock/pages/controllers/decorators_generator.rb +24 -0
  19. data/lib/generators/hancock/pages/{migration_generator.rb → migrations/migrations_generator.rb} +3 -3
  20. data/lib/generators/hancock/pages/{templates → migrations/templates}/migration_blocks.rb +0 -0
  21. data/lib/generators/hancock/pages/{templates → migrations/templates}/migration_pages.rb +0 -0
  22. data/lib/generators/hancock/pages/models/templates/block.erb +5 -5
  23. data/lib/generators/hancock/pages/models/templates/blockset.erb +5 -5
  24. data/lib/generators/hancock/pages/models/templates/menu.erb +5 -5
  25. data/lib/generators/hancock/pages/models/templates/page.erb +7 -7
  26. data/lib/hancock/pages/admin.rb +35 -8
  27. data/lib/hancock/pages/admin/block.rb +14 -1
  28. data/lib/hancock/pages/admin/blockset.rb +34 -11
  29. data/lib/hancock/pages/admin/menu.rb +3 -1
  30. data/lib/hancock/pages/admin/page.rb +35 -5
  31. data/lib/hancock/pages/configuration.rb +28 -5
  32. data/lib/hancock/pages/controllers/pages.rb +10 -1
  33. data/lib/hancock/pages/engine.rb +59 -0
  34. data/lib/hancock/pages/models/active_record/blockset.rb +2 -1
  35. data/lib/hancock/pages/models/block.rb +234 -55
  36. data/lib/hancock/pages/models/blockset.rb +50 -38
  37. data/lib/hancock/pages/models/menu.rb +24 -15
  38. data/lib/hancock/pages/models/mongoid/block.rb +13 -0
  39. data/lib/hancock/pages/models/mongoid/blockset.rb +3 -0
  40. data/lib/hancock/pages/models/mongoid/menu.rb +4 -1
  41. data/lib/hancock/pages/models/mongoid/page.rb +19 -6
  42. data/lib/hancock/pages/models/page.rb +196 -90
  43. data/lib/hancock/pages/rails_admin_ext/hancock_connectable.rb +2 -0
  44. data/lib/hancock/pages/rails_admin_ext/menu.rb +11 -7
  45. data/lib/hancock/pages/version.rb +1 -1
  46. data/lib/hancock/pages/views_whitelist.rb +103 -0
  47. data/lib/hancock_cms_pages.rb +4 -6
  48. data/release.sh +1 -1
  49. metadata +19 -14
  50. data/app/helpers/hancock/pages/pages_helpers.rb +0 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3df1e024159d2a4e0fd87514fb997a63e6fe8417
4
- data.tar.gz: 105ab60abf6d5ce295777269cd8cf56b352d4847
3
+ metadata.gz: 4430da0d6feb96e83d1442a5c2c2dac7799bb924
4
+ data.tar.gz: ab34ce6ae8968be301e39944a3f3b5092c801daf
5
5
  SHA512:
6
- metadata.gz: b01a03fa00d94eeeee6260b335d931dabd438b655cd4f97c33b02820f5b44fc4020c86e7f4387dfa8963299439c2c612e182ff4d40ca3bd1e51be20784d022fe
7
- data.tar.gz: a8243f8ba5ec40debc06e99a94a0c72f236c6a58c5b1467ace1f2e33c81b3552d9a7a414fc5b9e180bb1b57fc21e564eba11747726c2e352d816f7572702739a
6
+ metadata.gz: 4e8ef56da42309a3a8805173bd68d3709c3d72a332279b7b379d81ce1128e8f6d55b84bf73951e6e0a83b5ef2607c06a47aeec75a32ae9e697352fce70610a65
7
+ data.tar.gz: 97eedb3d142c691a1345a8ff3bbf67aaa6f15b1b4c9720d5a18f5570fc3e5590a20e83bbc9f07a671bde986fab3bc12e859d394ba62606b41b91ca473442725c
@@ -5,7 +5,6 @@ module Hancock::Pages::Blocksetable
5
5
  helper_method :blockset_navigation
6
6
  end
7
7
 
8
- private
9
8
  def blockset_navigation(type)
10
9
  Proc.new do |primary|
11
10
  SimpleNavigation.config.autogenerate_item_ids = false
@@ -23,36 +22,63 @@ module Hancock::Pages::Blocksetable
23
22
  Rails.logger.error exception.backtrace.join("\n")
24
23
  puts exception.message
25
24
  puts exception.backtrace.join("\n")
26
- capture_exception(exception) if respond_to?(:capture_exception)
25
+ Raven.capture_exception(exception) if Hancock::Pages.config.raven_support
27
26
  items || []
28
27
  end
29
28
  end
30
29
  end
31
30
 
32
- def render_blockset(view, type)
31
+ def render_blockset(*opts, &block)
32
+ if opts.length == 1 and opts[0].is_a?(Hash)
33
+ type = opts.delete[:type]
34
+ else
35
+ if opts[-1].is_a?(Hash)
36
+ type = opts[-2] #backward compatibility
37
+ opts = opts[-1]
38
+ else
39
+ type = opts[-1] #backward compatibility
40
+ opts = {}
41
+ end
42
+ end
33
43
  ret = []
44
+ need_render_blockset = true
34
45
  begin
35
46
  blockset = get_blockset(type)
36
- blocks = blockset_get_blocks_for_render(blockset)
37
- blocks.each do |block|
38
- ret << block.render_or_content_html(view) do |html|
39
- after_render_blockset_block block, html
40
- end
47
+ if block_given? and (blockset.new_record? or opts[:overwrite])
48
+
49
+ # include ::Hancock::Pages::BlocksetsHelper
50
+
51
+ need_render_blockset = false
52
+ blockset.blocks.delete_all if opts[:overwrite]
53
+ _block = blockset.blocks.new
54
+ _block.content_html = helpers.capture(&block) if block
55
+ # _block.content_html = helpers.capture_block(&block)
56
+ _block.render_file = false
57
+ _block.save
41
58
  end
42
- ret = blockset.render(view, ret.join.html_safe) do |html|
43
- after_render_blockset blockset, html
59
+ if need_render_blockset
60
+ blocks = blockset_get_blocks_for_render(blockset)
61
+ blocks.each do |block|
62
+ ret << block.render_or_content_html(self, opts) do |html|
63
+ after_render_blockset_block block, html
64
+ end
65
+ end
66
+ ret = blockset.render(self, ret.join.html_safe) do |html|
67
+ after_render_blockset blockset, html
68
+ end
44
69
  end
45
70
  rescue Exception => exception
46
71
  Rails.logger.error exception.message
47
72
  Rails.logger.error exception.backtrace.join("\n")
48
73
  puts exception.message
49
74
  puts exception.backtrace.join("\n")
50
- capture_exception(exception) if respond_to?(:capture_exception)
75
+ Raven.capture_exception(exception) if Hancock::Pages.config.raven_support
51
76
  # ret << blocks || []
52
77
  end
53
- ret.is_a?(Array) ? ret.join.html_safe : ret
78
+ return (ret.is_a?(Array) ? ret.join.html_safe : ret)
54
79
  end
55
80
 
81
+ private
56
82
  def after_render_blockset_block(block, html)
57
83
  html
58
84
  end
@@ -62,7 +88,15 @@ module Hancock::Pages::Blocksetable
62
88
  end
63
89
 
64
90
  def get_blockset(type)
65
- type.is_a?(Hancock::Pages::Blockset) ? type : blockset_class.find(type.to_s)
91
+ if type.is_a?(blockset_class)
92
+ type
93
+ else
94
+ begin
95
+ blockset_class.find(type.to_s)
96
+ rescue
97
+ blockset_class.new(name: type.to_s, text_slug: type.to_s)
98
+ end
99
+ end
66
100
  end
67
101
 
68
102
  def blockset_get_blocks(type)
@@ -79,7 +113,7 @@ module Hancock::Pages::Blocksetable
79
113
  "Hancock::Pages::Blockset"
80
114
  end
81
115
  def blockset_class
82
- blockset_class_name.constantize
116
+ @blockset_class ||= blockset_class_name.constantize
83
117
  end
84
118
 
85
119
  def blockset_navigation_item(primary, item, block=nil)
@@ -1,7 +1,7 @@
1
1
  module Hancock::Pages::Localizeable
2
2
  extend ActiveSupport::Concern
3
3
  included do
4
- before_filter do
4
+ before_action do
5
5
  I18n.locale = params[:locale] || I18n.default_locale
6
6
  Settings.ns_default = "main_#{I18n.locale}".freeze
7
7
  Settings.ns_fallback = "main".freeze
@@ -21,7 +21,7 @@ module Hancock::Pages::Localizeable
21
21
  pages.sorted.to_a
22
22
  end
23
23
  def nav_get_url(item)
24
- _connectable = item.connectable
24
+ _connectable = item.hancock_connectable
25
25
  if _connectable and _connectable.enabled
26
26
  begin
27
27
  _routes_namespace = _connectable.respond_to?(:routes_namespace) ? _connectable.routes_namespace : :main_app
@@ -31,7 +31,7 @@ module Hancock::Pages::Localizeable
31
31
  Rails.logger.error exception.backtrace.join("\n")
32
32
  puts exception.message
33
33
  puts exception.backtrace.join("\n")
34
- capture_exception(exception) if respond_to?(:capture_exception)
34
+ Raven.capture_exception(exception) if Hancock::Pages.config.raven_support
35
35
 
36
36
  _url = item.redirect.blank? ? item.fullpath : item.redirect
37
37
  end
@@ -54,13 +54,13 @@ module Hancock::Pages::Localizeable
54
54
  "Hancock::Pages::Page"
55
55
  end
56
56
  def page_class
57
- page_class_name.constantize
57
+ @page_class ||= page_class_name.constantize
58
58
  end
59
59
 
60
60
  def menu_class_name
61
61
  "Hancock::Pages::Menu"
62
62
  end
63
63
  def menu_class
64
- menu_class_name.constantize
64
+ @menu_class ||= menu_class_name.constantize
65
65
  end
66
66
  end
@@ -45,14 +45,14 @@ module Hancock::Pages::NavMenu
45
45
  Rails.logger.error exception.backtrace.join("\n")
46
46
  puts exception.message
47
47
  puts exception.backtrace.join("\n")
48
- capture_exception(exception) if respond_to?(:capture_exception)
48
+ Raven.capture_exception(exception) if Hancock::Pages.config.raven_support
49
49
  items || []
50
50
  end
51
51
  end
52
52
  end
53
53
 
54
54
  def nav_get_url(item)
55
- _connectable = item.connectable
55
+ _connectable = item.hancock_connectable
56
56
  if _connectable and _connectable.enabled
57
57
  begin
58
58
  _routes_namespace = _connectable.respond_to?(:routes_namespace) ? _connectable.routes_namespace : :main_app
@@ -63,7 +63,7 @@ module Hancock::Pages::NavMenu
63
63
  Rails.logger.error exception.backtrace.join("\n")
64
64
  puts exception.message
65
65
  puts exception.backtrace.join("\n")
66
- capture_exception(exception) if respond_to?(:capture_exception)
66
+ Raven.capture_exception(exception) if Hancock::Pages.config.raven_support
67
67
 
68
68
  item.redirect.blank? ? item.fullpath : item.redirect
69
69
  end
@@ -72,7 +72,12 @@ module Hancock::Pages::NavMenu
72
72
  end
73
73
  end
74
74
  def nav_get_menu_items(type)
75
- menu = menu_class.find(type.to_s)
75
+ if type.is_a?(blockset_class)
76
+ type
77
+ else
78
+ menu = menu_class.find(type.to_s) rescue menu_class.create(name: type.to_s, text_slug: type.to_s)
79
+ end
80
+
76
81
  menu.pages.enabled.sorted.to_a if menu
77
82
  end
78
83
  def nav_extra_data_before(type, primary)
@@ -86,6 +91,6 @@ module Hancock::Pages::NavMenu
86
91
  "Hancock::Pages::Menu"
87
92
  end
88
93
  def menu_class
89
- menu_class_name.constantize
94
+ @menu_class ||= menu_class_name.constantize
90
95
  end
91
96
  end
@@ -1,7 +1,7 @@
1
1
  module Hancock::Pages::SeoPages
2
2
  extend ActiveSupport::Concern
3
3
  included do
4
- before_filter :find_page
4
+ before_action :find_page
5
5
  end
6
6
 
7
7
  private
@@ -35,7 +35,7 @@ module Hancock::Pages::SeoPages
35
35
  if page.nil?
36
36
  do_redirect = true
37
37
  spath = path.chomp(File.extname(path))
38
- if spath != path and spath != "/" + params[:slug]
38
+ if spath and spath != path and (!params[:slug].blank? and spath != "/" + params[:slug])
39
39
  page = page_class.enabled.where(fullpath: spath).first
40
40
  end
41
41
  end
@@ -90,7 +90,7 @@ module Hancock::Pages::SeoPages
90
90
  "Hancock::Pages::Page"
91
91
  end
92
92
  def page_class
93
- page_class_name.constantize
93
+ @page_class ||= page_class_name.constantize
94
94
  end
95
95
 
96
96
  def rails_admin?
@@ -0,0 +1,26 @@
1
+ module Hancock::Pages::BlocksetsHelper
2
+
3
+ # def capture_block(&block)
4
+ # capture(&block)
5
+ # end
6
+
7
+ def hancock_pages_blocks_can_render_me(name = "", opts = {})
8
+ if name.is_a?(Hash)
9
+ name, opts = (name.delete(:name) || ""), name
10
+ end
11
+ _virtual_path = Hancock::Pages::format_virtual_path(@virtual_path, opts[:is_partial])
12
+ Hancock::Pages::add_view_in_whitelist(_virtual_path, name)
13
+ end
14
+ alias_method :hancock_pages_blocks_can_render_me_as, :hancock_pages_blocks_can_render_me
15
+
16
+ def hancock_pages_blocks_can_render_me?(opts = {})
17
+ _virtual_path = Hancock::Pages::format_virtual_path(@virtual_path, opts[:is_partial])
18
+ Hancock::Pages::whitelist_as_array(opts[:exclude_blacklist]).include?(_virtual_path)
19
+ end
20
+
21
+ def hancock_pages_blocks_cannot_render_me(opts = {})
22
+ _virtual_path = Hancock::Pages::format_virtual_path(@virtual_path)
23
+ Hancock::Pages::add_view_in_blacklist(_virtual_path)
24
+ end
25
+
26
+ end
@@ -0,0 +1,11 @@
1
+ module Hancock::Pages::PagesHelper
2
+
3
+ def cached_navigation(menu_key = :main)
4
+ render partial: 'blocks/cached_navigation', locals: {menu_key: menu_key}
5
+ end
6
+
7
+ def cached_blockset_navigation(blockset_key = :main)
8
+ render partial: 'blocks/cached_blockset_navigation', locals: {blockset_key: blockset_key}
9
+ end
10
+
11
+ end
@@ -25,7 +25,7 @@ module Hancock::Pages::Connectable
25
25
  if [true, 1, "1", "true", "t"].include?(self.hancock_connectable_autocreate_page)
26
26
  _p = #{class_name}.new
27
27
  _p.#{_name_attr} = self.#{_name_attr}
28
- _p.connectable = self
28
+ _p.hancock_connectable = self
29
29
  _p.save
30
30
  end
31
31
  end
@@ -0,0 +1,26 @@
1
+ - _cache_helper = (Hancock::Pages.config.cache_support ? :hancock_cache : :cache)
2
+ - blockset_key ||= :main
3
+ - blockset_key = blockset_key.to_s
4
+
5
+ - if @seo_page
6
+ - blockset = Hancock::Pages::Blockset.find(blockset_key)
7
+ - if Hancock::Pages.config.cache_support
8
+ - [blockset, @seo_page].compact.each do |obj|
9
+ - if obj.respond_to?(:cache_keys_str) and obj.respond_to?(:cache_keys) and obj.respond_to?(:cache_keys=)
10
+ - obj.cache_keys |= hancock_cache_views_keys
11
+ - obj.save if obj.cache_keys_str_changed?
12
+ - send _cache_helper, [blockset, @seo_page] do
13
+ = render_navigation &blockset_navigation(blockset_key)
14
+
15
+ - elsif @seo_parent_page
16
+ - blockset = Hancock::Pages::Blockset.find(blockset_key)
17
+ - if Hancock::Pages.config.cache_support
18
+ - [blockset, @seo_parent_page].compact.each do |obj|
19
+ - if obj.respond_to?(:cache_keys_str) and obj.respond_to?(:cache_keys) and obj.respond_to?(:cache_keys=)
20
+ - obj.cache_keys |= hancock_cache_views_keys
21
+ - obj.save if obj.cache_keys_str_changed?
22
+ - send _cache_helper, [blockset, @seo_parent_page] do
23
+ = render_navigation &blockset_navigation(blockset_key)
24
+
25
+ - else
26
+ = render_navigation &blockset_navigation(blockset_key)
@@ -0,0 +1,26 @@
1
+ - _cache_helper = (Hancock::Pages.config.cache_support ? :hancock_cache : :cache)
2
+ - menu_key ||= :main
3
+ - menu_key = menu_key.to_s
4
+
5
+ - if @seo_page
6
+ - menu = Hancock::Pages::Menu.find(menu_key)
7
+ - if Hancock::Pages.config.cache_support
8
+ - [menu, @seo_page].compact.each do |obj|
9
+ - if obj.respond_to?(:cache_keys_str) and obj.respond_to?(:cache_keys) and obj.respond_to?(:cache_keys=)
10
+ - obj.cache_keys |= hancock_cache_views_keys
11
+ - obj.save if obj.cache_keys_str_changed?
12
+ - send _cache_helper, [menu, @seo_page] do
13
+ = render_navigation &navigation(menu_key)
14
+
15
+ - elsif @seo_parent_page
16
+ - menu = Hancock::Pages::Menu.find(menu_key)
17
+ - if Hancock::Pages.config.cache_support
18
+ - [menu, @seo_parent_page].compact.each do |obj|
19
+ - if obj.respond_to?(:cache_keys_str) and obj.respond_to?(:cache_keys) and obj.respond_to?(:cache_keys=)
20
+ - obj.cache_keys |= hancock_cache_views_keys
21
+ - obj.save if obj.cache_keys_str_changed?
22
+ - send _cache_helper, [menu, @seo_parent_page] do
23
+ = render_navigation &navigation(menu_key)
24
+
25
+ - else
26
+ = render_navigation &navigation(menu_key)
@@ -1,4 +1,12 @@
1
1
  #logo
2
2
 
3
3
  #main-nav
4
- = render_navigation &navigation(:main)
4
+ = cached_navigation(:main)
5
+ / - if @seo_page
6
+ / - cache @seo_page do
7
+ / = render_navigation &navigation(:main)
8
+ / - elsif @seo_parent_page
9
+ / - cache @seo_parent_page do
10
+ / = render_navigation &navigation(:main)
11
+ / - else
12
+ / = render_navigation &navigation(:main)
@@ -1 +1,14 @@
1
- = render 'shared/obj', obj: @seo_page
1
+ - _cache_helper = (Hancock::Pages.config.cache_support ? :hancock_cache : :cache)
2
+ - _partial_path = (Hancock::Pages.config.seo_support ? 'shared/obj_with_seo' : 'shared/obj')
3
+
4
+ / - send _cache_helper, @seo_page do
5
+ - if @seo_page.use_wrapper
6
+ ruby:
7
+ _attrs = {
8
+ class: @seo_page.wrapper_class,
9
+ id: @seo_page.wrapper_id
10
+ }.merge(@seo_page.wrapper_attributes)
11
+ = content_tag @seo_page.wrapper_tag, _attrs do
12
+ = render _partial_path, obj: @seo_page
13
+ - else
14
+ = render _partial_path, obj: @seo_page
@@ -1,26 +1,22 @@
1
+ - obj ||= nil
1
2
  - unless obj.nil?
2
- .text_content
3
- - if obj.respond_to?(:seo)
4
- - seo = obj.seo
5
- - if (!defined?(h1) || h1) && seo and !seo.h1.blank?
6
- h1= seo.h1
7
-
8
- - if obj.content.blank?
9
- - unless @seo_page.nil?
10
- = raw @seo_page.page_content
11
- - else
12
- = raw obj.content
13
-
14
- .admin_button
15
- = render 'shared/admin_link', obj: obj
16
- - if !@seo_page.nil? && (@seo_page.id != obj.id || @seo_page.class.name != obj.class.name)
17
- = render 'shared/admin_link', obj: @seo_page
18
-
19
- - content_for :meta do
20
- - if obj.respond_to?(:seo)
21
- = render 'shared/meta', obj: obj
22
- = render 'shared/og', title: obj.get_og_title, image: obj.og_image
23
-
24
- - content_for :title do
25
- - if obj.respond_to?(:title) and obj.title
26
- = obj.title
3
+ - _cache_helper = (Hancock::Pages.config.cache_support ? :hancock_cache : :cache)
4
+ / - send _cache_helper [obj, @seo_page, (current_user and current_user.admin?).to_s].uniq do
5
+ - send _cache_helper [obj, @seo_page].uniq do
6
+ .text_content
7
+
8
+ - if obj.content.blank?
9
+ - unless @seo_page.nil?
10
+ == @seo_page.page_content(self) rescue @seo_page.page_content
11
+ - else
12
+ - if obj.is_a?(Hancock::Pages::Page)
13
+ == obj.page_content(self) rescue obj.page_content
14
+ - else
15
+ - if obj.respond_to?(:page_content)
16
+ == obj.page_content rescue obj.content
17
+ - else
18
+ == obj.content
19
+
20
+ / = render 'shared/admin_link', obj: obj
21
+ / - if !@seo_page.nil? && (@seo_page.id != obj.id || @seo_page.class.name != obj.class.name)
22
+ / = render 'shared/admin_link', obj: @seo_page
@@ -52,3 +52,8 @@ ru:
52
52
 
53
53
  activerecord:
54
54
  <<: *mongoid
55
+
56
+ rails_admin:
57
+ sort_embedded:
58
+ hancock/pages/blocksets:
59
+ blocks: Блоки
@@ -9,7 +9,7 @@ Gem::Specification.new do |spec|
9
9
  spec.authors = ["Alexander Kiseliev"]
10
10
  spec.email = ["dev@redrocks.pro"]
11
11
 
12
- spec.description = %q{hancock_cms_pages }
12
+ spec.description = %q{hancock_cms_pages}
13
13
  spec.summary = %q{hancock_cms_pages}
14
14
  spec.homepage = 'https://github.com/red-rocks/hancock_cms_pages'
15
15
  spec.license = "MIT"
@@ -30,8 +30,8 @@ Gem::Specification.new do |spec|
30
30
  spec.add_development_dependency "bundler", "~> 1.10"
31
31
  spec.add_development_dependency "rake", "~> 10.0"
32
32
 
33
- spec.add_dependency 'hancock_cms', [">=1.0", "<=2.0"]
34
- # spec.add_dependency 'hancock_cms', ["~> 1.0", "~> 2.0"]
33
+ spec.add_dependency 'hancock_cms', [">=1.0.2", "<2.1.x"]
34
+ # spec.add_dependency 'hancock_cms', ["~> 1.0.2", "~> 2.0"]
35
35
 
36
36
  spec.add_dependency 'simple-navigation'
37
37
  end