Module: HasUniqueThreeLetterCode::ClassMethods

Defined in:
lib/has_unique_three_letter_code/class_methods.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#code_sourcesObject (readonly)

Returns the value of attribute code_sources.



7
8
9
# File 'lib/has_unique_three_letter_code/class_methods.rb', line 7

def code_sources
  @code_sources
end

Instance Method Details

#has_unique_three_letter_code(*columns) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/has_unique_three_letter_code/class_methods.rb', line 8

def has_unique_three_letter_code(*columns)
  options = columns.last.is_a?(Hash) ? columns.pop : {}
  columns.each do |column|
    validates column,
        :uniqueness => (options[:uniqueness] || true),
        :length => {:is => 3, :allow_nil => true}.merge(options[:length] || {}),
        :exclusion => { :in => Proc.new { HasUniqueThreeLetterCode.config.forbidden_codes }, :message => "'%{value}' is not an appropriate word" }
    (@code_sources ||= {})[column] = options[:source] || :name
    before_validation do
      if options[:leave_blank]
        leave_blank = options[:leave_blank][:if]
        if (leave_blank.blank? || (leave_blank.is_a?(Proc) && !leave_blank.call(self)) || (leave_blank.is_a?(Symbol) && !self.__send__(leave_blank)))
          dont_leave_blank = options[:leave_blank][:unless]
          if (dont_leave_blank.blank? || (dont_leave_blank.is_a?(Proc) && dont_leave_blank.call(self)) || (dont_leave_blank.is_a?(Symbol) && self.__send__(dont_leave_blank)))
            set_three_letter_column column if self.__send__(column).blank?
          end
        end
      else
        set_three_letter_column column if self.__send__(column).blank?
      end
    end
  end
end