validates_and_formats_phones 0.0.4 → 0.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/Rakefile CHANGED
@@ -2,6 +2,7 @@ require 'rubygems'
2
2
  require 'rake'
3
3
  require 'rake/gempackagetask'
4
4
  require 'spec/rake/spectask'
5
+ require 'metric_fu'
5
6
 
6
7
  desc 'Default: run specs.'
7
8
  task :default => :spec
@@ -23,7 +24,7 @@ PKG_FILES = FileList[
23
24
 
24
25
  spec = Gem::Specification.new do |s|
25
26
  s.name = "validates_and_formats_phones"
26
- s.version = "0.0.4"
27
+ s.version = "0.0.5"
27
28
 
28
29
  s.author = "Bernie Telles"
29
30
  s.email = "btelles@gmail.com"
@@ -5,7 +5,7 @@ String.class_eval do
5
5
  def to_phone(*args)
6
6
  args.empty? ?
7
7
  formats = {10 => '(###) ###-####'} :
8
- formats = format_sizes(args)
8
+ formats = args.flatten.inject({}) { |all_formats, format| all_formats.merge({format.count('#') => format}) }
9
9
 
10
10
  to_formatted_number(formats)
11
11
  end
@@ -14,8 +14,9 @@ String.class_eval do
14
14
 
15
15
  def to_formatted_number(formats = {})
16
16
  digits = scan(/\d/)
17
- if formats[digits.size]
18
- final_string = formats[digits.size].each_char.inject('') do |result, character|
17
+ total_digits = digits.size
18
+ if formats[total_digits]
19
+ final_string = formats[total_digits].each_char.inject('') do |result, character|
19
20
  character == '#' ? result << digits.shift : result << character
20
21
  result
21
22
  end
@@ -25,12 +26,4 @@ String.class_eval do
25
26
  end
26
27
  end
27
28
 
28
- private
29
-
30
- def format_sizes(formats_array)
31
- formats_array.flatten.inject({}) do |all_formats, format|
32
- all_formats[format.count('#')] = format
33
- all_formats
34
- end
35
- end
36
29
  end
@@ -2,44 +2,44 @@
2
2
  DEFAULT_FORMAT = "(###) ###-####"
3
3
  def self.included(base)
4
4
  base.send :extend, ClassMethods
5
+ base.send :include, InstanceMethods
5
6
  end
6
7
 
7
- module ClassMethods
8
+ def self.extract_formats_and_fields(formats_and_fields)
9
+ formats = []
10
+ fields = []
11
+ formats_and_fields.each do |option|
12
+ option.to_s =~ /#/ ?
13
+ formats << option :
14
+ fields << option.to_sym
15
+ end
16
+ formats << DEFAULT_FORMAT if formats.empty?
17
+ fields << :phone if fields.empty?
18
+ [formats, fields]
19
+ end
8
20
 
21
+ module ClassMethods
9
22
 
10
23
  def validates_and_formats_phones(*args)
11
- formats, fields = extract_formats_and_fields(args)
12
- send :include, InstanceMethods
24
+ formats, fields = ValidatesAndFormatsPhones.extract_formats_and_fields(args)
25
+
26
+ size_options = formats.collect {|format| format.count '#'}
13
27
 
14
28
  validates_each *fields do |record, attr, value|
15
- size_options = formats.collect {|a| a.count '#'}
16
29
  unless value.blank? || size_options.include?(value.scan(/\d/).size)
17
30
  if size_options.size > 1
18
31
  last = size_options.pop
19
- record.errors.add attr, "must have #{size_options.join(', ')} or #{last} digits."
32
+ message = "must have #{size_options.join(', ')} or #{last} digits."
20
33
  else
21
- record.errors.add attr, "must have #{size_options[0]} digits."
34
+ message = "must have #{size_options[0]} digits."
22
35
  end
36
+ record.errors.add attr, message
23
37
  else
24
38
  record.format_phone_field(attr, formats)
25
39
  end
26
40
  end
27
41
  end
28
42
 
29
- private
30
-
31
- def extract_formats_and_fields(formats_and_fields)
32
- formats = []
33
- fields = []
34
- formats_and_fields.each do |option|
35
- option.to_s =~ /#/ ?
36
- formats << option :
37
- fields << option.to_sym
38
- end
39
- formats << DEFAULT_FORMAT if formats.empty?
40
- fields << :phone if fields.empty?
41
- [formats, fields]
42
- end
43
43
  end
44
44
 
45
45
  module InstanceMethods
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: validates_and_formats_phones
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bernie Telles
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2010-02-03 00:00:00 -05:00
12
+ date: 2010-02-04 00:00:00 -05:00
13
13
  default_executable:
14
14
  dependencies: []
15
15