Sha256: d30c5d540bd29701d10d9ba544b6c7199a45428b0bfad223241b9e9898e00d41

Contents?: true

Size: 933 Bytes

Versions: 6

Compression:

Stored size: 933 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
      @before[:save] << :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, :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

6 entries across 6 versions & 1 rubygems

Version Path
mongocore-0.5.1 lib/mongocore/filters.rb
mongocore-0.5.0 lib/mongocore/filters.rb
mongocore-0.4.5 lib/mongocore/filters.rb
mongocore-0.4.4 lib/mongocore/filters.rb
mongocore-0.4.3 lib/mongocore/filters.rb
mongocore-0.4.2 lib/mongocore/filters.rb