nilify_blanks 1.2.1 → 1.3.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 104027ca97e31a737161c1c4af5c61a2bcf69242
4
- data.tar.gz: 5e623701c93fd3a53ea116165b07aa2e83249fb9
3
+ metadata.gz: 406a558d296d89cadd2f2e3a1b73ca9730757571
4
+ data.tar.gz: c7df79461bf71561220e6f2820365e23f6a859a3
5
5
  SHA512:
6
- metadata.gz: aca3952cac7d12a89986c78f964e245624fe80ba4bf4e27aee3106b4a66e68f2234422f8c421876234f02b323347a2620d607416226520b01df5101745934069
7
- data.tar.gz: ba4a2adc8b2e106186f0723000cfbd2bf81b25205b1565419d710c66af0a5f57cc24c5726920507f5af6baa323a78195a44d456c827d65c662c3e9f4fb611066
6
+ metadata.gz: 43f5d7c175b34385ae119e513cdc0915d0bb1357d9cdd6ddf7a54659bcbac59d30c36069d8aa88f3104ca260e097c2df8191e75ce998255811dcf891aeef7841
7
+ data.tar.gz: 49303614f425476f5621ac72d2ef7b94fc25b2480de1f460b610aafc366ec146808437514b2abd27b98c616204f49f4076f43eb243f24715843d2b25bbc5ce9a
@@ -1,3 +1,9 @@
1
+ == [2017-12-23] 1.3.0
2
+
3
+ * Use all columns (not just content_columns)
4
+ * Allow nullables_only: false option for including columns that don't allow NULLs
5
+ * Support citext columns
6
+
1
7
  == [2015-04-12] 1.2.1
2
8
 
3
9
  * Fix inconsistency in nilify_blanks RSpec matcher: should filter by type
@@ -1,37 +1,35 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- nilify_blanks (1.2.0)
4
+ nilify_blanks (1.2.1)
5
5
  activerecord (>= 3.0.0)
6
6
  activesupport (>= 3.0.0)
7
7
 
8
8
  GEM
9
9
  remote: http://rubygems.org/
10
10
  specs:
11
- activemodel (4.2.0)
12
- activesupport (= 4.2.0)
13
- builder (~> 3.1)
14
- activerecord (4.2.0)
15
- activemodel (= 4.2.0)
16
- activesupport (= 4.2.0)
17
- arel (~> 6.0)
18
- activesupport (4.2.0)
11
+ activemodel (5.1.4)
12
+ activesupport (= 5.1.4)
13
+ activerecord (5.1.4)
14
+ activemodel (= 5.1.4)
15
+ activesupport (= 5.1.4)
16
+ arel (~> 8.0)
17
+ activesupport (5.1.4)
18
+ concurrent-ruby (~> 1.0, >= 1.0.2)
19
19
  i18n (~> 0.7)
20
- json (~> 1.7, >= 1.7.7)
21
20
  minitest (~> 5.1)
22
- thread_safe (~> 0.3, >= 0.3.4)
23
21
  tzinfo (~> 1.1)
24
22
  appraisal (1.0.2)
25
23
  bundler
26
24
  rake
27
25
  thor (>= 0.14.0)
28
- arel (6.0.0)
29
- builder (3.2.2)
26
+ arel (8.0.0)
27
+ concurrent-ruby (1.0.5)
30
28
  diff-lcs (1.2.1)
31
29
  ffi2-generators (0.1.1)
32
- i18n (0.7.0)
33
- json (1.8.1)
34
- minitest (5.5.0)
30
+ i18n (0.9.1)
31
+ concurrent-ruby (~> 1.0)
32
+ minitest (5.10.3)
35
33
  rake (10.0.3)
36
34
  rspec (2.13.0)
37
35
  rspec-core (~> 2.13.0)
@@ -243,10 +241,10 @@ GEM
243
241
  rubysl-xmlrpc (2.0.0)
244
242
  rubysl-yaml (2.0.4)
245
243
  rubysl-zlib (2.0.1)
246
- sqlite3 (1.3.7)
244
+ sqlite3 (1.3.13)
247
245
  thor (0.19.1)
248
- thread_safe (0.3.4)
249
- tzinfo (1.2.2)
246
+ thread_safe (0.3.6)
247
+ tzinfo (1.2.4)
250
248
  thread_safe (~> 0.1)
251
249
 
252
250
  PLATFORMS
@@ -260,3 +258,6 @@ DEPENDENCIES
260
258
  rspec (~> 2.13)
261
259
  rubysl (~> 2.0)
262
260
  sqlite3
261
+
262
+ BUNDLED WITH
263
+ 1.15.4
@@ -4,9 +4,11 @@
4
4
 
5
5
  == Nilify Blanks
6
6
 
7
- In Rails when saving a model from a form and values are not provided by the user, an empty string is recorded to the database instead of a NULL as many would prefer (mixing blanks and NULLs can become confusing). This plugin allows you to specify a list of attributes (or exceptions from all the attributes) that will be converted to nil if they are blank before a model is saved.
7
+ In Rails when saving a model from a form and values are not provided by the user, an empty string is recorded to the database instead of a NULL as many would prefer (mixing blanks and NULLs can become confusing). This plugin allows you to specify a list of attributes (or exceptions from all the attributes) that will be converted to nil if they are blank before a model is saved.
8
8
 
9
- Only attributes responding to empty? with a value of true will be converted to nil. Therefore, this does not work with integer fields with the value of 0, for example. Usage is best shown through examples:
9
+ By default, columns set as NOT NULL will not be nilified, since that value cannot be persisted, and it might be better to catch that with a validation. If you want to nilify those columns anyway, you can use `only:` (see below) to explicitly mention them.
10
+
11
+ Only attributes responding to blank? with a value of true will be converted to nil. Therefore, this does not work with integer fields with the value of 0, for example. Usage is best shown through examples:
10
12
 
11
13
  == Requirements
12
14
 
@@ -43,9 +45,14 @@ Include the gem using bundler in your Gemfile:
43
45
  nilify_blanks :except => [:author, :title]
44
46
  end
45
47
 
48
+ # Checks and converts any fields, regardless of thier null constraint
49
+ class Post < ActiveRecord::Base
50
+ nilify_blanks :nullables_only => false
51
+ end
52
+
46
53
  == Global Usage
47
54
 
48
- You can also apply nilify_blanks to all models inhering from ActiveRecord::Base:
55
+ You can also apply nilify_blanks to all models inheriting from ActiveRecord::Base:
49
56
 
50
57
  ActiveRecord::Base.nilify_blanks
51
58
 
@@ -4,7 +4,7 @@ module NilifyBlanks
4
4
  end
5
5
 
6
6
  module ClassMethods
7
- DEFAULT_TYPES = [:string, :text]
7
+ DEFAULT_TYPES = [:string, :text, :citext]
8
8
 
9
9
  @@define_nilify_blank_methods_lock = Mutex.new
10
10
 
@@ -64,8 +64,10 @@ module NilifyBlanks
64
64
 
65
65
  if options[:only]
66
66
  self.nilify_blanks_columns = options[:only].clone
67
+ elsif options[:nullables_only] == false
68
+ self.nilify_blanks_columns = self.columns.select {|c| options[:types].include?(c.type) }.map(&:name).map(&:to_s)
67
69
  else
68
- self.nilify_blanks_columns = self.content_columns.select(&:null).select {|c| options[:types].include?(c.type) }.map(&:name).map(&:to_s)
70
+ self.nilify_blanks_columns = self.columns.select(&:null).select {|c| options[:types].include?(c.type) }.map(&:name).map(&:to_s)
69
71
  end
70
72
 
71
73
  self.nilify_blanks_columns -= options[:except] if options[:except]
@@ -1,3 +1,3 @@
1
1
  module NilifyBlanks
2
- VERSION = "1.2.1"
2
+ VERSION = "1.3.0"
3
3
  end
@@ -1,12 +1,15 @@
1
1
  ActiveRecord::Schema.define(:version => 0) do
2
-
2
+
3
3
  create_table :posts, :force => true do |t|
4
4
  t.string :first_name
5
5
  t.string :last_name, :null => false
6
6
  t.string :title
7
7
  t.text :summary
8
8
  t.text :body
9
+ t.column :slug, :citext
9
10
  t.integer :views
11
+ t.integer :category_id
12
+ t.string :blog_id
10
13
  end
11
-
12
- end
14
+
15
+ end
Binary file
@@ -1,116 +1,143 @@
1
1
  require "spec_helper"
2
2
 
3
3
  describe NilifyBlanks do
4
-
4
+
5
5
  context "Model with nilify_blanks" do
6
6
  before(:all) do
7
7
  class Post < ActiveRecord::Base
8
8
  nilify_blanks
9
9
  end
10
-
11
- @post = Post.new(:first_name => '', :last_name => '', :title => '', :summary => '', :body => '', :views => 0)
10
+
11
+ @post = Post.new(:first_name => '', :last_name => '', :title => '', :summary => '', :body => '', :slug => '', :views => 0, :blog_id => '')
12
12
  @post.save
13
13
  end
14
-
15
- it "should recognize all non-null string, text columns" do
16
- Post.nilify_blanks_columns.should == ['first_name', 'title', 'summary', 'body']
14
+
15
+ it "should recognize all non-null string, text, citext columns" do
16
+ Post.nilify_blanks_columns.should == ['first_name', 'title', 'summary', 'body', 'slug', 'blog_id']
17
17
  end
18
-
18
+
19
19
  it "should convert all blanks to nils" do
20
20
  @post.first_name.should be_nil
21
21
  @post.title.should be_nil
22
22
  @post.summary.should be_nil
23
23
  @post.body.should be_nil
24
+ @post.slug.should be_nil
25
+ @post.blog_id.should be_nil
24
26
  end
25
-
27
+
26
28
  it "should leave not-null last name field alone" do
27
29
  @post.last_name.should == ""
28
30
  end
29
-
31
+
30
32
  it "should leave integer views field alone" do
31
33
  @post.views.should == 0
32
34
  end
33
35
  end
34
36
 
37
+ context "Model with nilify_blanks :nullables_only => false" do
38
+ before(:all) do
39
+ class PostWithNullables < ActiveRecord::Base
40
+ self.table_name = "posts"
41
+ nilify_blanks :nullables_only => false
42
+ end
43
+
44
+ @post = PostWithNullables.new(:first_name => '', :last_name => '', :title => '', :summary => '', :body => '', :slug => '', :views => 0, :blog_id => '')
45
+ end
46
+
47
+ it "should recognize all (even null) string, text, citext columns" do
48
+ PostWithNullables.nilify_blanks_columns.should == ['first_name', 'last_name', 'title', 'summary', 'body', 'slug', 'blog_id']
49
+ end
50
+ end
51
+
35
52
  context "Model with nilify_blanks :types => [:text]" do
53
+ def citext_supported
54
+ PostOnlyText.content_columns.detect {|c| c.type == :citext}
55
+ end
56
+
36
57
  before(:all) do
37
58
  class PostOnlyText < ActiveRecord::Base
38
59
  self.table_name = "posts"
39
60
  nilify_blanks :types => [:text]
40
61
  end
41
-
42
- @post = PostOnlyText.new(:first_name => '', :last_name => '', :title => '', :summary => '', :body => '', :views => 0)
62
+
63
+ @post = PostOnlyText.new(:first_name => '', :last_name => '', :title => '', :summary => '', :body => '', :slug => '', :views => 0)
43
64
  @post.save
44
65
  end
45
-
66
+
46
67
  it "should recognize all non-null text only columns" do
47
- PostOnlyText.nilify_blanks_columns.should == ['summary', 'body']
68
+ expected_types = ['summary', 'body']
69
+ expected_types << 'slug' unless citext_supported
70
+ PostOnlyText.nilify_blanks_columns.should == expected_types
48
71
  end
49
-
72
+
50
73
  it "should convert all blanks to nils" do
51
74
  @post.summary.should be_nil
52
75
  @post.body.should be_nil
76
+ @post.slug.should be_nil unless citext_supported
53
77
  end
54
-
78
+
55
79
  it "should leave not-null string fields alone" do
56
80
  @post.first_name.should == ""
57
81
  @post.last_name.should == ""
58
82
  @post.title.should == ""
83
+ @post.slug.should == "" if citext_supported
59
84
  end
60
85
  end
61
-
86
+
62
87
  context "Model with nilify_blanks :only => [:first_name, :title]" do
63
88
  before(:all) do
64
89
  class PostOnlyFirstNameAndTitle < ActiveRecord::Base
65
90
  self.table_name = "posts"
66
91
  nilify_blanks :only => [:first_name, :title]
67
92
  end
68
-
69
- @post = PostOnlyFirstNameAndTitle.new(:first_name => '', :last_name => '', :title => '', :summary => '', :body => '', :views => 0)
93
+
94
+ @post = PostOnlyFirstNameAndTitle.new(:first_name => '', :last_name => '', :title => '', :summary => '', :body => '', :slug => '', :views => 0)
70
95
  @post.save
71
96
  end
72
-
97
+
73
98
  it "should recognize only first_name and title" do
74
99
  PostOnlyFirstNameAndTitle.nilify_blanks_columns.should == ['first_name', 'title']
75
100
  end
76
-
101
+
77
102
  it "should convert first_name and title blanks to nils" do
78
103
  @post.first_name.should be_nil
79
104
  @post.title.should be_nil
80
105
  end
81
-
106
+
82
107
  it "should leave other fields alone" do
83
108
  @post.summary.should == ""
84
109
  @post.body.should == ""
110
+ @post.slug.should == ""
85
111
  end
86
112
  end
87
-
113
+
88
114
  context "Model with nilify_blanks :except => [:first_name, :title]" do
89
115
  before(:all) do
90
116
  class PostExceptFirstNameAndTitle < ActiveRecord::Base
91
117
  self.table_name = "posts"
92
- nilify_blanks :except => [:first_name, :title]
118
+ nilify_blanks :except => [:first_name, :title, :blog_id]
93
119
  end
94
-
95
- @post = PostExceptFirstNameAndTitle.new(:first_name => '', :last_name => '', :title => '', :summary => '', :body => '', :views => 0)
120
+
121
+ @post = PostExceptFirstNameAndTitle.new(:first_name => '', :last_name => '', :title => '', :summary => '', :body => '', :slug => '', :views => 0)
96
122
  @post.save
97
123
  end
98
-
124
+
99
125
  it "should recognize only summary, body, and views" do
100
- PostExceptFirstNameAndTitle.nilify_blanks_columns.should == ['summary', 'body']
126
+ PostExceptFirstNameAndTitle.nilify_blanks_columns.should == ['summary', 'body', 'slug']
101
127
  end
102
-
128
+
103
129
  it "should convert summary and body blanks to nils" do
104
130
  @post.summary.should be_nil
105
131
  @post.body.should be_nil
132
+ @post.slug.should be_nil
106
133
  end
107
-
134
+
108
135
  it "should leave other fields alone" do
109
136
  @post.first_name.should == ""
110
137
  @post.title.should == ""
111
138
  end
112
139
  end
113
-
140
+
114
141
 
115
142
  context "Global Usage" do
116
143
  context "Namespaced Base Class with nilify_blanks inline" do
@@ -126,7 +153,7 @@ describe NilifyBlanks do
126
153
  self.table_name = "posts"
127
154
  end
128
155
 
129
- @post = Admin1::Post.new(:first_name => '', :last_name => '', :title => '', :summary => '', :body => '', :views => 0)
156
+ @post = Admin1::Post.new(:first_name => '', :last_name => '', :title => '', :summary => '', :body => '', :slug => '', :views => 0)
130
157
  @post.save
131
158
  end
132
159
 
@@ -149,7 +176,7 @@ describe NilifyBlanks do
149
176
 
150
177
  Admin2::Base.nilify_blanks
151
178
 
152
- @post = Admin2::Post.new(:first_name => '', :last_name => '', :title => '', :summary => '', :body => '', :views => 0)
179
+ @post = Admin2::Post.new(:first_name => '', :last_name => '', :title => '', :summary => '', :body => '', :slug => '', :views => 0)
153
180
  @post.save
154
181
  end
155
182
 
@@ -166,7 +193,7 @@ describe NilifyBlanks do
166
193
  self.table_name = "posts"
167
194
  end
168
195
 
169
- @post = InheritedPost.new(:first_name => '', :last_name => '', :title => '', :summary => '', :body => '', :views => 0)
196
+ @post = InheritedPost.new(:first_name => '', :last_name => '', :title => '', :summary => '', :body => '', :slug => '', :views => 0)
170
197
  @post.save
171
198
  end
172
199
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nilify_blanks
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.1
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ben Hughes
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-12 00:00:00.000000000 Z
11
+ date: 2017-12-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -120,7 +120,8 @@ files:
120
120
  - spec/nilify_blanks_spec.rb
121
121
  - spec/spec_helper.rb
122
122
  homepage: http://github.com/rubiety/nilify_blanks
123
- licenses: []
123
+ licenses:
124
+ - MIT
124
125
  metadata: {}
125
126
  post_install_message:
126
127
  rdoc_options: []
@@ -138,9 +139,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
138
139
  version: 1.3.4
139
140
  requirements: []
140
141
  rubyforge_project: nilify_blanks
141
- rubygems_version: 2.2.2
142
+ rubygems_version: 2.6.11
142
143
  signing_key:
143
144
  specification_version: 4
144
145
  summary: Auto-convert blank fields to nil.
145
146
  test_files: []
146
- has_rdoc: