Sha256: 8a4097276b88e898a3f7d715e2400edc6bac5a8a744131bbb7bb9e1bc26b334b

Contents?: true

Size: 1.38 KB

Versions: 3

Compression:

Stored size: 1.38 KB

Contents

module Hobo
  
  IncludeInSave = classy_module do
    
    attr_accessor :included_in_save
    
    validate         :validate_included_in_save
    before_save      :save_included
    after_save       :clear_included_in_save    
    
    def include_in_save(association, *records)
      self.included_in_save ||= Hash.new {|h, k| h[k] = []}
      included_in_save[association.to_sym].concat records
    end
    
    def validate_included_in_save
      if included_in_save
        included_in_save._?.each_pair do |association, records|
          added = false
          records.each do |record|
            # we want to call valid? on each one, but only add the error to self once
            
            record.with_acting_user(acting_user) do
              unless record.valid?
                unless added
                  errors.add association, "..."
                  added = true
                end
              end
            end
          end
        end
      end
    end


    def save_included
      if included_in_save
        included_in_save.each_pair do |association, records|
          records.each do |record|
            # save_without_validation means without transactions too
            record.with_acting_user(acting_user) { record.save_without_validation }
          end
        end
      end
    end

    def clear_included_in_save
      included_in_save._?.clear
    end

  end

end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
hobo-0.8.8 lib/hobo/include_in_save.rb
hobo-0.8.7 lib/hobo/include_in_save.rb
hobo-0.8.6 lib/hobo/include_in_save.rb