Module: HasValid

Included in:
ActiveRecord::Base
Defined in:
lib/rails-has-valid.rb

Defined Under Namespace

Classes: InvalidColumnNameException

Instance Method Summary collapse

Instance Method Details

#has_valid?(validated_attributes) ⇒ Boolean

Returns:

  • (Boolean)

Raises:

  • (ArgumentError)


7
8
9
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
# File 'lib/rails-has-valid.rb', line 7

def has_valid?(validated_attributes)
	#
	# Validate column names
	#
	raise ArgumentError unless validated_attributes.is_a?(Array) or validated_attributes.is_a?(Symbol)

	validated_attributes = [validated_attributes] if validated_attributes.is_a?(Symbol)

	validated_attributes = validated_attributes.map do |attribute|
		raise InvalidColumnNameException unless self.attribute_names.include?(attribute.to_s)
		attribute.to_sym
	end

	#
	# Clear previous validation errors
	#
	self.errors.clear

	# 
	# Run validations
	# 
	self.valid?

	#
	# Remove validation errors for attributes we don't want to validate
	#
	(self.errors.messages.keys - validated_attributes).each do |key|
		self.errors.delete(key)
	end

	errors.none?
end

#save_if_has_valid(validated_attributes) ⇒ Object



40
41
42
43
44
45
# File 'lib/rails-has-valid.rb', line 40

def save_if_has_valid(validated_attributes)
	has_valid?(validated_attributes)

	self.save(validate: false) if errors.none?
	errors.none?
end

#save_if_has_valid!(validated_attributes) ⇒ Object



47
48
49
50
51
52
53
54
55
# File 'lib/rails-has-valid.rb', line 47

def save_if_has_valid!(validated_attributes)
	has_valid?(validated_attributes)

	if errors.none?
		self.save(validate: false)
	else
		raise ActiveRecord::RecordInvalid.new(self)
	end
end

#update_attributes_if_has_valid(attributes, validated_attributes) ⇒ Object



57
58
59
60
# File 'lib/rails-has-valid.rb', line 57

def update_attributes_if_has_valid(attributes, validated_attributes)
	self.attributes = attributes
	save_if_has_valid(validated_attributes)
end

#update_attributes_if_has_valid!(attributes, validated_attributes) ⇒ Object



62
63
64
65
# File 'lib/rails-has-valid.rb', line 62

def update_attributes_if_has_valid!(attributes, validated_attributes)
	self.attributes = attributes
	save_if_has_valid!(validated_attributes)
end