Class: Page
Defined Under Namespace
Classes: MissingRootPageError
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
included
included, #render_tag, #tag_descriptions, #tags, #warn_of_tag_deprecation
Instance Attribute Details
Returns the value of attribute pagination_parameters.
40
41
42
|
# File 'app/models/page.rb', line 40
def
@pagination_parameters
end
|
#request ⇒ Object
Returns the value of attribute request.
40
41
42
|
# File 'app/models/page.rb', line 40
def request
@request
end
|
#response ⇒ Object
Returns the value of attribute response.
40
41
42
|
# File 'app/models/page.rb', line 40
def response
@response
end
|
Class Method Details
.date_column_names ⇒ Object
257
258
259
|
# File 'app/models/page.rb', line 257
def date_column_names
columns.collect { |c| c.name if c.sql_type =~ /(date|time)/ }.compact
end
|
.descendant_class(class_name) ⇒ Object
314
315
316
317
318
319
320
321
322
|
# File 'app/models/page.rb', line 314
def descendant_class(class_name)
raise ArgumentError.new('argument must be a valid descendant of Page') unless is_descendant_class_name?(class_name)
if ['', nil, 'Page'].include?(class_name)
Page
else
class_name.constantize
end
end
|
.display_name(string = nil) ⇒ Object
261
262
263
264
265
266
267
268
269
270
271
272
273
274
|
# File 'app/models/page.rb', line 261
def display_name(string = nil)
if string
@display_name = string
else
@display_name ||= begin
n = name.to_s
n.sub(/^(.+?)Page$/, '\1')
n.gsub(/([A-Z])/, ' \1')
n.strip
end
end
@display_name = @display_name + ' - not installed' if missing? && @display_name !~ /not installed/
@display_name
end
|
.display_name=(string) ⇒ Object
276
277
278
|
# File 'app/models/page.rb', line 276
def display_name=(string)
display_name(string)
end
|
.find_by_path(path, live = true) ⇒ Object
251
252
253
254
255
|
# File 'app/models/page.rb', line 251
def find_by_path(path, live = true)
raise MissingRootPageError unless root
root.find_by_path(path, live)
end
|
.is_descendant_class_name?(class_name) ⇒ Boolean
310
311
312
|
# File 'app/models/page.rb', line 310
def is_descendant_class_name?(class_name)
(Page.descendants.map(&:to_s) + [nil, '', 'Page']).include?(class_name)
end
|
.load_subclasses ⇒ Object
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
|
# File 'app/models/page.rb', line 280
def load_subclasses
([TRUSTY_CMS_ROOT] + TrustyCms::Extension.descendants.map(&:root)).each do |path|
Dir["#{path}/app/models/*_page.rb"].each do |page|
$1.camelize.constantize if page =~ %r{/([^/]+)\.rb}
end
end
if database_exists?
if ActiveRecord::Base.connection.data_sources.include?('pages') && Page.column_names.include?('class_name') Page.connection.select_values("SELECT DISTINCT class_name FROM pages WHERE class_name <> '' AND class_name IS NOT NULL").each do |p|
begin
p.constantize
rescue NameError, LoadError
Rails.logger.error NameError
end
end
end
end
end
|
.missing? ⇒ Boolean
324
325
326
|
# File 'app/models/page.rb', line 324
def missing?
false
end
|
.new_with_defaults(config = TrustyCms::Config) ⇒ Object
301
302
303
304
305
306
307
308
|
# File 'app/models/page.rb', line 301
def new_with_defaults(config = TrustyCms::Config)
page = new
page.parts.concat default_page_parts(config)
page.fields.concat default_page_fields(config)
default_status = config['defaults.page.status']
page.status = Status[default_status] if default_status
page
end
|
.root ⇒ Object
247
248
249
|
# File 'app/models/page.rb', line 247
def root
find_by_parent_id(nil)
end
|
.save_order(new_position) ⇒ Object
147
148
149
150
151
152
153
154
|
# File 'app/models/page.rb', line 147
def self.save_order(new_position)
dictionary = Hash[*new_position.flatten(1)]
dictionary.each do |id, position|
page = Page.find_by_id(id)
page.position = position if page.position.present?
page.save
end
end
|
Instance Method Details
#allowed_children_lookup ⇒ Object
238
239
240
|
# File 'app/models/page.rb', line 238
def allowed_children_lookup
[default_child, *Page.descendants.sort_by(&:name)].uniq
end
|
#cache? ⇒ Boolean
65
66
67
|
# File 'app/models/page.rb', line 65
def cache?
true
end
|
#child_path(child) ⇒ Object
Also known as:
child_url
69
70
71
|
# File 'app/models/page.rb', line 69
def child_path(child)
clean_path(path + '/' + child.slug)
end
|
#default_child ⇒ Object
234
235
236
|
# File 'app/models/page.rb', line 234
def default_child
self.class.default_child
end
|
#description ⇒ Object
57
58
59
|
# File 'app/models/page.rb', line 57
def description
self['description']
end
|
#description=(value) ⇒ Object
61
62
63
|
# File 'app/models/page.rb', line 61
def description=(value)
self['description'] = value
end
|
#field(name) ⇒ Object
95
96
97
98
99
100
101
|
# File 'app/models/page.rb', line 95
def field(name)
if new_record? || fields.any?(&:new_record?)
fields.detect { |f| f.name.downcase == name.to_s.downcase }
else
fields.find_by_name name.to_s
end
end
|
#find_by_path(path, live = true, clean = true) ⇒ Object
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
|
# File 'app/models/page.rb', line 194
def find_by_path(path, live = true, clean = true)
return nil if virtual?
path = clean_path(path) if clean
my_path = self.path
if (my_path == path) && ((not live) || published?)
return self
elsif path =~ /^#{Regexp.quote(my_path)}([^\/]*)/
slug_child = children.find_by_slug($1)
if slug_child
found = slug_child.find_by_path(path, live, clean)
return found if found
end
children.each do |child|
found = child.find_by_path(path, live, clean)
return found if found
end
end
unless slug_child
file_not_found_types = ([FileNotFoundPage] + FileNotFoundPage.descendants)
file_not_found_names = file_not_found_types.collect { |x| x.name }
condition = (['class_name = ?'] * file_not_found_names.length).join(' or ')
condition = "status_id = #{Status[:published].id} and (#{condition})" if live
return children.where([condition] + file_not_found_names).first
end
slug_child
end
|
#has_or_inherits_part?(name) ⇒ Boolean
87
88
89
|
# File 'app/models/page.rb', line 87
def has_or_inherits_part?(name)
part?(name) || inherits_part?(name)
end
|
137
138
139
140
|
# File 'app/models/page.rb', line 137
def
{}
end
|
#inherits_part?(name) ⇒ Boolean
91
92
93
|
# File 'app/models/page.rb', line 91
def inherits_part?(name)
!part?(name) && ancestors.any? { |page| page.part?(name) }
end
|
#layout_with_inheritance ⇒ Object
Also known as:
layout
46
47
48
49
50
51
52
|
# File 'app/models/page.rb', line 46
def layout_with_inheritance
if layout_without_inheritance
layout_without_inheritance
else
parent.layout if parent?
end
end
|
#part(name) ⇒ Object
75
76
77
78
79
80
81
|
# File 'app/models/page.rb', line 75
def part(name)
if new_record? || parts.to_a.any?(&:new_record?)
parts.to_a.find { |p| p.name == name.to_s }
else
parts.find_by_name name.to_s
end
end
|
#part?(name) ⇒ Boolean
83
84
85
|
# File 'app/models/page.rb', line 83
def part?(name)
!part(name).nil?
end
|
#path ⇒ Object
Also known as:
url
119
120
121
122
123
124
125
|
# File 'app/models/page.rb', line 119
def path
if parent?
parent.child_path(self)
else
clean_path(slug)
end
end
|
#process(request, response) ⇒ Object
129
130
131
132
133
134
135
|
# File 'app/models/page.rb', line 129
def process(request, response)
@request = request
@response = response
(@response)
@response.body = render
@response.status = response_code
end
|
#published? ⇒ Boolean
103
104
105
|
# File 'app/models/page.rb', line 103
def published?
status == Status[:published]
end
|
#render ⇒ Object
173
174
175
176
177
178
179
|
# File 'app/models/page.rb', line 173
def render
if layout
parse_object(layout)
else
render_part(:body)
end
end
|
#render_part(part_name) ⇒ Object
181
182
183
184
185
186
187
188
|
# File 'app/models/page.rb', line 181
def render_part(part_name)
part = part(part_name)
if part
parse_object(part)
else
''
end
end
|
#render_snippet(snippet) ⇒ Object
190
191
192
|
# File 'app/models/page.rb', line 190
def render_snippet(snippet)
parse_object(snippet)
end
|
#response_code ⇒ Object
169
170
171
|
# File 'app/models/page.rb', line 169
def response_code
200
end
|
#scheduled? ⇒ Boolean
107
108
109
|
# File 'app/models/page.rb', line 107
def scheduled?
status == Status[:scheduled]
end
|
#set_allowed_children_cache ⇒ Object
242
243
244
|
# File 'app/models/page.rb', line 242
def set_allowed_children_cache
self.allowed_children_cache = allowed_children_lookup.collect(&:name).join(',')
end
|
#status ⇒ Object
111
112
113
|
# File 'app/models/page.rb', line 111
def status
Status.find(status_id)
end
|
#status=(value) ⇒ Object
115
116
117
|
# File 'app/models/page.rb', line 115
def status=(value)
self.status_id = value.id
end
|
#update_status ⇒ Object
223
224
225
226
227
228
229
230
231
232
|
# File 'app/models/page.rb', line 223
def update_status
self.published_at = Time.zone.now if published? && published_at == nil
if !published_at.nil? && (published? || scheduled?)
self[:status_id] = Status[:scheduled].id if published_at > Time.zone.now
self[:status_id] = Status[:published].id if published_at <= Time.zone.now
end
true
end
|