cmor_cms 0.0.54.pre → 0.0.59.pre

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8ecf230a6f14fef5110d44ad62d22e4c8a591e63fcfc7799bf0104c1cc396ecd
4
- data.tar.gz: 9d76b2898dd1abc22358f1b1ad7736430167ed0ad12c9c842f01450cbb676a7f
3
+ metadata.gz: e185b056371db7d645ccb896b3a87ca63aa61427fa0bf4d27f4f8b3ae2c9cee4
4
+ data.tar.gz: b7942385f07c0dbbce28f8b129229635ab4c00af1e8ed6d92d8c29322409ffaa
5
5
  SHA512:
6
- metadata.gz: 9c641fe5f71beae577767861d654a4cc98169c7fc99aa8b7882678da312c0a835e619efabeda12c255c8a6749a94380290e732d50e81655df860068d86cdf65d
7
- data.tar.gz: 14fa11b271dc4e2cbda5b42924f9bce79e2cdf0d9f0685a83e541b59664807038d22329f851547100f48d0fe2c515097f68446fec0fd83714a7ae1ca428caf2a
6
+ metadata.gz: 8d976aee1a3eab730e130b8a842123d80c44342b265cdf989ac6752847a6615fa8a117393abf47db4e954f9bf64a1ce86ed6a2572957ee3846f646c0ad128979
7
+ data.tar.gz: cf09c9a732f6fdd53213e84fa1d220e2056985ba11fb682bb5e996fb0f5ce616db7359db10f1cf1612d9c2a55b8ad2c9d6bbfd268a081093cbfde22d25bfe4a2
@@ -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
@@ -0,0 +1,34 @@
1
+ module Cmor
2
+ module Cms
3
+ class RedirectMiddleware
4
+ def initialize(app)
5
+ @app = app
6
+ end
7
+
8
+ def redirect_to(location)
9
+ [301, {'Location' => location, 'Content-Type' => 'text/html'}, ['Moved Permanently']]
10
+ end
11
+
12
+ def call(env)
13
+ req = Rack::Request.new(env)
14
+ if redirect = find_redirect_for(req.path)
15
+ return redirect_to(redirect.target)
16
+ end
17
+ @app.call(env)
18
+ end
19
+
20
+ def find_redirect_for(request_path)
21
+ Cmor::Cms::Redirect.published.where(source: request_path).first
22
+ end
23
+ # def call(env)
24
+ # req = Rack::Request.new(env)
25
+ # return redirect(redirects[req.path]) if redirects.include?(req.path)
26
+ # @app.call(env)
27
+ # end
28
+
29
+ # def redirects
30
+ # { '/source' => '/target' }
31
+ # end
32
+ end
33
+ end
34
+ end
@@ -1,7 +1,7 @@
1
1
  module Cmor::Cms
2
2
  class Layout < ApplicationRecord
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 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
@@ -0,0 +1,13 @@
1
+ module Cmor
2
+ module Cms
3
+ class Redirect < ApplicationRecord
4
+ include ActsAsPublished::ActiveRecord
5
+ acts_as_published
6
+
7
+ acts_as_list
8
+
9
+ validates :source, presence: true
10
+ validates :target, presence: true
11
+ end
12
+ end
13
+ end
@@ -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
@@ -22,6 +22,9 @@ de:
22
22
  cmor/cms/partial:
23
23
  one: Fragment
24
24
  other: Fragmente
25
+ cmor/cms/redirect:
26
+ one: Umleitung
27
+ other: Umleitungen
25
28
  cmor/cms/template:
26
29
  one: Vorlage
27
30
  other: Vorlagen
@@ -113,6 +116,11 @@ de:
113
116
  locale: Sprache
114
117
  path_and_filename: Dateipfad
115
118
  pathname: Pfad
119
+ cmor/cms/redirect:
120
+ <<: *defaults
121
+ source: Quelle
122
+ target: Ziel
123
+ position: Position
116
124
  cmor/cms/template:
117
125
  <<: *defaults
118
126
  basename: Name
@@ -22,6 +22,9 @@ en:
22
22
  cmor/cms/partial:
23
23
  one: Partial
24
24
  other: Partials
25
+ cmor/cms/redirect:
26
+ one: Umleitung
27
+ other: Umleitungen
25
28
  cmor/cms/template:
26
29
  one: Template
27
30
  other: Templates
@@ -111,6 +114,11 @@ en:
111
114
  locale: Language
112
115
  path_and_filename: Filepath
113
116
  pathname: Path
117
+ cmor/cms/redirect:
118
+ <<: *defaults
119
+ source: Source
120
+ target: Target
121
+ position: Position
114
122
  cmor/cms/template:
115
123
  <<: *defaults
116
124
  basename: Name
@@ -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,12 @@
1
+ class CreateCmorCmsRedirects < ActiveRecord::Migration[5.2]
2
+ def change
3
+ create_table :cmor_cms_redirects do |t|
4
+ t.text :source
5
+ t.text :target
6
+ t.integer :position
7
+ t.timestamp :published_at
8
+
9
+ t.timestamps
10
+ end
11
+ end
12
+ end
@@ -4,8 +4,6 @@ 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
-
9
7
  require 'cmor/cms/controller_extensions/layout_resolver'
10
8
  require 'cmor/cms/controller_extensions/page_resolver'
11
9
  require 'cmor/cms/controller_extensions/partial_resolver'
@@ -55,8 +55,9 @@ module ActionView
55
55
  template = determine_template(options)
56
56
 
57
57
  prepend_formats(template.format)
58
-
59
- render_template(context, template, (template.layout || options[:layout]), options[:locals] || {})
58
+
59
+ layout = (template.respond_to?(:layout) ? template.layout : nil) || options[:layout]
60
+ render_template(context, template, (layout || options[:layout]), options[:locals] || {})
60
61
  end
61
62
  end
62
63
  end
@@ -11,6 +11,14 @@ 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
18
+
19
+ initializer "cmor_cms_engine.add_redirect_middleware" do |app|
20
+ app.middleware.use Cmor::Cms::RedirectMiddleware
21
+ end
14
22
  end
15
23
  end
16
24
  end
@@ -1,3 +1,4 @@
1
+ require 'acts_as_list'
1
2
  require 'acts_as_published'
2
3
  require 'awesome_nested_set'
3
4
  require 'cmor_core_frontend'
@@ -0,0 +1,6 @@
1
+ FactoryBot.define do
2
+ factory :cmor_cms_redirect, class: 'Cmor::Cms::Redirect' do
3
+ source { "/source" }
4
+ target { "/target" }
5
+ end
6
+ 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.54.pre
4
+ version: 0.0.59.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-05-20 00:00:00.000000000 Z
11
+ date: 2020-08-18 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.54.pre
33
+ version: 0.0.59.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.54.pre
40
+ version: 0.0.59.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.54.pre
47
+ version: 0.0.59.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.54.pre
54
+ version: 0.0.59.pre
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: sqlite3
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -318,6 +318,20 @@ dependencies:
318
318
  - - ">="
319
319
  - !ruby/object:Gem::Version
320
320
  version: '0'
321
+ - !ruby/object:Gem::Dependency
322
+ name: acts_as_list
323
+ requirement: !ruby/object:Gem::Requirement
324
+ requirements:
325
+ - - ">="
326
+ - !ruby/object:Gem::Version
327
+ version: '0'
328
+ type: :runtime
329
+ prerelease: false
330
+ version_requirements: !ruby/object:Gem::Requirement
331
+ requirements:
332
+ - - ">="
333
+ - !ruby/object:Gem::Version
334
+ version: '0'
321
335
  - !ruby/object:Gem::Dependency
322
336
  name: awesome_nested_set
323
337
  requirement: !ruby/object:Gem::Requirement
@@ -418,11 +432,13 @@ files:
418
432
  - app/assets/stylesheets/cmor/cms/application.css
419
433
  - app/assets/stylesheets/cmor/cms/application/keep.css
420
434
  - app/assets/stylesheets/cmor_cms.css
435
+ - app/concerns/cmor/cms/models/database_template_concern.rb
421
436
  - app/concerns/cmor/cms/navigation_item/properties_concern.rb~
422
437
  - app/controllers/cmor/cms/page_controller.rb
423
438
  - app/importers/cmor/cms/importers/navigation.rb
424
439
  - app/importers/cmor/cms/importers/navigation_item.rb
425
440
  - app/importers/cmor/cms/importers/page.rb
441
+ - app/middlewares/cmor/cms/redirect_middleware.rb
426
442
  - app/models/cmor/cms/content_block.rb
427
443
  - app/models/cmor/cms/content_box.rb
428
444
  - app/models/cmor/cms/layout.rb
@@ -430,6 +446,7 @@ files:
430
446
  - app/models/cmor/cms/navigation_item.rb
431
447
  - app/models/cmor/cms/page.rb
432
448
  - app/models/cmor/cms/partial.rb
449
+ - app/models/cmor/cms/redirect.rb
433
450
  - app/models/cmor/cms/template.rb
434
451
  - app/resolvers/cmor/cms/database_resolver.rb
435
452
  - app/resolvers/cmor/cms/layout_resolver.rb
@@ -449,7 +466,6 @@ files:
449
466
  - config/initializers/assets.rb
450
467
  - config/initializers/mime_types.rb
451
468
  - config/initializers/simple_navigation.rb
452
- - config/initializers/textile_support.rb
453
469
  - config/locales/de.yml
454
470
  - config/locales/en.yml
455
471
  - config/navigation.rb
@@ -467,6 +483,7 @@ files:
467
483
  - db/migrate/20200120134422_add_published_at_to_cmor_cms_navigation_items.rb
468
484
  - db/migrate/20200120141440_set_all_publishable_to_published.rb
469
485
  - db/migrate/20200514115526_create_cmor_cms_layouts.rb
486
+ - db/migrate/20200813085847_create_cmor_cms_redirects.rb
470
487
  - lib/cmor/cms.rb
471
488
  - lib/cmor/cms/action_view/template_patch.rb
472
489
  - lib/cmor/cms/action_view/template_renderer_patch.rb
@@ -476,7 +493,6 @@ files:
476
493
  - lib/cmor/cms/controller_extensions/partial_resolver.rb
477
494
  - lib/cmor/cms/controller_extensions/template_resolver.rb
478
495
  - lib/cmor/cms/database_resolver.rb~
479
- - lib/cmor/cms/database_template.rb
480
496
  - lib/cmor/cms/engine.rb
481
497
  - lib/cmor/cms/version.rb
482
498
  - lib/cmor_cms.rb
@@ -491,6 +507,7 @@ files:
491
507
  - spec/factories/cmor/cms/navigations.rb
492
508
  - spec/factories/cmor/cms/pages.rb
493
509
  - spec/factories/cmor/cms/partials.rb
510
+ - spec/factories/cmor/cms/redirects.rb
494
511
  - spec/factories/cmor/cms/templates.rb
495
512
  homepage: https://github.com/content-management-on-rails
496
513
  licenses:
@@ -511,7 +528,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
511
528
  - !ruby/object:Gem::Version
512
529
  version: 1.3.1
513
530
  requirements: []
514
- rubygems_version: 3.1.3
531
+ rubygems_version: 3.1.4
515
532
  signing_key:
516
533
  specification_version: 4
517
534
  summary: CMS base module for ruby on rails.
@@ -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