Sha256: 67e3ce86b47a02870f59bd3f4f6f2fb66f673725cebe65e7bbbee1305c35ac88

Contents?: true

Size: 834 Bytes

Versions: 3

Compression:

Stored size: 834 Bytes

Contents

require 'cat_tree/observer/target_set/ar_base'

module CatTree
  class Observer
    class TargetSet
      def initialize
        @set = {}
      end

      def notice(object)
        return unless target = get_target(object)
        return unless target.valid?

        if same_target = @set[target.key]
          @set[target.key] = same_target.merge(target)
        else
          @set[target.key] = target
        end
      end

      def object_count
        @set.values.inject(0){|t,v| t + v.count}
      end

      def same_objects
        @set.values.select{|v| v.count > 1}.sort_by{|v| v.count}.reverse
      end

      def empty?
        @set.empty?
      end

      private

      def get_target(object)
        case object
        when ActiveRecord::Base
          ArBase.new(object)
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
cat_tree-1.1.1 lib/cat_tree/observer/target_set.rb
cat_tree-1.1.0 lib/cat_tree/observer/target_set.rb
cat_tree-1.0.0 lib/cat_tree/observer/target_set.rb