normalizy 1.0.1 → 1.1.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: 1803f9ca8bad714b7d44f99c1d685b3cf79bea7d
4
- data.tar.gz: c5c50b280313e3903e1c05e441d9d4f628571083
2
+ SHA256:
3
+ metadata.gz: 2706668666c2a0991809c4b3f459510ba7a5ee6a9619841dfb7b2766b046df8a
4
+ data.tar.gz: 55fc041e85400d342edfd903f1eae8b8803e31bda54bfd04240b5659f3e4e0fd
5
5
  SHA512:
6
- metadata.gz: 6142ea4c78fc22dc2fafa71be697768f60d39a0abc93c43f931d6bd9794db0139851151d55cc53076c32779b54d12275eb27b99f6b29862bdd4f9859dfdc6ef9
7
- data.tar.gz: 6f308e9cfaafceda8495e7baecefe2bce8af421938bd4205dc53433b7d2fa2dffce33c924c5170c30dfe171c1d440e5dc1844efde90a19e441165fadccfd3de4
6
+ metadata.gz: 81218fc0bdf00934a6152527418d6b31ca2dbb5033eaabac4e03c55b08d7ec1c50a63d40643180718a916d35b0421e2aacf933d45866b7e4479b7e5fdbff7de0
7
+ data.tar.gz: a51b09beec0d39852a63b4b0409d3666c4538e22a41d82456cca1bfaabf128b903fcc51afcd822ad65ee62678f611605f9633018edd56838b3c4570fafea9c77
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ ## v1.1.0
2
+
3
+ - Features:
4
+ - Added `slug` filter with option to apply the value on other field.
5
+
1
6
  ## v1.0.1
2
7
 
3
8
  - Fixes:
data/README.md CHANGED
@@ -60,7 +60,7 @@ By default, the date is treat as `%F` format and as `UTC` time.
60
60
  You can change the format using the `format` options:
61
61
 
62
62
  ```ruby
63
- normalizy :birthday, with: date: { format: '%y/%m/%d' }
63
+ normalizy :birthday, with: { date: { format: '%y/%m/%d' } }
64
64
 
65
65
  '84/10/23'
66
66
  # Tue, 23 Oct 1984 00:00:00 UTC +00:00
@@ -71,7 +71,7 @@ normalizy :birthday, with: date: { format: '%y/%m/%d' }
71
71
  To convert the date on your time zone, just provide the `time_zone` option:
72
72
 
73
73
  ```ruby
74
- normalizy :birthday, with: date: { time_zone: '%y/%m/%d' }
74
+ normalizy :birthday, with: { date: { time_zone: Time.zone } }
75
75
 
76
76
  '1984-10-23'
77
77
  # Tue, 23 Oct 1984 00:00:00 EDT -04:00
@@ -98,7 +98,7 @@ If no configuration is provided, the default message will be `'%{value} is an in
98
98
  If your model receive a `Time` or `DateTime`, you can provide `adjust` options to change you time to begin o the day:
99
99
 
100
100
  ```ruby
101
- normalizy :birthday, with: date: { adjust: :begin }
101
+ normalizy :birthday, with: { date: { adjust: :begin } }
102
102
 
103
103
  Tue, 23 Oct 1984 11:30:00 EDT -04:00
104
104
  # Tue, 23 Oct 1984 00:00:00 EDT -04:00
@@ -107,7 +107,7 @@ Tue, 23 Oct 1984 11:30:00 EDT -04:00
107
107
  Or to the end of the day:
108
108
 
109
109
  ```ruby
110
- normalizy :birthday, with: date: { adjust: :end }
110
+ normalizy :birthday, with: { date: { adjust: :end } }
111
111
 
112
112
  Tue, 23 Oct 1984 00:00:00 EDT -04:00
113
113
  # Tue, 23 Oct 1984 11:59:59 EDT -04:00
@@ -130,7 +130,7 @@ The `separator` will be keeped on value to be possible cast the right integer va
130
130
  You can change this separator:
131
131
 
132
132
  ```ruby
133
- normalizy :amount, with: money: { separator: ',' }
133
+ normalizy :amount, with: { money: { separator: ',' } }
134
134
 
135
135
  'R$ 42,00'
136
136
  # '42,00'
@@ -152,7 +152,7 @@ And if it does not exists, `.` will be used as default.
152
152
  You can retrieve the value in *cents* format, use the `type` options as `cents`:
153
153
 
154
154
  ```ruby
155
- normalizy :amount, with: money: { type: :cents }
155
+ normalizy :amount, with: { money: { type: :cents } }
156
156
 
157
157
  '$ 42.00'
158
158
  # '4200'
@@ -164,7 +164,7 @@ As you could see on the last example, when using `type: :cents` is important the
164
164
  So, you can configure it to avoid the following error:
165
165
 
166
166
  ```ruby
167
- normalizy :amount, with: money: { type: :cents }
167
+ normalizy :amount, with: { money: { type: :cents } }
168
168
 
169
169
  '$ 42.0'
170
170
  # 420
@@ -173,14 +173,14 @@ normalizy :amount, with: money: { type: :cents }
173
173
  When you parse it back, the value need to be divided by `100` to be presented, but it will result in a value you do not want: `4.2` instead of the original `42.0`. Just provide a `precision`:
174
174
 
175
175
  ```ruby
176
- normalizy :amount, with: money: { precision: 2 }
176
+ normalizy :amount, with: { money: { precision: 2 } }
177
177
 
178
178
  '$ 42.0'
179
179
  # 42.00
180
180
  ```
181
181
 
182
182
  ```ruby
183
- normalizy :amount, with: money: { precision: 2, type: :cents }
183
+ normalizy :amount, with: { money: { precision: 2, type: :cents } }
184
184
 
185
185
  '$ 42.0'
186
186
  # 4200
@@ -202,7 +202,7 @@ And if it does not exists, `2` will be used as default.
202
202
  If you need get a number over a normalized string in a number style, provide `cast` option with desired cast method:
203
203
 
204
204
  ```ruby
205
- normalizy :amount, with: money: { cast: :to_i }
205
+ normalizy :amount, with: { money: { cast: :to_i } }
206
206
 
207
207
  '$ 42.00'
208
208
  # 4200
@@ -212,7 +212,7 @@ Just pay attention to avoid to use `type: :cents` together `cast` with float par
212
212
  Since `type` runs first, you will add decimal in a number that already is represented with decimal, but as integer:
213
213
 
214
214
  ```ruby
215
- normalizy :amount, with: money: { cast: :to_f, type: :cents }
215
+ normalizy :amount, with: { money: { cast: :to_f, type: :cents } }
216
216
 
217
217
  '$ 42.00'
218
218
  # 4200.0
@@ -220,6 +220,8 @@ normalizy :amount, with: money: { cast: :to_f, type: :cents }
220
220
 
221
221
  ### Number
222
222
 
223
+ Transform text to valid number.
224
+
223
225
  ```ruby
224
226
  normalizy :age, with: :number
225
227
 
@@ -230,7 +232,7 @@ normalizy :age, with: :number
230
232
  If you want cast the value, provide `cast` option with desired cast method:
231
233
 
232
234
  ```ruby
233
- normalizy :age, with: number: { cast: :to_i }
235
+ normalizy :age, with: { number: { cast: :to_i } }
234
236
 
235
237
  ' 32x'
236
238
  # 32
@@ -238,7 +240,7 @@ normalizy :age, with: number: { cast: :to_i }
238
240
 
239
241
  ### Percent
240
242
 
241
- Transform a value to percent format.
243
+ Transform a value to a valid percent format.
242
244
 
243
245
  ```ruby
244
246
  normalizy :amount, with: :percent
@@ -253,7 +255,7 @@ The `separator` will be keeped on value to be possible cast the right integer va
253
255
  You can change this separator:
254
256
 
255
257
  ```ruby
256
- normalizy :amount, with: percent: { separator: ',' }
258
+ normalizy :amount, with: { percent: { separator: ',' } }
257
259
 
258
260
  '42,00 %'
259
261
  # '42,00'
@@ -275,7 +277,7 @@ And if it does not exists, `.` will be used as default.
275
277
  You can retrieve the value in *integer* format, use the `type` options as `integer`:
276
278
 
277
279
  ```ruby
278
- normalizy :amount, with: percent: { type: :integer }
280
+ normalizy :amount, with: { percent: { type: :integer } }
279
281
 
280
282
  '42.00 %'
281
283
  # '4200'
@@ -287,7 +289,7 @@ As you could see on the last example, when using `type: :integer` is important t
287
289
  So, you can configure it to avoid the following error:
288
290
 
289
291
  ```ruby
290
- normalizy :amount, with: percent: { type: :integer }
292
+ normalizy :amount, with: { percent: { type: :integer } }
291
293
 
292
294
  '42.0 %'
293
295
  # 420
@@ -296,14 +298,14 @@ normalizy :amount, with: percent: { type: :integer }
296
298
  When you parse it back, the value need to be divided by `100` to be presented, but it will result in a value you do not want: `4.2` instead of the original `42.0`. Just provide a `precision`:
297
299
 
298
300
  ```ruby
299
- normalizy :amount, with: percent: { precision: 2 }
301
+ normalizy :amount, with: { percent: { precision: 2 } }
300
302
 
301
303
  '42.0 %'
302
304
  # 42.00
303
305
  ```
304
306
 
305
307
  ```ruby
306
- normalizy :amount, with: percent: { precision: 2, type: :integer }
308
+ normalizy :amount, with: { percent: { precision: 2, type: :integer } }
307
309
 
308
310
  '42.0 %'
309
311
  # 4200
@@ -325,7 +327,7 @@ And if it does not exists, `2` will be used as default.
325
327
  If you need get a number over a normalized string in a number style, provide `cast` option with desired cast method:
326
328
 
327
329
  ```ruby
328
- normalizy :amount, with: percent: { cast: :to_i }
330
+ normalizy :amount, with: { percent: { cast: :to_i } }
329
331
 
330
332
  '42.00 %'
331
333
  # 4200
@@ -335,14 +337,39 @@ Just pay attention to avoid to use `type: :integer` together `cast` with float p
335
337
  Since `type` runs first, you will add decimal in a number that already is represented with decimal, but as integer:
336
338
 
337
339
  ```ruby
338
- normalizy :amount, with: percent: { cast: :to_f, type: :integer }
340
+ normalizy :amount, with: { percent: { cast: :to_f, type: :integer } }
339
341
 
340
342
  '42.00 %'
341
343
  # 4200.0
342
344
  ```
343
345
 
346
+ ### Slug
347
+
348
+ Convert texto to slug.
349
+
350
+ ```ruby
351
+ normalizy :slug, with: :slug
352
+ 'Washington é Botelho'
353
+ # 'washington-e-botelho'
354
+ ```
355
+
356
+ #### to
357
+
358
+ You can slug a field based on other just sending the result value.
359
+
360
+ ```ruby
361
+ normalizy :title, with: { slug: { to: :slug } }
362
+
363
+ model.title = 'Washington é Botelho'
364
+
365
+ model.slug
366
+ # 'washington-e-botelho'
367
+ ```
368
+
344
369
  ### Strip
345
370
 
371
+ Cleans edge spaces.
372
+
346
373
  Options:
347
374
 
348
375
  - `side`: `:left`, `:right` or `:both`. Default: `:both`
@@ -378,7 +405,7 @@ As you can see, the rules can be passed as Symbol/String or as Hash if it has op
378
405
  You can normalize with a couple of filters at once:
379
406
 
380
407
  ```ruby
381
- normalizy :name, with: %i[squish titleize]
408
+ normalizy :name, with: { %i[squish titleize] }
382
409
  ' washington botelho '
383
410
  # 'Washington Botelho'
384
411
  ```
@@ -482,7 +509,7 @@ end
482
509
  ```
483
510
 
484
511
  ```ruby
485
- normalizy :name, with: blacklist: { replacement: '---' }
512
+ normalizy :name, with: { blacklist: { replacement: '---' } }
486
513
 
487
514
  'Washington Fuck Botelho'
488
515
  # 'Washington --- Botelho'
@@ -514,7 +541,7 @@ end
514
541
  ```
515
542
 
516
543
  ```ruby
517
- normalizy :name, with: :blacklist, &->(value) { value.sub('filtered', '(filtered 2x)') }
544
+ normalizy :name, with: { :blacklist, &->(value) { value.sub('filtered', '(filtered 2x)') } }
518
545
 
519
546
  'Washington Fuck Botelho'
520
547
  # 'Washington (filtered 2x) Botelho'
@@ -28,6 +28,7 @@ module Normalizy
28
28
  money: Normalizy::Filters::Money,
29
29
  number: Normalizy::Filters::Number,
30
30
  percent: Normalizy::Filters::Percent,
31
+ slug: Normalizy::Filters::Slug,
31
32
  strip: Normalizy::Filters::Strip
32
33
  }
33
34
  end
@@ -56,8 +56,8 @@ module Normalizy
56
56
  [rules].flatten.compact.each do |rule|
57
57
  rule_name, rule_options = extract_rule(rule)
58
58
 
59
- unalias_for(rule_name).each do |rule|
60
- filter, filter_options = extract_filter(rule, rule_options, attribute)
59
+ unalias_for(rule_name).each do |unaliased_rule|
60
+ filter, filter_options = extract_filter(unaliased_rule, rule_options, attribute)
61
61
  result = extract_value(result, filter, filter_options, block)
62
62
  end
63
63
  end
@@ -95,7 +95,11 @@ module Normalizy
95
95
  value: value
96
96
  )
97
97
 
98
- super result
98
+ if rules.is_a?(Hash) && rules.dig(:slug, :to).present?
99
+ write_attribute rules.dig(:slug, :to), result
100
+ else
101
+ super result
102
+ end
99
103
  end
100
104
  end
101
105
  }
@@ -12,9 +12,7 @@ module Normalizy
12
12
  return nil if value.blank?
13
13
 
14
14
  if cents?(options)
15
- if value.include? separator(options)
16
- value = precisioned(value, options).delete('.')
17
- end
15
+ value = precisioned(value, options).delete('.') if value.include? separator(options)
18
16
  else
19
17
  value = precisioned(value, options)
20
18
  end
@@ -35,7 +33,7 @@ module Normalizy
35
33
  end
36
34
 
37
35
  def precisioned(value, options)
38
- "%0.#{precision(options)}f" % [value.sub(separator(options), '.')]
36
+ format("%0.#{precision(options)}f", value.sub(separator(options), '.'))
39
37
  end
40
38
 
41
39
  def separator(options)
@@ -12,9 +12,7 @@ module Normalizy
12
12
  return nil if value.blank?
13
13
 
14
14
  if cents?(options)
15
- if value.include? separator(options)
16
- value = precisioned(value, options).delete('.')
17
- end
15
+ value = precisioned(value, options).delete('.') if value.include? separator(options)
18
16
  else
19
17
  value = precisioned(value, options)
20
18
  end
@@ -35,7 +33,7 @@ module Normalizy
35
33
  end
36
34
 
37
35
  def precisioned(value, options)
38
- "%0.#{precision(options)}f" % [value.sub(separator(options), '.')]
36
+ format("%0.#{precision(options)}f", value.sub(separator(options), '.'))
39
37
  end
40
38
 
41
39
  def separator(options)
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Normalizy
4
+ module Filters
5
+ module Slug
6
+ class << self
7
+ def call(input, options = {})
8
+ return input unless input.is_a?(String)
9
+
10
+ input.parameterize
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -43,9 +43,7 @@ module Normalizy
43
43
 
44
44
  return false if options.blank?
45
45
 
46
- if options.map { |option| option[:rules] }.compact.blank?
47
- options = default_rules
48
- end
46
+ options = default_rules if options.map { |option| option[:rules] }.compact.blank?
49
47
 
50
48
  return false if options.blank?
51
49
 
@@ -113,13 +111,9 @@ module Normalizy
113
111
  result = options.map do |option|
114
112
  rules = option[:rules]
115
113
 
116
- if rules.nil?
117
- :nil
118
- elsif rules.blank?
119
- %("#{rules}")
120
- else
121
- rules
122
- end
114
+ return :nil if rules.nil?
115
+
116
+ rules.presence || %("#{rules}")
123
117
  end
124
118
 
125
119
  result.join ', '
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Normalizy
4
- VERSION = '1.0.1'.freeze
4
+ VERSION = '1.1.0'
5
5
  end
@@ -14,6 +14,7 @@ RSpec.describe Normalizy::Config, '#add' do
14
14
  money: Normalizy::Filters::Money,
15
15
  number: Normalizy::Filters::Number,
16
16
  percent: Normalizy::Filters::Percent,
17
+ slug: Normalizy::Filters::Slug,
17
18
  strip: Normalizy::Filters::Strip
18
19
  )
19
20
  end
@@ -9,6 +9,7 @@ RSpec.describe Normalizy::Config, 'filters' do
9
9
  money: Normalizy::Filters::Money,
10
10
  number: Normalizy::Filters::Number,
11
11
  percent: Normalizy::Filters::Percent,
12
+ slug: Normalizy::Filters::Slug,
12
13
  strip: Normalizy::Filters::Strip
13
14
  )
14
15
  end
@@ -16,7 +16,7 @@ RSpec.describe ModelDate, 'filters:date' do
16
16
  end
17
17
 
18
18
  specify do
19
- hours = offset_in_hours('America/Sao_Paulo')
19
+ hours = ActiveSupport::TimeZone['Brasilia'].utc_offset / 3600.0
20
20
  expected = Time.new(1984, 10, 23, 0, 0, 0, 0) + (hours.hours * -1)
21
21
 
22
22
  expect(described_class.create(date_time_zone: '1984-10-23').date_time_zone).to eq expected
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rails_helper'
4
+
5
+ RSpec.describe ModelSlug, 'filters:slug' do
6
+ from = 'The Títle'
7
+ to = 'the-title'
8
+
9
+ specify { expect(described_class.create(permalink: from).permalink).to eq to }
10
+
11
+ specify { expect(described_class.create(title: from).slug).to eq to }
12
+ end
@@ -27,9 +27,11 @@ RSpec.describe Normalizy::Extension, ':normalizy_rules' do
27
27
  end
28
28
 
29
29
  specify do
30
+ expected = { name: [{ block: nil, options: {}, rules: [:upcase, 'blank', { trim: { side: :left } }] }] }
31
+
30
32
  model.normalizy :name, with: [:upcase, 'blank', { trim: { side: :left } }]
31
33
 
32
- expect(model.normalizy_rules).to eq(name: [{ block: nil, options: {}, rules: [:upcase, 'blank', { trim: { side: :left } }] }])
34
+ expect(model.normalizy_rules).to eq expected
33
35
  end
34
36
 
35
37
  specify do
@@ -9,8 +9,6 @@ RSpec.describe Normalizy::Filters::Date do
9
9
 
10
10
  it { expect(subject.call('84/10/23', format: '%y/%m/%d')).to eq Time.new(1984, 10, 23, 0, 0, 0, 0) }
11
11
 
12
- it { expect(subject.call('84/10/23', format: '%y/%m/%d')).to eq Time.new(1984, 10, 23, 0, 0, 0, 0) }
13
-
14
12
  it { expect(subject.call(Time.new(1984, 10, 23), adjust: :end)).to eq Time.new(1984, 10, 23).end_of_day }
15
13
  it { expect(subject.call(Time.new(1984, 10, 23, 1), adjust: :begin)).to eq Time.new(1984, 10, 23).beginning_of_day }
16
14
 
@@ -29,12 +27,10 @@ RSpec.describe Normalizy::Filters::Date do
29
27
  allow(I18n).to receive(:t).with(:date,
30
28
  scope: ['normalizy.errors.date', 'model_date'],
31
29
  value: '1984-10-00',
32
- default: '%{value} is an invalid date.') { 'date.error' }
30
+ default: '%{value} is an invalid date.').and_return 'date.error'
33
31
  end
34
32
 
35
33
  it 'writes an error on object and does not set the values' do
36
- expected = Time.new(1984, 10, 23, 0, 0, 0, 0)
37
-
38
34
  subject.call '1984-10-00', options
39
35
 
40
36
  expect(object.errors[:date]).to eq ['date.error']
@@ -44,8 +40,6 @@ RSpec.describe Normalizy::Filters::Date do
44
40
 
45
41
  context 'with no I18n present' do
46
42
  it 'writes a default error on object and does not set the values' do
47
- expected = Time.new(1984, 10, 23, 0, 0, 0, 0)
48
-
49
43
  subject.call '1984-10-00', options
50
44
 
51
45
  expect(object.errors[:date]).to eq ['1984-10-00 is an invalid date.']
@@ -103,14 +103,14 @@ RSpec.describe Normalizy::Filters::Money do
103
103
  end
104
104
 
105
105
  describe 'separator' do
106
- context 'provided inline' do
106
+ context 'when provided inline' do
107
107
  it { expect(subject.call('R$ 0,01', separator: ',')).to eq '0.01' }
108
108
  end
109
109
 
110
- context 'provided I18n' do
110
+ context 'when provided I18n' do
111
111
  before do
112
- allow(I18n).to receive(:t).with('currency.format.separator', default: '.') { 'x' }
113
- allow(I18n).to receive(:t).with('currency.format.precision', default: 2) { 2 }
112
+ allow(I18n).to receive(:t).with('currency.format.separator', default: '.').and_return 'x'
113
+ allow(I18n).to receive(:t).with('currency.format.precision', default: 2).and_return 2
114
114
  end
115
115
 
116
116
  it { expect(subject.call('1x2')).to eq '1.20' }
@@ -139,7 +139,7 @@ RSpec.describe Normalizy::Filters::Money do
139
139
  it { expect(subject.call('$ 1030.7' , cast: :to_f)).to eq 1030.7 }
140
140
  it { expect(subject.call('$ 10300.7', cast: :to_f)).to eq 10_300.7 }
141
141
 
142
- context 'and calls cast' do
142
+ context 'with calls cast' do
143
143
  it { expect(subject.call('1.7' , cast: :to_f)).to be 1.7 }
144
144
  it { expect(subject.call('103.7' , cast: :to_f)).to be 103.7 }
145
145
  it { expect(subject.call('1030.7' , cast: :to_f)).to be 1030.7 }
@@ -103,14 +103,14 @@ RSpec.describe Normalizy::Filters::Percent do
103
103
  end
104
104
 
105
105
  describe 'separator' do
106
- context 'provided inline' do
106
+ context 'when provided inline' do
107
107
  it { expect(subject.call('R$ 0,01', separator: ',')).to eq '0.01' }
108
108
  end
109
109
 
110
- context 'provided I18n' do
110
+ context 'when provided I18n' do
111
111
  before do
112
- allow(I18n).to receive(:t).with('percentage.format.separator', default: '.') { 'x' }
113
- allow(I18n).to receive(:t).with('percentage.format.precision', default: 2) { 2 }
112
+ allow(I18n).to receive(:t).with('percentage.format.separator', default: '.').and_return 'x'
113
+ allow(I18n).to receive(:t).with('percentage.format.precision', default: 2).and_return 2
114
114
  end
115
115
 
116
116
  it { expect(subject.call('1x2')).to eq '1.20' }
@@ -139,7 +139,7 @@ RSpec.describe Normalizy::Filters::Percent do
139
139
  it { expect(subject.call('$ 1030.7' , cast: :to_f)).to eq 1030.7 }
140
140
  it { expect(subject.call('$ 10300.7', cast: :to_f)).to eq 10_300.7 }
141
141
 
142
- context 'and calls cast' do
142
+ context 'with calls cast' do
143
143
  it { expect(subject.call('1.7' , cast: :to_f)).to be 1.7 }
144
144
  it { expect(subject.call('103.7' , cast: :to_f)).to be 103.7 }
145
145
  it { expect(subject.call('1030.7' , cast: :to_f)).to be 1030.7 }
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rails_helper'
4
+
5
+ RSpec.describe Normalizy::Filters::Slug do
6
+ describe 'default options' do
7
+ it { expect(subject.call(nil)).to eq nil }
8
+ it { expect(subject.call('')).to eq '' }
9
+
10
+ it { expect(subject.call('The Title')).to eq 'the-title' }
11
+ end
12
+
13
+ describe 'to' do
14
+ it { expect(subject.call(nil , to: :slug)).to eq nil }
15
+ it { expect(subject.call('' , to: :slug)).to eq '' }
16
+ it { expect(subject.call('The Title', to: :slug)).to eq 'the-title' }
17
+
18
+ context 'when is not :to key' do
19
+ it { expect(subject.call(nil , from: :slug)).to eq nil }
20
+ it { expect(subject.call('' , from: :slug)).to eq '' }
21
+ it { expect(subject.call('The Title', from: :slug)).to eq 'the-title' }
22
+ end
23
+ end
24
+ end
data/spec/rails_helper.rb CHANGED
@@ -7,7 +7,3 @@ require 'normalizy'
7
7
  require 'pry-byebug'
8
8
 
9
9
  Dir[File.expand_path('support/**/*.rb', __dir__)].each { |file| require file }
10
-
11
- def offset_in_hours(time_zone)
12
- TZInfo::Timezone.get(time_zone).current_period.offset.utc_total_offset.to_f / 3600.0
13
- end
@@ -63,6 +63,12 @@ ActiveRecord::Schema.define(version: 0) do
63
63
  t.integer :cents_type_and_cast_to_i
64
64
  end
65
65
 
66
+ create_table :model_slugs do |t|
67
+ t.string :permalink
68
+ t.string :slug
69
+ t.string :title
70
+ end
71
+
66
72
  create_table :model_strips do |t|
67
73
  t.string :strip
68
74
  t.string :strip_side_both
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ class ModelSlug < ActiveRecord::Base
4
+ normalizy :permalink, with: :slug
5
+ normalizy :title , with: { slug: { to: :slug } }
6
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: normalizy
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Washington Botelho
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-05-28 00:00:00.000000000 Z
11
+ date: 2017-12-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -31,7 +31,7 @@ dependencies:
31
31
  - !ruby/object:Gem::Version
32
32
  version: '6'
33
33
  - !ruby/object:Gem::Dependency
34
- name: guard-rspec
34
+ name: pry-byebug
35
35
  requirement: !ruby/object:Gem::Requirement
36
36
  requirements:
37
37
  - - ">="
@@ -58,20 +58,6 @@ dependencies:
58
58
  - - ">="
59
59
  - !ruby/object:Gem::Version
60
60
  version: '0'
61
- - !ruby/object:Gem::Dependency
62
- name: rubocop-rspec
63
- requirement: !ruby/object:Gem::Requirement
64
- requirements:
65
- - - ">="
66
- - !ruby/object:Gem::Version
67
- version: '0'
68
- type: :development
69
- prerelease: false
70
- version_requirements: !ruby/object:Gem::Requirement
71
- requirements:
72
- - - ">="
73
- - !ruby/object:Gem::Version
74
- version: '0'
75
61
  - !ruby/object:Gem::Dependency
76
62
  name: rubocop
77
63
  requirement: !ruby/object:Gem::Requirement
@@ -87,7 +73,7 @@ dependencies:
87
73
  - !ruby/object:Gem::Version
88
74
  version: '0'
89
75
  - !ruby/object:Gem::Dependency
90
- name: sqlite3
76
+ name: rubocop-rspec
91
77
  requirement: !ruby/object:Gem::Requirement
92
78
  requirements:
93
79
  - - ">="
@@ -101,7 +87,7 @@ dependencies:
101
87
  - !ruby/object:Gem::Version
102
88
  version: '0'
103
89
  - !ruby/object:Gem::Dependency
104
- name: pry-byebug
90
+ name: sqlite3
105
91
  requirement: !ruby/object:Gem::Requirement
106
92
  requirements:
107
93
  - - ">="
@@ -133,6 +119,7 @@ files:
133
119
  - lib/normalizy/filters/money.rb
134
120
  - lib/normalizy/filters/number.rb
135
121
  - lib/normalizy/filters/percent.rb
122
+ - lib/normalizy/filters/slug.rb
136
123
  - lib/normalizy/filters/strip.rb
137
124
  - lib/normalizy/rspec/matcher.rb
138
125
  - lib/normalizy/version.rb
@@ -145,6 +132,7 @@ files:
145
132
  - spec/normalizy/extensions/filters/money_spec.rb
146
133
  - spec/normalizy/extensions/filters/number_spec.rb
147
134
  - spec/normalizy/extensions/filters/percent_spec.rb
135
+ - spec/normalizy/extensions/filters/slug_spec.rb
148
136
  - spec/normalizy/extensions/filters/strip_spec.rb
149
137
  - spec/normalizy/extensions/model_spec.rb
150
138
  - spec/normalizy/extensions/normalizy_rules_spec.rb
@@ -152,6 +140,7 @@ files:
152
140
  - spec/normalizy/filters/money_spec.rb
153
141
  - spec/normalizy/filters/number_spec.rb
154
142
  - spec/normalizy/filters/percent_spec.rb
143
+ - spec/normalizy/filters/slug_spec.rb
155
144
  - spec/normalizy/filters/strip_spec.rb
156
145
  - spec/normalizy/normalizy/configure_spec.rb
157
146
  - spec/normalizy/rspec/matcher/description_spec.rb
@@ -173,6 +162,7 @@ files:
173
162
  - spec/support/models/model_money.rb
174
163
  - spec/support/models/model_number.rb
175
164
  - spec/support/models/model_percent.rb
165
+ - spec/support/models/model_slug.rb
176
166
  - spec/support/models/model_strip.rb
177
167
  - spec/support/models/rule.rb
178
168
  homepage: https://github.com/wbotelhos/normalizy
@@ -195,47 +185,50 @@ required_rubygems_version: !ruby/object:Gem::Requirement
195
185
  version: '0'
196
186
  requirements: []
197
187
  rubyforge_project:
198
- rubygems_version: 2.6.11
188
+ rubygems_version: 2.7.3
199
189
  signing_key:
200
190
  specification_version: 4
201
191
  summary: Attribute normalizer for ActiveRecord.
202
192
  test_files:
203
- - spec/normalizy/config/add_spec.rb
204
- - spec/normalizy/config/alias_spec.rb
205
- - spec/normalizy/config/default_filters_spec.rb
193
+ - spec/normalizy/filters/date_spec.rb
194
+ - spec/normalizy/filters/number_spec.rb
195
+ - spec/normalizy/filters/money_spec.rb
196
+ - spec/normalizy/filters/percent_spec.rb
197
+ - spec/normalizy/filters/slug_spec.rb
198
+ - spec/normalizy/filters/strip_spec.rb
206
199
  - spec/normalizy/config/initialize_spec.rb
207
200
  - spec/normalizy/config/normalizy_aliases_spec.rb
201
+ - spec/normalizy/config/alias_spec.rb
202
+ - spec/normalizy/config/add_spec.rb
203
+ - spec/normalizy/config/default_filters_spec.rb
208
204
  - spec/normalizy/extensions/filters/date_spec.rb
209
- - spec/normalizy/extensions/filters/money_spec.rb
210
205
  - spec/normalizy/extensions/filters/number_spec.rb
206
+ - spec/normalizy/extensions/filters/money_spec.rb
211
207
  - spec/normalizy/extensions/filters/percent_spec.rb
208
+ - spec/normalizy/extensions/filters/slug_spec.rb
212
209
  - spec/normalizy/extensions/filters/strip_spec.rb
213
- - spec/normalizy/extensions/model_spec.rb
214
210
  - spec/normalizy/extensions/normalizy_rules_spec.rb
215
- - spec/normalizy/filters/date_spec.rb
216
- - spec/normalizy/filters/money_spec.rb
217
- - spec/normalizy/filters/number_spec.rb
218
- - spec/normalizy/filters/percent_spec.rb
219
- - spec/normalizy/filters/strip_spec.rb
211
+ - spec/normalizy/extensions/model_spec.rb
220
212
  - spec/normalizy/normalizy/configure_spec.rb
221
- - spec/normalizy/rspec/matcher/description_spec.rb
213
+ - spec/normalizy/rspec/matcher/matches_spec.rb
222
214
  - spec/normalizy/rspec/matcher/failure_message_spec.rb
223
215
  - spec/normalizy/rspec/matcher/failure_message_when_negated_spec.rb
224
- - spec/normalizy/rspec/matcher/from_spec.rb
225
- - spec/normalizy/rspec/matcher/matches_spec.rb
226
216
  - spec/normalizy/rspec/matcher/to_spec.rb
227
- - spec/rails_helper.rb
228
- - spec/support/common.rb
229
- - spec/support/db/schema.rb
230
- - spec/support/filters/blacklist.rb
217
+ - spec/normalizy/rspec/matcher/from_spec.rb
218
+ - spec/normalizy/rspec/matcher/description_spec.rb
231
219
  - spec/support/filters/block.rb
220
+ - spec/support/filters/blacklist.rb
232
221
  - spec/support/filters/info.rb
233
- - spec/support/models/alias.rb
222
+ - spec/support/models/model_money.rb
234
223
  - spec/support/models/match.rb
235
- - spec/support/models/model.rb
236
224
  - spec/support/models/model_date.rb
237
- - spec/support/models/model_money.rb
238
- - spec/support/models/model_number.rb
225
+ - spec/support/models/model.rb
226
+ - spec/support/models/model_slug.rb
227
+ - spec/support/models/rule.rb
239
228
  - spec/support/models/model_percent.rb
229
+ - spec/support/models/model_number.rb
240
230
  - spec/support/models/model_strip.rb
241
- - spec/support/models/rule.rb
231
+ - spec/support/models/alias.rb
232
+ - spec/support/common.rb
233
+ - spec/support/db/schema.rb
234
+ - spec/rails_helper.rb