auto_strip_attributes 2.5.0 → 2.6.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 48197936732130b189671f33be5dd01d1b81330c
4
- data.tar.gz: ce19242658ff02bbceaf8526879a6ada25ab5b7a
2
+ SHA256:
3
+ metadata.gz: caf66b63e636244d95515113c583385ec94ab1daa42bd79305a49b573b5e2b07
4
+ data.tar.gz: ed94dfab3e498829c13d8e017c0527ea7ce1dc1df9920b7addaeb41ef8fba3f3
5
5
  SHA512:
6
- metadata.gz: 420d3331984a65b6a4b5caf91fec7986ed3152408e84b0fd256602030dad8ed74be928a1efe448b4ac985bbcd073eb69c7f5b8925322204c9e0135f50a8d3206
7
- data.tar.gz: d5cd9d48fa2aec7dad753a1cca1158003bab2d0b8c88ac114a87577017445346be8ae7fced6cadf476f98150f033f8625c6f27eba5b4ffaf8f975bd5ec385af7
6
+ metadata.gz: fa25b08795e57b2aea579998f814f2c9d630ad529b0caa8e3672e784d87f4a1d6f6358b8eb31d9aef8c79af1917573f46f6e3a33c3b5d8a32bba92bb4c981015
7
+ data.tar.gz: 8d9f2a5f2cd96a8099cfb67ae68291ec93c22013693899dae525471408626ff5f741c1170e7a1c3666f0405a22915f5e8f6dad6bc3ee00c3887d1aff8cba6732
@@ -2,13 +2,12 @@ language: ruby
2
2
  sudo: false
3
3
  cache: bundler
4
4
  rvm:
5
- - 2.2.9
6
- - 2.3.1
7
- - 2.4.4
8
5
  - 2.5.1
6
+ - 2.6.0
7
+ - 2.7.0
9
8
  env:
10
- - "RAILS_VERSION=4.2"
11
9
  - "RAILS_VERSION=5.0"
12
10
  - "RAILS_VERSION=5.1"
13
11
  - "RAILS_VERSION=5.2"
12
+ - "RAILS_VERSION=6.0"
14
13
 
@@ -1,8 +1,12 @@
1
1
  ## [Master]
2
2
 
3
+ ## [2.6]
4
+
5
+ - Support for `array` attributes (thnks to [@sharshenov](https://github.com/holli/auto_strip_attributes/pull/29))
6
+
3
7
  ## [2.5]
4
8
 
5
- - Support for callback options (e.g. if: -> ...) (thnks to [watsonjon](https://github.com/holli/auto_strip_attributes/pull/28)
9
+ - Support for callback options (e.g. if: -> ...) (thnks to [@watsonjon#28](https://github.com/holli/auto_strip_attributes/pull/28))
6
10
 
7
11
  ## [2.4]
8
12
 
data/README.md CHANGED
@@ -7,18 +7,20 @@ It works by adding a before_validation hook to the record. No other methods are
7
7
 
8
8
  Gem has option to set empty strings to nil or to remove extra spaces inside the string.
9
9
 
10
- [<img src="https://secure.travis-ci.org/holli/auto_strip_attributes.png" />](http://travis-ci.org/holli/auto_strip_attributes)
11
- [![Gem](https://img.shields.io/gem/dt/auto_strip_attributes.svg?maxAge=2592000)](https://rubygems.org/gems/auto_strip_attributes/)
12
- [![Gem](https://img.shields.io/gem/v/auto_strip_attributes.svg?maxAge=2592000)](https://rubygems.org/gems/auto_strip_attributes/)
10
+ [![Build Status](https://travis-ci.org/holli/auto_strip_attributes.svg?branch=master)](https://travis-ci.org/holli/auto_strip_attributes)
11
+ [![Downloads](https://img.shields.io/gem/dt/auto_strip_attributes)](https://rubygems.org/gems/auto_strip_attributes/)
12
+ [![Gem](https://img.shields.io/gem/v/auto_strip_attributes)](https://rubygems.org/gems/auto_strip_attributes/)
13
13
 
14
14
  ## Howto / examples
15
15
 
16
16
  Include gem in your Gemfile:
17
17
 
18
18
  ```ruby
19
- gem "auto_strip_attributes", "~> 2.4"
19
+ gem "auto_strip_attributes", "~> 2.6"
20
20
  ```
21
21
 
22
+ Example ActiveRecord usage:
23
+
22
24
  ```ruby
23
25
  class User < ActiveRecord::Base
24
26
 
@@ -31,11 +33,37 @@ class User < ActiveRecord::Base
31
33
  # Won't set to null even if string is blank. " " => ""
32
34
  auto_strip_attributes :email, nullify: false
33
35
 
36
+ # Won't set to null even if array is blank. [" "] => []
37
+ auto_strip_attributes :tags, nullify_array: false
38
+
34
39
  # Use with attributes that are not mapped to a column
35
40
  auto_strip_attributes :password, virtual: true
36
41
  end
37
42
  ```
38
43
 
44
+ Example ActiveModel usage:
45
+
46
+ ```ruby
47
+ class VirtualUser
48
+ include ActiveModel::Validations
49
+ include ActiveModel::Validations::Callbacks
50
+
51
+ extend AutoStripAttributes
52
+
53
+ attr_accessor :email
54
+
55
+ # Use the `virtual` option because attributes are not mapped to a column
56
+ auto_strip_attributes :email, virtual: true
57
+ end
58
+
59
+ virtual_user = VirtualUser.new
60
+ virtual_user.email = " alice@example.com "
61
+
62
+ virtual_user.validate
63
+ virtual_user.email #=> "alice@example.com"
64
+
65
+ ```
66
+
39
67
  # Options
40
68
  ### Default options
41
69
 
@@ -43,6 +71,7 @@ By default the following options are defined (listed in the order of processing)
43
71
 
44
72
  - `:strip` (enabled by default) - removes whitespaces from the beginning and the end of string. Works exactly same as `String#strip`, i.e., may not strip non-ASCII whitespaces.
45
73
  - `:nullify` (enabled by default) - replaces empty strings with nil.
74
+ - `:nullify_array` (enabled by default) - replaces empty arrays with nil.
46
75
  - `:squish` (disabled by default) - replaces all consecutive Unicode whitespace characters (including tabs and new lines) with single space (U+0020). Works exactly same as Rails `String#squish`
47
76
  - `:delete_whitespaces` (disabled by default) - deletes all spaces (U+0020) and tabs (U+0009).
48
77
  - `:convert_non_breaking_spaces` (disabled by default) - converts non-breaking spaces (U+00A0) to normal spaces (U+0020).
@@ -105,9 +134,7 @@ AutoStripAttributes::Config.setup accepts following options
105
134
 
106
135
  Gem has been tested with newest Ruby & Rails combination and it probably works also with older versions. See test matrix at https://github.com/holli/auto_strip_attributes/blob/master/.travis.yml
107
136
 
108
- [<img src="https://secure.travis-ci.org/holli/auto_strip_attributes.png" />](http://travis-ci.org/holli/auto_strip_attributes)
109
-
110
- http://travis-ci.org/#!/holli/auto_strip_attributes
137
+ [![Build Status](https://travis-ci.org/holli/auto_strip_attributes.svg?branch=master)](https://travis-ci.org/holli/auto_strip_attributes)
111
138
 
112
139
  # Support
113
140
 
@@ -20,7 +20,13 @@ module AutoStripAttributes
20
20
  end
21
21
  AutoStripAttributes::Config.filters_order.each do |filter_name|
22
22
  next if !options[filter_name]
23
- value = AutoStripAttributes::Config.filters[filter_name].call(value, options[filter_name])
23
+ filter = lambda { |original| AutoStripAttributes::Config.filters[filter_name].call(original, options[filter_name]) }
24
+ value = if value.respond_to?(:is_a?) && value.is_a?(Array)
25
+ array = value.map { |item| filter.call(item) }.compact
26
+ options[:nullify_array] && array.empty? ? nil : array
27
+ else
28
+ filter.call(value)
29
+ end
24
30
  if virtual
25
31
  record.public_send("#{attribute}=", value)
26
32
  else
@@ -59,6 +65,7 @@ class AutoStripAttributes::Config
59
65
  # Basically same as value.blank? ? nil : value
60
66
  (value.respond_to?(:'blank?') and value.respond_to?(:'empty?') and value.blank?) ? nil : value
61
67
  end
68
+ set_filter(nullify_array: true) {|value| value}
62
69
  set_filter(squish: false) do |value|
63
70
  value = value.respond_to?(:gsub) ? value.gsub(/[[:space:]]+/, ' ') : value
64
71
  value.respond_to?(:strip) ? value.strip : value
@@ -1,3 +1,3 @@
1
1
  module AutoStripAttributes
2
- VERSION = "2.5.0"
2
+ VERSION = "2.6.0"
3
3
  end
@@ -83,6 +83,13 @@ describe AutoStripAttributes do
83
83
  @record.foo.must_equal "aaa"
84
84
  end
85
85
 
86
+ it "should be ok for strings arrays" do
87
+ @record = MockRecordBasic.new()
88
+ @record.foo = [" aaa \t", " "]
89
+ @record.valid?
90
+ @record.foo.must_equal ["aaa"]
91
+ end
92
+
86
93
  it "should not delete non breaking spaces" do
87
94
  @record = MockRecordBasic.new()
88
95
  @record.foo = " aaa \t\u00A0"
@@ -105,6 +112,13 @@ describe AutoStripAttributes do
105
112
  @record.foo.must_be_nil
106
113
  end
107
114
 
115
+ it "should set empty strings arrays to nil" do
116
+ @record = MockRecordBasic.new()
117
+ @record.foo = [" "]
118
+ @record.valid?
119
+ @record.foo.must_be_nil
120
+ end
121
+
108
122
  it "should call strip method to attribute if possible" do
109
123
  @record = MockRecordBasic.new()
110
124
  str_mock = " strippable_str "
@@ -169,6 +183,29 @@ describe AutoStripAttributes do
169
183
  @record.valid?
170
184
  @record.foo.must_equal ""
171
185
  end
186
+
187
+ it "should not set blank strings arrays to nil" do
188
+ @record = MockRecordWithNullify.new()
189
+ @record.foo = [" "]
190
+ @record.valid?
191
+ @record.foo.must_equal [""]
192
+ end
193
+ end
194
+
195
+ describe "Attribute with nullify_array option" do
196
+ #class MockRecordWithNullifyArray < ActiveRecord::Base
197
+ class MockRecordWithNullifyArray < MockRecordParent
198
+ #column :foo, :string
199
+ attr_accessor :foo
200
+ auto_strip_attributes :foo, nullify_array: false
201
+ end
202
+
203
+ it "should not set blank strings array to nil" do
204
+ @record = MockRecordWithNullifyArray.new
205
+ @record.foo = [" "]
206
+ @record.valid?
207
+ @record.foo.must_equal []
208
+ end
172
209
  end
173
210
 
174
211
  describe "Attribute with squish option" do
@@ -212,22 +249,31 @@ describe AutoStripAttributes do
212
249
  class MockRecordWithMultipleAttributes < MockRecordParent #< ActiveRecord::Base
213
250
  #column :foo, :string
214
251
  #column :bar, :string
215
- #column :biz, :string
216
- #column :bang, :integer
217
- attr_accessor :foo, :bar, :biz, :bang
218
- auto_strip_attributes :foo, :bar
219
- auto_strip_attributes :biz, {nullify: false, squish: true}
252
+ #column :baz, :string
253
+ #column :qux, :string, array: true
254
+ #column :quux, :string, array: true
255
+ #column :quuz, :string, array: true
256
+ attr_accessor :foo, :bar, :baz, :qux, :quux, :quuz
257
+ auto_strip_attributes :foo, :bar, :qux
258
+ auto_strip_attributes :baz, :quux, {nullify: false, squish: true}
259
+ auto_strip_attributes :quuz, {nullify: true, nullify_array: false}
220
260
  end
221
261
 
222
262
  it "should handle everything ok" do
223
263
  @record = MockRecordWithMultipleAttributes.new
224
264
  @record.foo = " foo\tfoo"
225
265
  @record.bar = " "
226
- @record.biz = " "
266
+ @record.baz = " "
267
+ @record.qux = ["\n"]
268
+ @record.quux = [" foo\tfoo", " "]
269
+ @record.quuz = [" "]
227
270
  @record.valid?
228
271
  @record.foo.must_equal "foo\tfoo"
229
272
  @record.bar.must_be_nil
230
- @record.biz.must_equal ""
273
+ @record.baz.must_equal ""
274
+ @record.qux.must_be_nil
275
+ @record.quux.must_equal ["foo foo", ""]
276
+ @record.quuz.must_equal []
231
277
  end
232
278
  end
233
279
 
@@ -284,7 +330,7 @@ describe AutoStripAttributes do
284
330
  it "should have default filters set in right order" do
285
331
  AutoStripAttributes::Config.setup(clear_previous: true)
286
332
  filters_order = AutoStripAttributes::Config.filters_order
287
- filters_order.must_equal [:convert_non_breaking_spaces, :strip, :nullify, :squish, :delete_whitespaces]
333
+ filters_order.must_equal [:convert_non_breaking_spaces, :strip, :nullify, :nullify_array, :squish, :delete_whitespaces]
288
334
  end
289
335
 
290
336
  it "should reset filters to defaults when :clear is true" do
@@ -295,7 +341,7 @@ describe AutoStripAttributes do
295
341
  end
296
342
  AutoStripAttributes::Config.setup(clear_previous: true)
297
343
  filters_order = AutoStripAttributes::Config.filters_order
298
- filters_order.must_equal [:convert_non_breaking_spaces, :strip, :nullify, :squish, :delete_whitespaces]
344
+ filters_order.must_equal [:convert_non_breaking_spaces, :strip, :nullify, :nullify_array, :squish, :delete_whitespaces]
299
345
  end
300
346
 
301
347
  it "should remove all filters when :clear is true and :defaults is false" do
@@ -328,7 +374,7 @@ describe AutoStripAttributes do
328
374
  filters_order = AutoStripAttributes::Config.filters_order
329
375
  filters_enabled = AutoStripAttributes::Config.filters_enabled
330
376
 
331
- filters_order.must_equal [:convert_non_breaking_spaces, :strip, :nullify, :squish, :delete_whitespaces, :test]
377
+ filters_order.must_equal [:convert_non_breaking_spaces, :strip, :nullify, :nullify_array, :squish, :delete_whitespaces, :test]
332
378
  assert Proc === filters_block[:test]
333
379
  filters_enabled[:test].must_equal true
334
380
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: auto_strip_attributes
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.5.0
4
+ version: 2.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Olli Huotari
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-09-06 00:00:00.000000000 Z
11
+ date: 2020-03-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -108,7 +108,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
108
108
  version: '0'
109
109
  requirements: []
110
110
  rubyforge_project: auto_strip_attributes
111
- rubygems_version: 2.6.14
111
+ rubygems_version: 2.7.6
112
112
  signing_key:
113
113
  specification_version: 4
114
114
  summary: Removes unnecessary whitespaces in attributes. Extension to ActiveRecord