crm_formatter 1.0.2.pre.rc.1 → 1.0.3.pre.rc.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 55c0492c70468ec89ff37f86a327588798fe2571fae14ab79d7a1dce6ce5e931
4
- data.tar.gz: 55afae0d73b89304f0d3fbdec2a91e7d4f77c9d5d8f40a06195d9754095a1ee3
3
+ metadata.gz: 84e611755e48ace0e3749f41cd7a593d01de04cbaeac00223e0b1f6b7a3479d8
4
+ data.tar.gz: 7168462838bcd31e7390e6c4563236916a9b68210218934fb5d554fbdbbcf001
5
5
  SHA512:
6
- metadata.gz: bc389bc3248c9b32b464378ed71258325a2c27b43b933101dec41cf1aa8b450b3f7ce3d5fe47405c77f41bff32ade3a107668ac528500d28a797bc0fba2ae481
7
- data.tar.gz: 8c0046fc1da44ccdc9812242c023e232b55e0ad11ca0da804c044f358e5eb65afc0d25ab95161f1a7347f41efb9fa3759b6cfe12bc04e16d9145df494bf8da19
6
+ metadata.gz: 2dc917206f92120f86a88e0842c95e6b5e276e8f19ff964f3f0722234719745c2cab67e2f5e47f11c75e120e75fdd298897d5f15808969f412a07f798f545a6c
7
+ data.tar.gz: '09dc46e716020aaa772c50febc0908823920721aacb252b5a5ef779f681293ecb54812ae2bdb9910e01b8d66528026395a7272bca067d6de9ab676309eda0093'
@@ -17,17 +17,11 @@ Gem::Specification.new do |spec|
17
17
  spec.files = `git ls-files -z`.split("\x0").reject do |f|
18
18
  f.match(%r{^(test|spec|features)/})
19
19
  end
20
+
20
21
  spec.bindir = "exe"
21
22
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
22
23
  spec.require_paths = ["lib"]
23
24
 
24
- # spec.add_development_dependency "activerecord", "~> 4.0"
25
- # spec.add_development_dependency "sqlite3", "~> 1.3", ">= 1.3.13"
26
- # spec.add_development_dependency "railties", ">= 4.2.0", "< 5.1"
27
- # spec.add_development_dependency "bundler", "~> 1.13"
28
- # spec.add_development_dependency "rake", "~> 10.0"
29
- # spec.add_development_dependency "rspec", "~> 3.0"
30
- # spec.add_development_dependency "pry", "~> 0.10.4"
31
-
32
- # spec.add_runtime_dependency "logging"
25
+ spec.add_development_dependency "pry", "~> 0.10.4"
26
+
33
27
  end
@@ -1,8 +1,9 @@
1
- class CRMFormatter
2
- def self.hi(language)
3
- translator = Translator.new(language)
4
- translator.hi
5
- end
6
- end
1
+ require 'crm_formatter/address'
2
+ require 'crm_formatter/web'
3
+ require 'crm_formatter/phone'
4
+ require 'crm_formatter/helpers'
5
+ require 'crm_formatter/version'
6
+
7
+ module CRMFormatter
7
8
 
8
- require 'crm_formatter/translator'
9
+ end
@@ -0,0 +1,174 @@
1
+ module CRMFormatter
2
+ class Address
3
+
4
+ def format_full_address(adr = {})
5
+ formatted = {
6
+ street: format_street(adr[:street]),
7
+ city: format_city(adr[:city]),
8
+ state: format_state(adr[:state]),
9
+ zip: format_zip(adr[:zip])
10
+ }
11
+
12
+ formatted[:full_address] = get_full_address(formatted)
13
+ formatted[:changed] = compare_versions(adr, formatted)
14
+ formatted
15
+ end
16
+
17
+
18
+ ####### COMPARE ORIGINAL AND FORMATTED ADR ######
19
+ def compare_versions(original, formatted)
20
+ original = get_full_address(original)
21
+ formatted = formatted[:full_address]
22
+ original != formatted
23
+ end
24
+
25
+
26
+ ######### FORMAT FULL ADDRESS ##########
27
+
28
+ def get_full_address(hsh)
29
+ full_address = [hsh[:street], hsh[:city], hsh[:state], hsh[:zip]].compact.join(', ')
30
+ end
31
+
32
+ ######### FORMAT STREET ##########
33
+
34
+ # CALL: Formatter.new.format_street(street)
35
+ def format_street(street)
36
+ street = street&.gsub(/\s/, ' ')&.strip
37
+ if street.present?
38
+
39
+ if street.present?
40
+ # street = Formatter.new.letter_case_check(street)
41
+ street = CRMFormatter::Helpers.letter_case_check(street)
42
+ street = " #{street} " # Adds white space, to match below, then strip.
43
+ street&.gsub!(".", " ")
44
+ street&.gsub!(",", " ")
45
+
46
+ street&.gsub!(" North ", " N ")
47
+ street&.gsub!(" South ", " S ")
48
+ street&.gsub!(" East ", " E ")
49
+ street&.gsub!(" West ", " W ")
50
+ street&.gsub!(" Ne ", " NE ")
51
+ street&.gsub!(" Nw ", " NW ")
52
+ street&.gsub!(" Se ", " SE ")
53
+ street&.gsub!(" Sw ", " SW ")
54
+
55
+ street&.gsub!("Avenue", "Ave")
56
+ street&.gsub!("Boulevard", "Blvd")
57
+ street&.gsub!("Drive", "Dr")
58
+ street&.gsub!("Expressway", "Expy")
59
+ street&.gsub!("Freeway", "Fwy")
60
+ street&.gsub!("Highway", "Hwy")
61
+ street&.gsub!("Lane", "Ln")
62
+ street&.gsub!("Parkway", "Pkwy")
63
+ street&.gsub!("Road", "Rd")
64
+ street&.gsub!("Route", "Rte")
65
+ street&.gsub!("Street", "St")
66
+ street&.gsub!("Terrace", "Ter")
67
+ street&.gsub!("Trail", "Trl")
68
+ street&.gsub!("Turnpike", "Tpke")
69
+ street&.gsub!("|", " ")
70
+ street&.gsub!("•", " ")
71
+ street&.gsub!("Welcome to", " ")
72
+ street&.gsub!("var address = \"", " ")
73
+
74
+ street&.strip!
75
+ street&.squeeze!(" ")
76
+ end
77
+ end
78
+ return street
79
+ end
80
+
81
+ ########## FORMAT CITY ###########
82
+
83
+ def format_city(city)
84
+ city = city&.gsub(/\s/, ' ')&.strip
85
+ city = nil if city&.scan(/[0-9]/)&.any?
86
+ city = nil if city&.downcase&.include?('category')
87
+ city = nil if city&.downcase&.include?('model')
88
+ city = nil if city&.downcase&.include?('make')
89
+ city = nil if city&.downcase&.include?('inventory')
90
+ city = nil if city&.downcase&.include?('tracker')
91
+ city = nil if city&.downcase&.include?('push')
92
+ city = nil if city&.downcase&.include?("(")
93
+ city = nil if city&.downcase&.include?(")")
94
+ city = nil if city&.downcase&.include?("[")
95
+ city = nil if city&.downcase&.include?("]")
96
+ city&.gsub!("|", " ")
97
+ city&.gsub!("•", " ")
98
+
99
+ if city.present?
100
+ street_types = %w(avenue boulevard drive expressway freeway highway lane parkway road route street terrace trail turnpike)
101
+ invalid_city = street_types.find { |street_type| city.downcase.include?(street_type) }
102
+ city = nil if invalid_city.present?
103
+
104
+ if city.present?
105
+ st_types = %w(ave blvd dr expy fwy hwy ln pkwy rd rte st ter trl tpke)
106
+ city_parts = city.split(' ')
107
+
108
+ invalid_city = city_parts.select do |city_part|
109
+ st_types.find { |st_type| city_part.downcase == st_type }
110
+ end
111
+
112
+ city = nil if invalid_city.present?
113
+ city = nil if city&.downcase&.include?("/")
114
+ city = nil if city&.downcase&.include?("www")
115
+ city = nil if city&.downcase&.include?("*")
116
+ city = nil if city&.downcase&.include?("number")
117
+ city = nil if city&.downcase&.include?("stock")
118
+ city = nil if city&.downcase&.include?(":")
119
+ city = nil if city&.downcase&.include?("ID")
120
+
121
+ city&.strip!
122
+ city&.squeeze!(" ")
123
+ city = nil if city.present? && city.length > 50
124
+ city = nil if city.present? && city.length < 4
125
+ end
126
+ end
127
+ city = city&.split(' ')&.map(&:capitalize).join(' ')
128
+ return city
129
+ end
130
+
131
+ ########## FORMAT STATE ##########
132
+
133
+ def format_state(state)
134
+ state = state&.gsub(/\s/, ' ')&.strip
135
+
136
+ if state.present?
137
+ states_hsh = { 'Alabama'=>'AL', 'Alaska'=>'AK', 'Arizona'=>'AZ', 'Arkansas'=>'AR', 'California'=>'CA', 'Colorado'=>'CO', 'Connecticut'=>'CT', 'Delaware'=>'DE', 'Florida'=>'FL', 'Georgia'=>'GA', 'Hawaii'=>'HI', 'Idaho'=>'ID', 'Illinois'=>'IL', 'Indiana'=>'IN', 'Iowa'=>'IA', 'Kansas'=>'KS', 'Kentucky'=>'KY', 'Louisiana'=>'LA', 'Maine'=>'ME', 'Maryland'=>'MD', 'Massachusetts'=>'MA', 'Michigan'=>'MI', 'Minnesota'=>'MN', 'Mississippi'=>'MS', 'Missouri'=>'MO', 'Montana'=>'MT', 'Nebraska'=>'NE', 'Nevada'=>'NV', 'New Hampshire'=>'NH', 'New Jersey'=>'NJ', 'New Mexico'=>'NM', 'New York'=>'NY', 'North Carolina'=>'NC', 'North Dakota'=>'ND', 'Ohio'=>'OH', 'Oklahoma'=>'OK', 'Oregon'=>'OR', 'Pennsylvania'=>'PA', 'Rhode Island'=>'RI', 'South Carolina'=>'SC', 'South Dakota'=>'SD', 'Tennessee'=>'TN', 'Texas'=>'TX', 'Utah'=>'UT', 'Vermont'=>'VT', 'Virginia'=>'VA', 'Washington'=>'WA', 'West Virginia'=>'WV', 'Wisconsin'=>'WI', 'Wyoming'=>'WY' }
138
+
139
+ state = state.tr('^A-Za-z', '')
140
+ if state.present? && state.length < 2
141
+ state = nil
142
+ elsif state.present? && state.length > 2
143
+ state = state.capitalize
144
+ states_hsh.map { |k,v| state = v if state == k }
145
+ end
146
+
147
+ if state.present?
148
+ state.upcase!
149
+ valid_state = states_hsh.find { |k,v| state == v }
150
+ state_code = valid_state&.last
151
+ return state_code
152
+ end
153
+ end
154
+ end
155
+
156
+
157
+ ########### FORMAT ZIP ###########
158
+
159
+ #CALL: Formatter.new.format_zip(zip)
160
+ def format_zip(zip)
161
+ zip = nil if !zip.scan(/[0-9]/).length.in?([4,5,8,9])
162
+ zip = zip&.gsub(/\s/, ' ')&.strip
163
+ zip = zip&.split('-')&.first
164
+ zip = nil if zip&.scan(/[A-Za-z]/)&.any?
165
+ (zip = "0#{zip}" if zip.length == 4) if zip.present?
166
+ (zip = nil if zip.length != 5) if zip.present?
167
+ zip&.strip!
168
+ zip&.squeeze!(" ")
169
+ return zip
170
+ end
171
+
172
+
173
+ end
174
+ end
@@ -0,0 +1,23 @@
1
+ module CRMFormatter
2
+ module Helpers
3
+
4
+ #CALL: Formatter.new.letter_case_check(street)
5
+ def self.letter_case_check(str)
6
+ if str.present?
7
+ flashes = str&.gsub(/[^ A-Za-z]/, '')&.strip&.split(' ')
8
+ flash = flashes&.reject {|e| e.length < 3 }.join(' ')
9
+
10
+ if flash.present?
11
+ has_caps = flash.scan(/[A-Z]/).any?
12
+ has_lows = flash.scan(/[a-z]/).any?
13
+ if !has_caps || !has_lows
14
+ str = str.split(' ')&.each { |el| el.capitalize! if el.gsub(/[^ A-Za-z]/, '')&.strip&.length > 2 }&.join(' ')
15
+ end
16
+ end
17
+ return str
18
+ end
19
+ end
20
+
21
+
22
+ end
23
+ end
@@ -0,0 +1,38 @@
1
+ module CRMFormatter
2
+ class Phone
3
+
4
+ ## Checks every phone number in table to verify that it meets phone criteria, then calls format_phone method to format Valid results. Otherwise destroys Invalid phone fields and associations.
5
+
6
+ # Call: Formatter.new.validate_phone(phone)
7
+ def validate_phone(phone)
8
+ phone_hsh = { phone: phone, valid_phone: nil, change: nil }
9
+ if phone.present?
10
+ phone = phone&.gsub(/\s/, ' ')&.strip
11
+ reg = Regexp.new("[(]?[0-9]{3}[ ]?[)-.]?[ ]?[0-9]{3}[ ]?[-. ][ ]?[0-9]{4}")
12
+ return phone_hsh if phone.first == "0" || phone.include?("(0") || !reg.match(phone)
13
+ phone_hsh[:valid_phone] = format_phone(phone)
14
+ phone_hsh[:change] = phone_hsh[:phone] != phone_hsh[:valid_phone]
15
+ end
16
+ phone_hsh
17
+ end
18
+
19
+ #################################
20
+ ## FORMATS PHONE AS: (000) 000-0000
21
+ ## Assumes phone is legitimate, then formats. Not designed to detect Valid phone number.
22
+
23
+ # Call: Formatter.new.format_phone(phone)
24
+ def format_phone(phone)
25
+ regex = Regexp.new("[A-Z]+[a-z]+")
26
+ if !phone.blank? && (phone != "N/A" || phone != "0") && !regex.match(phone)
27
+ phone_stripped = phone.gsub(/[^0-9]/, "")
28
+ (phone_stripped && phone_stripped[0] == "1") ? phone_step2 = phone_stripped[1..-1] : phone_step2 = phone_stripped
29
+
30
+ final_phone = !(phone_step2 && phone_step2.length < 10) ? "(#{phone_step2[0..2]}) #{(phone_step2[3..5])}-#{(phone_step2[6..9])}" : phone
31
+ else
32
+ final_phone = nil
33
+ end
34
+ return final_phone
35
+ end
36
+
37
+ end
38
+ end
@@ -1,3 +1,3 @@
1
1
  module CRMFormatter
2
- VERSION = "1.0.2-rc.1"
2
+ VERSION = "1.0.3-rc.1"
3
3
  end
@@ -0,0 +1,168 @@
1
+ module CRMFormatter
2
+ class Web
3
+
4
+ def initialize(args={})
5
+ @url_red_flags = args.fetch(:url_red_flags, [])
6
+ @link_red_flags = args.fetch(:link_red_flags, [])
7
+ @href_red_flags = args.fetch(:href_red_flags, [])
8
+ @ext_red_flags = args.fetch(:ext_red_flags, [])
9
+ @length_min = args.fetch(:length_min, 2)
10
+ @length_max = args.fetch(:length_max, 100)
11
+ end
12
+
13
+ def format_url(url)
14
+ url_hsh = {full_url: url, valid_url: nil, change: nil }
15
+ if url.present?
16
+ begin
17
+ url = url&.split('|')&.first
18
+ url = url&.split('\\')&.first
19
+ url&.gsub!(/\P{ASCII}/, '')
20
+ url = url&.downcase&.strip
21
+ return url_hsh if url&.length < @length_min
22
+
23
+ 2.times { remove_ww3(url) } if url.present?
24
+ url = remove_slashes(url) if url.present?
25
+ url&.strip!
26
+
27
+ return url_hsh if !url.present? || url&.include?(' ')
28
+ url = url[0..-2] if url[-1] == '/'
29
+
30
+ symbs = ['(', ')', '[', ']', '{', '}', '*', '@', '^', '$', '+', '!', '<', '>', '~', ',', "'"]
31
+ return url_hsh if symbs.any? {|symb| url&.include?(symb) }
32
+
33
+ uri = URI(url)
34
+ if uri.present?
35
+ host_parts = uri.host&.split(".")
36
+
37
+ if @ext_red_flags.any?
38
+ bad_host_sts = host_parts&.map { |part| TRUE if @ext_red_flags.any? {|ext| part == ext } }&.compact&.first
39
+ return url_hsh if bad_host_sts
40
+ end
41
+
42
+ host = uri.host
43
+ scheme = uri.scheme
44
+ url = "#{scheme}://#{host}" if host.present? && scheme.present?
45
+ url = "http://#{url}" if url[0..3] != "http"
46
+ url = url.gsub("//", "//www.") if !url.include?("www.")
47
+ return url_hsh if @url_red_flags.any? { |bad_text| url&.include?(bad_text) }
48
+ url_hsh[:valid_url] = convert_to_scheme_host(url) if url.present?
49
+ url_hsh[:change] = url_hsh[:valid_url] != url_hsh[:full_url]
50
+ end
51
+ rescue
52
+ return url_hsh
53
+ end
54
+ end
55
+ url_hsh
56
+ end
57
+
58
+
59
+ ###### Supporting Methods Below #######
60
+
61
+ #CALL: Formatter.new.remove_ww3(url)
62
+ def remove_ww3(url)
63
+ if url.present?
64
+ url.split('.').map { |part| url.gsub!(part,'www') if part.scan(/ww[0-9]/).any? }
65
+ url&.gsub!("www.www", "www")
66
+ end
67
+ end
68
+
69
+
70
+ # For rare cases w/ urls with mistaken double slash twice.
71
+ def remove_slashes(url)
72
+ if url.present? && url.include?('//')
73
+ parts = url.split('//')
74
+ return parts[0..1].join if parts.length > 2
75
+ end
76
+ return url
77
+ end
78
+
79
+
80
+ def extract_link(full_url)
81
+ url_hsh = format_url(full_url)
82
+ url = url_hsh[:valid_url]
83
+ link = full_url
84
+ link_hsh = {full_url: full_url, url: url, link: nil }
85
+ if url.present? && link.present? && link.length > @length_min
86
+ url = strip_down_url(url)
87
+ link = strip_down_url(link)
88
+ link&.gsub!(url, '')
89
+ link = link&.split('.net')&.last
90
+ link = link&.split('.com')&.last
91
+ link = link&.split('.org')&.last
92
+ link = "/#{link.split("/").reject(&:empty?).join("/")}" if link.present?
93
+ link_hsh[:link] = link if link.present? && link.length > @length_min
94
+ end
95
+ link_hsh
96
+ end
97
+
98
+
99
+ def strip_down_url(url)
100
+ if url.present?
101
+ url = url.downcase.strip
102
+ url = url.gsub('www.', '')
103
+ url = url.split('://')
104
+ url = url[-1]
105
+ return url
106
+ end
107
+ end
108
+
109
+
110
+ def remove_invalid_links(link)
111
+ link_hsh = {link: link, valid_link: nil, flags: nil }
112
+ if link.present?
113
+ invalid_chars = ['(', ')', '[', ']', '{', '}', '*', '@', '^', '$', '%', '+', '!', '<', '>', '~', ',', "'"]
114
+ @link_red_flags += invalid_chars
115
+ flags = @link_red_flags.select { |red| link&.include?(red) }
116
+ flags << "below #{@length_min}" if link.length < @length_min
117
+ flags << "over #{@length_max}" if link.length > @length_max
118
+ flags = flags.flatten.compact
119
+ flags.any? ? valid_link = nil : valid_link = link
120
+ link_hsh[:valid_link] = valid_link
121
+ link_hsh[:flags] = flags.join(', ')
122
+ end
123
+ link_hsh
124
+ end
125
+
126
+
127
+ def remove_invalid_hrefs(href)
128
+ href_hsh = {href: href, valid_href: nil, flags: nil }
129
+ if href.present?
130
+ symbs = ['{', '}', '*', '@', '^', '$', '%', '+', '!', '<', '>', '~']
131
+ @href_red_flags += symbs
132
+ href = href.split('|').join(' ')
133
+ href = href.split('/').join(' ')
134
+ href&.gsub!("(", ' ')
135
+ href&.gsub!(")", ' ')
136
+ href&.gsub!("[", ' ')
137
+ href&.gsub!("]", ' ')
138
+ href&.gsub!(",", ' ')
139
+ href&.gsub!("'", ' ')
140
+
141
+ flags = []
142
+ flags << "over #{@length_max}" if href.length > @length_max
143
+ invalid_text = Regexp.new(/[0-9]/)
144
+ flags << invalid_text&.match(href)
145
+ href = href&.downcase
146
+ href = href&.strip
147
+
148
+ flags << @href_red_flags.select { |red| href&.include?(red) }
149
+ flags = flags.flatten.compact.uniq
150
+ href_hsh[:valid_href] = href unless flags.any?
151
+ href_hsh[:flags] = flags.join(', ')
152
+ end
153
+ href_hsh
154
+ end
155
+
156
+
157
+ def convert_to_scheme_host(url)
158
+ if url.present?
159
+ uri = URI(url)
160
+ scheme = uri&.scheme
161
+ host = uri&.host
162
+ url = "#{scheme}://#{host}" if (scheme.present? && host.present?)
163
+ return url
164
+ end
165
+ end
166
+
167
+ end
168
+ end
data/menu.rb ADDED
@@ -0,0 +1,8 @@
1
+ require_relative "lib/crm_formatter/address.rb"
2
+
3
+ address = CRMFormatter::Address.new
4
+
5
+ system "clear"
6
+ puts "Welcome!"
7
+
8
+ puts address.state
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: crm_formatter
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2.pre.rc.1
4
+ version: 1.0.3.pre.rc.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam Booth
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-05-12 00:00:00.000000000 Z
12
- dependencies: []
11
+ date: 2018-05-13 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: pry
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.10.4
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.10.4
13
27
  description: Formats addresses, phones, emails, urls
14
28
  email:
15
29
  - 4rlm@protonmail.ch
@@ -21,9 +35,12 @@ files:
21
35
  - bin/crm_formatter
22
36
  - crm_formatter.gemspec
23
37
  - lib/crm_formatter.rb
24
- - lib/crm_formatter/translator.rb
38
+ - lib/crm_formatter/address.rb
39
+ - lib/crm_formatter/helpers.rb
40
+ - lib/crm_formatter/phone.rb
25
41
  - lib/crm_formatter/version.rb
26
- - x_crm_formatter.gemspec
42
+ - lib/crm_formatter/web.rb
43
+ - menu.rb
27
44
  homepage: https://github.com/4rlm/crm_formatter
28
45
  licenses:
29
46
  - MIT
@@ -1,16 +0,0 @@
1
- class CRMFormatter::Translator
2
- def initialize(language = "english")
3
- @language = language
4
- end
5
-
6
- def hi
7
- case @language
8
- when "spanish"
9
- "crm_formatter mundo"
10
- when "korean"
11
- "anyoung ha se yo"
12
- else
13
- "hello world"
14
- end
15
- end
16
- end
@@ -1,26 +0,0 @@
1
- Gem::Specification.new do |spec|
2
- spec.name = "crm_formatter"
3
- spec.version = "0.0.1"
4
- spec.default_executable = "crm_formatter"
5
- spec.license = "MIT"
6
- spec.required_rubygems_version = Gem::Requirement.new(">= 0") if spec.respond_to? :required_rubygems_version=
7
- spec.authors = ["Adam Booth"]
8
- spec.date = %q{2018-05-12}
9
- spec.description = %q{Formats addresses, phones, emails, urls}
10
- spec.email = %q{4rlm@protonmail.ch}
11
- spec.files = ["Rakefile", "lib/crm_formatter.rb", "lib/crm_formatter/translator.rb", "bin/crm_formatter"]
12
- spec.test_files = ["test/test_crm_formatter.rb"]
13
- spec.homepage = %q{http://rubygems.org/gems/crm_formatter}
14
- spec.require_paths = ["lib"]
15
- spec.rubygems_version = %q{1.6.2}
16
- spec.summary = %q{crm_formatter!}
17
-
18
- if spec.respond_to? :specification_version then
19
- spec.specification_version = 3
20
-
21
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
22
- else
23
- end
24
- else
25
- end
26
- end