cmor_cms 0.0.39.pre → 0.0.40.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: b7c80c480fab0cb7b99b4d927dc088d1d42e2ea20371ee945016bb3766e4a029
4
- data.tar.gz: e4ff4f8a6239cdf08d49c31690712b988bae5b7210ea9b4c84e5052806bdd580
3
+ metadata.gz: c14aea3d250b94a5c6a20ae11c0adc0d8404ec1d552809f203abf6596a437df5
4
+ data.tar.gz: 3a41881e403d72d8a11ccfd619e59ff803e0dd3eb46fd5ce4fe5b4d2feccf746
5
5
  SHA512:
6
- metadata.gz: e25bd9852831f2393fd7c43469ebcff82070d395e4272fbb58ce9b8edeb28dfd2fdabb3b8d4c8bf55e7c685f75e58017102807a230e353306bdbe74d5c66107c
7
- data.tar.gz: 6485931393621ab7f3418dba90c8ce6c8e8a8ba46b833480576e3f98e5b0d345fa8d3483e3b0bd3ae7901f1e03c0f957b1018c7ba84a8c3f6bcb437a5ae88ea6
6
+ metadata.gz: ea8e4e13c05f9ca30da20e7832946ff9c553bb66630cf57563a8fec6d820395fd9ec9e71145d75bed57236b3d022486fd944a5a41ffc50757eced1b16102b075
7
+ data.tar.gz: 2a9a4bd52710d2649aba11cecb535f8de9a798921b8b821c08f954464ecb414502d5057daefbce4ddf6208cb723dc193a4bd2f6ffa2adbfcd0737e339d681484
@@ -1,5 +1,3 @@
1
- require 'cmor/cms/database_resolver'
2
-
3
1
  module Cmor
4
2
  module Cms
5
3
  class PageResolver < ::ActionView::Resolver
@@ -1,5 +1,3 @@
1
- require 'cmor/cms/database_resolver'
2
-
3
1
  module Cmor
4
2
  module Cms
5
3
  class PartialResolver < ::ActionView::Resolver
@@ -1,5 +1,3 @@
1
- require 'cmor/cms/database_resolver'
2
-
3
1
  module Cmor
4
2
  module Cms
5
3
  class TemplateResolver < ::ActionView::Resolver
@@ -0,0 +1,121 @@
1
+ module Cmor
2
+ module Cms
3
+ module DatabaseResolver
4
+ # Include hook for class methods
5
+ def self.included(base)
6
+ base.extend(ClassMethods)
7
+ end
8
+
9
+ # class methods go here
10
+ module ClassMethods
11
+ end
12
+
13
+ # instance methods go here
14
+ def find_templates(name, prefix, partial, details, outside_app_allowed = false)
15
+ return [] unless resolve(partial)
16
+
17
+ conditions = {
18
+ pathname: assert_slashs(prefix.to_s),
19
+ basename: normalize_basename(name),
20
+ locale: normalize_array(details[:locale]).first,
21
+ format: normalize_array(details[:formats]).first,
22
+ handler: normalize_array(details[:handlers])
23
+ }
24
+
25
+ format = conditions.delete(:format)
26
+ locale = conditions.delete(:locale)
27
+
28
+ query = template_class.constantize.where(conditions)
29
+
30
+ # 2) Check for templates with the given format or format is nil
31
+ query = query.where(["format = ? OR format = '' OR format IS NULL", format])
32
+
33
+ # 3) Ensure templates with format come first
34
+ query = query.order('format DESC')
35
+
36
+ # 4) Check for templates with the given locale or locale is nil
37
+ query = query.where(["locale = ? OR locale = '' OR locale IS NULL", locale])
38
+
39
+ # 5) Ensure templates with locale come first
40
+ query = query.order('locale DESC')
41
+
42
+ # 6) Now trigger the query passing on conditions to initialization
43
+ query.map do |record|
44
+ initialize_template(record, details)
45
+ end
46
+ end
47
+
48
+ # Initialize an ActionView::Template object based on the record found.
49
+ if Rails.version < '6.0'
50
+ def initialize_template(record, details)
51
+ source = build_source(record)
52
+ identifier = "#{record.class} - #{record.id} - #{record.pathname}#{record.basename}"
53
+ handler = ::ActionView::Template.registered_template_handler(record.handler)
54
+
55
+ # 5) Check for the record.format, if none is given, try the template
56
+ # handler format and fallback to the one given on conditions
57
+ format = record.format && Mime[record.format]
58
+ format ||= handler.default_format if handler.respond_to?(:default_format)
59
+ format ||= details[:formats]
60
+ details = {
61
+ format: format,
62
+ updated_at: record.updated_at,
63
+ virtual_path: "#{record.pathname}#{record.basename}"
64
+ }
65
+
66
+ details[:layout] = record.layout if record.respond_to?(:layout) && record.layout.present?
67
+
68
+ ::ActionView::Template.new(source, identifier, handler, details)
69
+ end
70
+ else
71
+ def initialize_template(record, details)
72
+ source = build_source(record)
73
+ identifier = "#{record.class} - #{record.id} - #{record.pathname}#{record.basename}"
74
+ handler = ::ActionView::Template.registered_template_handler(record.handler)
75
+ virtual_path = "#{record.pathname}#{record.basename}"
76
+ layout = record.layout if record.respond_to?(:layout) && record.layout.present?
77
+ locals = []
78
+
79
+ # 5) Check for the record.format, if none is given, try the template
80
+ # handler format and fallback to the one given on conditions
81
+ format = record.format && Mime[record.format]
82
+ format ||= handler.default_format if handler.respond_to?(:default_format)
83
+ format ||= details[:formats]
84
+
85
+ # Rails 6 passes an array of formats instead of a symbol
86
+ format = format.is_a?(Array) ? format.first : format.symbol
87
+
88
+ ::ActionView::Template.new(source, identifier, handler, format: format, virtual_path: virtual_path, layout: layout, locals: locals)
89
+ end
90
+ end
91
+
92
+ def assert_slashs(prefix)
93
+ output = prefix.dup
94
+ output << '/' unless output.end_with?('/')
95
+ output = '/' << output unless output.start_with?('/')
96
+ output
97
+ end
98
+
99
+ # Normalize arrays by converting all symbols to strings.
100
+ def normalize_array(array)
101
+ array.map(&:to_s)
102
+ end
103
+
104
+ def build_source
105
+ fail 'call to abstract method #build_source'
106
+ end
107
+
108
+ def normalize_basename(_basename)
109
+ fail 'call to abstract method #normalize_basename'
110
+ end
111
+
112
+ def resolve(_partial_flag)
113
+ fail 'call to abstract method #resolve'
114
+ end
115
+
116
+ def template_class
117
+ fail 'call to abstract method #template_class'
118
+ end
119
+ end
120
+ end
121
+ 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.39.pre
4
+ version: 0.0.40.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: 2019-10-30 00:00:00.000000000 Z
11
+ date: 2019-11-04 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.39.pre
33
+ version: 0.0.40.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.39.pre
40
+ version: 0.0.40.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.39.pre
47
+ version: 0.0.40.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.39.pre
54
+ version: 0.0.40.pre
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: sqlite3
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -402,6 +402,7 @@ files:
402
402
  - app/models/cmor/cms/partial.rb
403
403
  - app/models/cmor/cms/template.rb
404
404
  - app/models/concerns/model/cmor/cms/navigation_item/properties_concern.rb
405
+ - app/resolvers/cmor/cms/database_resolver.rb
405
406
  - app/resolvers/cmor/cms/page_resolver.rb
406
407
  - app/resolvers/cmor/cms/partial_resolver.rb
407
408
  - app/resolvers/cmor/cms/template_resolver.rb
@@ -437,7 +438,7 @@ files:
437
438
  - lib/cmor/cms/controller_extensions/page_resolver.rb
438
439
  - lib/cmor/cms/controller_extensions/partial_resolver.rb
439
440
  - lib/cmor/cms/controller_extensions/template_resolver.rb
440
- - lib/cmor/cms/database_resolver.rb
441
+ - lib/cmor/cms/database_resolver.rb~
441
442
  - lib/cmor/cms/database_template.rb
442
443
  - lib/cmor/cms/engine.rb
443
444
  - lib/cmor/cms/version.rb