normalize_attributes 0.3.0 → 0.3.1

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
2
  SHA256:
3
- metadata.gz: 5a24b07529124afe4d9fda460e8f10e3eabfe9ac824fe56174502d27d19780a3
4
- data.tar.gz: 0aff6b7f98fb50480d3d933d3623ac39bf6e50b772b77baf32a78cb589e85742
3
+ metadata.gz: d02d2f9fd6b4e46578d0aa42b7d88600319f141d0b344ee9099cfc1f55c2ade3
4
+ data.tar.gz: 1f2ad30cb3c68301d103cbf9f3e2f0b98b1907b9610d78c370ee124a36c948cc
5
5
  SHA512:
6
- metadata.gz: 570f5a329e89d4e82241abbf1310e05c17d2650959ad206fa099fa120431dd18fcc8304e50b652329b21a9ca7884713abf0115f5272c207cf929ec3fe39fe863
7
- data.tar.gz: 25593e6b295b4662443f0ad150d3a90fa41b7d5eac10c4fdb63feec5e50246c8c586d72d025a9847184c35bd2cc475a80696a5cca5b5541c83b542c74c7713ff
6
+ metadata.gz: 442645e30d41a53d349c2a8ae4277e2170cc19ed0044bb02176553ab5b5cbfa5b5c3474643b336a58712e94ba8d3531e72998c078322866b43275eb553fea5ba
7
+ data.tar.gz: 7c3910ebb292d98268509bf04bd50880cbb1688d33e2e5f464de3a2379d12917992d93b0692a302ce9db08175aec09b1d3a5a136218138e02a989d63ce3a1c53
data/.gitignore CHANGED
@@ -1,3 +1,4 @@
1
1
  .DS_Store
2
2
  pkg
3
3
  /coverage
4
+ *.lock
@@ -0,0 +1,6 @@
1
+ ---
2
+ inherit_gem:
3
+ rubocop-fnando: .rubocop.yml
4
+
5
+ AllCops:
6
+ TargetRubyVersion: 2.7
@@ -1,19 +1,19 @@
1
+ ---
1
2
  language: ruby
2
3
  sudo: false
3
4
  cache: bundler
4
5
  notifications:
5
6
  email: false
6
7
  rvm:
7
- - 2.5.2
8
+ - 2.7.0
8
9
  before_install:
9
- - gem install bundler
10
+ - gem install bundler
10
11
  before_script:
11
- - curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64
12
- > ./cc-test-reporter
13
- - chmod +x ./cc-test-reporter
14
- - "./cc-test-reporter before-build"
12
+ - curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
13
+ - chmod +x ./cc-test-reporter
14
+ - "./cc-test-reporter before-build"
15
15
  after_script:
16
- - "./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT"
16
+ - "./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT"
17
17
  env:
18
18
  global:
19
19
  secure: U80HNhPVE+IUJaxOPxMJc0CqlQSsl23EOOsqcnuXUjrlcjvfeCnQU58rxFOUCBeKxmno4tatfZXdwBa+FvQ3PcnOXXnesMfCR0UAPdGmaA6ScSMyL+KijC1wGI0N80ccBZRaBA4quR02XTMiJt1saTrBT1cuOCsWs2gjOB4EwoA=
data/Gemfile CHANGED
@@ -1,2 +1,4 @@
1
- source 'https://rubygems.org'
1
+ # frozen_string_literal: true
2
+
3
+ source "https://rubygems.org"
2
4
  gemspec
data/README.md CHANGED
@@ -6,7 +6,9 @@
6
6
  [![Gem](https://img.shields.io/gem/v/normalize_attributes.svg)](https://rubygems.org/gems/normalize_attributes)
7
7
  [![Gem](https://img.shields.io/gem/dt/normalize_attributes.svg)](https://rubygems.org/gems/normalize_attributes)
8
8
 
9
- Sometimes you want to normalize data before saving it to the database like downcasing e-mails, removing spaces and so on. This Rails plugin allows you to do so in a simple way.
9
+ Sometimes you want to normalize data before saving it to the database like
10
+ downcasing e-mails, removing spaces and so on. This Rails plugin allows you to
11
+ do so in a simple way.
10
12
 
11
13
  ## Usage
12
14
 
@@ -22,7 +24,8 @@ class User < ActiveRecord::Base
22
24
  end
23
25
  ```
24
26
 
25
- The example above will normalize your `:email` attribute on the `before_save` callback.
27
+ The example above will normalize your `:email` attribute on the `before_save`
28
+ callback.
26
29
 
27
30
  You can specify multiple attributes
28
31
 
@@ -46,13 +49,15 @@ normalize :name, with: :downcase do |value|
46
49
  end
47
50
  ```
48
51
 
49
- The `squish` method is the default normalizer for strings. All you need to is specify the attribute:
52
+ The `squish` method is the default normalizer for strings. All you need to is
53
+ specify the attribute:
50
54
 
51
55
  ```ruby
52
56
  normalize :content
53
57
  ```
54
58
 
55
- The `compact` method is the default normalizer for arrays (when using `serialize` method):
59
+ The `compact` method is the default normalizer for arrays (when using
60
+ `serialize` method):
56
61
 
57
62
  ```ruby
58
63
  class User < ActiveRecord::Base
@@ -61,14 +66,29 @@ class User < ActiveRecord::Base
61
66
  end
62
67
  ```
63
68
 
64
- The `normalize` method is aliased as `normalize_attributes`, `normalize_attribute`, `normalize_attr`, and `normalize_attrs`.
69
+ The `normalize` method is aliased as `normalize_attributes`,
70
+ `normalize_attribute`, `normalize_attr`, and `normalize_attrs`.
65
71
 
66
- You can normalize the attribute before type casting; this is specially useful for normalizing
67
- dates and numbers.
72
+ You can normalize the attribute before type casting; this is specially useful
73
+ for normalizing dates and numbers.
68
74
 
69
75
  ```ruby
70
76
  class Product
71
- normalize(:price, raw: true) {|v| Money.new(v).to_f}
77
+ normalize(:price, raw: true) {|v| Money.new(v).to_f }
78
+ end
79
+ ```
80
+
81
+ You can also use it with `ActiveModel::Model` classes.
82
+
83
+ ```ruby
84
+ class UserForm
85
+ include ActiveModel::Model
86
+ include ActiveModel::Attributes
87
+ include ActiveModel::Validations::Callbacks
88
+ include NormalizeAttributes::Callbacks
89
+
90
+ attribute :username
91
+ normalize :username
72
92
  end
73
93
  ```
74
94
 
data/Rakefile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "bundler/gem_tasks"
2
4
  require "rake/testtask"
3
5
 
@@ -1,9 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "active_record"
2
4
 
3
5
  ActiveSupport.on_load(:active_record) do
4
6
  require "active_support/core_ext/string/filters"
5
7
  require "normalize_attributes/version"
6
- require "normalize_attributes/active_record"
8
+ require "normalize_attributes/callbacks"
7
9
 
8
- ActiveRecord::Base.send :include, NormalizeAttributes::ActiveRecord
10
+ ActiveRecord::Base.include NormalizeAttributes::Callbacks
9
11
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module NormalizeAttributes
2
4
  def self.retrieve_value(record, attribute, raw)
3
5
  before_type_cast_method = "#{attribute}_before_type_cast"
@@ -37,13 +39,13 @@ module NormalizeAttributes
37
39
  end
38
40
 
39
41
  begin
40
- record.write_attribute(attribute, value)
42
+ record.send(:write_attribute, attribute, value)
41
43
  rescue ActiveModel::MissingAttributeError
42
44
  record.public_send("#{attribute}=", value)
43
45
  end
44
46
  end
45
47
 
46
- module ActiveRecord
48
+ module Callbacks
47
49
  def self.included(base)
48
50
  base.instance_eval do
49
51
  extend ClassMethods
@@ -66,21 +68,22 @@ module NormalizeAttributes
66
68
 
67
69
  normalize_options.tap do |o|
68
70
  o[attr_name] ||= []
69
- o[attr_name] << [[block, options[:with]].flatten.compact, options.except(:with)]
71
+ o[attr_name] << [
72
+ [block, options[:with]].flatten.compact,
73
+ options.except(:with)
74
+ ]
70
75
  end
71
76
  end
72
77
  end
73
78
 
74
- alias_method :normalize_attributes, :normalize
75
- alias_method :normalize_attribute, :normalize
76
- alias_method :normalize_attr, :normalize
77
- alias_method :normalize_attrs, :normalize
79
+ alias normalize_attributes normalize
80
+ alias normalize_attribute normalize
81
+ alias normalize_attr normalize
82
+ alias normalize_attrs normalize
78
83
  end
79
84
 
80
85
  module InstanceMethods
81
- private
82
-
83
- def normalize_attributes
86
+ private def normalize_attributes
84
87
  return unless self.class.normalize_options
85
88
 
86
89
  self.class.normalize_options.each do |attribute, items|
@@ -1,8 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module NormalizeAttributes
2
4
  module Version
3
5
  MAJOR = 0
4
6
  MINOR = 3
5
- PATCH = 0
7
+ PATCH = 1
6
8
  STRING = "#{MAJOR}.#{MINOR}.#{PATCH}"
7
9
  end
8
10
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "./lib/normalize_attributes/version"
2
4
 
3
5
  Gem::Specification.new do |s|
@@ -13,14 +15,16 @@ Gem::Specification.new do |s|
13
15
 
14
16
  s.files = `git ls-files`.split("\n")
15
17
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
16
- s.executables = `git ls-files -- bin/*`.split("\n").map {|f| File.basename(f) }
18
+ s.executables = `git ls-files -- bin/*`
19
+ .split("\n")
20
+ .map {|f| File.basename(f) }
17
21
  s.require_paths = ["lib"]
18
22
 
19
23
  s.add_dependency "activerecord"
24
+ s.add_development_dependency "actionpack"
20
25
  s.add_development_dependency "bundler"
21
- s.add_development_dependency "rake"
22
26
  s.add_development_dependency "minitest-utils"
23
- s.add_development_dependency "sqlite3"
24
- s.add_development_dependency "actionpack"
27
+ s.add_development_dependency "rake"
25
28
  s.add_development_dependency "simplecov"
29
+ s.add_development_dependency "sqlite3"
26
30
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "test_helper"
2
4
 
3
5
  class NormalizeAttributesTest < Minitest::Test
@@ -51,7 +53,7 @@ class NormalizeAttributesTest < Minitest::Test
51
53
  end
52
54
 
53
55
  test "combine both method names and procs as normalization methods" do
54
- User.normalize(:email, with: :downcase) {|v| v.reverse }
56
+ User.normalize(:email, with: :downcase, &:reverse)
55
57
  user = User.create(email: "JOHN@DOE.COM")
56
58
 
57
59
  assert_equal "moc.eod@nhoj", user.email
@@ -74,7 +76,10 @@ class NormalizeAttributesTest < Minitest::Test
74
76
 
75
77
  test "apply default filter on strings" do
76
78
  User.normalize :email
77
- user = User.create(email: " \n\t john@doe.com \t\t\n\r\n", username: "john")
79
+ user = User.create(
80
+ email: " \n\t john@doe.com \t\t\n\r\n",
81
+ username: "john"
82
+ )
78
83
 
79
84
  assert_equal "john@doe.com", user.email
80
85
  end
@@ -109,4 +114,21 @@ class NormalizeAttributesTest < Minitest::Test
109
114
 
110
115
  assert_equal "johnny d", user.nickname
111
116
  end
117
+
118
+ test "normalize ActiveModel::Model objects" do
119
+ model = Class.new do
120
+ include ActiveModel::Model
121
+ include ActiveModel::Attributes
122
+ include ActiveModel::Validations::Callbacks
123
+ include NormalizeAttributes::Callbacks
124
+
125
+ attribute :username
126
+ normalize :username
127
+ end
128
+
129
+ instance = model.new(username: " john ")
130
+ instance.valid?
131
+
132
+ assert_equal "john", instance.username
133
+ end
112
134
  end
@@ -1,8 +1,10 @@
1
- ActiveRecord::Schema.define(:version => 0) do
1
+ # frozen_string_literal: true
2
+
3
+ ActiveRecord::Schema.define(version: 0) do
2
4
  create_table :users do |t|
3
5
  t.string :email, :username
4
6
  t.text :preferences
5
- t.integer :age, :null => false, :default => 0
7
+ t.integer :age, null: false, default: 0
6
8
  end
7
9
 
8
10
  create_table :tokens do |t|
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Token < ActiveRecord::Base
2
4
  belongs_to :user
3
5
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class User < ActiveRecord::Base
2
4
  has_many :tokens
3
5
  serialize :preferences
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "simplecov"
2
4
  SimpleCov.start
3
5
 
@@ -13,4 +15,4 @@ ActiveRecord::Base.establish_connection adapter: "sqlite3", database: ":memory:"
13
15
  # Load database schema
14
16
  load "schema.rb"
15
17
 
16
- Dir[File.dirname(__FILE__) + "/support/**/*.rb"].each {|f| require f }
18
+ Dir[File.dirname(__FILE__) + "/support/**/*.rb"].sort.each {|f| require f }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: normalize_attributes
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nando Vieira
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-12-27 00:00:00.000000000 Z
11
+ date: 2020-02-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -25,7 +25,7 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: bundler
28
+ name: actionpack
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
@@ -39,7 +39,7 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: rake
42
+ name: bundler
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - ">="
@@ -67,7 +67,7 @@ dependencies:
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
- name: sqlite3
70
+ name: rake
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - ">="
@@ -81,7 +81,7 @@ dependencies:
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
83
  - !ruby/object:Gem::Dependency
84
- name: actionpack
84
+ name: simplecov
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - ">="
@@ -95,7 +95,7 @@ dependencies:
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
97
  - !ruby/object:Gem::Dependency
98
- name: simplecov
98
+ name: sqlite3
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - ">="
@@ -116,13 +116,13 @@ extensions: []
116
116
  extra_rdoc_files: []
117
117
  files:
118
118
  - ".gitignore"
119
+ - ".rubocop.yml"
119
120
  - ".travis.yml"
120
121
  - Gemfile
121
- - Gemfile.lock
122
122
  - README.md
123
123
  - Rakefile
124
124
  - lib/normalize_attributes.rb
125
- - lib/normalize_attributes/active_record.rb
125
+ - lib/normalize_attributes/callbacks.rb
126
126
  - lib/normalize_attributes/version.rb
127
127
  - normalize_attributes.gemspec
128
128
  - test/normalize_attributes_test.rb
@@ -149,7 +149,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
149
149
  - !ruby/object:Gem::Version
150
150
  version: '0'
151
151
  requirements: []
152
- rubygems_version: 3.0.1
152
+ rubygems_version: 3.1.2
153
153
  signing_key:
154
154
  specification_version: 4
155
155
  summary: Normalize ActiveRecord attributes
@@ -1,84 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- normalize_attributes (0.3.0)
5
- activerecord
6
-
7
- GEM
8
- remote: https://rubygems.org/
9
- specs:
10
- actionpack (5.2.2)
11
- actionview (= 5.2.2)
12
- activesupport (= 5.2.2)
13
- rack (~> 2.0)
14
- rack-test (>= 0.6.3)
15
- rails-dom-testing (~> 2.0)
16
- rails-html-sanitizer (~> 1.0, >= 1.0.2)
17
- actionview (5.2.2)
18
- activesupport (= 5.2.2)
19
- builder (~> 3.1)
20
- erubi (~> 1.4)
21
- rails-dom-testing (~> 2.0)
22
- rails-html-sanitizer (~> 1.0, >= 1.0.3)
23
- activemodel (5.2.2)
24
- activesupport (= 5.2.2)
25
- activerecord (5.2.2)
26
- activemodel (= 5.2.2)
27
- activesupport (= 5.2.2)
28
- arel (>= 9.0)
29
- activesupport (5.2.2)
30
- concurrent-ruby (~> 1.0, >= 1.0.2)
31
- i18n (>= 0.7, < 2)
32
- minitest (~> 5.1)
33
- tzinfo (~> 1.1)
34
- arel (9.0.0)
35
- builder (3.2.3)
36
- concurrent-ruby (1.1.4)
37
- crass (1.0.4)
38
- docile (1.1.5)
39
- erubi (1.8.0)
40
- i18n (1.3.0)
41
- concurrent-ruby (~> 1.0)
42
- json (2.1.0)
43
- loofah (2.2.3)
44
- crass (~> 1.0.2)
45
- nokogiri (>= 1.5.9)
46
- mini_portile2 (2.4.0)
47
- minitest (5.11.3)
48
- minitest-utils (0.4.4)
49
- minitest
50
- nokogiri (1.9.1)
51
- mini_portile2 (~> 2.4.0)
52
- rack (2.0.6)
53
- rack-test (1.1.0)
54
- rack (>= 1.0, < 3)
55
- rails-dom-testing (2.0.3)
56
- activesupport (>= 4.2.0)
57
- nokogiri (>= 1.6)
58
- rails-html-sanitizer (1.0.4)
59
- loofah (~> 2.2, >= 2.2.2)
60
- rake (12.3.2)
61
- simplecov (0.13.0)
62
- docile (~> 1.1.0)
63
- json (>= 1.8, < 3)
64
- simplecov-html (~> 0.10.0)
65
- simplecov-html (0.10.2)
66
- sqlite3 (1.3.13)
67
- thread_safe (0.3.6)
68
- tzinfo (1.2.5)
69
- thread_safe (~> 0.1)
70
-
71
- PLATFORMS
72
- ruby
73
-
74
- DEPENDENCIES
75
- actionpack
76
- bundler
77
- minitest-utils
78
- normalize_attributes!
79
- rake
80
- simplecov
81
- sqlite3
82
-
83
- BUNDLED WITH
84
- 1.17.3