hancock_cms_pages 1.0.0 → 1.0.2

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 (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