normalize_attributes 0.2.0 → 0.3.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: 72af3bc8bb1e9bb0dc8fe7372af893e57d897dfa
4
- data.tar.gz: 6dcfeb6c02fefddf3de4cc085a56c6b67659e078
2
+ SHA256:
3
+ metadata.gz: 5a24b07529124afe4d9fda460e8f10e3eabfe9ac824fe56174502d27d19780a3
4
+ data.tar.gz: 0aff6b7f98fb50480d3d933d3623ac39bf6e50b772b77baf32a78cb589e85742
5
5
  SHA512:
6
- metadata.gz: e2bcdfedf789bbff11d21b70edff37315c156365082e6b2b42a596dee4d48a8912d6703f6081842747ea0bf9896bbe235eef2f31212058f1394376063124905a
7
- data.tar.gz: 2682671873ad1ac20eab0360ce0440a7a44157dbdd9615e3c7dfbe2f3859732fcbe9a15b6c90f1cb274681b1e30185847aa4292bbfc130f2ddb901e3f09e1b29
6
+ metadata.gz: 570f5a329e89d4e82241abbf1310e05c17d2650959ad206fa099fa120431dd18fcc8304e50b652329b21a9ca7884713abf0115f5272c207cf929ec3fe39fe863
7
+ data.tar.gz: 25593e6b295b4662443f0ad150d3a90fa41b7d5eac10c4fdb63feec5e50246c8c586d72d025a9847184c35bd2cc475a80696a5cca5b5541c83b542c74c7713ff
data/.gitignore CHANGED
@@ -1,3 +1,3 @@
1
1
  .DS_Store
2
2
  pkg
3
- *.lock
3
+ /coverage
@@ -1,12 +1,19 @@
1
1
  language: ruby
2
2
  sudo: false
3
- script: bundle exec rspec
4
3
  cache: bundler
4
+ notifications:
5
+ email: false
5
6
  rvm:
6
- - '2.2'
7
- - '2.1'
8
- - '2.0'
9
- addons:
10
- code_climate:
11
- repo_token:
12
- secure: "q+eMK+hnUjamNYDaNY7MMZSnpXeawGOZhbyDK3Fz3fQRUC9TvbuIaUh4Ue9IvyGgrabjD7TGZPN9fJueCAOBGQZ2GXKexdvhuLnl3pftWIIqK/Ea6ZhSanAIqJnC+f4VHsna7IV1LEq6ffatLTlsMic8lyokaMJbEIGhc1Jtz7w="
7
+ - 2.5.2
8
+ before_install:
9
+ - gem install bundler
10
+ 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"
15
+ after_script:
16
+ - "./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT"
17
+ env:
18
+ global:
19
+ secure: U80HNhPVE+IUJaxOPxMJc0CqlQSsl23EOOsqcnuXUjrlcjvfeCnQU58rxFOUCBeKxmno4tatfZXdwBa+FvQ3PcnOXXnesMfCR0UAPdGmaA6ScSMyL+KijC1wGI0N80ccBZRaBA4quR02XTMiJt1saTrBT1cuOCsWs2gjOB4EwoA=
@@ -0,0 +1,84 @@
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
data/README.md CHANGED
@@ -1,10 +1,12 @@
1
1
  # Normalize Attributes
2
2
 
3
- [![Build Status](https://travis-ci.org/fnando/normalize_attributes.svg)](https://travis-ci.org/fnando/normalize_attributes)
3
+ [![Travis-CI](https://travis-ci.org/fnando/normalize_attributes.svg)](https://travis-ci.org/fnando/normalize_attributes)
4
4
  [![Code Climate](https://codeclimate.com/github/fnando/normalize_attributes/badges/gpa.svg)](https://codeclimate.com/github/fnando/normalize_attributes)
5
- [![Test Coverage](https://codeclimate.com/github/fnando/normalize_attributes/badges/coverage.svg)](https://codeclimate.com/github/fnando/normalize_attributes)
5
+ [![Test Coverage](https://codeclimate.com/github/fnando/normalize_attributes/badges/coverage.svg)](https://codeclimate.com/github/fnando/normalize_attributes/coverage)
6
+ [![Gem](https://img.shields.io/gem/v/normalize_attributes.svg)](https://rubygems.org/gems/normalize_attributes)
7
+ [![Gem](https://img.shields.io/gem/dt/normalize_attributes.svg)](https://rubygems.org/gems/normalize_attributes)
6
8
 
7
- Sometimes you want to normalize data before saving it to the database like down casing 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 downcasing e-mails, removing spaces and so on. This Rails plugin allows you to do so in a simple way.
8
10
 
9
11
  ## Usage
10
12
 
@@ -16,7 +18,7 @@ Then on your model:
16
18
 
17
19
  ```ruby
18
20
  class User < ActiveRecord::Base
19
- normalize :email, :with => :downcase
21
+ normalize :email, with: :downcase
20
22
  end
21
23
  ```
22
24
 
@@ -25,7 +27,7 @@ The example above will normalize your `:email` attribute on the `before_save` ca
25
27
  You can specify multiple attributes
26
28
 
27
29
  ```ruby
28
- normalize :email, :username, :with => :downcase
30
+ normalize :email, :username, with: :downcase
29
31
  ```
30
32
 
31
33
  You can use a block
@@ -39,7 +41,7 @@ end
39
41
  You can combine both
40
42
 
41
43
  ```ruby
42
- normalize :name, :with => :downcase do |value|
44
+ normalize :name, with: :downcase do |value|
43
45
  value.squish
44
46
  end
45
47
  ```
@@ -66,13 +68,13 @@ dates and numbers.
66
68
 
67
69
  ```ruby
68
70
  class Product
69
- normalize(:price, :raw => true) {|v| Money.new(v).to_f}
71
+ normalize(:price, raw: true) {|v| Money.new(v).to_f}
70
72
  end
71
73
  ```
72
74
 
73
75
  ## Maintainer
74
76
 
75
- * Nando Vieira (http://nandovieira.com.br)
77
+ * Nando Vieira (http://nandovieira.com)
76
78
 
77
79
  ## License:
78
80
 
data/Rakefile CHANGED
@@ -1,5 +1,10 @@
1
- require "bundler"
2
- Bundler::GemHelper.install_tasks
1
+ require "bundler/gem_tasks"
2
+ require "rake/testtask"
3
3
 
4
- require "rspec/core/rake_task"
5
- RSpec::Core::RakeTask.new
4
+ Rake::TestTask.new(:test) do |t|
5
+ t.libs << "test"
6
+ t.test_files = FileList["test/**/*_test.rb"]
7
+ t.warning = false
8
+ end
9
+
10
+ task default: :test
@@ -1,6 +1,9 @@
1
1
  require "active_record"
2
- require "active_support/core_ext/string/filters"
3
- require "normalize_attributes/version"
4
- require "normalize_attributes/active_record"
5
2
 
6
- ActiveRecord::Base.send :include, NormalizeAttributes::ActiveRecord
3
+ ActiveSupport.on_load(:active_record) do
4
+ require "active_support/core_ext/string/filters"
5
+ require "normalize_attributes/version"
6
+ require "normalize_attributes/active_record"
7
+
8
+ ActiveRecord::Base.send :include, NormalizeAttributes::ActiveRecord
9
+ end
@@ -1,4 +1,48 @@
1
1
  module NormalizeAttributes
2
+ def self.retrieve_value(record, attribute, raw)
3
+ before_type_cast_method = "#{attribute}_before_type_cast"
4
+
5
+ if raw && record.respond_to?(before_type_cast_method)
6
+ record.send(before_type_cast_method)
7
+ else
8
+ record.send(attribute)
9
+ end
10
+ end
11
+
12
+ def self.retrieve_normalizers(normalizers, value)
13
+ return normalizers unless normalizers.empty?
14
+
15
+ case value
16
+ when String
17
+ [:squish]
18
+ when Array
19
+ [:compact]
20
+ else
21
+ []
22
+ end
23
+ end
24
+
25
+ def self.apply_normalizers(record, attribute, normalizers, options)
26
+ value = NormalizeAttributes.retrieve_value(record, attribute, options[:raw])
27
+ normalizers = NormalizeAttributes.retrieve_normalizers(normalizers, value)
28
+
29
+ normalizers.each do |normalizer|
30
+ if normalizer.respond_to?(:call)
31
+ value = normalizer.call(value)
32
+ elsif value.respond_to?(normalizer)
33
+ value = value.send(normalizer)
34
+ elsif record.respond_to?(normalizer)
35
+ value = record.send(normalizer, value)
36
+ end
37
+ end
38
+
39
+ begin
40
+ record.write_attribute(attribute, value)
41
+ rescue ActiveModel::MissingAttributeError
42
+ record.public_send("#{attribute}=", value)
43
+ end
44
+ end
45
+
2
46
  module ActiveRecord
3
47
  def self.included(base)
4
48
  base.instance_eval do
@@ -35,48 +79,16 @@ module NormalizeAttributes
35
79
 
36
80
  module InstanceMethods
37
81
  private
82
+
38
83
  def normalize_attributes
39
84
  return unless self.class.normalize_options
40
85
 
41
- self.class.normalize_options.each do |name, items|
86
+ self.class.normalize_options.each do |attribute, items|
42
87
  items.each do |item|
43
- apply_normalizers name, *item.dup
88
+ NormalizeAttributes.apply_normalizers(self, attribute, *item.dup)
44
89
  end
45
90
  end
46
91
  end
47
-
48
- def apply_normalizers(name, normalizers, options)
49
- if options[:raw] && respond_to?("#{name}_before_type_cast")
50
- value = send("#{name}_before_type_cast")
51
- else
52
- value = send(name)
53
- end
54
-
55
- if normalizers.empty?
56
- case value
57
- when String
58
- normalizers << :squish
59
- when Array
60
- normalizers << :compact
61
- end
62
- end
63
-
64
- normalizers.each do |normalizer|
65
- if normalizer.respond_to?(:call)
66
- value = normalizer.call(value)
67
- elsif value.respond_to?(normalizer)
68
- value = value.send(normalizer)
69
- elsif respond_to?(normalizer)
70
- value = send(normalizer, value)
71
- end
72
- end
73
-
74
- begin
75
- write_attribute name, value
76
- rescue ActiveModel::MissingAttributeError
77
- send :"#{name}=", value
78
- end
79
- end
80
92
  end
81
93
  end
82
94
  end
@@ -1,7 +1,7 @@
1
1
  module NormalizeAttributes
2
2
  module Version
3
3
  MAJOR = 0
4
- MINOR = 2
4
+ MINOR = 3
5
5
  PATCH = 0
6
6
  STRING = "#{MAJOR}.#{MINOR}.#{PATCH}"
7
7
  end
@@ -8,16 +8,19 @@ Gem::Specification.new do |s|
8
8
  s.email = ["fnando.vieira@gmail.com"]
9
9
  s.homepage = "http://rubygems.org/gems/normalize_attributes"
10
10
  s.summary = "Normalize ActiveRecord attributes"
11
- s.description = "Normalize ActiveRecord attributes"
11
+ s.description = s.summary
12
+ s.license = "MIT"
12
13
 
13
14
  s.files = `git ls-files`.split("\n")
14
15
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
15
- s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
16
+ s.executables = `git ls-files -- bin/*`.split("\n").map {|f| File.basename(f) }
16
17
  s.require_paths = ["lib"]
17
18
 
18
19
  s.add_dependency "activerecord"
19
- s.add_development_dependency "rspec"
20
- s.add_development_dependency "sqlite3-ruby"
20
+ s.add_development_dependency "bundler"
21
+ s.add_development_dependency "rake"
22
+ s.add_development_dependency "minitest-utils"
23
+ s.add_development_dependency "sqlite3"
21
24
  s.add_development_dependency "actionpack"
22
- s.add_development_dependency "codeclimate-test-reporter"
25
+ s.add_development_dependency "simplecov"
23
26
  end
@@ -0,0 +1,112 @@
1
+ require "test_helper"
2
+
3
+ class NormalizeAttributesTest < Minitest::Test
4
+ setup do
5
+ User.normalize_options = {}
6
+ end
7
+
8
+ test "respond to aliases" do
9
+ assert User.respond_to?(:normalize)
10
+ assert User.respond_to?(:normalize_attr)
11
+ assert User.respond_to?(:normalize_attrs)
12
+ assert User.respond_to?(:normalize_attribute)
13
+ assert User.respond_to?(:normalize_attributes)
14
+ end
15
+
16
+ test "apply single normalization method" do
17
+ User.normalize :email, with: :downcase
18
+ user = User.create(email: "JOHN@DOE.COM")
19
+
20
+ assert_equal "john@doe.com", user.email
21
+ end
22
+
23
+ test "apply multiple normalization methods" do
24
+ User.normalize :email, with: %i[downcase reverse]
25
+ user = User.create(email: "JOHN@DOE.COM")
26
+
27
+ assert_equal "moc.eod@nhoj", user.email
28
+ end
29
+
30
+ test "apply proc" do
31
+ User.normalize(:email, &:downcase)
32
+ user = User.create(email: "JOHN@DOE.COM")
33
+
34
+ assert_equal "john@doe.com", user.email
35
+ end
36
+
37
+ test "apply instance method" do
38
+ User.normalize(:username, with: :normalize_username)
39
+ user = User.create(username: "JOHNDOE")
40
+
41
+ assert_equal "johndoe", user.username
42
+ end
43
+
44
+ test "use value before type casting" do
45
+ User.normalize(:age, raw: true) do |v|
46
+ v.to_f * 10
47
+ end
48
+
49
+ user = User.create(age: "1.2")
50
+ assert_equal 12, user.age
51
+ end
52
+
53
+ test "combine both method names and procs as normalization methods" do
54
+ User.normalize(:email, with: :downcase) {|v| v.reverse }
55
+ user = User.create(email: "JOHN@DOE.COM")
56
+
57
+ assert_equal "moc.eod@nhoj", user.email
58
+ end
59
+
60
+ test "normalize multiple attributes" do
61
+ User.normalize :email, :username, with: :downcase
62
+ user = User.create(email: "JOHN@DOE.COM", username: "JOHN")
63
+
64
+ assert_equal "john@doe.com", user.email
65
+ assert_equal "john", user.username
66
+ end
67
+
68
+ test "don't apply on associations" do
69
+ User.normalize :email, with: :downcase
70
+ user = User.create(email: "JOHN@DOE.COM", username: "JOHN")
71
+
72
+ user.tokens.create!
73
+ end
74
+
75
+ test "apply default filter on strings" do
76
+ User.normalize :email
77
+ user = User.create(email: " \n\t john@doe.com \t\t\n\r\n", username: "john")
78
+
79
+ assert_equal "john@doe.com", user.email
80
+ end
81
+
82
+ test "apply default filter on arrays" do
83
+ User.normalize :preferences
84
+ user = User.create(preferences: [nil, :games, :music])
85
+
86
+ assert_equal %i[games music], user.preferences
87
+ end
88
+
89
+ test "don't apply default filter on unknown objects" do
90
+ User.normalize :username
91
+ user = User.create(username: 100)
92
+
93
+ assert_equal "100", user.username
94
+ end
95
+
96
+ test "don't apply filter when object do not respond to normalizer" do
97
+ User.normalize :username, with: :missing
98
+
99
+ user = User.create(username: nil)
100
+ user.save
101
+ end
102
+
103
+ test "normalize attributes that are not backed by database columns" do
104
+ User.normalize :nickname, with: :downcase
105
+
106
+ user = User.new(username: "john@doe.com")
107
+ user.nickname = "JOHNNY D"
108
+ user.save
109
+
110
+ assert_equal "johnny d", user.nickname
111
+ end
112
+ end
File without changes
File without changes
File without changes
@@ -0,0 +1,16 @@
1
+ require "simplecov"
2
+ SimpleCov.start
3
+
4
+ require "bundler/setup"
5
+ require "normalize_attributes"
6
+
7
+ require "minitest/utils"
8
+ require "minitest/autorun"
9
+
10
+ ActiveRecord::Base.belongs_to_required_by_default = true
11
+ ActiveRecord::Base.establish_connection adapter: "sqlite3", database: ":memory:"
12
+
13
+ # Load database schema
14
+ load "schema.rb"
15
+
16
+ Dir[File.dirname(__FILE__) + "/support/**/*.rb"].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.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nando Vieira
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-01 00:00:00.000000000 Z
11
+ date: 2018-12-27 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: rspec
28
+ name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
@@ -39,7 +39,35 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: sqlite3-ruby
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: minitest-utils
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: sqlite3
43
71
  requirement: !ruby/object:Gem::Requirement
44
72
  requirements:
45
73
  - - ">="
@@ -67,7 +95,7 @@ dependencies:
67
95
  - !ruby/object:Gem::Version
68
96
  version: '0'
69
97
  - !ruby/object:Gem::Dependency
70
- name: codeclimate-test-reporter
98
+ name: simplecov
71
99
  requirement: !ruby/object:Gem::Requirement
72
100
  requirements:
73
101
  - - ">="
@@ -88,22 +116,23 @@ extensions: []
88
116
  extra_rdoc_files: []
89
117
  files:
90
118
  - ".gitignore"
91
- - ".rspec"
92
119
  - ".travis.yml"
93
120
  - Gemfile
121
+ - Gemfile.lock
94
122
  - README.md
95
123
  - Rakefile
96
124
  - lib/normalize_attributes.rb
97
125
  - lib/normalize_attributes/active_record.rb
98
126
  - lib/normalize_attributes/version.rb
99
127
  - normalize_attributes.gemspec
100
- - spec/normalize_attributes_spec.rb
101
- - spec/schema.rb
102
- - spec/spec_helper.rb
103
- - spec/support/token.rb
104
- - spec/support/user.rb
128
+ - test/normalize_attributes_test.rb
129
+ - test/schema.rb
130
+ - test/support/token.rb
131
+ - test/support/user.rb
132
+ - test/test_helper.rb
105
133
  homepage: http://rubygems.org/gems/normalize_attributes
106
- licenses: []
134
+ licenses:
135
+ - MIT
107
136
  metadata: {}
108
137
  post_install_message:
109
138
  rdoc_options: []
@@ -120,14 +149,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
120
149
  - !ruby/object:Gem::Version
121
150
  version: '0'
122
151
  requirements: []
123
- rubyforge_project:
124
- rubygems_version: 2.4.6
152
+ rubygems_version: 3.0.1
125
153
  signing_key:
126
154
  specification_version: 4
127
155
  summary: Normalize ActiveRecord attributes
128
156
  test_files:
129
- - spec/normalize_attributes_spec.rb
130
- - spec/schema.rb
131
- - spec/spec_helper.rb
132
- - spec/support/token.rb
133
- - spec/support/user.rb
157
+ - test/normalize_attributes_test.rb
158
+ - test/schema.rb
159
+ - test/support/token.rb
160
+ - test/support/user.rb
161
+ - test/test_helper.rb
data/.rspec DELETED
@@ -1 +0,0 @@
1
- --color
@@ -1,121 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe "Normalize Attributes" do
4
- before do
5
- User.normalize_options = {}
6
- end
7
-
8
- it "should respond to aliases" do
9
- expect(User).to respond_to(:normalize)
10
- expect(User).to respond_to(:normalize_attr)
11
- expect(User).to respond_to(:normalize_attrs)
12
- expect(User).to respond_to(:normalize_attribute)
13
- expect(User).to respond_to(:normalize_attributes)
14
- end
15
-
16
- it "should apply single normalization method" do
17
- User.normalize :email, :with => :downcase
18
- user = User.create(:email => "JOHN@DOE.COM")
19
-
20
- expect(user.email).to eq("john@doe.com")
21
- end
22
-
23
- it "should apply multiple normalization methods" do
24
- User.normalize :email, :with => [:downcase, :reverse]
25
- user = User.create(:email => "JOHN@DOE.COM")
26
-
27
- expect(user.email).to eq("moc.eod@nhoj")
28
- end
29
-
30
- it "should apply proc" do
31
- User.normalize(:email) {|v| v.downcase }
32
- user = User.create(:email => "JOHN@DOE.COM")
33
-
34
- expect(user.email).to eq("john@doe.com")
35
- end
36
-
37
- it "should apply instance method" do
38
- User.normalize(:username, :with => :normalize_username)
39
- user = User.create(:username => "JOHNDOE")
40
-
41
- expect(user.username).to eq("johndoe")
42
- end
43
-
44
- it "should use value before type casting" do
45
- User.normalize(:age, :raw => true) do |v|
46
- expect(v).to eq("1.2")
47
- v.to_f * 10
48
- end
49
-
50
- user = User.create(:age => "1.2")
51
- expect(user.age).to eq(12)
52
- end
53
-
54
- it "should apply normalizers to accessor" do
55
- # User.normalize()
56
- end
57
-
58
- it "should combine both method names and procs as normalization methods" do
59
- User.normalize(:email, :with => :downcase) {|v| v.reverse }
60
- user = User.create(:email => "JOHN@DOE.COM")
61
-
62
- expect(user.email).to eq("moc.eod@nhoj")
63
- end
64
-
65
- it "should normalize multiple attributes" do
66
- User.normalize :email, :username, :with => :downcase
67
- user = User.create(:email => "JOHN@DOE.COM", :username => "JOHN")
68
-
69
- expect(user.email).to eq("john@doe.com")
70
- expect(user.username).to eq("john")
71
- end
72
-
73
- it "should not apply on associations" do
74
- User.normalize :email, :with => :downcase
75
- user = User.create(:email => "JOHN@DOE.COM", :username => "JOHN")
76
-
77
- expect {
78
- user.tokens.create!
79
- }.to_not raise_error
80
- end
81
-
82
- it "should apply default filter on strings" do
83
- User.normalize :email
84
- user = User.create(:email => " \n\t john@doe.com \t\t\n\r\n", :username => "john")
85
-
86
- expect(user.email).to eq("john@doe.com")
87
- end
88
-
89
- it "should apply default filter on arrays" do
90
- User.normalize :preferences
91
- user = User.create(:preferences => [nil, :games, :music])
92
- expect(user.preferences).to eq([:games, :music])
93
- end
94
-
95
- it "should not apply default filter on unknown objects" do
96
- User.normalize :username
97
-
98
- expect {
99
- user = User.create(:username => 100)
100
- expect(user.username).to eq("100")
101
- }.not_to raise_error
102
- end
103
-
104
- it "should not apply filter when object do not respond to normalizer" do
105
- User.normalize :username, :with => :missing
106
-
107
- expect {
108
- user = User.create(:username => nil)
109
- user.save
110
- }.to_not raise_error
111
- end
112
-
113
- it "should normalize attributes that are not backed by database columns" do
114
- User.normalize :nickname, :with => :downcase
115
-
116
- user = User.new(:username => "john@doe.com")
117
- user.nickname = "JOHNNY D"
118
- expect { user.save }.to_not raise_error
119
- expect(user.nickname).to eq("johnny d")
120
- end
121
- end
@@ -1,12 +0,0 @@
1
- require "codeclimate-test-reporter"
2
- CodeClimate::TestReporter.start
3
-
4
- require "rspec"
5
- require "normalize_attributes"
6
-
7
- ActiveRecord::Base.establish_connection :adapter => "sqlite3", :database => ":memory:"
8
-
9
- # Load database schema
10
- load "schema.rb"
11
-
12
- Dir[File.dirname(__FILE__) + "/support/**/*.rb"].each {|f| require f}