149 lines
3.7 KiB
Ruby
Executable file
149 lines
3.7 KiB
Ruby
Executable file
class Term < ActiveRecord::Base
|
|
unloadable
|
|
|
|
belongs_to :category, :class_name => 'TermCategory', :foreign_key => 'category_id'
|
|
belongs_to :project
|
|
belongs_to :author, :class_name => 'User', :foreign_key => 'author_id'
|
|
|
|
validates_presence_of :name, :project
|
|
validates_length_of :name, :maximum => 255
|
|
|
|
acts_as_attachable
|
|
|
|
acts_as_searchable :columns => ["#{table_name}.name", "#{table_name}.description"],
|
|
:project_key => [:project]
|
|
|
|
acts_as_event :title => Proc.new {|o| "#{l(:glossary_title)} ##{o.id}: #{o.name}" },
|
|
:description => Proc.new {|o| "#{o.description}"},
|
|
:datetime => :created_on,
|
|
:type => 'terms',
|
|
:url => Proc.new {|o| {:controller => 'glossary', :action => 'show', :id => o.project, :term_id => o.id} }
|
|
|
|
attr_accessible :project_id, :category_id, :author, :name, :name_en, :datatype, :codename, :description,
|
|
:rubi, :abbr_whole
|
|
|
|
def author
|
|
author_id ? User.find_by_id(author_id) : nil
|
|
end
|
|
|
|
def updater
|
|
updater_id ? User.find_by_id(updater_id) : nil
|
|
end
|
|
|
|
def project
|
|
Project.find_by_id(project_id)
|
|
end
|
|
|
|
def datetime
|
|
(self[:created_on] != self[:updated_on]) ? self[:updated_on] : self[:created_on]
|
|
end
|
|
|
|
def value(prmname)
|
|
case prmname
|
|
when 'project'
|
|
(project) ? project.name : ""
|
|
when 'category'
|
|
(category) ? category : ""
|
|
when 'datetime'
|
|
datetime
|
|
else
|
|
self[prmname]
|
|
end
|
|
end
|
|
|
|
def param_to_s(prmname)
|
|
if (prmname == 'created_on' or prmname == 'updated_on')
|
|
format_time(self[prmname])
|
|
else
|
|
value(prmname).to_s
|
|
end
|
|
end
|
|
|
|
def <=>(term)
|
|
id <=> term.id
|
|
end
|
|
|
|
|
|
def self.compare_safe(a, b, &blk)
|
|
if (!a and !b)
|
|
return 0
|
|
elsif (!a or !b)
|
|
return -1 if a
|
|
return 1 if b
|
|
end
|
|
yield(a,b)
|
|
end
|
|
|
|
|
|
def self.compare_by_param(prm, a, b)
|
|
case prm
|
|
when 'project'
|
|
a.project.identifier <=> b.project.identifier
|
|
when 'category'
|
|
self.compare_safe(a.category, b.category) {|acat, bcat|
|
|
acat.position <=> bcat.position
|
|
}
|
|
when 'datetime'
|
|
self.compare_safe(a.value(prm), b.value(prm)) {|aval, bval|
|
|
(aval <=> bval) * -1
|
|
}
|
|
when 'name'
|
|
((a.rubi.empty?) ? a.name : a.rubi) <=> ((b.rubi.empty?) ? b.name : b.rubi)
|
|
else
|
|
self.compare_safe(a.value(prm), b.value(prm)) {|aval, bval|
|
|
aval <=> bval
|
|
}
|
|
end
|
|
end
|
|
|
|
|
|
|
|
def to_s
|
|
"##{id}: #{name}"
|
|
end
|
|
|
|
def self.find_for_macro(tname, proj, all_project = false)
|
|
if proj
|
|
term = Term.find_by(:project_id => proj.id, :name => tname)
|
|
return term if term
|
|
end
|
|
return nil unless all_project
|
|
return self.find_by_name(tname)
|
|
end
|
|
|
|
def self.default_show_params
|
|
['name_en', 'rubi', 'abbr_whole', 'datatype', 'codename', 'project', 'category']
|
|
end
|
|
|
|
def self.default_searched_params
|
|
['name', 'name_en', 'abbr_whole', 'datatype', 'codename', 'description']
|
|
end
|
|
|
|
def self.default_sort_params
|
|
['id', 'name', 'name_en', 'abbr_whole', 'datatype', 'codename', 'project', 'category',
|
|
'datetime']
|
|
end
|
|
|
|
def self.hidable_params
|
|
['name_en', 'rubi', 'abbr_whole', 'datatype', 'codename']
|
|
end
|
|
|
|
def self.setting_params
|
|
['name_en', 'rubi', 'abbr_whole', 'datatype', 'codename']
|
|
end
|
|
|
|
def self.export_params
|
|
['id','project',
|
|
'name', 'name_en', 'rubi', 'abbr_whole', 'category', 'datatype', 'codename',
|
|
'author', 'updater', 'created_on', 'updated_on',
|
|
'description']
|
|
end
|
|
|
|
def self.import_params
|
|
['name', 'name_en', 'rubi', 'abbr_whole', 'category', 'datatype', 'codename',
|
|
'description']
|
|
end
|
|
|
|
|
|
|
|
end
|