cold_shoulder 1.0.2 → 1.0.4
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/lib/cold_shoulder.rb +47 -13
- metadata +15 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0cbec9bba312d384496203bbeb9946d896eafd07
|
4
|
+
data.tar.gz: 9b7b35ac23b8c35ed887d9243158bfee7853abeb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5fd912a4e3a1c5f828f2c3646fbaf6315c27465ee19bb8562ae162d1f9890fe538e4dab8729cdec292f5cf702e33894c75dda2c9df527080fec18db10424c221
|
7
|
+
data.tar.gz: bbd5360fb97cf23eb6695a0d64a415d4f48f13e671801633a9d983eaa00a4c91c378c9fd1d557aceff6a437bf1b7c25befa1e50ed2690707e0534431e2239620
|
data/lib/cold_shoulder.rb
CHANGED
@@ -1,37 +1,71 @@
|
|
1
1
|
require 'active_model'
|
2
2
|
require 'active_model/validations'
|
3
|
+
require 'active_support'
|
4
|
+
require 'active_support/number_helper'
|
3
5
|
|
6
|
+
module ColdShoulder
|
7
|
+
if defined?(Rails)
|
8
|
+
class Railtie < Rails::Railtie
|
9
|
+
config.before_configuration do
|
10
|
+
I18n.load_path << File.join(File.dirname(__FILE__), 'locales', 'en.yml')
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
# The validations
|
17
|
+
# TODO require in another file? This was failing when actually deployed through rubygems
|
4
18
|
module ActiveModel
|
5
19
|
module Validations
|
6
20
|
|
7
21
|
# Extend the rails each validator so that this can be used like any Rails validator
|
8
22
|
class ColdShoulderValidator < EachValidator
|
23
|
+
include ActiveSupport::NumberHelper if defined?(Rails)
|
24
|
+
|
9
25
|
def validate_each(record, attr_name, value)
|
10
26
|
|
11
27
|
# These are somewhat simplistic
|
12
28
|
# Main problem being that all of them can be sidestepped by including commas
|
13
29
|
# TODO: Move this outside the validate_each method so we don't define it over and over
|
14
|
-
twitter_regex =
|
15
|
-
formatted_phone_regex = /(?:\+?(\d{1,3}))?[- (]*(\d{3})[- )]*(\d{3})[- ]*(\d{4})(?: *x(\d+))?\b/i
|
16
|
-
email_regex =
|
30
|
+
twitter_regex = /(@[A-Za-z0-9_]{1,15})/i
|
31
|
+
formatted_phone_regex = /((?:\+?(\d{1,3}))?[- (]*(\d{3})[- )]*(\d{3})[- ]*(\d{4})(?: *x(\d+))?\b)/i
|
32
|
+
email_regex = /(\b[^\s]+?\s*(@|at)\s*[^\s]+?\.[^\s]+?\b)/i # Very general so as to catch BS
|
17
33
|
|
34
|
+
# Remove spaces (the most basic way to avoid these detections)
|
18
35
|
globbed_value = value.gsub ' ', ''
|
19
36
|
bullshit_free_phone = value.gsub /[^0-9,]|\n/i, ''
|
20
37
|
|
21
|
-
#
|
22
|
-
|
23
|
-
|
24
|
-
|
38
|
+
# Look for matches
|
39
|
+
twitter_handles = globbed_value.scan twitter_regex
|
40
|
+
email_addresses = value.scan email_regex
|
41
|
+
phone_numbers = globbed_value.scan(formatted_phone_regex).concat(
|
42
|
+
bullshit_free_phone.scan(formatted_phone_regex)
|
43
|
+
).uniq
|
25
44
|
|
26
|
-
# Phone numbers
|
27
|
-
|
28
|
-
|
29
|
-
|
45
|
+
# Phone numbers
|
46
|
+
unless phone_numbers.empty? or options[:ignore_phone]
|
47
|
+
record.errors.add(attr_name, :contains_phone_number, options.merge(
|
48
|
+
phone_numbers: phone_numbers.map{ |p|
|
49
|
+
defined?(Rails) ? number_to_phone(p[0]) : p[0]
|
50
|
+
}.join(', ')
|
51
|
+
))
|
30
52
|
end
|
31
53
|
|
32
54
|
# Email addys
|
33
|
-
|
34
|
-
record.errors.add(attr_name, :contains_email_address
|
55
|
+
unless email_addresses.empty? or options[:ignore_email]
|
56
|
+
record.errors.add(attr_name, :contains_email_address, options.merge(
|
57
|
+
email_addresses: email_addresses.map{|p| p[0] }.join(', ')
|
58
|
+
))
|
59
|
+
else
|
60
|
+
|
61
|
+
# Twitter handles
|
62
|
+
# Any email address is going to register twitter handles as well
|
63
|
+
unless twitter_handles.empty? or options[:ignore_twitter]
|
64
|
+
record.errors.add(attr_name, :contains_twitter_handle, options.merge(
|
65
|
+
handles: twitter_handles.map{|p| p[0] }.join(', ')
|
66
|
+
))
|
67
|
+
end
|
68
|
+
|
35
69
|
end
|
36
70
|
end
|
37
71
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cold_shoulder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dustin Hoffman
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - '>='
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: activesupport
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: rspec
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|