Module: Uniqueness::Model
- Defined in:
- lib/uniqueness/model.rb
Overview
:nodoc:
Defined Under Namespace
Modules: ClassMethods
Class Method Summary collapse
Instance Method Summary collapse
- #uniqueness_ambigious_dictionary ⇒ Object
-
#uniqueness_dictionary ⇒ Object
Dictionary used for uniqueness generation.
-
#uniqueness_generate ⇒ Object
Generates a new code based on given options.
- #uniqueness_validation ⇒ Object
Class Method Details
.included(base) ⇒ Object
3 4 5 6 7 |
# File 'lib/uniqueness/model.rb', line 3 def self.included(base) base.extend ClassMethods # Track all uniqueness arguments base.class_attribute :uniqueness_options end |
Instance Method Details
#uniqueness_ambigious_dictionary ⇒ Object
69 70 71 |
# File 'lib/uniqueness/model.rb', line 69 def uniqueness_ambigious_dictionary [:b, :B, :o, :O, :q, :I, :l, :L, :s, :S, :u, :U, :z, :Z].map(&:to_s) end |
#uniqueness_dictionary ⇒ Object
Dictionary used for uniqueness generation
65 66 67 |
# File 'lib/uniqueness/model.rb', line 65 def uniqueness_dictionary [*(:A..:Z), *(:a..:z), *(0..9)].map(&:to_s) end |
#uniqueness_generate ⇒ Object
Generates a new code based on given options
51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/uniqueness/model.rb', line 51 def uniqueness_generate self..each do |field, | value = send(field) unless value.present? dict = uniqueness_dictionary - [:blacklist] dict -= [*(:A..:Z)].map(&:to_s) unless [:case_sensitive] dict -= uniqueness_ambigious_dictionary if [:type].to_sym == :human value = Array.new([:length]).map { dict[rand(dict.length)] }.join self.send("#{field}=", value) end end end |
#uniqueness_validation ⇒ Object
73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
# File 'lib/uniqueness/model.rb', line 73 def uniqueness_validation self.class..each do |field, | value = send(field) if value.nil? errors.add(field, 'should not be empty') else conditions = {} [:scope].each do |s| conditions[s] = send(s) end conditions[field] = value query = self.class.where(conditions) errors.add(field, 'should be unique') if query.any? end end end |