Module: Fanforce::Validations

Extended by:
Validations
Includes:
Utils
Included in:
Validations
Defined in:
lib/fanforce/validations/version.rb,
lib/fanforce/validations/validations.rb

Constant Summary collapse

VERSION =
'0.7.0'

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(base) ⇒ Object



8
# File 'lib/fanforce/validations/validations.rb', line 8

def self.included(base) base.extend(self) end

Instance Method Details

#extract_options!(args) ⇒ Object



88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# File 'lib/fanforce/validations/validations.rb', line 88

def extract_options!(args)
  if args.last.is_a?(Hash)
    opts = args.pop.symbolize_keys
    if is_present?(opts[:field]) and opts[:fields].is_a?(Array)
      opts[:fields] << opts.delete(:field)
    elsif is_present?(opts[:field])
      opts[:fields] = [opts.delete(:field)]
    end
    return opts
  elsif args.last.is_a?(::String)
    {message: args.pop.to_s}
  else
    {}
  end
end

#extract_validation_params(opts) ⇒ Object



10
11
12
13
14
# File 'lib/fanforce/validations/validations.rb', line 10

def extract_validation_params(opts)
  return opts.delete(:params) if is_present?(opts[:params])
  return self.params if self.respond_to?(:params)
  Fanforce.env[:request_params] || {}
end

#format_validation_error(opts, fields, default_error_code = nil) ⇒ Object



75
76
77
78
79
80
81
82
# File 'lib/fanforce/validations/validations.rb', line 75

def format_validation_error(opts, fields, default_error_code=nil)
  error = {
      resource: is_present?(opts[:resource]) ? opts[:resource] : (self.class==Class ? self.name.demodulize.tableize.singularize : self.class.name.demodulize.tableize.singularize),
      code: is_present?(opts[:code]) ? opts[:code] : default_error_code,
      message: opts[:message]
  }
  fields.is_a?(Array) ? error.update(fields: fields) : error.update(field: fields)
end

#parse_validation_field_name(field, i, opts, params) ⇒ Object



16
17
18
19
20
21
# File 'lib/fanforce/validations/validations.rb', line 16

def parse_validation_field_name(field, i, opts, params)
  name = opts[:fields][i] if is_present?(opts[:fields])
  name = field if is_blank?(name) and field.is_a?(Symbol)
  name = :unknown if is_blank?(name)
  name.to_sym
end

#raise_validation_errors(opts, errors, default_error_class) ⇒ Object

Raises:

  • ((opts[:error_class] || default_error_class))


84
85
86
# File 'lib/fanforce/validations/validations.rb', line 84

def raise_validation_errors(opts, errors, default_error_class)
  raise (opts[:error_class] || default_error_class).new(*errors)
end

#validates_presence_of_all(*args) ⇒ Object Also known as: validates_presence_of



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/fanforce/validations/validations.rb', line 23

def validates_presence_of_all(*args)
  opts = extract_options!(args)
  params = extract_validation_params(opts)
  fields_to_validate = args.is_a?(Array) ? args : [args]

  invalid_fields = []
  fields_to_validate.each_with_index do |field_to_validate, i|
    if !(field_to_validate.is_a?(Symbol) ? is_present?(params[field_to_validate]) : is_present?(field_to_validate))
      invalid_fields << parse_validation_field_name(field_to_validate, i, opts, params)
    end
  end
  return true if invalid_fields.size == 0

  errors = invalid_fields.inject([]) {|result, f| result << format_validation_error(opts, f, :missing_field) }
  raise_validation_errors(opts, errors, Fanforce::Error::BadRequest)
end

#validates_presence_of_any(*args) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/fanforce/validations/validations.rb', line 41

def validates_presence_of_any(*args)
  opts = extract_options!(args)
  params = extract_validation_params(opts)
  fields_to_validate = args.is_a?(Array) ? args : [args]

  invalid_fields = []
  fields_to_validate.each_with_index do |field_to_validate, i|
    if !(field_to_validate.is_a?(Symbol) ? is_present?(params[field_to_validate]) : is_present?(field_to_validate))
      invalid_fields << parse_validation_field_name(field_to_validate, i, opts, params)
    end
  end
  return true if invalid_fields.size < fields_to_validate.size

  errors = [format_validation_error(opts, invalid_fields, :invalid_data)]
  raise_validation_errors(opts, errors, Fanforce::Error::BadRequest)
end

#validates_true(*args) ⇒ Object



58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/fanforce/validations/validations.rb', line 58

def validates_true(*args)
  opts = extract_options!(args)
  params = extract_validation_params(opts)
  bools_to_validate = args.is_a?(Array) ? args : [args]

  invalid_fields = []
  bools_to_validate.each_with_index do |bool_is_true, i|
    if !bool_is_true
      invalid_fields << parse_validation_field_name(nil, i, opts, nil)
    end
  end
  return true if invalid_fields.size == 0

  errors = invalid_fields.inject([]) {|result, f| result << format_validation_error(opts, f, :invalid_data) }
  raise_validation_errors(opts, errors, Fanforce::Error::RequestFailed)
end