crm_formatter 1.0.2.pre.rc.1 → 1.0.3.pre.rc.1
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.
- checksums.yaml +4 -4
- data/crm_formatter.gemspec +3 -9
- data/lib/crm_formatter.rb +8 -7
- data/lib/crm_formatter/address.rb +174 -0
- data/lib/crm_formatter/helpers.rb +23 -0
- data/lib/crm_formatter/phone.rb +38 -0
- data/lib/crm_formatter/version.rb +1 -1
- data/lib/crm_formatter/web.rb +168 -0
- data/menu.rb +8 -0
- metadata +22 -5
- data/lib/crm_formatter/translator.rb +0 -16
- data/x_crm_formatter.gemspec +0 -26
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 84e611755e48ace0e3749f41cd7a593d01de04cbaeac00223e0b1f6b7a3479d8
|
4
|
+
data.tar.gz: 7168462838bcd31e7390e6c4563236916a9b68210218934fb5d554fbdbbcf001
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2dc917206f92120f86a88e0842c95e6b5e276e8f19ff964f3f0722234719745c2cab67e2f5e47f11c75e120e75fdd298897d5f15808969f412a07f798f545a6c
|
7
|
+
data.tar.gz: '09dc46e716020aaa772c50febc0908823920721aacb252b5a5ef779f681293ecb54812ae2bdb9910e01b8d66528026395a7272bca067d6de9ab676309eda0093'
|
data/crm_formatter.gemspec
CHANGED
@@ -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
|
-
|
25
|
-
|
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
|
data/lib/crm_formatter.rb
CHANGED
@@ -1,8 +1,9 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
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
|
-
|
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
|
@@ -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
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.
|
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
|
-
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/
|
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
|
-
-
|
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
|
data/x_crm_formatter.gemspec
DELETED
@@ -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
|