Class: Optimacms::Template
- Inherits:
-
ActiveRecord::Base
- Object
- ActiveRecord::Base
- Optimacms::Template
- Defined in:
- app/models/optimacms/template.rb
Constant Summary collapse
- EXTENSION_DEFAULT =
'html'- EXTENSIONS =
{'blank'=>'', 'html'=>'html', 'erb'=>'html.erb', 'haml'=>'html.haml'}
Class Method Summary collapse
-
.base_dir ⇒ Object
settings.
-
.create_folders_tree(dirpath) ⇒ Object
create folders if necessary - NOT WORKING.
- .filename_ext(format) ⇒ Object
- .filename_ext_with_dot(format) ⇒ Object
- .filename_lang_postfix(lang) ⇒ Object
-
.where_parent(parent_id) ⇒ Object
search.
Instance Method Summary collapse
- #_before_create ⇒ Object
- #_before_destroy ⇒ Object
- #_before_update ⇒ Object
-
#_before_validation ⇒ Object
callbacks.
-
#attach ⇒ Object
operations.
-
#check_parent_folder_exists ⇒ Object
validations.
-
#content(lang = '') ⇒ Object
content.
- #content=(v, lang = '') ⇒ Object
- #content_file_exists?(lang = '') ⇒ Boolean
-
#filename_base ⇒ Object
base filename depending on type for page = name for partial = _name.
- #fix_basedirpath ⇒ Object
-
#folder_delete ⇒ Object
folders.
- #folder_empty? ⇒ Boolean
- #folder_fullpath ⇒ Object
-
#folder_path ⇒ Object
folder.
- #fullpath(lang = '') ⇒ Object
- #has_code? ⇒ Boolean
- #is_folder? ⇒ Boolean
- #is_layout? ⇒ Boolean
- #is_type_page? ⇒ Boolean
- #is_type_partial? ⇒ Boolean
-
#parent_title ⇒ Object
properties.
-
#path(lang = '') ⇒ Object
path.
- #set_basedirpath_from_parent ⇒ Object
-
#set_basepath ⇒ Object
operations with path.
- #set_parent_from_basedirpath ⇒ Object
- #to_s ⇒ Object
Class Method Details
.base_dir ⇒ Object
settings
51 52 53 |
# File 'app/models/optimacms/template.rb', line 51 def self.base_dir Rails.root.to_s + '/app/views/' end |
.create_folders_tree(dirpath) ⇒ Object
create folders if necessary - NOT WORKING
341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 |
# File 'app/models/optimacms/template.rb', line 341 def self.create_folders_tree(dirpath) a = dirpath.split /\// d = '' parent_current = nil prev_d = d a.each do |s| d = d + (d=='' ? '' : '/') +s r = Template.where(is_folder: true, basepath: d).first if r parent_current = r next end # create missing folder path_new = File.basename(d) basedirpath_new = prev_d r = Template.create(is_folder: true, basename: path_new, basedirpath: basedirpath_new, title: path_new, parent: parent_current) parent_current = r prev_d = d end parent_current end |
.filename_ext(format) ⇒ Object
200 201 202 |
# File 'app/models/optimacms/template.rb', line 200 def self.filename_ext(format) EXTENSIONS[format] end |
.filename_ext_with_dot(format) ⇒ Object
204 205 206 207 208 |
# File 'app/models/optimacms/template.rb', line 204 def self.filename_ext_with_dot(format) ext = filename_ext(format) ext = '.'+ext unless ext.blank? ext end |
.filename_lang_postfix(lang) ⇒ Object
195 196 197 198 |
# File 'app/models/optimacms/template.rb', line 195 def self.filename_lang_postfix(lang) return '' if lang=='' return '.'+lang end |
.where_parent(parent_id) ⇒ Object
search
90 91 92 93 94 95 96 |
# File 'app/models/optimacms/template.rb', line 90 def self.where_parent(parent_id) if parent_id==0 roots elsif parent_id>0 children_of(parent_id.to_s) end end |
Instance Method Details
#_before_create ⇒ Object
275 276 277 278 279 280 281 282 283 284 285 286 287 |
# File 'app/models/optimacms/template.rb', line 275 def _before_create if self.is_folder # create dir on disk Fileutils::Fileutils.create_dir_if_not_exists self.folder_fullpath else # add folders if needed if self.parent_id.nil? && !self.basedirpath.blank? self.parent = Template.create_folders_tree(self.basedirpath) end end end |
#_before_destroy ⇒ Object
318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 |
# File 'app/models/optimacms/template.rb', line 318 def _before_destroy if self.is_folder # cannot delete not empty dir if !self.folder_empty? return false end # delete dir folder_delete else # file end true end |
#_before_update ⇒ Object
289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 |
# File 'app/models/optimacms/template.rb', line 289 def _before_update if self.is_folder oldpath = self.folder_fullpath self.make_basepath # rename dir on disk if self.basename_changed? require 'fileutils' newpath = self.folder_fullpath if Dir.exists?(newpath) errors.add(:basename, 'Folder already exists') return false end FileUtils.mv oldpath, newpath end else # file # TODO: rename file #self.make_basepath end end |
#_before_validation ⇒ Object
callbacks
261 262 263 264 265 266 267 268 269 270 271 272 |
# File 'app/models/optimacms/template.rb', line 261 def _before_validation fix_basedirpath # parent, basedirpath if self.parent_id.nil? && !self.basedirpath.blank? set_parent_from_basedirpath elsif self.basedirpath.nil? && !self.parent_id.nil? set_basedirpath_from_parent end set_basepath end |
#attach ⇒ Object
operations
102 103 104 105 106 107 108 109 110 |
# File 'app/models/optimacms/template.rb', line 102 def attach # check if file exists if !content_file_exists? errors.add(:attach, "file not found") return false end save end |
#check_parent_folder_exists ⇒ Object
validations
143 144 145 146 147 |
# File 'app/models/optimacms/template.rb', line 143 def check_parent_folder_exists if self.parent_id.nil? && !self.basedirpath.blank? errors.add(:basedirpath, "folder not exists. create it first") end end |
#content(lang = '') ⇒ Object
content
169 170 171 172 173 174 |
# File 'app/models/optimacms/template.rb', line 169 def content(lang='') filename = fullpath(lang) return nil if filename.nil? return '' if !File.exists? filename File.read(filename) end |
#content=(v, lang = '') ⇒ Object
176 177 178 179 180 |
# File 'app/models/optimacms/template.rb', line 176 def content=(v, lang='') File.open(self.fullpath(lang), "w+") do |f| f.write(v) end end |
#content_file_exists?(lang = '') ⇒ Boolean
127 128 129 130 131 132 133 134 135 136 137 138 |
# File 'app/models/optimacms/template.rb', line 127 def content_file_exists?(lang='') postfixes = EXTENSIONS.map{|k,v| '.'+v} found = false postfixes.each do |p| if File.exists?(self.fullpath(lang)) found = true break end end found end |
#filename_base ⇒ Object
base filename depending on type for page = name for partial = _name
188 189 190 191 192 |
# File 'app/models/optimacms/template.rb', line 188 def filename_base return '_'+self.basename if self.is_type_partial? self.basename end |
#fix_basedirpath ⇒ Object
225 226 227 228 229 230 |
# File 'app/models/optimacms/template.rb', line 225 def fix_basedirpath self.basedirpath ||= '' if !self.basedirpath.blank? && self.basedirpath[-1] !='/' self.basedirpath << '/' end end |
#folder_delete ⇒ Object
folders
370 371 372 373 |
# File 'app/models/optimacms/template.rb', line 370 def folder_delete dirpath = self.folder_fullpath FileUtils.remove_dir(dirpath) if Dir.exists? dirpath end |
#folder_empty? ⇒ Boolean
375 376 377 378 379 380 381 382 |
# File 'app/models/optimacms/template.rb', line 375 def folder_empty? dirpath = self.folder_fullpath if !Dir.exists? dirpath return true end return Dir.entries(dirpath).size == 2 end |
#folder_fullpath ⇒ Object
159 160 161 162 163 |
# File 'app/models/optimacms/template.rb', line 159 def folder_fullpath f = self.folder_path return nil if f.nil? Template.base_dir + f end |
#folder_path ⇒ Object
folder
154 155 156 157 |
# File 'app/models/optimacms/template.rb', line 154 def folder_path return nil if self.basepath.nil? self.basepath+'/' end |
#fullpath(lang = '') ⇒ Object
121 122 123 124 125 |
# File 'app/models/optimacms/template.rb', line 121 def fullpath(lang='') f = self.path(lang) return nil if f.nil? Template.base_dir + f end |
#has_code? ⇒ Boolean
66 67 68 |
# File 'app/models/optimacms/template.rb', line 66 def has_code? ['haml', 'erb', 'blank'].include?(self.tpl_format) end |
#is_folder? ⇒ Boolean
70 71 72 |
# File 'app/models/optimacms/template.rb', line 70 def is_folder? self.is_folder end |
#is_layout? ⇒ Boolean
74 75 76 |
# File 'app/models/optimacms/template.rb', line 74 def is_layout? return self.type_id==TemplateType::TYPE_LAYOUT end |
#is_type_page? ⇒ Boolean
78 79 80 |
# File 'app/models/optimacms/template.rb', line 78 def is_type_page? return self.type_id==TemplateType::TYPE_PAGE end |
#is_type_partial? ⇒ Boolean
82 83 84 |
# File 'app/models/optimacms/template.rb', line 82 def is_type_partial? return self.type_id==TemplateType::TYPE_PARTIAL end |
#parent_title ⇒ Object
properties
61 62 63 |
# File 'app/models/optimacms/template.rb', line 61 def parent_title self.parent.title end |
#path(lang = '') ⇒ Object
path
116 117 118 119 |
# File 'app/models/optimacms/template.rb', line 116 def path(lang='') return nil if self.basename.nil? self.basedirpath + filename_base + Template.filename_lang_postfix(lang) + Template.filename_ext_with_dot(self.tpl_format) end |
#set_basedirpath_from_parent ⇒ Object
232 233 234 235 236 237 238 239 240 241 242 |
# File 'app/models/optimacms/template.rb', line 232 def set_basedirpath_from_parent v = '' if self.parent_id.nil? v = '' else v = self.parent.basepath+'/' if self.parent_id >0 end self.basedirpath = v #v end |
#set_basepath ⇒ Object
operations with path
213 214 215 216 217 218 219 220 221 222 |
# File 'app/models/optimacms/template.rb', line 213 def set_basepath if self.parent.nil? self.basepath = self.basename self.basedirpath ||= '' else self.basepath = self.parent.basepath+'/'+self.basename self.basedirpath ||= self.parent.basepath+'/' end end |
#set_parent_from_basedirpath ⇒ Object
244 245 246 247 248 249 250 251 252 253 254 255 |
# File 'app/models/optimacms/template.rb', line 244 def set_parent_from_basedirpath v = self.basedirpath # set parent_id from dir d = v.chop r = Template.where(is_folder: true, basepath: d).first if r self.parent_id = r.id else self.parent_id = nil end end |
#to_s ⇒ Object
44 45 46 |
# File 'app/models/optimacms/template.rb', line 44 def to_s "#{title} (#{basepath})" end |