trabajo-afectivo/app/models/link.rb

180 lines
4.9 KiB
Ruby
Raw Normal View History

2012-04-10 14:06:46 +00:00
class Link < ActiveRecord::Base
2012-08-21 10:28:41 +00:00
belongs_to :link_type, :class_name => 'Link::Type'
belongs_to :link_object, :class_name => 'Link::Object'
2012-04-10 14:06:46 +00:00
2012-08-21 10:28:41 +00:00
#before_create :check_object
#after_create :after_create, :cache_delete
#after_update :cache_delete
#after_destroy :cache_delete
=begin
2012-08-20 13:21:15 +00:00
Link.add(
2012-08-21 10:28:41 +00:00
:link_type => 'normal',
2012-08-20 13:21:15 +00:00
:link_object_source => 'Ticket',
2012-08-21 10:28:41 +00:00
:link_object_source_value => 6,
2012-08-20 13:21:15 +00:00
:link_object_target => 'Ticket',
2012-08-21 10:28:41 +00:00
:link_object_target_value => 31
2012-08-20 13:21:15 +00:00
)
Link.add(
:link_types_id => 12,
2012-08-21 10:28:41 +00:00
:link_object_source_id => 1,
2012-08-20 13:21:15 +00:00
:link_object_source_value => 1,
2012-08-21 10:28:41 +00:00
:link_object_target_id => 1,
:link_object_target_value => 1
)
Link.list(
:link_object => 'Ticket',
:link_object_value => 1
2012-08-20 13:21:15 +00:00
)
2012-08-20 13:21:15 +00:00
Link.get_links_for_source_object(
:link_object => 'Ticket',
:link_object_value => 1
)
2012-08-20 13:21:15 +00:00
Link.get_links_for_target_object(
:link_object => 'Ticket',
:link_object_value => 1,
)
2012-08-20 13:21:15 +00:00
Link.delete_link_by_source( :source_value => 1 )
2012-08-20 13:21:15 +00:00
Link.delete_link_by_target( :target_value => 1 )
2012-08-20 13:21:15 +00:00
Link.delete_all_links_by_value( :object_value => 1 )
=end
2012-08-21 10:28:41 +00:00
def self.list(data)
linkobject = self.link_object_get( :name => data[:link_object] )
return if !linkobject
list = Link.where(
'link_object_source_id = ? AND link_object_source_value = ?', linkobject.id, data[:link_object_value]
)
map = {
'normal' => 'normal',
'parent' => 'child',
'child' => 'parent',
}
items = []
list.each { |item|
link = {}
link['link_type'] = map[ Link::Type.find( item.link_type_id ).name ]
link['link_object'] = Link::Object.find( item.link_object_target_id ).name
link['link_object_value'] = item.link_object_target_value
items.push link
}
list = Link.where(
'link_object_target_id = ? AND link_object_target_value = ?', linkobject.id, data[:link_object_value]
)
list.each { |item|
link = {}
link['link_type'] = Link::Type.find( item.link_type_id ).name
link['link_object'] = Link::Object.find( item.link_object_source_id ).name
link['link_object_value'] = item.link_object_source_value
items.push link
}
return items
end
2012-08-20 13:21:15 +00:00
def self.get_links_for_source_object(data)
linkobject_id = self.get_linktype_by_name( :name => data[:link_object] )
if linkobject_id
2012-08-21 10:28:41 +00:00
Link.where( :link_object_source_id => linkobject_id, :link_object_source_value => data[:link_object_value] )
end
2012-08-20 13:21:15 +00:00
end
2012-08-20 13:21:15 +00:00
def self.get_links_for_target_object(data)
linkobject_id = self.get_linktype_by_name( :name => data[:link_object] )
if linkobject_id
2012-08-21 10:28:41 +00:00
Link.where( :link_object_target_id => linkobject_id, :link_object_target_value => data[:link_object_value] )
end
2012-08-20 13:21:15 +00:00
end
def self.add(data)
2012-08-21 10:28:41 +00:00
if data.has_key?(:link_type)
linktype = self.link_type_get( :name => data[:link_type] )
data[:link_type_id] = linktype.id
data.delete( :link_type )
end
if data.has_key?(:link_object_source)
linkobject = self.link_object_get( :name => data[:link_object_source] )
data[:link_object_source_id] = linkobject.id
2012-08-20 13:21:15 +00:00
data.delete( :link_object_source )
end
2012-08-21 10:28:41 +00:00
2012-08-20 13:21:15 +00:00
if data.has_key?(:link_object_target)
2012-08-21 10:28:41 +00:00
linkobject = self.link_object_get( :name => data[:link_object_target] )
data[:link_object_target_id] = linkobject.id
2012-08-20 13:21:15 +00:00
data.delete( :link_object_target )
end
Link.create(data)
end
def self.delete_link_by_source(data)
Link.where( :link_object_source_value => data[:source_value] ).destroy_all
end
def self.delete_link_by_target(data)
Link.where( :link_object_target_value => data[:target_value] ).destroy_all
end
def self.delete_all_links_by_value(data)
Link.where( ["link_object_source_value = ? or link_object_target_value = ?", data[:object_value], data[:object_value]] ).destroy_all
end
private
2012-08-21 10:28:41 +00:00
def self.link_type_get(data)
linktype = Link::Type.where( :name => data[:name] ).first
if !linktype
linktype = Link::Type.create(
:name => data[:name]
)
2012-08-20 13:21:15 +00:00
end
2012-08-21 10:28:41 +00:00
return linktype
end
def self.link_object_get(data)
linkobject = Link::Object.where( :name => data[:name] ).first
if !linkobject
linkobject = Link::Object.create(
:name => data[:name]
)
end
return linkobject
end
def self.get_linktype_by_name(data)
linkid = Link::Object.where( :name => data[:name] ).first
2012-08-20 13:21:15 +00:00
end
#checks for a valid link type
def check_valid_link_type
2012-08-20 13:21:15 +00:00
Rails.logger.info "Logger Test"
puts "pre check link type"
end
def get_linkobject_by_key
2012-08-20 13:21:15 +00:00
puts "check for exisiting link"
end
2012-08-20 13:21:15 +00:00
#checks for an exisiting ling
def check_existing_link
puts "check for exisiting link"
end
end
class Link::Type < ActiveRecord::Base
2012-04-10 14:06:46 +00:00
end
class Link::Object < ActiveRecord::Base
end