Sha256: c209c0eeaadc21c49d8e8c746c4f237688f3323e5722b5d02b1b2a8f6fe8373c

Contents?: true

Size: 965 Bytes

Versions: 28

Compression:

Stored size: 965 Bytes

Contents

module Mongocore
  class Filters

    # # # # # # # #
    # The Filters class is responsible for the before, after and validate filters.
    #

    # Accessors
    attr_accessor :klass, :before, :after, :validate

    # Init
    def initialize(klass)
      # Save model class
      @klass = klass

      # The before filters
      @before = Hash.new{|h, k| h[k] = []}

      # Add timestamp filters if enabled
      [:save, :update].each{|f| @before[f] << :timestamps} if Mongocore.timestamps

      # The after filters
      @after = Hash.new{|h, k| h[k] = []}

      # The validators
      @validate = []
    end

    # Valid?
    def valid?(m)
      @validate.each{|k| call(k, m)}; m.errors.empty?
    end

    # Available filters are :save, :update, :delete
    def run(m, f, key = nil)
      send(f)[key].each{|k| call(k, m)}
    end

    # Execute a proc or a method
    def call(k, m)
      k.is_a?(Proc) ? m.instance_eval(&k) : m.send(k)
    end

  end
end

Version data entries

28 entries across 28 versions & 1 rubygems

Version Path
mongocore-0.4.1 lib/mongocore/filters.rb
mongocore-0.4.0 lib/mongocore/filters.rb
mongocore-0.3.2 lib/mongocore/filters.rb
mongocore-0.3.1.1 lib/mongocore/filters.rb
mongocore-0.3.1 lib/mongocore/filters.rb
mongocore-0.3.0 lib/mongocore/filters.rb
mongocore-0.2.5 lib/mongocore/filters.rb
mongocore-0.2.3 lib/mongocore/filters.rb
mongocore-0.2.2 lib/mongocore/filters.rb
mongocore-0.2.1 lib/mongocore/filters.rb
mongocore-0.2.0 lib/mongocore/filters.rb
mongocore-0.1.10 lib/mongocore/filters.rb
mongocore-0.1.9 lib/mongocore/filters.rb
mongocore-0.1.8 lib/mongocore/filters.rb
mongocore-0.1.7 lib/mongocore/filters.rb
mongocore-0.1.6 lib/mongocore/filters.rb
mongocore-0.1.5.6 lib/mongocore/filters.rb
mongocore-0.1.5.5 lib/mongocore/filters.rb
mongocore-0.1.5.4 lib/mongocore/filters.rb
mongocore-0.1.5.3 lib/mongocore/filters.rb