Module: DatabaseValidations::Helpers
- Defined in:
- lib/database_validations/lib/helpers.rb
Class Method Summary collapse
- .cache_valid_method!(klass) ⇒ Object
- .each_options_storage(klass) ⇒ Object
- .generate_key(type, *args) ⇒ Object
- .generate_key_for_belongs_to(column) ⇒ Object
- .generate_key_for_uniqueness(*columns) ⇒ Object
- .generate_key_for_uniqueness_index(index_name) ⇒ Object
- .handle_error!(instance, error) ⇒ Object
- .handle_foreign_key_error!(instance, error) ⇒ Object
- .handle_unique_error!(instance, error) ⇒ Object
- .storage_of(klass) ⇒ Object
- .unify_columns(*args) ⇒ Object
Class Method Details
.cache_valid_method!(klass) ⇒ Object
5 6 7 8 9 |
# File 'lib/database_validations/lib/helpers.rb', line 5 def cache_valid_method!(klass) return if klass.method_defined?(:valid_without_database_validations?) klass.alias_method(:valid_without_database_validations?, :valid?) end |
.each_options_storage(klass) ⇒ Object
47 48 49 50 51 52 53 |
# File 'lib/database_validations/lib/helpers.rb', line 47 def (klass) while klass.respond_to?(:validates_db_uniqueness_of) storage = storage_of(klass) yield(storage) if storage klass = klass.superclass end end |
.generate_key(type, *args) ⇒ Object
75 76 77 |
# File 'lib/database_validations/lib/helpers.rb', line 75 def generate_key(type, *args) [type, *unify_columns(args)].join('__') end |
.generate_key_for_belongs_to(column) ⇒ Object
71 72 73 |
# File 'lib/database_validations/lib/helpers.rb', line 71 def generate_key_for_belongs_to(column) generate_key(:belongs_to, column) end |
.generate_key_for_uniqueness(*columns) ⇒ Object
67 68 69 |
# File 'lib/database_validations/lib/helpers.rb', line 67 def generate_key_for_uniqueness(*columns) generate_key(:uniqueness, columns) end |
.generate_key_for_uniqueness_index(index_name) ⇒ Object
63 64 65 |
# File 'lib/database_validations/lib/helpers.rb', line 63 def generate_key_for_uniqueness_index(index_name) generate_key(:uniqueness_index, index_name) end |
.handle_error!(instance, error) ⇒ Object
11 12 13 14 15 16 17 18 19 |
# File 'lib/database_validations/lib/helpers.rb', line 11 def handle_error!(instance, error) case error when ActiveRecord::RecordNotUnique handle_unique_error!(instance, error) when ActiveRecord::InvalidForeignKey handle_foreign_key_error!(instance, error) else false end end |
.handle_foreign_key_error!(instance, error) ⇒ Object
36 37 38 39 40 41 42 43 44 45 |
# File 'lib/database_validations/lib/helpers.rb', line 36 def handle_foreign_key_error!(instance, error) adapter = Adapters.factory(instance.class) column_key = generate_key_for_belongs_to(adapter.foreign_key_error_column(error.)) (instance.class) do |storage| return storage[column_key].handle_foreign_key_error(instance) if storage[column_key] end false end |
.handle_unique_error!(instance, error) ⇒ Object
21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/database_validations/lib/helpers.rb', line 21 def handle_unique_error!(instance, error) adapter = Adapters.factory(instance.class) keys = [ generate_key_for_uniqueness_index(adapter.unique_index_name(error.)), generate_key_for_uniqueness(adapter.unique_error_columns(error.)) ] (instance.class) do |storage| keys.each { |key| return storage[key].handle_unique_error(instance) if storage[key] } end false end |
.storage_of(klass) ⇒ Object
55 56 57 |
# File 'lib/database_validations/lib/helpers.rb', line 55 def storage_of(klass) klass.instance_variable_get(:'@database_validations_storage') end |
.unify_columns(*args) ⇒ Object
59 60 61 |
# File 'lib/database_validations/lib/helpers.rb', line 59 def unify_columns(*args) args.flatten.compact.map(&:to_s).sort end |