Module: Mikado::ClassMethods

Defined in:
lib/mikado/conditional_validation.rb

Instance Method Summary collapse

Instance Method Details

#mikado(*args, &block) ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/mikado/conditional_validation.rb', line 13

def mikado(*args, &block)
  # set flag that were in mikado
  # we have to monkey patch the validation methods
  # these should check if were in mikado
  # and add the condition to the :if param
  # then we can call class_eval

  self.mikado_validation = args

  class_eval &block
  
  self.mikado_validation = nil
  
  # remove the mikado flag
end

#mikado_validationObject



33
34
35
36
# File 'lib/mikado/conditional_validation.rb', line 33

def mikado_validation
  return @@mikado if defined? @@mikado
  return nil
end

#mikado_validation=(value) ⇒ Object



29
30
31
# File 'lib/mikado/conditional_validation.rb', line 29

def mikado_validation=(value)
  @@mikado = value
end

#modify_validationsObject



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/mikado/conditional_validation.rb', line 38

def modify_validations
  meths = methods.map { |m| m if m.to_s.starts_with?("validates_") }.compact
  meths |= %w( validate validate_on_create validate_on_update )
  
  meths.each do |method|
    (class << self; self; end).instance_eval do

      define_method "#{method}_with_mikado" do |*attr_names, &block|
        attrs = modify_with_mikado(attr_names)
        return self.send("#{method}_without_mikado", *attrs, &block)
      end
      
      alias_method_chain method, "mikado"
    end
  end
end

#modify_with_mikado(attr_names) ⇒ Object



55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/mikado/conditional_validation.rb', line 55

def modify_with_mikado(attr_names)
  return attr_names unless mikado_validation
  
  options = attr_names.extract_options!
  options = options.dup if Mikado::Utility.is_ar_3?

  options[:if] = [] if options.blank?
  options[:if] = [options[:if]] if !options[:if].is_a?(Array)

  options[:if] = options[:if] | mikado_validation

  attr_names << options
  
  attr_names
end