Class: ForeignKeyValidation::Collector

Inherits:
Object
  • Object
show all
Defined in:
lib/foreign_key_validation/collector.rb

Constant Summary collapse

DEFAULT_VALIDATE_AGAINST =
:user

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(opt = {}) ⇒ Collector

Returns a new instance of Collector.



8
9
10
# File 'lib/foreign_key_validation/collector.rb', line 8

def initialize(opt={})
  self.options = opt
end

Instance Attribute Details

#optionsObject

Returns the value of attribute options.



4
5
6
# File 'lib/foreign_key_validation/collector.rb', line 4

def options
  @options
end

Instance Method Details

#check!Object



12
13
14
15
16
17
# File 'lib/foreign_key_validation/collector.rb', line 12

def check!
  raise Errors::NoReleationFoundError.new(klass.name) if reflection_names.empty?
  raise Errors::NoForeignKeyFoundError.new(validate_against, klass.table_name) unless reflection_names.include?(validate_against)
  raise Errors::UnknownRelationError.new(validate_with) unless validate_with.all? {|k| reflection_names.include?(k)}
  true
end

#klassObject



19
20
21
# File 'lib/foreign_key_validation/collector.rb', line 19

def klass
  @klass ||= options[:klass]
end

#reflection_namesObject



35
36
37
# File 'lib/foreign_key_validation/collector.rb', line 35

def reflection_names
  @reflection_names ||= reflections.map {|r| r.name.to_s }
end

#reflectionsObject



31
32
33
# File 'lib/foreign_key_validation/collector.rb', line 31

def reflections
  @reflections ||= klass.reflect_on_all_associations(:belongs_to)
end

#validate_againstObject



23
24
25
# File 'lib/foreign_key_validation/collector.rb', line 23

def validate_against
  @validate_against ||= (options[:on] || DEFAULT_VALIDATE_AGAINST).to_s
end

#validate_against_keyObject



39
40
41
# File 'lib/foreign_key_validation/collector.rb', line 39

def validate_against_key
  @validate_against_key ||= reflections.select {|r| r.name.to_s == validate_against}.first.try(:foreign_key)
end

#validate_withObject



27
28
29
# File 'lib/foreign_key_validation/collector.rb', line 27

def validate_with
  @validate_with ||= ((Array(options[:with]).map(&:to_s) if options[:with]) || reflection_names).reject {|n| n == validate_against}
end