html_terminator 0.0.3 → 1.0.0

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 39b8f069bc265e35b278f46ef68fc414ef234ee5
4
+ data.tar.gz: 0a5fa89a7c15d585814ce420d14b51711b479ab7
5
+ SHA512:
6
+ metadata.gz: 4f4125c44661d12232e5200bc5a505cecb1a372457c62c6d94c1b0d37b3854ba6bf5460680a605b6baab66066a7dda81134aa5c0993ca523e250cad0066e08bc
7
+ data.tar.gz: cc2bfdb08ce2b0c7fa78f60e127cd0cacb931c2335e5ef9bc189bab5f2f6a963e6838647c272f48664c5edd02dd9c7bb03c506a9faba67b2682363022e7a21f0
data/Gemfile CHANGED
@@ -4,8 +4,8 @@ source 'https://rubygems.org'
4
4
  gemspec
5
5
 
6
6
  group :test do
7
- gem 'activerecord', '~> 2.3.0'
7
+ gem "activerecord", "~> 4.2"
8
8
  gem 'sqlite3'
9
9
  gem 'guard-rspec'
10
10
  gem 'rb-fsevent'
11
- end
11
+ end
@@ -21,5 +21,5 @@ Gem::Specification.new do |spec|
21
21
  spec.add_development_dependency "bundler", "~> 1.3"
22
22
  spec.add_development_dependency "rake"
23
23
 
24
- spec.add_runtime_dependency "sanitize"
24
+ spec.add_runtime_dependency "sanitize", "~> 4.0"
25
25
  end
@@ -1,3 +1,3 @@
1
1
  module HtmlTerminator
2
- VERSION = "0.0.3"
2
+ VERSION = "1.0.0"
3
3
  end
@@ -7,45 +7,54 @@ module HtmlTerminator
7
7
  }
8
8
 
9
9
  def self.sanitize(val)
10
- if val and val.is_a?(String)
11
- Sanitize.clean(val, SANITIZE_OPTIONS).strip
10
+ if val.is_a?(String) && !skip_sanitize?(val)
11
+ Sanitize.fragment(val, SANITIZE_OPTIONS).strip.gsub(/&/, "&")
12
12
  else
13
13
  val
14
14
  end
15
15
  end
16
16
 
17
+ # Don't sanitize if only one bracket is present.
18
+ # Without this, "1 < 2" gets incorrectly sanitized as "1".
19
+ def self.skip_sanitize?(val)
20
+ val.count("<") + val.count(">") == 1
21
+ end
22
+
17
23
  module ClassMethods
18
24
  def terminate_html(*args)
19
25
  class_attribute :html_terminator_fields
20
26
 
21
- # By default all fields are to be seen by the terminator
22
- self.html_terminator_fields = self.columns.inject([]) do |list, col|
23
- if col.type == :string or col.type == :text
24
- list << col.name.to_sym
25
- end
27
+ # Table may not exist yet when schema is initially getting loaded
28
+ if self.table_exists?
29
+ # By default all fields are to be seen by the terminator
30
+ self.html_terminator_fields = self.columns.inject([]) do |list, col|
31
+ if col.type == :string or col.type == :text
32
+ list << col.name.to_sym
33
+ end
26
34
 
27
- list
28
- end
35
+ list
36
+ end
29
37
 
30
- if args.length == 1
31
- if args[0].is_a?(Symbol)
38
+ if args.length == 1
39
+ if args[0].is_a?(Symbol)
40
+ self.html_terminator_fields = args
41
+ elsif args[0].is_a?(Object)
42
+ self.html_terminator_fields -= (args[0][:except] || [])
43
+ end
44
+ elsif args.length > 1
32
45
  self.html_terminator_fields = args
33
- elsif args[0].is_a?(Object)
34
- self.html_terminator_fields -= (args[0][:except] || [])
35
46
  end
36
- elsif args.length > 1
37
- self.html_terminator_fields = args
38
- end
39
47
 
40
- unless self.html_terminator_fields.empty?
41
- # sanitize writes
42
- before_validation :terminate_html
48
+ unless self.html_terminator_fields.empty?
49
+ # sanitize writes
50
+ before_validation :terminate_html
43
51
 
44
- # sanitize reads
45
- self.html_terminator_fields.each do |attr|
46
- define_method "#{attr}" do |*args|
47
- # sanitize it
48
- HtmlTerminator.sanitize super(*args)
52
+ # sanitize reads
53
+ self.html_terminator_fields.each do |attr|
54
+ define_method(attr) do |*rargs|
55
+ # sanitize it
56
+ HtmlTerminator.sanitize super(*rargs)
57
+ end
49
58
  end
50
59
  end
51
60
  end
@@ -70,4 +79,4 @@ module HtmlTerminator
70
79
  end
71
80
  end
72
81
 
73
- ActiveRecord::Base.send :include, HtmlTerminator
82
+ ActiveRecord::Base.send :include, HtmlTerminator
@@ -14,6 +14,30 @@ describe HtmlTerminator do
14
14
  @user.age.should == 3
15
15
  end
16
16
 
17
+ it "doesn't escape ampersands" do
18
+ @user = OnlyFirstName.new
19
+
20
+ @user.first_name = "A & B & C"
21
+ @user.first_name.should == "A & B & C"
22
+ end
23
+
24
+ it "skips sanitize when only one bracket" do
25
+ @user = OnlyFirstName.new
26
+
27
+ @user.first_name = "1 < 2"
28
+ @user.first_name.should == "1 < 2"
29
+
30
+ @user.first_name = "2 > 1"
31
+ @user.first_name.should == "2 > 1"
32
+ end
33
+
34
+ it "handles ampersands" do
35
+ @user = OnlyFirstName.new
36
+
37
+ @user.first_name = "Mr. & Mrs. Smith"
38
+ @user.first_name.should == "Mr. & Mrs. Smith"
39
+ end
40
+
17
41
  it "sanitizes all except what is specified" do
18
42
  @user = ExceptFirstName.new
19
43
 
@@ -33,6 +57,6 @@ describe HtmlTerminator do
33
57
  it "doesn't blow up if value is not a string" do
34
58
  @user = OnlyFirstName.new
35
59
  @user.first_name = 1
36
- @user.first_name.should == 1
60
+ @user.first_name.should == "1"
37
61
  end
38
- end
62
+ end
metadata CHANGED
@@ -1,8 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: html_terminator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
5
- prerelease:
4
+ version: 1.0.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Steel Fu
@@ -10,56 +9,50 @@ authors:
10
9
  autorequire:
11
10
  bindir: bin
12
11
  cert_chain: []
13
- date: 2013-11-12 00:00:00.000000000 Z
12
+ date: 2015-08-03 00:00:00.000000000 Z
14
13
  dependencies:
15
14
  - !ruby/object:Gem::Dependency
16
15
  name: bundler
17
16
  requirement: !ruby/object:Gem::Requirement
18
- none: false
19
17
  requirements:
20
- - - ~>
18
+ - - "~>"
21
19
  - !ruby/object:Gem::Version
22
20
  version: '1.3'
23
21
  type: :development
24
22
  prerelease: false
25
23
  version_requirements: !ruby/object:Gem::Requirement
26
- none: false
27
24
  requirements:
28
- - - ~>
25
+ - - "~>"
29
26
  - !ruby/object:Gem::Version
30
27
  version: '1.3'
31
28
  - !ruby/object:Gem::Dependency
32
29
  name: rake
33
30
  requirement: !ruby/object:Gem::Requirement
34
- none: false
35
31
  requirements:
36
- - - ! '>='
32
+ - - ">="
37
33
  - !ruby/object:Gem::Version
38
34
  version: '0'
39
35
  type: :development
40
36
  prerelease: false
41
37
  version_requirements: !ruby/object:Gem::Requirement
42
- none: false
43
38
  requirements:
44
- - - ! '>='
39
+ - - ">="
45
40
  - !ruby/object:Gem::Version
46
41
  version: '0'
47
42
  - !ruby/object:Gem::Dependency
48
43
  name: sanitize
49
44
  requirement: !ruby/object:Gem::Requirement
50
- none: false
51
45
  requirements:
52
- - - ! '>='
46
+ - - "~>"
53
47
  - !ruby/object:Gem::Version
54
- version: '0'
48
+ version: '4.0'
55
49
  type: :runtime
56
50
  prerelease: false
57
51
  version_requirements: !ruby/object:Gem::Requirement
58
- none: false
59
52
  requirements:
60
- - - ! '>='
53
+ - - "~>"
61
54
  - !ruby/object:Gem::Version
62
- version: '0'
55
+ version: '4.0'
63
56
  description: Terminate Active Records fields of html
64
57
  email:
65
58
  - steel@polleverywhere.com
@@ -68,8 +61,8 @@ executables: []
68
61
  extensions: []
69
62
  extra_rdoc_files: []
70
63
  files:
71
- - .gitignore
72
- - .travis.yml
64
+ - ".gitignore"
65
+ - ".travis.yml"
73
66
  - Gemfile
74
67
  - Guardfile
75
68
  - LICENSE.txt
@@ -84,29 +77,29 @@ files:
84
77
  homepage: ''
85
78
  licenses:
86
79
  - MIT
80
+ metadata: {}
87
81
  post_install_message:
88
82
  rdoc_options: []
89
83
  require_paths:
90
84
  - lib
91
85
  required_ruby_version: !ruby/object:Gem::Requirement
92
- none: false
93
86
  requirements:
94
- - - ! '>='
87
+ - - ">="
95
88
  - !ruby/object:Gem::Version
96
89
  version: '0'
97
90
  required_rubygems_version: !ruby/object:Gem::Requirement
98
- none: false
99
91
  requirements:
100
- - - ! '>='
92
+ - - ">="
101
93
  - !ruby/object:Gem::Version
102
94
  version: '0'
103
95
  requirements: []
104
96
  rubyforge_project:
105
- rubygems_version: 1.8.23
97
+ rubygems_version: 2.2.3
106
98
  signing_key:
107
- specification_version: 3
99
+ specification_version: 4
108
100
  summary: Terminate Active Records fields of html
109
101
  test_files:
110
102
  - spec/html_terminator_spec.rb
111
103
  - spec/spec_helper.rb
112
104
  - spec/support/active_record.rb
105
+ has_rdoc: