Module: ValidatesBySchema::ClassMethods
- Defined in:
- lib/validates_by_schema.rb
Instance Method Summary collapse
- #all_foreign_keys ⇒ Object
- #customize_columns(columns, options) ⇒ Object
- #define_association_validations ⇒ Object
- #define_validations(columns) ⇒ Object
- #schema_validateable_columns ⇒ Object
- #validates_by_schema(options = {}) ⇒ Object
Instance Method Details
#all_foreign_keys ⇒ Object
51 52 53 54 55 |
# File 'lib/validates_by_schema.rb', line 51 def all_foreign_keys reflect_on_all_associations(:belongs_to).collect do |association| association.foreign_key.to_s end end |
#customize_columns(columns, options) ⇒ Object
26 27 28 29 30 31 32 33 34 |
# File 'lib/validates_by_schema.rb', line 26 def customize_columns(columns, ) # Allow user to specify :only or :except options { only: :select!, except: :reject! }.each do |k, v| if [k] attrs = Array([k]).collect(&:to_s) columns.send(v) { |c| attrs.include?(c.name) } end end end |
#define_association_validations ⇒ Object
43 44 45 46 47 48 49 |
# File 'lib/validates_by_schema.rb', line 43 def define_association_validations reflect_on_all_associations(:belongs_to).each do |association| column = columns_hash[association.foreign_key.to_s] next unless column validates association.name, presence: true unless column.null end end |
#define_validations(columns) ⇒ Object
36 37 38 39 40 41 |
# File 'lib/validates_by_schema.rb', line 36 def define_validations(columns) columns.each do |c| vo = ValidationOption.new(c).to_hash validates c.name, vo if vo.present? end end |
#schema_validateable_columns ⇒ Object
16 17 18 19 20 21 22 23 24 |
# File 'lib/validates_by_schema.rb', line 16 def schema_validateable_columns # Don't auto validate primary, foreign keys or timestamps foreign_keys = all_foreign_keys columns.reject do |c| c.name == primary_key.to_s || %w(updated_at created_at).include?(c.name) || foreign_keys.include?(c.name) end end |
#validates_by_schema(options = {}) ⇒ Object
7 8 9 10 11 12 13 14 |
# File 'lib/validates_by_schema.rb', line 7 def validates_by_schema( = {}) return unless table_exists? columns = schema_validateable_columns customize_columns(columns, ) define_validations(columns) define_association_validations end |