Module: NoFlyList::TaggableRecord::Mutation

Defined in:
lib/no_fly_list/taggable_record/mutation.rb

Class Method Summary collapse

Class Method Details

.define_mutation_methods(setup) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/no_fly_list/taggable_record/mutation.rb', line 8

def define_mutation_methods(setup)
  context = setup.context
  taggable_klass = setup.taggable_klass

  taggable_klass.class_eval do
    # Add multiple tags
    define_method "add_#{context}" do |*tags|
      send("#{context}_list").add(*tags)
    end
    alias_method "add_#{context}=", "add_#{context}"

    # Remove multiple tags
    define_method "remove_#{context}" do |*tags|
      send("#{context}_list").remove(*tags)
    end
    alias_method "remove_#{context}=", "remove_#{context}"

    # Set tags (replaces existing)
    define_method "set_#{context}" do |*tags|
      send("#{context}_list=", tags)
    end
    alias_method "set_#{context}=", "set_#{context}"

    # Clear all tags
    define_method "clear_#{context}" do
      send("#{context}_list").clear
    end

    define_method "clear_#{context}!" do
      send("#{context}_list").clear!
    end
  end
end