loofah-activerecord 1.0.0 → 1.1.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.
data/.gemtest ADDED
File without changes
data/CHANGELOG.rdoc CHANGED
@@ -1,4 +1,11 @@
1
- = Changelog
1
+
2
+ == 1.1.0 (2013-01-16)
3
+
4
+ Enhancements:
5
+
6
+ * Support for Rails 3.1 and 3.2 (Thanks, Igal Koshevoy!)
7
+ * Altered the installed directory structure to be lib/loofah/activerecord (was lib/loofah-activerecord).
8
+
2
9
 
3
10
  == 1.0.0 (2010-10-26)
4
11
 
data/Gemfile CHANGED
@@ -1 +1,19 @@
1
- gemspec
1
+ # -*- ruby -*-
2
+
3
+ # DO NOT EDIT THIS FILE. Instead, edit Rakefile, and run `rake bundler:gemfile`.
4
+
5
+ source "https://rubygems.org/"
6
+
7
+ gem "loofah", ">=1.0.0"
8
+
9
+ gem "bundler", "~>1.2.0", :group => [:development, :test]
10
+ gem "hoe", "~>3.3", :group => [:development, :test]
11
+ gem "rr", "~>1.0", :group => [:development, :test]
12
+ gem "hoe-gemspec", ">=0", :group => [:development, :test]
13
+ gem "rdoc", "~>3.10", :group => [:development, :test]
14
+ gem "hoe-git", ">=0", :group => [:development, :test]
15
+ gem "hoe-bundler", ">=0", :group => [:development, :test]
16
+ gem "minitest", "~>2.2", :group => [:development, :test]
17
+ gem "acts_as_fu", ">=0.0.5", :group => [:development, :test]
18
+
19
+ # vim: syntax=ruby
data/Manifest.txt CHANGED
@@ -5,9 +5,9 @@ Manifest.txt
5
5
  README.rdoc
6
6
  Rakefile
7
7
  lib/loofah-activerecord.rb
8
- lib/loofah-activerecord/active_record.rb
9
- lib/loofah-activerecord/railtie.rb
10
- lib/loofah-activerecord/xss_foliate.rb
8
+ lib/loofah/activerecord/active_record.rb
9
+ lib/loofah/activerecord/railtie.rb
10
+ lib/loofah/activerecord/xss_foliate.rb
11
11
  rails_test/Rakefile
12
12
  rails_test/common/active_record/app/models/post.rb
13
13
  rails_test/common/active_record/test/unit/posts_test.rb
data/README.rdoc CHANGED
@@ -1,8 +1,8 @@
1
1
  = loofah-activerecord
2
2
 
3
3
  * http://github.com/flavorjones/loofah-activerecord
4
- * http://loofah.rubyforge.org
5
- * http://rubyforge.org/projects/loofah
4
+ * http://rubydoc.info/github/flavorjones/loofah-activerecord/master/frames
5
+ * http://librelist.com/browser/loofah
6
6
 
7
7
  == Description
8
8
 
@@ -11,42 +11,45 @@ ActiveRecord models.
11
11
 
12
12
  == Features
13
13
 
14
- * Two ActiveRecord extensions:
15
- * Loofah::XssFoliate, an XssTerminate[http://github.com/look/xss_terminate/tree/master] drop-in replacement, is an *opt-out* sanitizer. By default all models and attributes are sanitized.
14
+ There are two ActiveRecord extensions included with loofah-activerecord:
15
+
16
16
  * Loofah::ActiveRecordExtension is an *opt-in* sanitizer. You must explicitly declare attributes to be sanitized.
17
+ * Loofah::XssFoliate, a drop-in replacement for XssTerminate[http://github.com/look/xss_terminate/tree/master], is an *opt-out* sanitizer. By default all models and attributes are sanitized.
17
18
 
18
19
  === ActiveRecord Extension \#1: Opt-In
19
20
 
20
- See Loofah::ActiveRecordExtension for full documentation. The methods
21
- mixed into ActiveRecord are:
21
+ See Loofah::ActiveRecordExtension for full documentation. The class
22
+ methods mixed into ActiveRecord are:
22
23
 
23
- * Loofah::ActiveRecordExtension.html_document
24
- * Loofah::ActiveRecordExtension.html_fragment
24
+ * +html_document+
25
+ * +html_fragment+
25
26
 
26
27
  which are used to declare how specific string and text attributes
27
- should be scrubbed at +before_validation+.
28
+ should be scrubbed during +before_validation+.
28
29
 
29
30
  # app/model/post.rb
30
31
  class Post < ActiveRecord::Base
31
- html_fragment :body, :scrub => :prune # scrubs 'body' at before_validation
32
+ html_fragment :body, :scrub => :prune # scrubs `body` using the :prune scrubber
32
33
  end
33
34
 
34
35
  === ActiveRecord Extension \#2: Opt-Out
35
36
 
36
- See Loofah::XssFoliate::ClassMethods for more documentation. The methods mixed into ActiveRecord are:
37
+ See Loofah::XssFoliate::ClassMethods for more documentation. The class
38
+ methods mixed into ActiveRecord are:
37
39
 
38
- * Loofah::XssFoliate::ClassMethods.xss_foliate
39
- * Loofah::XssFoliate::ClassMethods.xss_foliated?
40
+ * +xss_foliate+
41
+ * +xss_foliated?+
40
42
 
41
43
  which are used to declare how specific string and text attributes
42
- should be scrubbed at +before_validation+.
44
+ should be scrubbed during +before_validation+.
43
45
 
44
- Attributes are stripped by default, unless another scrubber is
45
- specified or the attribute is present in an +:except+ clause.
46
+ Attributes are scrubbed with the +:strip+ scrubber by default, unless
47
+ another scrubber is specified or the attribute is present in an
48
+ +:except+ clause.
46
49
 
47
50
  == Requirements
48
51
 
49
- * Nokogiri >= 1.3.3
52
+ * Loofah >= 1.0.0
50
53
  * Rails 3.0, 2.3, 2.2, 2.1, 2.0 or 1.2 (pow!)
51
54
 
52
55
  == Installation
@@ -57,11 +60,11 @@ Unsurprisingly:
57
60
 
58
61
  == Support
59
62
 
60
- The bug tracker is available here (the Loofah project):
63
+ The bug tracker is available here:
61
64
 
62
- * http://github.com/flavorjones/loofah/issues
65
+ * http://github.com/flavorjones/loofah-activerecord/issues
63
66
 
64
- And the mailing list is on librelist (also the Loofah mailing list):
67
+ And the mailing list is on librelist (the general Loofah mailing list):
65
68
 
66
69
  * loofah@librelist.com / http://librelist.com
67
70
 
@@ -89,7 +92,7 @@ This library was split out of the Loofah project for version 1.0.0.
89
92
 
90
93
  The MIT License
91
94
 
92
- Copyright (c) 2009, 2010 by Mike Dalessio
95
+ Copyright (c) 2009, 2010, 2011 by Mike Dalessio
93
96
 
94
97
  Permission is hereby granted, free of charge, to any person obtaining a copy
95
98
  of this software and associated documentation files (the "Software"), to deal
data/Rakefile CHANGED
@@ -14,10 +14,14 @@ Hoe.spec "loofah-activerecord" do
14
14
  self.readme_file = "README.rdoc"
15
15
 
16
16
  extra_deps << ["loofah", ">= 1.0.0"]
17
- extra_dev_deps << ["mocha", ">=0.9"]
18
- extra_dev_deps << ["shoulda", ">=2.10"]
17
+
18
+ extra_dev_deps << ["minitest", "~>2.2"]
19
+ extra_dev_deps << ["rr", "~>1.0"]
19
20
  extra_dev_deps << ["acts_as_fu", ">=0.0.5"]
20
- extra_dev_deps << ["bundler", "=1.0.0"]
21
+ extra_dev_deps << ["bundler", "~>1.2.0"]
22
+ extra_dev_deps << ["hoe-git", ">=0"]
23
+ extra_dev_deps << ["hoe-bundler", ">=0"]
24
+ extra_dev_deps << ["hoe-gemspec", ">=0"]
21
25
  end
22
26
 
23
27
  load "rails_test/Rakefile"
@@ -40,11 +44,6 @@ task :fix_css do
40
44
  margin-top : .5em ;
41
45
  }
42
46
 
43
- #main ul, div#documentation ul {
44
- list-style-type : disc ! IMPORTANT ;
45
- list-style-position : inside ! IMPORTANT ;
46
- }
47
-
48
47
  h2 + ul {
49
48
  margin-top : 1em;
50
49
  }
@@ -3,17 +3,17 @@ $LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__))) unless $LOAD_PATH.i
3
3
  require 'loofah'
4
4
 
5
5
  module Loofah::ActiveRecord
6
- VERSION = "1.0.0"
6
+ VERSION = "1.1.0"
7
7
  end
8
8
 
9
9
  if defined?(Rails) && Rails::VERSION::MAJOR == 3
10
- require 'loofah-activerecord/railtie'
10
+ require 'loofah/activerecord/railtie'
11
11
  elsif defined? Rails.configuration and Rails.configuration.frameworks.include?([:active_record]) # >= 2.1
12
12
  Rails.configuration.after_initialize do
13
- require 'loofah-activerecord/active_record'
14
- require 'loofah-activerecord/xss_foliate'
13
+ require 'loofah/activerecord/active_record'
14
+ require 'loofah/activerecord/xss_foliate'
15
15
  end
16
16
  elsif defined? ActiveRecord::Base # <= 2.0
17
- require 'loofah-activerecord/active_record'
18
- require 'loofah-activerecord/xss_foliate'
17
+ require 'loofah/activerecord/active_record'
18
+ require 'loofah/activerecord/xss_foliate'
19
19
  end
@@ -4,8 +4,8 @@ module Loofah::ActiveRecord
4
4
  initializer "loofah-activerecord.initialize" do |app|
5
5
  activerecord_railtie = app.railties.all.select {|railtie| railtie.class.to_s == "ActiveRecord::Railtie" }
6
6
  if activerecord_railtie
7
- require 'loofah-activerecord/active_record'
8
- require 'loofah-activerecord/xss_foliate'
7
+ require 'loofah/activerecord/active_record'
8
+ require 'loofah/activerecord/xss_foliate'
9
9
  end
10
10
  end
11
11
  end
@@ -88,6 +88,13 @@ module Loofah
88
88
  REAL_OPTIONS = VALID_OPTIONS - ALIASED_OPTIONS.keys
89
89
  # :startdoc:
90
90
 
91
+ def self.extended(base)
92
+ # Rails 3.0 and later
93
+ if base.respond_to?(:class_attribute)
94
+ base.send(:class_attribute, :xss_foliate_options)
95
+ end
96
+ end
97
+
91
98
  #
92
99
  # Annotate your model with this method to specify which fields
93
100
  # you want scrubbed, and how you want them scrubbed. XssFoliate
@@ -120,7 +127,10 @@ module Loofah
120
127
  #
121
128
  def xss_foliate(options = {})
122
129
  callback_already_declared = \
123
- if respond_to?(:before_validation_callback_chain)
130
+ if respond_to?(:class_attribute)
131
+ # Rails 3.0 and later
132
+ false
133
+ elsif respond_to?(:before_validation_callback_chain)
124
134
  # Rails 2.1 and later
125
135
  before_validation_callback_chain.any? {|cb| cb.method == :xss_foliate_fields}
126
136
  else
@@ -131,7 +141,10 @@ module Loofah
131
141
 
132
142
  unless callback_already_declared
133
143
  before_validation :xss_foliate_fields
134
- class_inheritable_reader :xss_foliate_options
144
+ unless respond_to?(:class_attribute)
145
+ # Rails 3.0 and later
146
+ class_inheritable_reader :xss_foliate_options
147
+ end
135
148
  include XssFoliate::InstanceMethods
136
149
  end
137
150
 
@@ -147,7 +160,12 @@ module Loofah
147
160
  options[real] += Array(options.delete(option)).collect { |val| val.to_sym } if options[option]
148
161
  end
149
162
 
150
- write_inheritable_attribute(:xss_foliate_options, options)
163
+ if respond_to?(:class_attribute)
164
+ # Rails 3.0 and later
165
+ self.xss_foliate_options = options
166
+ else
167
+ write_inheritable_attribute(:xss_foliate_options, options)
168
+ end
151
169
  end
152
170
 
153
171
  #
@@ -155,7 +173,13 @@ module Loofah
155
173
  # xss_foliation to its attributes. Could be useful in test suites.
156
174
  #
157
175
  def xss_foliated?
158
- options = read_inheritable_attribute(:xss_foliate_options)
176
+ options =
177
+ if respond_to?(:class_attribute)
178
+ # Rails 3.0 and later
179
+ xss_foliate_options
180
+ else
181
+ read_inheritable_attribute(:xss_foliate_options)
182
+ end
159
183
  ! (options.nil? || options.empty?)
160
184
  end
161
185
  end
data/rails_test/Rakefile CHANGED
@@ -1,63 +1,118 @@
1
- def run(cmd)
2
- puts "* running: #{cmd}"
3
- system cmd
4
- raise "ERROR running command" unless $? == 0
5
- end
1
+ namespace "test" do
2
+ require "bundler"
3
+ require "yaml"
4
+
5
+ def gem_versions_for rails_version
6
+ mm = rails_version.split(".")[0,2].join(".")
7
+ YAML.load_file("gem-versions.yml")[mm]
8
+ end
6
9
 
7
- def setup_rails_app dir
8
- dir =~ /rails-([^-]+)-(.*)/
9
- version, flavor = $1, $2
10
- run "./generate_test_directory #{version} #{flavor}"
11
- bundler_cache = File.expand_path("bundler_cache")
12
- Dir.chdir dir do
13
- File.open("Gemfile", "w") do |gemfile|
14
- gemfile.write <<-GEM
15
- source :gemcutter
16
- gem "rails", "=#{version}"
17
- gem "loofah", :path => File.join(File.dirname(__FILE__),"../../../loofah")
18
- gem "loofah-activerecord", :path => File.join(File.dirname(__FILE__),"../..")
19
- gem "sqlite3-ruby", :require => "sqlite3"
20
- GEM
10
+ def ruby_version_for rails_version
11
+ mmp = if rails_version =~ /^([12]\.|3\.0)/
12
+ "1.8.7"
13
+ else
14
+ "1.9.3"
15
+ end
16
+
17
+ rbenv_versions = `rbenv versions`.split("\n").map do |line|
18
+ line[2..-1].split.first
21
19
  end
22
- run "bundle install --path=#{bundler_cache}"
20
+
21
+ desired_version = rbenv_versions.reverse.select do |rbenv_version|
22
+ rbenv_version =~ /^#{mmp}/
23
+ end.first
24
+
25
+ raise "ERROR: No Ruby version matching #{mmp} installed with rbenv" if desired_version.nil?
26
+
27
+ desired_version
23
28
  end
24
- end
25
29
 
26
- def test_rails_app dir
27
- @results ||= {}
28
- Dir.chdir(dir) do
29
- ENV['RAILS_ENV'] = "test"
30
- FileUtils.mkdir_p "log"
30
+ def dir_to_version_and_flavor dir
31
+ dir =~ /rails-([^-]+)-(.*)/
32
+ return [$1, $2]
33
+ end
34
+
35
+ def run(cmd, rbenv_version=nil)
36
+ puts "* running: #{cmd}"
31
37
  begin
32
- run "touch db/test.sqlite3" # db:create doesn't exist before rails 2.0
33
- run "bundle exec rake db:migrate test:units"
34
- rescue Object
35
- @results[dir] = "FAIL"
36
- else
37
- @results[dir] = "SUCCESS"
38
+ if rbenv_version
39
+ puts " (with ruby version #{rbenv_version})"
40
+ ENV['RBENV_VERSION'] = rbenv_version
41
+ cmd = "rbenv exec #{cmd}"
42
+ end
43
+ system cmd
44
+ ensure
45
+ ENV.delete('RBENV_VERSION')
38
46
  end
47
+ raise "ERROR running command" unless $? == 0
39
48
  end
40
- end
41
49
 
42
- def print_results
43
- puts "----- RESULTS -----"
44
- @results.keys.sort.each do |key|
45
- puts "* #{key}: #{@results[key]}"
50
+ def setup_rails_app dir
51
+ version, flavor = *(dir_to_version_and_flavor dir)
52
+ ruby_version = ruby_version_for version
53
+
54
+ run "./generate_test_directory #{version} #{flavor}"
55
+ bundler_cache = File.expand_path("bundler_cache")
56
+ snowflakes = Array gem_versions_for(version)
57
+ Dir.chdir dir do
58
+ File.open("Gemfile", "w") do |gemfile|
59
+ gemfile.write <<-GEM
60
+ source :gemcutter
61
+ gem "rails", "=#{version}"
62
+ gem "loofah", :path => File.join(File.dirname(__FILE__),"../../../loofah")
63
+ gem "loofah-activerecord", :path => File.join(File.dirname(__FILE__),"../..")
64
+ gem "sqlite3-ruby", :require => "sqlite3"
65
+ GEM
66
+ snowflakes.each { |name, versionspec| gemfile.puts %Q{gem "#{name}", "#{versionspec}"} }
67
+ end
68
+ FileUtils.rm_f "Gemfile.lock"
69
+ Bundler.with_clean_env do
70
+ begin
71
+ run "bundle install --quiet --local --path=#{bundler_cache}", ruby_version
72
+ rescue
73
+ run "bundle install --quiet --path=#{bundler_cache}", ruby_version
74
+ end
75
+ end
76
+ end
46
77
  end
47
- end
48
78
 
49
- Dir["#{File.dirname(__FILE__)}/rails-*"].sort.each do |fqdir|
50
- dir = File.basename fqdir
51
- desc "test #{dir}"
52
- task "test:#{dir}" do
53
- Dir.chdir(File.dirname(__FILE__)) do
54
- setup_rails_app dir
55
- test_rails_app dir
79
+ def test_rails_app dir
80
+ version, flavor = *(dir_to_version_and_flavor dir)
81
+ ruby_version = ruby_version_for version
82
+
83
+ @results ||= {}
84
+ Dir.chdir(dir) do
85
+ ENV['RAILS_ENV'] = "test"
86
+ FileUtils.mkdir_p "log"
87
+ begin
88
+ run "touch db/test.sqlite3" # db:create doesn't exist before rails 2.0
89
+ Bundler.with_clean_env { run "bundle exec rake db:migrate test:units", ruby_version }
90
+ rescue Object
91
+ @results[dir] = "FAIL"
92
+ else
93
+ @results[dir] = "SUCCESS"
94
+ end
95
+ end
96
+ end
97
+
98
+ def print_results
99
+ puts "----- RESULTS -----"
100
+ @results.keys.sort.each do |key|
101
+ puts "* #{key}: #{@results[key]}"
102
+ end
103
+ end
104
+
105
+ Dir["#{File.dirname(__FILE__)}/rails-*"].sort.each do |fqdir|
106
+ dir = File.basename fqdir
107
+ desc "test #{dir}"
108
+ task "#{dir}" do
109
+ Dir.chdir(File.dirname(__FILE__)) do
110
+ setup_rails_app dir
111
+ test_rails_app dir
112
+ end
56
113
  end
57
114
  end
58
- end
59
115
 
60
- namespace :test do
61
116
  desc "run tests across various versions of Rails"
62
117
  task :rails do
63
118
  Dir["#{File.dirname(__FILE__)}/rails-*"].sort.reverse.each do |fqdir|