Module: IsGraffitiable::InstanceMethods
- Defined in:
- lib/is_graffitiable.rb
Instance Method Summary collapse
- #graffiti_map ⇒ Object
- #initialize_graffitis ⇒ Object
- #save_graffitis ⇒ Object
- #validate_graffitis ⇒ Object
Instance Method Details
#graffiti_map ⇒ Object
27 28 29 30 31 32 33 |
# File 'lib/is_graffitiable.rb', line 27 def graffiti_map @graffiti_map = GraffitiMap.new graffitis.each do |graffiti| @graffiti_map[graffiti.name] = graffiti.value end @graffiti_map end |
#initialize_graffitis ⇒ Object
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/is_graffitiable.rb', line 35 def initialize_graffitis return unless @graffiti_map new_graffiti_map = @graffiti_map.clone @new_graffitis = [] graffitis.each do |graffiti| new_graffiti_map.delete(graffiti.name) end @old_graffitis = graffitis.reject{|graffiti| @graffiti_map.keys.include?(graffiti.name)} new_graffiti_map.each do |key,value| @new_graffitis << Graffiti.create(:name => key, :value => value) end end |
#save_graffitis ⇒ Object
66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/is_graffitiable.rb', line 66 def save_graffitis return unless @graffiti_map self.class.transaction do if @old_graffitis.any? @old_graffitis.each(&:destroy) end @new_graffitis.each do |graffiti| graffitis << graffiti end end true end |
#validate_graffitis ⇒ Object
51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/is_graffitiable.rb', line 51 def validate_graffitis return true unless @graffiti_map @new_graffitis.each do |graffiti| # ideally we want to use graffiti.valid? method. However, at this point, # graffitiable_id and graffitiable_type hasn't been set yet. So we'll just have to do # our own validation here if graffiti.name.empty? or graffiti.value.empty? errors.add("Graffiti", "is invalid") return false end end return true end |