Sha256: 342557f64425e904a756a5b636e0e63642d77c0f9f0dcd8ad2efc8322bf51d70

Contents?: true

Size: 1.53 KB

Versions: 7

Compression:

Stored size: 1.53 KB

Contents

module Hobo
  module Model
    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|
            next if self.class.reflections[association.to_s].options[:validate]==false
            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(:validate => false) means without transactions too
              record.with_acting_user(acting_user) { record.save(:validate => false) }
            end
          end
        end
      end

      def clear_included_in_save
        included_in_save._?.clear
      end

    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
hobo-2.2.6 lib/hobo/model/include_in_save.rb
hobo-2.2.5 lib/hobo/model/include_in_save.rb
hobo-2.2.4 lib/hobo/model/include_in_save.rb
hobo-2.2.3 lib/hobo/model/include_in_save.rb
hobo-2.2.2 lib/hobo/model/include_in_save.rb
hobo-2.2.1 lib/hobo/model/include_in_save.rb
hobo-2.2.0 lib/hobo/model/include_in_save.rb