module PhonyRails::Extension::ClassMethods
Constants
- PHONY_RAILS_COLLECTION_VALID_KEYS
Public Instance Methods
phony_normalize(*attributes)
click to toggle source
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!
# File lib/phony_rails.rb, line 202 def phony_normalize(*attributes) options = attributes.last.is_a?(Hash) ? attributes.pop : {} options.assert_valid_keys(*PHONY_RAILS_COLLECTION_VALID_KEYS) raise ArgumentError, ':as option can not be used on phony_normalize with multiple attribute names! (PhonyRails)' if options[:as].present? && (attributes.size > 1) options[:enforce_record_country] = true if options[:enforce_record_country].nil? conditional = create_before_validation_conditional_hash(options) # Add before validation that saves a normalized version of the phone number before_validation conditional do set_phony_normalized_numbers(self, attributes, options) end end
phony_normalized_method(*attributes)
click to toggle source
Usage:
phony_normalized_method :fax_number, :default_country_code => 'US'
Creates a normalized_fax_number method.
# File lib/phony_rails.rb, line 220 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 #{name} (PhonyRails)") if method_defined?(:"normalized_#{attribute}") define_method :"normalized_#{attribute}" do |*args| options = main_options.merge(args.first || {}) assign_values_for_phony_symbol_options(options) raise(ArgumentError, "No attribute/method #{attribute} found on #{self.class.name} (PhonyRails)") unless respond_to?(attribute) options[:country_code] ||= country_code if respond_to?(:country_code) PhonyRails.normalize_number(send(attribute), options) end end end
Private Instance Methods
create_before_validation_conditional_hash(options)
click to toggle source
Creates a hash representing a conditional for before_validation This allows conditional normalization Returns something like `{ unless: -> { attribute == 'something' } }` If no if/unless options passed in, returns `{ if: -> { true } }`
# File lib/phony_rails.rb, line 243 def create_before_validation_conditional_hash(options) if options[:if].present? type = :if source = options[:if] elsif options[:unless].present? type = :unless source = options[:unless] else type = :if source = true end conditional = {} conditional[type] = if source.respond_to?(:call) source elsif source.respond_to?(:to_sym) -> { send(source.to_sym) } else -> { source } end conditional end