Class: Optimacms::Template

Inherits:
ActiveRecord::Base
  • Object
show all
Defined in:
app/models/optimacms/template.rb

Constant Summary collapse

FORMAT_DEFAULT =
'html'
EXTENSIONS =
{'html'=>'html', 'erb'=>'html.erb', 'haml'=>'html.haml'}

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.base_dir ⇒ Object

settings and helpers



161
162
163
# File 'app/models/optimacms/template.rb', line 161

def self.base_dir
  Rails.root.to_s + '/app/views/'
end

.content_filename_ext(format) ⇒ Object



170
171
172
# File 'app/models/optimacms/template.rb', line 170

def self.content_filename_ext(format)
  EXTENSIONS[format]
end

.content_filename_lang_postfix(lang) ⇒ Object



165
166
167
168
# File 'app/models/optimacms/template.rb', line 165

def self.content_filename_lang_postfix(lang)
  return '' if lang==''
  return '.'+lang
end

.create_folders_tree(dirpath) ⇒ Object

create folders if necessary - NOT WORKING



302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
# File 'app/models/optimacms/template.rb', line 302

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

.where_parent(parent_id) ⇒ Object

search



66
67
68
69
70
71
72
# File 'app/models/optimacms/template.rb', line 66

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



236
237
238
239
240
241
242
243
244
245
246
247
248
# File 'app/models/optimacms/template.rb', line 236

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



279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
# File 'app/models/optimacms/template.rb', line 279

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



250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
# File 'app/models/optimacms/template.rb', line 250

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



222
223
224
225
226
227
228
229
230
231
232
233
# File 'app/models/optimacms/template.rb', line 222

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



78
79
80
81
82
83
84
85
86
# File 'app/models/optimacms/template.rb', line 78

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



119
120
121
122
123
# File 'app/models/optimacms/template.rb', line 119

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



145
146
147
148
149
150
# File 'app/models/optimacms/template.rb', line 145

def content(lang='')
  filename =  fullpath(lang)
  return nil if filename.nil?
  return '' if !File.exists? filename
  File.read(filename)
end

#content=(v, lang = '') ⇒ Object



152
153
154
155
156
# File 'app/models/optimacms/template.rb', line 152

def content=(v, lang='')
  File.open(self.fullpath(lang), "w+") do |f|
    f.write(v)
  end
end

#content_file_exists?(lang = '') ⇒ Boolean

Returns:

  • (Boolean)


103
104
105
106
107
108
109
110
111
112
113
114
# File 'app/models/optimacms/template.rb', line 103

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

#fix_basedirpath ⇒ Object



188
189
190
191
192
193
# File 'app/models/optimacms/template.rb', line 188

def fix_basedirpath
  self.basedirpath ||= ''
  if !self.basedirpath.blank? && self.basedirpath[-1] !='/'
    self.basedirpath << '/'
  end
end

#folder_delete ⇒ Object

folders



331
332
333
334
# File 'app/models/optimacms/template.rb', line 331

def folder_delete
  dirpath = self.folder_fullpath
  FileUtils.remove_dir(dirpath) if Dir.exists? dirpath
end

#folder_empty? ⇒ Boolean

Returns:

  • (Boolean)


336
337
338
339
340
341
342
343
# File 'app/models/optimacms/template.rb', line 336

def folder_empty?
  dirpath = self.folder_fullpath
  if !Dir.exists? dirpath
    return true
  end

  return Dir.entries(dirpath).size == 2
end

#folder_fullpath ⇒ Object



135
136
137
138
139
# File 'app/models/optimacms/template.rb', line 135

def folder_fullpath
  f = self.folder_path
  return nil if f.nil?
  Template.base_dir + f
end

#folder_path ⇒ Object

folder



130
131
132
133
# File 'app/models/optimacms/template.rb', line 130

def folder_path
  return nil if self.basepath.nil?
  self.basepath+'/'
end

#fullpath(lang = '') ⇒ Object



97
98
99
100
101
# File 'app/models/optimacms/template.rb', line 97

def fullpath(lang='')
  f = self.path(lang)
  return nil if f.nil?
  Template.base_dir + f
end

#has_code? ⇒ Boolean

Returns:

  • (Boolean)


55
56
57
# File 'app/models/optimacms/template.rb', line 55

def has_code?
  ['haml', 'erb'].include?(self.tpl_format)
end

#is_folder? ⇒ Boolean

Returns:

  • (Boolean)


59
60
61
# File 'app/models/optimacms/template.rb', line 59

def is_folder?
  self.is_folder
end

#parent_title ⇒ Object

properties



50
51
52
# File 'app/models/optimacms/template.rb', line 50

def parent_title
  self.parent.title
end

#path(lang = '') ⇒ Object

path



92
93
94
95
# File 'app/models/optimacms/template.rb', line 92

def path(lang='')
  return nil if self.basename.nil?
  self.basedirpath+self.basename+Template.content_filename_lang_postfix(lang)+'.'+Template.content_filename_ext(self.tpl_format)
end

#set_basedirpath_from_parent ⇒ Object



195
196
197
198
199
200
201
202
203
204
205
# File 'app/models/optimacms/template.rb', line 195

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



176
177
178
179
180
181
182
183
184
185
# File 'app/models/optimacms/template.rb', line 176

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



207
208
209
210
211
212
213
214
215
216
217
218
# File 'app/models/optimacms/template.rb', line 207

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



43
44
45
# File 'app/models/optimacms/template.rb', line 43

def to_s
  "#{title} (#{basepath})"
end