Refactoring: Move Ruby class definitions to dedicated files to improve orientation and expressiveness.
This commit is contained in:
parent
f0fdf7e7f3
commit
d354dee74c
16 changed files with 311 additions and 298 deletions
|
@ -225,8 +225,4 @@ returns
|
||||||
# create
|
# create
|
||||||
History::Attribute.create!(name: name)
|
History::Attribute.create!(name: name)
|
||||||
end
|
end
|
||||||
|
|
||||||
class Object < ApplicationModel; end
|
|
||||||
class Type < ApplicationModel; end
|
|
||||||
class Attribute < ApplicationModel; end
|
|
||||||
end
|
end
|
||||||
|
|
4
app/models/history/attribute.rb
Normal file
4
app/models/history/attribute.rb
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
# Copyright (C) 2012-2016 Zammad Foundation, http://zammad-foundation.org/
|
||||||
|
|
||||||
|
class History::Attribute < ApplicationModel
|
||||||
|
end
|
4
app/models/history/object.rb
Normal file
4
app/models/history/object.rb
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
# Copyright (C) 2012-2016 Zammad Foundation, http://zammad-foundation.org/
|
||||||
|
|
||||||
|
class History::Object < ApplicationModel
|
||||||
|
end
|
4
app/models/history/type.rb
Normal file
4
app/models/history/type.rb
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
# Copyright (C) 2012-2016 Zammad Foundation, http://zammad-foundation.org/
|
||||||
|
|
||||||
|
class History::Type < ApplicationModel
|
||||||
|
end
|
|
@ -245,11 +245,3 @@ class Link < ApplicationModel
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
class Link::Type < ApplicationModel
|
|
||||||
validates :name, presence: true
|
|
||||||
end
|
|
||||||
|
|
||||||
class Link::Object < ApplicationModel
|
|
||||||
validates :name, presence: true
|
|
||||||
end
|
|
||||||
|
|
5
app/models/link/object.rb
Normal file
5
app/models/link/object.rb
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
# Copyright (C) 2012-2016 Zammad Foundation, http://zammad-foundation.org/
|
||||||
|
|
||||||
|
class Link::Object < ApplicationModel
|
||||||
|
validates :name, presence: true
|
||||||
|
end
|
5
app/models/link/type.rb
Normal file
5
app/models/link/type.rb
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
# Copyright (C) 2012-2016 Zammad Foundation, http://zammad-foundation.org/
|
||||||
|
|
||||||
|
class Link::Type < ApplicationModel
|
||||||
|
validates :name, presence: true
|
||||||
|
end
|
|
@ -485,83 +485,4 @@ execute all pending package migrations at once
|
||||||
|
|
||||||
true
|
true
|
||||||
end
|
end
|
||||||
|
|
||||||
class Migration < ApplicationModel
|
|
||||||
|
|
||||||
def self.linked
|
|
||||||
szpm_files = []
|
|
||||||
Dir.chdir(root) do
|
|
||||||
szpm_files = Dir['*.szpm']
|
|
||||||
end
|
|
||||||
|
|
||||||
szpm_files.each do |szpm_file|
|
|
||||||
package = szpm_file.sub('.szpm', '')
|
|
||||||
migrate(package)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.migrate(package, direction = 'normal')
|
|
||||||
location = "#{root}/db/addon/#{package.underscore}"
|
|
||||||
|
|
||||||
return true if !File.exist?(location)
|
|
||||||
|
|
||||||
# get existing migrations
|
|
||||||
migrations_existing = []
|
|
||||||
Dir.foreach(location) do |entry|
|
|
||||||
next if entry == '.'
|
|
||||||
next if entry == '..'
|
|
||||||
|
|
||||||
migrations_existing.push entry
|
|
||||||
end
|
|
||||||
|
|
||||||
# up
|
|
||||||
migrations_existing = migrations_existing.sort
|
|
||||||
|
|
||||||
# down
|
|
||||||
if direction == 'reverse'
|
|
||||||
migrations_existing = migrations_existing.reverse
|
|
||||||
end
|
|
||||||
|
|
||||||
migrations_existing.each do |migration|
|
|
||||||
next if !migration.match?(/\.rb$/)
|
|
||||||
|
|
||||||
version = nil
|
|
||||||
name = nil
|
|
||||||
if migration =~ /^(.+?)_(.*)\.rb$/
|
|
||||||
version = $1
|
|
||||||
name = $2
|
|
||||||
end
|
|
||||||
if !version || !name
|
|
||||||
raise "Invalid package migration '#{migration}'"
|
|
||||||
end
|
|
||||||
|
|
||||||
# down
|
|
||||||
done = Package::Migration.find_by(name: package.underscore, version: version)
|
|
||||||
if direction == 'reverse'
|
|
||||||
next if !done
|
|
||||||
|
|
||||||
logger.info "NOTICE: down package migration '#{migration}'"
|
|
||||||
load "#{location}/#{migration}"
|
|
||||||
classname = name.camelcase
|
|
||||||
classname.constantize.down
|
|
||||||
record = Package::Migration.find_by(name: package.underscore, version: version)
|
|
||||||
record&.destroy
|
|
||||||
|
|
||||||
# up
|
|
||||||
else
|
|
||||||
next if done
|
|
||||||
|
|
||||||
logger.info "NOTICE: up package migration '#{migration}'"
|
|
||||||
load "#{location}/#{migration}"
|
|
||||||
classname = name.camelcase
|
|
||||||
classname.constantize.up
|
|
||||||
Package::Migration.create(name: package.underscore, version: version)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.root
|
|
||||||
Rails.root
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
80
app/models/package/migration.rb
Normal file
80
app/models/package/migration.rb
Normal file
|
@ -0,0 +1,80 @@
|
||||||
|
# Copyright (C) 2012-2016 Zammad Foundation, http://zammad-foundation.org/
|
||||||
|
|
||||||
|
class Package::Migration < ApplicationModel
|
||||||
|
|
||||||
|
def self.linked
|
||||||
|
szpm_files = []
|
||||||
|
Dir.chdir(root) do
|
||||||
|
szpm_files = Dir['*.szpm']
|
||||||
|
end
|
||||||
|
|
||||||
|
szpm_files.each do |szpm_file|
|
||||||
|
package = szpm_file.sub('.szpm', '')
|
||||||
|
migrate(package)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.migrate(package, direction = 'normal')
|
||||||
|
location = "#{root}/db/addon/#{package.underscore}"
|
||||||
|
|
||||||
|
return true if !File.exist?(location)
|
||||||
|
|
||||||
|
# get existing migrations
|
||||||
|
migrations_existing = []
|
||||||
|
Dir.foreach(location) do |entry|
|
||||||
|
next if entry == '.'
|
||||||
|
next if entry == '..'
|
||||||
|
|
||||||
|
migrations_existing.push entry
|
||||||
|
end
|
||||||
|
|
||||||
|
# up
|
||||||
|
migrations_existing = migrations_existing.sort
|
||||||
|
|
||||||
|
# down
|
||||||
|
if direction == 'reverse'
|
||||||
|
migrations_existing = migrations_existing.reverse
|
||||||
|
end
|
||||||
|
|
||||||
|
migrations_existing.each do |migration|
|
||||||
|
next if !migration.match?(/\.rb$/)
|
||||||
|
|
||||||
|
version = nil
|
||||||
|
name = nil
|
||||||
|
if migration =~ /^(.+?)_(.*)\.rb$/
|
||||||
|
version = $1
|
||||||
|
name = $2
|
||||||
|
end
|
||||||
|
if !version || !name
|
||||||
|
raise "Invalid package migration '#{migration}'"
|
||||||
|
end
|
||||||
|
|
||||||
|
# down
|
||||||
|
done = Package::Migration.find_by(name: package.underscore, version: version)
|
||||||
|
if direction == 'reverse'
|
||||||
|
next if !done
|
||||||
|
|
||||||
|
logger.info "NOTICE: down package migration '#{migration}'"
|
||||||
|
load "#{location}/#{migration}"
|
||||||
|
classname = name.camelcase
|
||||||
|
classname.constantize.down
|
||||||
|
record = Package::Migration.find_by(name: package.underscore, version: version)
|
||||||
|
record&.destroy
|
||||||
|
|
||||||
|
# up
|
||||||
|
else
|
||||||
|
next if done
|
||||||
|
|
||||||
|
logger.info "NOTICE: up package migration '#{migration}'"
|
||||||
|
load "#{location}/#{migration}"
|
||||||
|
classname = name.camelcase
|
||||||
|
classname.constantize.up
|
||||||
|
Package::Migration.create(name: package.underscore, version: version)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.root
|
||||||
|
Rails.root
|
||||||
|
end
|
||||||
|
end
|
|
@ -150,198 +150,4 @@ returns
|
||||||
.order(:id)
|
.order(:id)
|
||||||
.pluck('tag_items.name')
|
.pluck('tag_items.name')
|
||||||
end
|
end
|
||||||
|
|
||||||
class Object < ApplicationModel
|
|
||||||
validates :name, presence: true
|
|
||||||
|
|
||||||
=begin
|
|
||||||
|
|
||||||
lookup by name and create tag item
|
|
||||||
|
|
||||||
tag_object = Tag::Object.lookup_by_name_and_create('some tag')
|
|
||||||
|
|
||||||
=end
|
|
||||||
|
|
||||||
def self.lookup_by_name_and_create(name)
|
|
||||||
name.strip!
|
|
||||||
|
|
||||||
tag_object = Tag::Object.lookup(name: name)
|
|
||||||
return tag_object if tag_object
|
|
||||||
|
|
||||||
Tag::Object.create(name: name)
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
class Item < ApplicationModel
|
|
||||||
validates :name, presence: true
|
|
||||||
before_save :fill_namedowncase
|
|
||||||
|
|
||||||
=begin
|
|
||||||
|
|
||||||
lookup by name and create tag item
|
|
||||||
|
|
||||||
tag_item = Tag::Item.lookup_by_name_and_create('some tag')
|
|
||||||
|
|
||||||
=end
|
|
||||||
|
|
||||||
def self.lookup_by_name_and_create(name)
|
|
||||||
name.strip!
|
|
||||||
|
|
||||||
tag_item = Tag::Item.lookup(name: name)
|
|
||||||
return tag_item if tag_item
|
|
||||||
|
|
||||||
Tag::Item.create(name: name)
|
|
||||||
end
|
|
||||||
|
|
||||||
=begin
|
|
||||||
|
|
||||||
rename tag items
|
|
||||||
|
|
||||||
Tag::Item.rename(
|
|
||||||
id: existing_tag_item_to_rename,
|
|
||||||
name: 'new tag item name',
|
|
||||||
updated_by_id: current_user.id,
|
|
||||||
)
|
|
||||||
|
|
||||||
=end
|
|
||||||
|
|
||||||
def self.rename(data)
|
|
||||||
|
|
||||||
new_tag_name = data[:name].strip
|
|
||||||
old_tag_item = Tag::Item.find(data[:id])
|
|
||||||
already_existing_tag = Tag::Item.lookup(name: new_tag_name)
|
|
||||||
|
|
||||||
# check if no rename is needed
|
|
||||||
return true if new_tag_name == old_tag_item.name
|
|
||||||
|
|
||||||
# merge old with new tag if already existing
|
|
||||||
if already_existing_tag
|
|
||||||
|
|
||||||
# re-assign old tag to already existing tag
|
|
||||||
Tag.where(tag_item_id: old_tag_item.id).each do |tag|
|
|
||||||
|
|
||||||
# check if tag already exists on object
|
|
||||||
if Tag.find_by(tag_object_id: tag.tag_object_id, o_id: tag.o_id, tag_item_id: already_existing_tag.id)
|
|
||||||
Tag.tag_remove(
|
|
||||||
tag_object_id: tag.tag_object_id,
|
|
||||||
o_id: tag.o_id,
|
|
||||||
tag_item_id: old_tag_item.id,
|
|
||||||
)
|
|
||||||
next
|
|
||||||
end
|
|
||||||
|
|
||||||
# re-assign
|
|
||||||
tag_object = Tag::Object.lookup(id: tag.tag_object_id)
|
|
||||||
tag.tag_item_id = already_existing_tag.id
|
|
||||||
tag.save
|
|
||||||
|
|
||||||
# touch reference objects
|
|
||||||
Tag.touch_reference_by_params(
|
|
||||||
object: tag_object.name,
|
|
||||||
o_id: tag.o_id,
|
|
||||||
)
|
|
||||||
end
|
|
||||||
|
|
||||||
# delete not longer used tag
|
|
||||||
old_tag_item.destroy
|
|
||||||
return true
|
|
||||||
end
|
|
||||||
|
|
||||||
update_referenced_objects(old_tag_item.name, new_tag_name)
|
|
||||||
|
|
||||||
# update new tag name
|
|
||||||
old_tag_item.name = new_tag_name
|
|
||||||
old_tag_item.save
|
|
||||||
|
|
||||||
# touch reference objects
|
|
||||||
Tag.where(tag_item_id: old_tag_item.id).each do |tag|
|
|
||||||
tag_object = Tag::Object.lookup(id: tag.tag_object_id)
|
|
||||||
Tag.touch_reference_by_params(
|
|
||||||
object: tag_object.name,
|
|
||||||
o_id: tag.o_id,
|
|
||||||
)
|
|
||||||
end
|
|
||||||
|
|
||||||
true
|
|
||||||
end
|
|
||||||
|
|
||||||
=begin
|
|
||||||
|
|
||||||
remove tag item (destroy with reverences)
|
|
||||||
|
|
||||||
Tag::Item.remove(id)
|
|
||||||
|
|
||||||
=end
|
|
||||||
|
|
||||||
def self.remove(id)
|
|
||||||
|
|
||||||
# search for references, destroy and touch
|
|
||||||
Tag.where(tag_item_id: id).each do |tag|
|
|
||||||
tag_object = Tag::Object.lookup(id: tag.tag_object_id)
|
|
||||||
tag.destroy
|
|
||||||
Tag.touch_reference_by_params(
|
|
||||||
object: tag_object.name,
|
|
||||||
o_id: tag.o_id,
|
|
||||||
)
|
|
||||||
end
|
|
||||||
Tag::Item.find(id).destroy
|
|
||||||
true
|
|
||||||
end
|
|
||||||
|
|
||||||
def fill_namedowncase
|
|
||||||
self.name_downcase = name.downcase
|
|
||||||
true
|
|
||||||
end
|
|
||||||
|
|
||||||
=begin
|
|
||||||
|
|
||||||
Update referenced objects such as triggers, overviews, schedulers, and postmaster filters
|
|
||||||
|
|
||||||
Specifically, the following fields are updated:
|
|
||||||
|
|
||||||
Overview.condition
|
|
||||||
Trigger.condition Trigger.perform
|
|
||||||
Job.condition Job.perform
|
|
||||||
PostmasterFilter.perform
|
|
||||||
|
|
||||||
=end
|
|
||||||
|
|
||||||
def self.update_referenced_objects(old_name, new_name)
|
|
||||||
objects = Overview.all + Trigger.all + Job.all + PostmasterFilter.all
|
|
||||||
|
|
||||||
objects.each do |object|
|
|
||||||
changed = false
|
|
||||||
if object.has_attribute?(:condition)
|
|
||||||
changed |= update_condition_hash object.condition, old_name, new_name
|
|
||||||
end
|
|
||||||
if object.has_attribute?(:perform)
|
|
||||||
changed |= update_condition_hash object.perform, old_name, new_name
|
|
||||||
end
|
|
||||||
object.save if changed
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.update_condition_hash(hash, old_name, new_name)
|
|
||||||
changed = false
|
|
||||||
hash.each do |key, condition|
|
|
||||||
next if %w[ticket.tags x-zammad-ticket-tags].exclude? key
|
|
||||||
next if condition[:value].split(', ').exclude? old_name
|
|
||||||
|
|
||||||
condition[:value] = update_name(condition[:value], old_name, new_name)
|
|
||||||
changed = true
|
|
||||||
end
|
|
||||||
changed
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.update_name(condition, old_name, new_name)
|
|
||||||
tags = condition.split(', ')
|
|
||||||
return new_name if tags.size == 1
|
|
||||||
|
|
||||||
tags = tags.map { |t| t == old_name ? new_name : t }
|
|
||||||
tags.join(', ')
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
171
app/models/tag/item.rb
Normal file
171
app/models/tag/item.rb
Normal file
|
@ -0,0 +1,171 @@
|
||||||
|
# Copyright (C) 2012-2016 Zammad Foundation, http://zammad-foundation.org/
|
||||||
|
|
||||||
|
class Tag::Item < ApplicationModel
|
||||||
|
validates :name, presence: true
|
||||||
|
before_save :fill_namedowncase
|
||||||
|
|
||||||
|
=begin
|
||||||
|
|
||||||
|
lookup by name and create tag item
|
||||||
|
|
||||||
|
tag_item = Tag::Item.lookup_by_name_and_create('some tag')
|
||||||
|
|
||||||
|
=end
|
||||||
|
|
||||||
|
def self.lookup_by_name_and_create(name)
|
||||||
|
name.strip!
|
||||||
|
|
||||||
|
tag_item = Tag::Item.lookup(name: name)
|
||||||
|
return tag_item if tag_item
|
||||||
|
|
||||||
|
Tag::Item.create(name: name)
|
||||||
|
end
|
||||||
|
|
||||||
|
=begin
|
||||||
|
|
||||||
|
rename tag items
|
||||||
|
|
||||||
|
Tag::Item.rename(
|
||||||
|
id: existing_tag_item_to_rename,
|
||||||
|
name: 'new tag item name',
|
||||||
|
updated_by_id: current_user.id,
|
||||||
|
)
|
||||||
|
|
||||||
|
=end
|
||||||
|
|
||||||
|
def self.rename(data)
|
||||||
|
|
||||||
|
new_tag_name = data[:name].strip
|
||||||
|
old_tag_item = Tag::Item.find(data[:id])
|
||||||
|
already_existing_tag = Tag::Item.lookup(name: new_tag_name)
|
||||||
|
|
||||||
|
# check if no rename is needed
|
||||||
|
return true if new_tag_name == old_tag_item.name
|
||||||
|
|
||||||
|
# merge old with new tag if already existing
|
||||||
|
if already_existing_tag
|
||||||
|
|
||||||
|
# re-assign old tag to already existing tag
|
||||||
|
Tag.where(tag_item_id: old_tag_item.id).each do |tag|
|
||||||
|
|
||||||
|
# check if tag already exists on object
|
||||||
|
if Tag.find_by(tag_object_id: tag.tag_object_id, o_id: tag.o_id, tag_item_id: already_existing_tag.id)
|
||||||
|
Tag.tag_remove(
|
||||||
|
tag_object_id: tag.tag_object_id,
|
||||||
|
o_id: tag.o_id,
|
||||||
|
tag_item_id: old_tag_item.id,
|
||||||
|
)
|
||||||
|
next
|
||||||
|
end
|
||||||
|
|
||||||
|
# re-assign
|
||||||
|
tag_object = Tag::Object.lookup(id: tag.tag_object_id)
|
||||||
|
tag.tag_item_id = already_existing_tag.id
|
||||||
|
tag.save
|
||||||
|
|
||||||
|
# touch reference objects
|
||||||
|
Tag.touch_reference_by_params(
|
||||||
|
object: tag_object.name,
|
||||||
|
o_id: tag.o_id,
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
# delete not longer used tag
|
||||||
|
old_tag_item.destroy
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
update_referenced_objects(old_tag_item.name, new_tag_name)
|
||||||
|
|
||||||
|
# update new tag name
|
||||||
|
old_tag_item.name = new_tag_name
|
||||||
|
old_tag_item.save
|
||||||
|
|
||||||
|
# touch reference objects
|
||||||
|
Tag.where(tag_item_id: old_tag_item.id).each do |tag|
|
||||||
|
tag_object = Tag::Object.lookup(id: tag.tag_object_id)
|
||||||
|
Tag.touch_reference_by_params(
|
||||||
|
object: tag_object.name,
|
||||||
|
o_id: tag.o_id,
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
true
|
||||||
|
end
|
||||||
|
|
||||||
|
=begin
|
||||||
|
|
||||||
|
remove tag item (destroy with reverences)
|
||||||
|
|
||||||
|
Tag::Item.remove(id)
|
||||||
|
|
||||||
|
=end
|
||||||
|
|
||||||
|
def self.remove(id)
|
||||||
|
|
||||||
|
# search for references, destroy and touch
|
||||||
|
Tag.where(tag_item_id: id).each do |tag|
|
||||||
|
tag_object = Tag::Object.lookup(id: tag.tag_object_id)
|
||||||
|
tag.destroy
|
||||||
|
Tag.touch_reference_by_params(
|
||||||
|
object: tag_object.name,
|
||||||
|
o_id: tag.o_id,
|
||||||
|
)
|
||||||
|
end
|
||||||
|
Tag::Item.find(id).destroy
|
||||||
|
true
|
||||||
|
end
|
||||||
|
|
||||||
|
def fill_namedowncase
|
||||||
|
self.name_downcase = name.downcase
|
||||||
|
true
|
||||||
|
end
|
||||||
|
|
||||||
|
=begin
|
||||||
|
|
||||||
|
Update referenced objects such as triggers, overviews, schedulers, and postmaster filters
|
||||||
|
|
||||||
|
Specifically, the following fields are updated:
|
||||||
|
|
||||||
|
Overview.condition
|
||||||
|
Trigger.condition Trigger.perform
|
||||||
|
Job.condition Job.perform
|
||||||
|
PostmasterFilter.perform
|
||||||
|
|
||||||
|
=end
|
||||||
|
|
||||||
|
def self.update_referenced_objects(old_name, new_name)
|
||||||
|
objects = Overview.all + Trigger.all + Job.all + PostmasterFilter.all
|
||||||
|
|
||||||
|
objects.each do |object|
|
||||||
|
changed = false
|
||||||
|
if object.has_attribute?(:condition)
|
||||||
|
changed |= update_condition_hash object.condition, old_name, new_name
|
||||||
|
end
|
||||||
|
if object.has_attribute?(:perform)
|
||||||
|
changed |= update_condition_hash object.perform, old_name, new_name
|
||||||
|
end
|
||||||
|
object.save if changed
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.update_condition_hash(hash, old_name, new_name)
|
||||||
|
changed = false
|
||||||
|
hash.each do |key, condition|
|
||||||
|
next if %w[ticket.tags x-zammad-ticket-tags].exclude? key
|
||||||
|
next if condition[:value].split(', ').exclude? old_name
|
||||||
|
|
||||||
|
condition[:value] = update_name(condition[:value], old_name, new_name)
|
||||||
|
changed = true
|
||||||
|
end
|
||||||
|
changed
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.update_name(condition, old_name, new_name)
|
||||||
|
tags = condition.split(', ')
|
||||||
|
return new_name if tags.size == 1
|
||||||
|
|
||||||
|
tags = tags.map { |t| t == old_name ? new_name : t }
|
||||||
|
tags.join(', ')
|
||||||
|
end
|
||||||
|
end
|
22
app/models/tag/object.rb
Normal file
22
app/models/tag/object.rb
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
# Copyright (C) 2012-2016 Zammad Foundation, http://zammad-foundation.org/
|
||||||
|
|
||||||
|
class Tag::Object < ApplicationModel
|
||||||
|
validates :name, presence: true
|
||||||
|
|
||||||
|
=begin
|
||||||
|
|
||||||
|
lookup by name and create tag item
|
||||||
|
|
||||||
|
tag_object = Tag::Object.lookup_by_name_and_create('some tag')
|
||||||
|
|
||||||
|
=end
|
||||||
|
|
||||||
|
def self.lookup_by_name_and_create(name)
|
||||||
|
name.strip!
|
||||||
|
|
||||||
|
tag_object = Tag::Object.lookup(name: name)
|
||||||
|
return tag_object if tag_object
|
||||||
|
|
||||||
|
Tag::Object.create(name: name)
|
||||||
|
end
|
||||||
|
end
|
|
@ -412,17 +412,4 @@ returns
|
||||||
o_id: id,
|
o_id: id,
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
class Flag < ApplicationModel
|
|
||||||
end
|
|
||||||
|
|
||||||
class Sender < ApplicationModel
|
|
||||||
include ChecksLatestChangeObserved
|
|
||||||
validates :name, presence: true
|
|
||||||
end
|
|
||||||
|
|
||||||
class Type < ApplicationModel
|
|
||||||
include ChecksLatestChangeObserved
|
|
||||||
validates :name, presence: true
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
4
app/models/ticket/article/flag.rb
Normal file
4
app/models/ticket/article/flag.rb
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
# Copyright (C) 2012-2016 Zammad Foundation, http://zammad-foundation.org/
|
||||||
|
|
||||||
|
class Ticket::Article::Flag < ApplicationModel
|
||||||
|
end
|
6
app/models/ticket/article/sender.rb
Normal file
6
app/models/ticket/article/sender.rb
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
# Copyright (C) 2012-2016 Zammad Foundation, http://zammad-foundation.org/
|
||||||
|
|
||||||
|
class Ticket::Article::Sender < ApplicationModel
|
||||||
|
include ChecksLatestChangeObserved
|
||||||
|
validates :name, presence: true
|
||||||
|
end
|
6
app/models/ticket/article/type.rb
Normal file
6
app/models/ticket/article/type.rb
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
# Copyright (C) 2012-2016 Zammad Foundation, http://zammad-foundation.org/
|
||||||
|
|
||||||
|
class Ticket::Article::Type < ApplicationModel
|
||||||
|
include ChecksLatestChangeObserved
|
||||||
|
validates :name, presence: true
|
||||||
|
end
|
Loading…
Reference in a new issue