Module: ValidationScopes::ClassMethods

Defined in:
lib/validation_scopes.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.all_scopesObject



14
15
16
# File 'lib/validation_scopes.rb', line 14

def self.all_scopes
  @all_scopes
end

Instance Method Details

#validation_scope(scope) {|proxy_class| ... } ⇒ Object

Yields:

  • (proxy_class)


10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/validation_scopes.rb', line 10

def validation_scope(scope)
  @all_scopes ||= []
  @all_scopes << scope

  def self.all_scopes
    @all_scopes
  end

  base_class = self

  proxy_class = Class.new(DelegateClass(base_class)) do
    include ActiveModel::Validations

    def initialize(record)
      @base_record = record
      super(record)
    end

    # Hacks to support dynamic_model helpers
    def to_model
      self
    end

    # Rails 3 default implementation of model_name blows up for anonymous classes
    class << self; self; end.class_eval do
      define_method(:model_name) do
        base_class.model_name
      end
    end
  end

  yield proxy_class

  define_method(scope) do
    send("validation_scope_proxy_for_#{scope}").errors
  end

  define_method("no_#{scope}?") do
    send("validation_scope_proxy_for_#{scope}").valid?
  end

  define_method("has_#{scope}?") do
    send("validation_scope_proxy_for_#{scope}").invalid?
  end

  define_method("init_validation_scope_for_#{scope}") do
    unless instance_variable_defined?("@#{scope}")
      instance_variable_set("@#{scope}", proxy_class.new(self))
    end
  end

  define_method("validation_scope_proxy_for_#{scope}") do
    send "init_validation_scope_for_#{scope}"
    instance_variable_get("@#{scope}")
  end
end