tag.rb 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. class Tag < ApplicationModel
  2. belongs_to :tag_object, :class_name => 'Tag::Object'
  3. belongs_to :tag_item, :class_name => 'Tag::Item'
  4. @@cache_item = {}
  5. @@cache_object = {}
  6. def self.tag_add(data)
  7. # lookups
  8. if data[:object]
  9. tag_object_id = self.tag_object_lookup( data[:object] )
  10. end
  11. if data[:item]
  12. tag_item_id = self.tag_item_lookup( data[:item] )
  13. end
  14. # create history
  15. Tag.create(
  16. :tag_object_id => tag_object_id,
  17. :tag_item_id => tag_item_id,
  18. :o_id => data[:o_id],
  19. :created_by_id => data[:created_by_id]
  20. )
  21. return true
  22. end
  23. def self.tag_remove(data)
  24. # lookups
  25. if data[:object]
  26. tag_object_id = self.tag_object_lookup( data[:object] )
  27. end
  28. if data[:item]
  29. tag_item_id = self.tag_item_lookup( data[:item] )
  30. end
  31. # create history
  32. result = Tag.where(
  33. :tag_object_id => tag_object_id,
  34. :tag_item_id => tag_item_id,
  35. :o_id => data[:o_id],
  36. )
  37. result.each { |item|
  38. item.destroy
  39. }
  40. return true
  41. end
  42. def self.tag_list( data )
  43. tag_object_id_requested = self.tag_object_lookup( data[:object] )
  44. tag_search = Tag.where(
  45. :tag_object_id => tag_object_id_requested,
  46. :o_id => data[:o_id],
  47. )
  48. tags = []
  49. tag_search.each {|tag|
  50. tags.push self.tag_item_lookup_id( tag.tag_item_id )
  51. }
  52. return tags
  53. end
  54. private
  55. def self.tag_item_lookup_id( id )
  56. # use cache
  57. return @@cache_item[ id ] if @@cache_item[ id ]
  58. # lookup
  59. tag_item = Tag::Item.find(id)
  60. @@cache_item[ id ] = tag_item.name
  61. return tag_item.name
  62. end
  63. def self.tag_item_lookup( name )
  64. # use cache
  65. return @@cache_item[ name ] if @@cache_item[ name ]
  66. # lookup
  67. tag_item = Tag::Item.where( :name => name ).first
  68. if tag_item
  69. @@cache_item[ name ] = tag_item.id
  70. return tag_item.id
  71. end
  72. # create
  73. tag_item = Tag::Item.create(
  74. :name => name
  75. )
  76. @@cache_item[ name ] = tag_item.id
  77. return tag_item.id
  78. end
  79. def self.tag_object_lookup_id( id )
  80. # use cache
  81. return @@cache_object[ id ] if @@cache_object[ id ]
  82. # lookup
  83. tag_object = Tag::Object.find(id)
  84. @@cache_object[ id ] = tag_object.name
  85. return tag_object.name
  86. end
  87. def self.tag_object_lookup( name )
  88. # use cache
  89. return @@cache_object[ name ] if @@cache_object[ name ]
  90. # lookup
  91. tag_object = Tag::Object.where( :name => name ).first
  92. if tag_object
  93. @@cache_object[ name ] = tag_object.id
  94. return tag_object.id
  95. end
  96. # create
  97. tag_object = Tag::Object.create(
  98. :name => name
  99. )
  100. @@cache_object[ name ] = tag_object.id
  101. return tag_object.id
  102. end
  103. class Object < ActiveRecord::Base
  104. end
  105. class Item < ActiveRecord::Base
  106. end
  107. end