Module: Redmineup::ActsAsTaggable::Taggable::ClassMethods
- Defined in:
- lib/redmineup/acts_as_taggable/up_acts_as_taggable.rb
Instance Method Summary collapse
-
#add_tags_column(table_name = :tags, **options) ⇒ Object
Create the needed column for up_acts_as_taggable.
- #cached_tag_list_column_name ⇒ Object
-
#create_taggable_table(options = {}) ⇒ Object
Create the taggable tables === Options hash: *
:table_name- use a table name other than tags To be used during migration, but can also be used in other places. - #drop_taggable_table(options = {}) ⇒ Object
-
#remove_tags_columns(table_name = :tags, *columns) ⇒ Object
Remove the up_acts_as_taggable specific columns To be used during migration, but can also be used in other places.
- #set_cached_tag_list_column_name(value = nil, &block) ⇒ Object
- #taggable? ⇒ Boolean
- #up_acts_as_taggable ⇒ Object
Instance Method Details
#add_tags_column(table_name = :tags, **options) ⇒ Object
Create the needed column for up_acts_as_taggable. To be used during migration, but can also be used in other places.
Options :name, :type, :default are required
By default, a :color: column will be created
E.g.: ActiveRecord::Base.add_tags_column(:tags, name: :color, type: :string, default: nil)
84 85 86 87 88 89 90 91 92 93 94 |
# File 'lib/redmineup/acts_as_taggable/up_acts_as_taggable.rb', line 84 def (table_name = :tags, **) tag_column = || { name: :color, type: :int, default: nil } tag_column.assert_valid_keys(:name, :type, :default) raise ArgumentError, "Table `#{table_name}' not found" unless self.connection.table_exists?(table_name) unless self.connection.column_exists?(table_name, tag_column[:name]) self.connection.add_column table_name, tag_column[:name], tag_column[:type], default: tag_column[:default] self.reset_column_information end end |
#cached_tag_list_column_name ⇒ Object
37 38 39 |
# File 'lib/redmineup/acts_as_taggable/up_acts_as_taggable.rb', line 37 def cached_tag_list_column_name 'cached_tag_list' end |
#create_taggable_table(options = {}) ⇒ Object
Create the taggable tables
Options hash:
-
:table_name- use a table name other than tags
To be used during migration, but can also be used in other places
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
# File 'lib/redmineup/acts_as_taggable/up_acts_as_taggable.rb', line 49 def create_taggable_table( = {}) tag_name_table = [:tags] || :tags if !self.connection.table_exists?(tag_name_table) self.connection.create_table(tag_name_table) do |t| t.column :name, :string end end taggings_name_table = [:taggings] || :taggings if !self.connection.table_exists?(taggings_name_table) self.connection.create_table(taggings_name_table) do |t| t.column :tag_id, :integer t.column :taggable_id, :integer # You should make sure that the column created is # long enough to store the required class names. t.column :taggable_type, :string t.column :created_at, :datetime end self.connection.add_index :taggings, :tag_id self.connection.add_index :taggings, [:taggable_id, :taggable_type] end end |
#drop_taggable_table(options = {}) ⇒ Object
112 113 114 115 116 117 118 119 120 121 122 |
# File 'lib/redmineup/acts_as_taggable/up_acts_as_taggable.rb', line 112 def drop_taggable_table( = {}) tag_name_table = [:tags] || :tags if self.connection.table_exists?(tag_name_table) self.connection.drop_table tag_name_table end taggings_name_table = [:taggings] || :taggings if self.connection.table_exists?(taggings_name_table) self.connection.drop_table taggings_name_table end end |
#remove_tags_columns(table_name = :tags, *columns) ⇒ Object
Remove the up_acts_as_taggable specific columns To be used during migration, but can also be used in other places
E.g.: ActiveRecord::Base.remove_tags_columns(:tags, :color, :color1)
100 101 102 103 104 105 106 107 108 109 110 |
# File 'lib/redmineup/acts_as_taggable/up_acts_as_taggable.rb', line 100 def (table_name = :tags, *columns) raise ArgumentError, "Table `#{table_name}' not found" unless self.connection.table_exists?(table_name) return if columns.blank? columns.each do |column| if self.connection.column_exists?(table_name, column) self.connection.remove_column table_name, column self.reset_column_information end end end |
#set_cached_tag_list_column_name(value = nil, &block) ⇒ Object
41 42 43 |
# File 'lib/redmineup/acts_as_taggable/up_acts_as_taggable.rb', line 41 def set_cached_tag_list_column_name(value = nil, &block) define_attr_method :cached_tag_list_column_name, value, &block end |
#taggable? ⇒ Boolean
11 12 13 |
# File 'lib/redmineup/acts_as_taggable/up_acts_as_taggable.rb', line 11 def taggable? false end |
#up_acts_as_taggable ⇒ Object
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/redmineup/acts_as_taggable/up_acts_as_taggable.rb', line 15 def up_acts_as_taggable has_many :taggings, :as => :taggable, :dependent => :destroy, :class_name => '::Redmineup::ActsAsTaggable::Tagging' has_many :tags, :through => :taggings, :class_name => '::Redmineup::ActsAsTaggable::Tag' before_save :save_cached_tag_list after_create :save_tags after_update :save_tags include Redmineup::ActsAsTaggable::Taggable::InstanceMethods extend Redmineup::ActsAsTaggable::Taggable::SingletonMethods alias_method :reload_without_tag_list, :reload alias_method :reload, :reload_with_tag_list class_eval do def self.taggable? true end end end |