cmor_cms 0.0.53.pre → 0.0.58.pre

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 12efcd07a0d0ec6237ba803352d464670efc4b868e9f53317e48a20ecd14dd43
4
- data.tar.gz: 378c525b3ffb9027f83d45441c43f5853f87bdf2cc25cd372d9d2cf327531cf1
3
+ metadata.gz: 7e62b58cc0f32abc8a8e6cac3b17b5350a7ba6350033c2cb56daee44999c18d7
4
+ data.tar.gz: 868f1976844967465b2d1927eb3663451a2765d1f4af6dad2b46a5aeb023fe48
5
5
  SHA512:
6
- metadata.gz: 6ef123061238783dc8ed466b065c88ccf500f0c1f98e3ee49724cce13c5bec39f434c134bd46c4a92aa31113b4fe09cfd00eb563acdfac48c8c3ff47b87a51ad
7
- data.tar.gz: c9129cc6e5e35b7308b18468a29ce3842674ad3d065793e943796ea9e23653ff96c7af363b83cc57b19b56848ce8fdddfea30eac3175afd213483dc9fc390f7f
6
+ metadata.gz: e5d90528cdf4eca40def1bed25061495afecd6c4e262f422745e299d8d93bfd6f326283d4bb66f525255e508d62031301127318b20cb759cb275845bb2720f9c
7
+ data.tar.gz: 6aa4f799ca502629eec72427a7463cc62ee57b0ae0a3718478f7d73d1234e14c66b8257afdd3f474fecd7aaf19930c6f58ed66b8b12166d98264cd5c03f43a91
@@ -0,0 +1,63 @@
1
+ module Cmor
2
+ module Cms
3
+ module Models
4
+ module DatabaseTemplateConcern
5
+ extend ActiveSupport::Concern
6
+
7
+ included do
8
+ # callbacks
9
+ after_initialize :set_defaults
10
+ before_validation :assert_trailing_slash_on_pathname
11
+ after_save :clear_resolver_cache
12
+
13
+ # validations
14
+ validates :basename, presence: true,
15
+ uniqueness: { scope: [:pathname, :locale, :format, :handler] }
16
+ validates :handler, inclusion: { in: ActionView::Template::Handlers.extensions.map(&:to_s) }
17
+ validates :locale, inclusion: { in: I18n.available_locales.map(&:to_s) },
18
+ allow_nil: true,
19
+ allow_blank: true
20
+ validates :format, inclusion: { in: Mime::SET.symbols.map(&:to_s) },
21
+ allow_nil: true,
22
+ allow_blank: true
23
+ validates :pathname, presence: true
24
+ end
25
+
26
+ def human
27
+ "#{self.class.name}: #{path_and_filename}"
28
+ end
29
+
30
+ def filename
31
+ filename = basename.nil? ? '' : basename.dup
32
+ filename << ".#{locale}" if locale.present?
33
+ filename << ".#{format}" if format.present?
34
+ filename << ".#{handler}" if handler.present?
35
+ filename
36
+ end
37
+
38
+ def path_and_filename
39
+ "#{pathname}#{filename}"
40
+ end
41
+
42
+ private
43
+
44
+ def assert_trailing_slash_on_pathname
45
+ self.pathname = '/' and return if pathname.blank?
46
+ pathname << '/' unless pathname.end_with?('/')
47
+ end
48
+
49
+ def clear_resolver_cache
50
+ klass = "#{self.class.name}Resolver"
51
+ klass.constantize.instance.clear_cache
52
+ end
53
+
54
+ def set_defaults
55
+ if new_record?
56
+ self.locale ||= I18n.default_locale.to_s
57
+ self.handler ||= Cmor::Cms::Configuration.default_handlers[self.class.name.demodulize.underscore.to_sym].to_s
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
@@ -1,6 +1,7 @@
1
1
  module Cmor
2
2
  module Cms
3
3
  class PageController < Cmor::Cms::Configuration.base_controller.constantize
4
+ include Cmor::Cms::ControllerExtensions::LayoutResolver
4
5
  include Cmor::Cms::ControllerExtensions::PageResolver
5
6
  include Cmor::Cms::ControllerExtensions::PartialResolver
6
7
 
@@ -22,11 +23,13 @@ module Cmor
22
23
  extend ActiveSupport::Concern
23
24
 
24
25
  included do
25
- rescue_from ActionView::MissingTemplate do |exception|
26
- if exception.message.start_with?('Missing partial')
27
- handle_missing_partial(exception)
28
- else
29
- handle_missing_template(exception)
26
+ unless Rails.env.development?
27
+ rescue_from ActionView::MissingTemplate do |exception|
28
+ if exception.message.start_with?('Missing partial')
29
+ handle_missing_partial(exception)
30
+ else
31
+ handle_missing_template(exception)
32
+ end
30
33
  end
31
34
  end
32
35
  end
@@ -0,0 +1,10 @@
1
+ module Cmor::Cms
2
+ class Layout < ApplicationRecord
3
+ # add shared behaviour for database backed templates
4
+ include Cmor::Cms::Models::DatabaseTemplateConcern
5
+
6
+ # publishing
7
+ include ActsAsPublished::ActiveRecord
8
+ acts_as_published
9
+ end
10
+ end
@@ -1,7 +1,7 @@
1
1
  module Cmor::Cms
2
2
  class Page < ActiveRecord::Base
3
3
  # add shared behaviour for database backed templates
4
- include Cmor::Cms::DatabaseTemplate
4
+ include Cmor::Cms::Models::DatabaseTemplateConcern
5
5
 
6
6
  # associations
7
7
  has_many :navigation_items,
@@ -1,7 +1,7 @@
1
1
  module Cmor::Cms
2
2
  class Partial < ActiveRecord::Base
3
3
  # add shared behaviour for database backed templates
4
- include Cmor::Cms::DatabaseTemplate
4
+ include Cmor::Cms::Models::DatabaseTemplateConcern
5
5
 
6
6
  # publishing
7
7
  include ActsAsPublished::ActiveRecord
@@ -1,7 +1,7 @@
1
1
  module Cmor::Cms
2
2
  class Template < ActiveRecord::Base
3
3
  # add shared behaviour for database backed templates
4
- include Cmor::Cms::DatabaseTemplate
4
+ include Cmor::Cms::Models::DatabaseTemplateConcern
5
5
 
6
6
  # publishing
7
7
  include ActsAsPublished::ActiveRecord
@@ -0,0 +1,9 @@
1
+ module Cmor
2
+ module Cms
3
+ class LayoutResolver < TemplateResolver
4
+ def template_class
5
+ 'Cmor::Cms::Layout'
6
+ end
7
+ end
8
+ end
9
+ end
@@ -16,8 +16,8 @@ module Cmor
16
16
  "<meta name=\"description\" content=\"#{c.content_for(:meta_description)}\">"
17
17
  end
18
18
 
19
- def link_to_top
20
- c.render partial: '/cmor/cms/link_to_top'
19
+ def link_to_top(icons: :glyphicons)
20
+ render icons: icons
21
21
  end
22
22
 
23
23
  def is_page?
@@ -0,0 +1,12 @@
1
+ <%= content_tag(:div, class: 'pull-right') do %>
2
+ <%= link_to('#top', id: 'top-link', class: 'btn btn-primary') do %>
3
+ <% case icons %>
4
+ <% when :glyphicons %>
5
+ <%= content_tag(:span, nil, class: 'glyphicon glyphicon-arrow-up') %>
6
+ <% when :font_awesome %>
7
+ <%= content_tag(:i, nil, class: 'fas fa-arrow-up') %>
8
+ <% else %>
9
+ <%= content_tag(:span, "&#8963;".html_safe) %>
10
+ <% end %>
11
+ <% end %>
12
+ <% end %>
@@ -7,6 +7,9 @@ de:
7
7
  cmor/cms/content_box:
8
8
  one: Content Box
9
9
  other: Content Boxen
10
+ cmor/cms/layout:
11
+ one: Layout
12
+ other: Layouts
10
13
  cmor/cms/navigation:
11
14
  one: Navigation
12
15
  other: Navigationen
@@ -44,6 +47,16 @@ de:
44
47
  body: Inhalt
45
48
  content_blocks: Content Blöcke
46
49
  content_blocks_count: Content Blöcke
50
+ cmor/cms/layout:
51
+ <<: *defaults
52
+ basename: Name
53
+ body: Inhalt
54
+ filename: Dateiname
55
+ format: Format
56
+ handler: Handler
57
+ locale: Sprache
58
+ path_and_filename: Dateipfad
59
+ pathname: Pfad
47
60
  cmor/cms/navigation:
48
61
  <<: *defaults
49
62
  navigation_items: Navigationseinträge
@@ -93,8 +106,6 @@ de:
93
106
  <<: *defaults
94
107
  basename: Name
95
108
  body: Inhalt
96
- cmor_cms_folder_id: Ordner
97
- cmor_cms_folder: Ordner
98
109
  filename: Dateiname
99
110
  format: Format
100
111
  handler: Handler
@@ -106,8 +117,6 @@ de:
106
117
  <<: *defaults
107
118
  basename: Name
108
119
  body: Inhalt
109
- cmor_cms_folder_id: Ordner
110
- cmor_cms_folder: Ordner
111
120
  filename: Dateiname
112
121
  format: Format
113
122
  handler: Handler
@@ -7,6 +7,9 @@ en:
7
7
  cmor/cms/content_box:
8
8
  one: Content box
9
9
  other: Content boxes
10
+ cmor/cms/layout:
11
+ one: Layout
12
+ other: Layouts
10
13
  cmor/cms/navigation:
11
14
  one: Navigation
12
15
  other: Navigations
@@ -41,7 +44,17 @@ en:
41
44
  name: Name
42
45
  body: Body
43
46
  content_blocks: Content blocks
44
- content_blocks_count: Content blocksx
47
+ content_blocks_count: Content blocks
48
+ cmor/cms/layout:
49
+ <<: *defaults
50
+ basename: Name
51
+ body: Body
52
+ filename: Filename
53
+ format: Format
54
+ handler: Handler
55
+ locale: Language
56
+ path_and_filename: Filepath
57
+ pathname: Path
45
58
  cmor/cms/navigation:
46
59
  <<: *defaults
47
60
  navigation_items: Navigation items
@@ -91,8 +104,6 @@ en:
91
104
  <<: *defaults
92
105
  basename: Name
93
106
  body: Body
94
- cmor_cms_folder_id: Folder
95
- cmor_cms_folder: Folder
96
107
  filename: Filename
97
108
  format: Format
98
109
  handler: Handler
@@ -104,8 +115,6 @@ en:
104
115
  <<: *defaults
105
116
  basename: Name
106
117
  body: Body
107
- cmor_cms_folder_id: Folder
108
- cmor_cms_folder: Folder
109
118
  filename: Filename
110
119
  format: Format
111
120
  handler: Handler
@@ -1,6 +1,8 @@
1
1
  Cmor::Cms::Engine.routes.draw do
2
2
  localized do
3
- get '/*page', to: 'page#respond', as: :page
3
+ get '/*page', to: 'page#respond', as: :page, constraints: lambda { |req|
4
+ req.path.exclude? 'rails/active_storage'
5
+ }
4
6
  get '/', to: 'page#respond', page: 'home'
5
7
  end
6
8
  end
@@ -0,0 +1,15 @@
1
+ class CreateCmorCmsLayouts < ActiveRecord::Migration[5.2]
2
+ def change
3
+ create_table :cmor_cms_layouts do |t|
4
+ t.string :basename
5
+ t.string :pathname
6
+ t.text :body
7
+ t.string :locale
8
+ t.string :format
9
+ t.string :handler
10
+ t.timestamp :published_at
11
+
12
+ t.timestamps
13
+ end
14
+ end
15
+ end
@@ -4,8 +4,7 @@ require 'cmor/cms/action_view/template_renderer_patch'
4
4
  require 'cmor/cms/engine'
5
5
  require 'cmor/cms/configuration'
6
6
 
7
- require 'cmor/cms/database_template'
8
-
7
+ require 'cmor/cms/controller_extensions/layout_resolver'
9
8
  require 'cmor/cms/controller_extensions/page_resolver'
10
9
  require 'cmor/cms/controller_extensions/partial_resolver'
11
10
  require 'cmor/cms/controller_extensions/template_resolver'
@@ -36,6 +36,29 @@ module ActionView
36
36
 
37
37
  render_template(template, layout, options[:locals])
38
38
  end
39
+ elsif Rails::VERSION::MAJOR < 6
40
+ def render(context, options)
41
+ @view = context
42
+ @details = extract_details(options)
43
+ template = determine_template(options)
44
+ layout = template.respond_to?(:layout) && template.layout.present? ? template.layout : options[:layout]
45
+
46
+ prepend_formats(template.formats)
47
+
48
+ @lookup_context.rendered_format ||= (template.formats.first || formats.first)
49
+
50
+ render_template(template, layout, options[:locals])
51
+ end
52
+ else
53
+ def render(context, options)
54
+ @details = extract_details(options)
55
+ template = determine_template(options)
56
+
57
+ prepend_formats(template.format)
58
+
59
+ layout = (template.respond_to?(:layout) ? template.layout : nil) || options[:layout]
60
+ render_template(context, template, (layout || options[:layout]), options[:locals] || {})
61
+ end
39
62
  end
40
63
  end
41
64
  end
@@ -0,0 +1,12 @@
1
+ module Cmor
2
+ module Cms
3
+ module ControllerExtensions
4
+ module LayoutResolver
5
+ def self.included(base)
6
+ # add the template resolver
7
+ base.prepend_view_path ::Cmor::Cms::LayoutResolver.instance unless base.view_paths.include?(::Cmor::Cms::LayoutResolver.instance)
8
+ end
9
+ end
10
+ end
11
+ end
12
+ end
@@ -11,6 +11,10 @@ module Cmor
11
11
  c.performance_tool :rspec
12
12
 
13
13
  end
14
+
15
+ initializer "cmor_cms_engine.register_template_handlers" do |app|
16
+ ::ActionView::Template.register_template_handler :textile, ::ActionView::Template::Handlers::Textile.new
17
+ end
14
18
  end
15
19
  end
16
20
  end
@@ -0,0 +1,7 @@
1
+ FactoryBot.define do
2
+ factory :cmor_cms_layout, class: 'Cmor::Cms::Layout' do
3
+ sequence(:basename) { |i| "layout_#{i}" }
4
+ handler { 'erb' }
5
+ pathname { '/' }
6
+ end
7
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cmor_cms
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.53.pre
4
+ version: 0.0.58.pre
5
5
  platform: ruby
6
6
  authors:
7
7
  - Roberto Vasquez Angel
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-03-26 00:00:00.000000000 Z
11
+ date: 2020-07-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -30,28 +30,28 @@ dependencies:
30
30
  requirements:
31
31
  - - '='
32
32
  - !ruby/object:Gem::Version
33
- version: 0.0.53.pre
33
+ version: 0.0.58.pre
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - '='
39
39
  - !ruby/object:Gem::Version
40
- version: 0.0.53.pre
40
+ version: 0.0.58.pre
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: cmor_core_frontend
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - '='
46
46
  - !ruby/object:Gem::Version
47
- version: 0.0.53.pre
47
+ version: 0.0.58.pre
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - '='
53
53
  - !ruby/object:Gem::Version
54
- version: 0.0.53.pre
54
+ version: 0.0.58.pre
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: sqlite3
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -418,6 +418,7 @@ files:
418
418
  - app/assets/stylesheets/cmor/cms/application.css
419
419
  - app/assets/stylesheets/cmor/cms/application/keep.css
420
420
  - app/assets/stylesheets/cmor_cms.css
421
+ - app/concerns/cmor/cms/models/database_template_concern.rb
421
422
  - app/concerns/cmor/cms/navigation_item/properties_concern.rb~
422
423
  - app/controllers/cmor/cms/page_controller.rb
423
424
  - app/importers/cmor/cms/importers/navigation.rb
@@ -425,12 +426,14 @@ files:
425
426
  - app/importers/cmor/cms/importers/page.rb
426
427
  - app/models/cmor/cms/content_block.rb
427
428
  - app/models/cmor/cms/content_box.rb
429
+ - app/models/cmor/cms/layout.rb
428
430
  - app/models/cmor/cms/navigation.rb
429
431
  - app/models/cmor/cms/navigation_item.rb
430
432
  - app/models/cmor/cms/page.rb
431
433
  - app/models/cmor/cms/partial.rb
432
434
  - app/models/cmor/cms/template.rb
433
435
  - app/resolvers/cmor/cms/database_resolver.rb
436
+ - app/resolvers/cmor/cms/layout_resolver.rb
434
437
  - app/resolvers/cmor/cms/page_resolver.rb
435
438
  - app/resolvers/cmor/cms/partial_resolver.rb
436
439
  - app/resolvers/cmor/cms/template_resolver.rb
@@ -441,13 +444,12 @@ files:
441
444
  - app/view_helpers/cmor/cms/application_view_helper.rb
442
445
  - app/view_helpers/cmor/cms/navigation_view_helper.rb
443
446
  - app/view_helpers/cmor/cms/page_view_helper.rb
444
- - app/views/cmor/cms/_link_to_top.html.erb
447
+ - app/views/cmor/cms/application_view_helper/_link_to_top.html.erb
445
448
  - app/views/cmor/cms/page/fallback.html.erb
446
449
  - app/views/cmor/cms/page/fallback.txt
447
450
  - config/initializers/assets.rb
448
451
  - config/initializers/mime_types.rb
449
452
  - config/initializers/simple_navigation.rb
450
- - config/initializers/textile_support.rb
451
453
  - config/locales/de.yml
452
454
  - config/locales/en.yml
453
455
  - config/navigation.rb
@@ -464,15 +466,16 @@ files:
464
466
  - db/migrate/20200120134400_add_published_at_to_cmor_cms_partials.rb
465
467
  - db/migrate/20200120134422_add_published_at_to_cmor_cms_navigation_items.rb
466
468
  - db/migrate/20200120141440_set_all_publishable_to_published.rb
469
+ - db/migrate/20200514115526_create_cmor_cms_layouts.rb
467
470
  - lib/cmor/cms.rb
468
471
  - lib/cmor/cms/action_view/template_patch.rb
469
472
  - lib/cmor/cms/action_view/template_renderer_patch.rb
470
473
  - lib/cmor/cms/configuration.rb
474
+ - lib/cmor/cms/controller_extensions/layout_resolver.rb
471
475
  - lib/cmor/cms/controller_extensions/page_resolver.rb
472
476
  - lib/cmor/cms/controller_extensions/partial_resolver.rb
473
477
  - lib/cmor/cms/controller_extensions/template_resolver.rb
474
478
  - lib/cmor/cms/database_resolver.rb~
475
- - lib/cmor/cms/database_template.rb
476
479
  - lib/cmor/cms/engine.rb
477
480
  - lib/cmor/cms/version.rb
478
481
  - lib/cmor_cms.rb
@@ -482,6 +485,7 @@ files:
482
485
  - lib/tasks/cmor_cms_tasks.rake
483
486
  - spec/factories/cmor/cms/content_block.rb
484
487
  - spec/factories/cmor/cms/content_box.rb
488
+ - spec/factories/cmor/cms/layouts.rb
485
489
  - spec/factories/cmor/cms/navigation_items.rb
486
490
  - spec/factories/cmor/cms/navigations.rb
487
491
  - spec/factories/cmor/cms/pages.rb
@@ -506,7 +510,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
506
510
  - !ruby/object:Gem::Version
507
511
  version: 1.3.1
508
512
  requirements: []
509
- rubygems_version: 3.1.2
513
+ rubygems_version: 3.1.4
510
514
  signing_key:
511
515
  specification_version: 4
512
516
  summary: CMS base module for ruby on rails.
@@ -1,5 +0,0 @@
1
- <%= content_tag(:div, class: 'pull-right') do %>
2
- <%= link_to('#top', id: 'top-link', class: 'btn btn-primary') do %>
3
- <%= content_tag(:i, nil, class: 'glyphicon glyphicon-arrow-up') %>
4
- <% end %>
5
- <% end %>
@@ -1,3 +0,0 @@
1
- Rails.application.config.to_prepare do
2
- ::ActionView::Template.register_template_handler :textile, ::ActionView::Template::Handlers::Textile.new
3
- end
@@ -1,64 +0,0 @@
1
- module Cmor
2
- module Cms
3
- module DatabaseTemplate
4
- def self.included(base)
5
- base.extend(ClassMethods)
6
-
7
- # callbacks
8
- base.after_initialize :set_defaults
9
- base.before_validation :assert_trailing_slash_on_pathname
10
- base.after_save :clear_resolver_cache
11
-
12
- # validations
13
- base.validates :basename, presence: true,
14
- uniqueness: { scope: [:pathname, :locale, :format, :handler] }
15
- base.validates :handler, inclusion: ActionView::Template::Handlers.extensions.map(&:to_s)
16
- base.validates :locale, inclusion: I18n.available_locales.map(&:to_s),
17
- allow_nil: true,
18
- allow_blank: true
19
- base.validates :format, inclusion: Mime::SET.symbols.map(&:to_s),
20
- allow_nil: true,
21
- allow_blank: true
22
- base.validates :pathname, presence: true
23
- end
24
-
25
- module ClassMethods
26
- end
27
-
28
- def human
29
- "#{self.class.name}: #{path_and_filename}"
30
- end
31
-
32
- def filename
33
- filename = basename.nil? ? '' : basename.dup
34
- filename << ".#{locale}" if locale.present?
35
- filename << ".#{format}" if format.present?
36
- filename << ".#{handler}" if handler.present?
37
- filename
38
- end
39
-
40
- def path_and_filename
41
- "#{pathname}#{filename}"
42
- end
43
-
44
- private
45
-
46
- def assert_trailing_slash_on_pathname
47
- self.pathname = '/' and return if pathname.blank?
48
- pathname << '/' unless pathname.end_with?('/')
49
- end
50
-
51
- def clear_resolver_cache
52
- klass = "#{self.class.name}Resolver"
53
- klass.constantize.instance.clear_cache
54
- end
55
-
56
- def set_defaults
57
- if new_record?
58
- self.locale ||= I18n.default_locale.to_s
59
- self.handler ||= Cmor::Cms::Configuration.default_handlers[self.class.name.demodulize.underscore.to_sym].to_s
60
- end
61
- end
62
- end
63
- end
64
- end