cmor_cms 0.0.39.pre → 0.0.40.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: 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