strip_attributes 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/strip_attributes/shoulda/macros.rb +33 -0
- data/lib/strip_attributes/shoulda.rb +1 -0
- data/lib/strip_attributes.rb +33 -0
- data/rails/init.rb +2 -0
- data/test/strip_attributes_test.rb +96 -0
- data/test/test_helper.rb +21 -0
- metadata +72 -0
@@ -0,0 +1,33 @@
|
|
1
|
+
require "shoulda/active_record"
|
2
|
+
|
3
|
+
module StripAttributes
|
4
|
+
module Shoulda
|
5
|
+
module Macros
|
6
|
+
def should_strip_attributes(*attributes)
|
7
|
+
klass = respond_to?(:described_type) ? described_type : model_class
|
8
|
+
attributes.each do |attribute|
|
9
|
+
attribute = attribute.to_sym
|
10
|
+
should "strip whitespace from #{attribute}" do
|
11
|
+
object = get_instance_of(klass)
|
12
|
+
object.send("#{attribute}=", " string ")
|
13
|
+
object.valid?
|
14
|
+
assert_equal "string", object.send(attribute)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def should_not_strip_attributes(*attributes)
|
20
|
+
klass = respond_to?(:described_type) ? described_type : model_class
|
21
|
+
attributes.each do |attribute|
|
22
|
+
attribute = attribute.to_sym
|
23
|
+
should "not strip whitespace from #{attribute}" do
|
24
|
+
object = get_instance_of(klass)
|
25
|
+
object.send("#{attribute}=", " string ")
|
26
|
+
object.valid?
|
27
|
+
assert_equal " string ", object.send(attribute)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
require "strip_attributes/shoulda/macros"
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module StripAttributes
|
2
|
+
VERSION = "0.9.0"
|
3
|
+
|
4
|
+
# Strips whitespace from model fields and converts blank values to nil.
|
5
|
+
def strip_attributes!(options = nil)
|
6
|
+
before_validation do |record|
|
7
|
+
attributes = StripAttributes.narrow(record.attributes, options)
|
8
|
+
attributes.each do |attr, value|
|
9
|
+
if value.respond_to?(:strip)
|
10
|
+
record[attr] = (value.blank?) ? nil : value.strip
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
# Necessary because Rails has removed the narrowing of attributes using :only
|
17
|
+
# and :except on Base#attributes
|
18
|
+
def self.narrow(attributes, options)
|
19
|
+
if options.nil?
|
20
|
+
attributes
|
21
|
+
else
|
22
|
+
if except = options[:except]
|
23
|
+
except = Array(except).collect { |attribute| attribute.to_s }
|
24
|
+
attributes.except(*except)
|
25
|
+
elsif only = options[:only]
|
26
|
+
only = Array(only).collect { |attribute| attribute.to_s }
|
27
|
+
attributes.slice(*only)
|
28
|
+
else
|
29
|
+
raise ArgumentError, "Options does not specify :except or :only (#{options.keys.inspect})"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
data/rails/init.rb
ADDED
@@ -0,0 +1,96 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
module MockAttributes
|
4
|
+
def self.included(base)
|
5
|
+
base.column :foo, :string
|
6
|
+
base.column :bar, :string
|
7
|
+
base.column :biz, :string
|
8
|
+
base.column :baz, :string
|
9
|
+
base.column :bang, :string
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
class StripAllMockRecord < ActiveRecord::Base
|
14
|
+
include MockAttributes
|
15
|
+
strip_attributes!
|
16
|
+
end
|
17
|
+
|
18
|
+
class StripOnlyOneMockRecord < ActiveRecord::Base
|
19
|
+
include MockAttributes
|
20
|
+
strip_attributes! :only => :foo
|
21
|
+
end
|
22
|
+
|
23
|
+
class StripOnlyThreeMockRecord < ActiveRecord::Base
|
24
|
+
include MockAttributes
|
25
|
+
strip_attributes! :only => [:foo, :bar, :biz]
|
26
|
+
end
|
27
|
+
|
28
|
+
class StripExceptOneMockRecord < ActiveRecord::Base
|
29
|
+
include MockAttributes
|
30
|
+
strip_attributes! :except => :foo
|
31
|
+
end
|
32
|
+
|
33
|
+
class StripExceptThreeMockRecord < ActiveRecord::Base
|
34
|
+
include MockAttributes
|
35
|
+
strip_attributes! :except => [:foo, :bar, :biz]
|
36
|
+
end
|
37
|
+
|
38
|
+
class StripAttributesTest < Test::Unit::TestCase
|
39
|
+
def setup
|
40
|
+
@init_params = { :foo => "\tfoo", :bar => "bar \t ", :biz => "\tbiz ", :baz => "", :bang => " " }
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_should_exist
|
44
|
+
assert Object.const_defined?(:StripAttributes)
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_should_strip_all_fields
|
48
|
+
record = StripAllMockRecord.new(@init_params)
|
49
|
+
record.valid?
|
50
|
+
assert_equal "foo", record.foo
|
51
|
+
assert_equal "bar", record.bar
|
52
|
+
assert_equal "biz", record.biz
|
53
|
+
assert_nil record.baz
|
54
|
+
assert_nil record.bang
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_should_strip_only_one_field
|
58
|
+
record = StripOnlyOneMockRecord.new(@init_params)
|
59
|
+
record.valid?
|
60
|
+
assert_equal "foo", record.foo
|
61
|
+
assert_equal "bar \t ", record.bar
|
62
|
+
assert_equal "\tbiz ", record.biz
|
63
|
+
assert_equal "", record.baz
|
64
|
+
assert_equal " ", record.bang
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_should_strip_only_three_fields
|
68
|
+
record = StripOnlyThreeMockRecord.new(@init_params)
|
69
|
+
record.valid?
|
70
|
+
assert_equal "foo", record.foo
|
71
|
+
assert_equal "bar", record.bar
|
72
|
+
assert_equal "biz", record.biz
|
73
|
+
assert_equal "", record.baz
|
74
|
+
assert_equal " ", record.bang
|
75
|
+
end
|
76
|
+
|
77
|
+
def test_should_strip_all_except_one_field
|
78
|
+
record = StripExceptOneMockRecord.new(@init_params)
|
79
|
+
record.valid?
|
80
|
+
assert_equal "\tfoo", record.foo
|
81
|
+
assert_equal "bar", record.bar
|
82
|
+
assert_equal "biz", record.biz
|
83
|
+
assert_nil record.baz
|
84
|
+
assert_nil record.bang
|
85
|
+
end
|
86
|
+
|
87
|
+
def test_should_strip_all_except_three_fields
|
88
|
+
record = StripExceptThreeMockRecord.new(@init_params)
|
89
|
+
record.valid?
|
90
|
+
assert_equal "\tfoo", record.foo
|
91
|
+
assert_equal "bar \t ", record.bar
|
92
|
+
assert_equal "\tbiz ", record.biz
|
93
|
+
assert_nil record.baz
|
94
|
+
assert_nil record.bang
|
95
|
+
end
|
96
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'rubygems'
|
3
|
+
require 'active_record'
|
4
|
+
begin require 'redgreen' if ENV['TM_FILENAME'].nil?; rescue LoadError; end
|
5
|
+
|
6
|
+
PLUGIN_ROOT = File.expand_path(File.join(File.dirname(__FILE__), ".."))
|
7
|
+
|
8
|
+
$LOAD_PATH.unshift "#{PLUGIN_ROOT}/lib"
|
9
|
+
load "#{PLUGIN_ROOT}/rails/init.rb"
|
10
|
+
|
11
|
+
class ActiveRecord::Base
|
12
|
+
alias_method :save, :valid?
|
13
|
+
def self.columns()
|
14
|
+
@columns ||= []
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.column(name, sql_type = nil, default = nil, null = true)
|
18
|
+
@columns ||= []
|
19
|
+
@columns << ActiveRecord::ConnectionAdapters::Column.new(name.to_s, default, sql_type, null)
|
20
|
+
end
|
21
|
+
end
|
metadata
ADDED
@@ -0,0 +1,72 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: strip_attributes
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.9.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Ryan McGeary
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2011-08-14 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: activerecord
|
16
|
+
requirement: &70312180321220 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '2.0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *70312180321220
|
25
|
+
description: StripAttributes automatically strips all ActiveRecord model attributes
|
26
|
+
of leading and trailing whitespace before validation. If the attribute is blank,
|
27
|
+
it strips the value to nil.
|
28
|
+
email:
|
29
|
+
- ryan@mcgeary.org
|
30
|
+
executables: []
|
31
|
+
extensions: []
|
32
|
+
extra_rdoc_files: []
|
33
|
+
files:
|
34
|
+
- lib/strip_attributes/shoulda/macros.rb
|
35
|
+
- lib/strip_attributes/shoulda.rb
|
36
|
+
- lib/strip_attributes.rb
|
37
|
+
- rails/init.rb
|
38
|
+
- test/strip_attributes_test.rb
|
39
|
+
- test/test_helper.rb
|
40
|
+
homepage: https://github.com/rmm5t/strip_attributes
|
41
|
+
licenses: []
|
42
|
+
post_install_message:
|
43
|
+
rdoc_options: []
|
44
|
+
require_paths:
|
45
|
+
- lib
|
46
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
47
|
+
none: false
|
48
|
+
requirements:
|
49
|
+
- - ! '>='
|
50
|
+
- !ruby/object:Gem::Version
|
51
|
+
version: '0'
|
52
|
+
segments:
|
53
|
+
- 0
|
54
|
+
hash: 1913689736864890134
|
55
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
56
|
+
none: false
|
57
|
+
requirements:
|
58
|
+
- - ! '>='
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '0'
|
61
|
+
segments:
|
62
|
+
- 0
|
63
|
+
hash: 1913689736864890134
|
64
|
+
requirements: []
|
65
|
+
rubyforge_project: strip_attributes
|
66
|
+
rubygems_version: 1.8.7
|
67
|
+
signing_key:
|
68
|
+
specification_version: 3
|
69
|
+
summary: Whitespace cleanup for ActiveRecord attributes
|
70
|
+
test_files:
|
71
|
+
- test/strip_attributes_test.rb
|
72
|
+
- test/test_helper.rb
|