Module: PhonyRails::Extension::ClassMethods

Defined in:
lib/phony_rails.rb

Instance Method Summary collapse

Instance Method Details

#phony_normalize(*attributes) ⇒ Object

Use this method on the class level like:

phony_normalize :phone_number, :fax_number, :default_country_code => 'NL'

It checks your model object for a a country_code attribute (eg. ‘NL’) to do the normalizing so make sure you’ve geocoded before calling this method!



65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/phony_rails.rb', line 65

def phony_normalize(*attributes)
  options = attributes.last.is_a?(Hash) ? attributes.pop : {}
  options.assert_valid_keys :country_code, :default_country_code, :as
  if options[:as].present?
    raise ArgumentError, ':as option can not be used on phony_normalize with multiple attribute names! (PhonyRails)' if attributes.size > 1
  end

  # Add before validation that saves a normalized version of the phone number
  self.before_validation do
    set_phony_normalized_numbers(attributes, options)
  end
end

#phony_normalized_method(*attributes) ⇒ Object

Usage:

phony_normalized_method :fax_number, :default_country_code => 'US'

Creates a normalized_fax_number method.



81
82
83
84
85
86
87
88
89
90
91
92
93
# File 'lib/phony_rails.rb', line 81

def phony_normalized_method(*attributes)
  main_options = attributes.last.is_a?(Hash) ? attributes.pop : {}
  main_options.assert_valid_keys :country_code, :default_country_code
  attributes.each do |attribute|
    raise StandardError, "Instance method normalized_#{attribute} already exists on #{self.name} (PhonyRails)" if method_defined?(:"normalized_#{attribute}")
    define_method :"normalized_#{attribute}" do |*args|
      options = args.first || {}
      raise ArgumentError, "No attribute/method #{attribute} found on #{self.class.name} (PhonyRails)" if not self.respond_to?(attribute)
      options[:country_code] ||= self.country_code if self.respond_to?(:country_code)
      PhonyRails.normalize_number(self.send(attribute), main_options.merge(options))
    end
  end
end