Module: IsGraffitiable::InstanceMethods

Defined in:
lib/is_graffitiable.rb

Instance Method Summary collapse

Instance Method Details

#graffiti_mapObject



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_graffitisObject



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_graffitisObject



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_graffitisObject



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