From 27a308f58d719721cf3cdbaa43570fd63f5a8207 Mon Sep 17 00:00:00 2001 From: "Fernando E. Silva Jacquier" Date: Tue, 25 May 2021 11:17:14 -0300 Subject: [PATCH 1/2] Upgrade ruby & gem dependencies versions --- .ruby-version | 2 +- .travis.yml | 6 ++--- Gemfile.lock | 59 ++++++++++++++++++++++----------------------- nullifyable.gemspec | 12 ++++----- 4 files changed, 39 insertions(+), 40 deletions(-) diff --git a/.ruby-version b/.ruby-version index aedc15b..37c2961 100644 --- a/.ruby-version +++ b/.ruby-version @@ -1 +1 @@ -2.5.3 +2.7.2 diff --git a/.travis.yml b/.travis.yml index 2205ce6..396fa02 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,7 @@ sudo: false language: ruby rvm: - - 2.5.3 -before_install: gem install bundler -v 1.16.1 + - 2.7.2 +before_install: gem install bundler -v 2.2.17 script: - - bundle exec rake \ No newline at end of file + - bundle exec rake diff --git a/Gemfile.lock b/Gemfile.lock index 56d2656..59f94f6 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -2,51 +2,50 @@ PATH remote: . specs: nullifyable (0.1.0) - activerecord (>= 4.0) + activerecord (>= 6.1) GEM remote: https://rubygems.org/ specs: - activemodel (5.2.2) - activesupport (= 5.2.2) - activerecord (5.2.2) - activemodel (= 5.2.2) - activesupport (= 5.2.2) - arel (>= 9.0) - activesupport (5.2.2) + activemodel (6.1.3.2) + activesupport (= 6.1.3.2) + activerecord (6.1.3.2) + activemodel (= 6.1.3.2) + activesupport (= 6.1.3.2) + activesupport (6.1.3.2) concurrent-ruby (~> 1.0, >= 1.0.2) - i18n (>= 0.7, < 2) - minitest (~> 5.1) - tzinfo (~> 1.1) + i18n (>= 1.6, < 2) + minitest (>= 5.1) + tzinfo (~> 2.0) + zeitwerk (~> 2.3) ansi (1.5.0) - arel (9.0.0) - builder (3.2.3) - concurrent-ruby (1.1.4) - i18n (1.3.0) + builder (3.2.4) + concurrent-ruby (1.1.8) + i18n (1.8.10) concurrent-ruby (~> 1.0) - minitest (5.11.3) - minitest-reporters (1.3.5) + minitest (5.14.4) + minitest-reporters (1.4.3) ansi builder minitest (>= 5.0) ruby-progressbar - rake (10.5.0) - ruby-progressbar (1.10.0) - sqlite3 (1.3.13) - thread_safe (0.3.6) - tzinfo (1.2.5) - thread_safe (~> 0.1) + rake (13.0.3) + ruby-progressbar (1.11.0) + sqlite3 (1.4.2) + tzinfo (2.0.4) + concurrent-ruby (~> 1.0) + zeitwerk (2.4.2) PLATFORMS - ruby + x86_64-linux DEPENDENCIES - bundler (~> 1.16) - minitest (~> 5.0) - minitest-reporters (~> 1.3) + bundler (~> 2.2) + minitest (~> 5.14) + minitest-reporters (~> 1.4) nullifyable! - rake (~> 10.0) - sqlite3 (~> 1.3) + rake (~> 13.0) + sqlite3 (~> 1.4) BUNDLED WITH - 1.16.1 + 2.2.17 diff --git a/nullifyable.gemspec b/nullifyable.gemspec index a59697c..e1cc71b 100644 --- a/nullifyable.gemspec +++ b/nullifyable.gemspec @@ -21,11 +21,11 @@ Gem::Specification.new do |spec| spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) } spec.require_paths = ["lib"] - spec.add_dependency "activerecord", ">= 4.0" + spec.add_dependency "activerecord", ">= 6.1" - spec.add_development_dependency "bundler", "~> 1.16" - spec.add_development_dependency "rake", "~> 10.0" - spec.add_development_dependency "minitest", "~> 5.0" - spec.add_development_dependency 'minitest-reporters', '~> 1.3' - spec.add_development_dependency 'sqlite3', '~> 1.3' + spec.add_development_dependency "bundler", "~> 2.2" + spec.add_development_dependency "rake", "~> 13.0" + spec.add_development_dependency "minitest", "~> 5.14" + spec.add_development_dependency 'minitest-reporters', '~> 1.4' + spec.add_development_dependency 'sqlite3', '~> 1.4' end From 0297375e5424c82a23e6a6dca97f0179082b694a Mon Sep 17 00:00:00 2001 From: "Fernando E. Silva Jacquier" Date: Tue, 25 May 2021 11:59:06 -0300 Subject: [PATCH 2/2] Work with ActiveRecord::Store --- lib/nullifyable.rb | 9 ++++++--- test/nullifyable_test.rb | 15 +++++++++++++++ test/test_helper.rb | 5 ++++- 3 files changed, 25 insertions(+), 4 deletions(-) diff --git a/lib/nullifyable.rb b/lib/nullifyable.rb index ae56d54..dbc455b 100644 --- a/lib/nullifyable.rb +++ b/lib/nullifyable.rb @@ -6,7 +6,7 @@ module Nullifyable module ClassMethods attr_reader :nullifyable_attributes - + private def nullify(*attributes) @@ -19,9 +19,12 @@ def nullify(*attributes) end private + def nullify_blank_fields + return if self.class.nullifyable_attributes.blank? + self.class.nullifyable_attributes.each do |attr| - self[attr] = nil if self[attr].blank? - end if self.class.nullifyable_attributes.present? + send("#{attr}=", nil) if send(attr).blank? + end end end diff --git a/test/nullifyable_test.rb b/test/nullifyable_test.rb index a8b79b7..1196f21 100644 --- a/test/nullifyable_test.rb +++ b/test/nullifyable_test.rb @@ -18,16 +18,31 @@ def test_it_nullify_blank_string assert_nil user.first_name end + def test_it_nullify_blank_string_for_ar_store + user = User.create!(email: "test@email.com", external_id: "") + assert_nil user.external_id + end + def test_it_nullify_space_string user = User.create!(email: "test@email.com", first_name: " ") assert_nil user.first_name end + def test_it_nullify_space_string_for_ar_store + user = User.create!(email: "test@email.com", external_id: " ") + assert_nil user.external_id + end + def test_it_does_not_nullify_zero user = User.create!(email: "test@email.com", first_name: 0) assert_equal "0", user.first_name end + def test_it_does_not_nullify_zero_for_ar_store + user = User.create!(email: "test@email.com", external_id: 0) + assert_equal 0, user.external_id + end + def test_it_nullify_multiple_attributes user = User.create!(email: "test@email.com", first_name: "", last_name: "") assert_nil user.first_name diff --git a/test/test_helper.rb b/test/test_helper.rb index a9bf464..c89a09f 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -14,7 +14,9 @@ class User < ActiveRecord::Base include Nullifyable - nullify :first_name, :last_name + nullify :first_name, :last_name, :external_id + + store_accessor :metadata, :external_id end def setup_db @@ -24,6 +26,7 @@ def setup_db t.string :email, :limit => 255, :null => false t.string :first_name, :limit => 100, :null => true t.string :last_name, :limit => 100, :null => true + t.json :metadata, default: {}, null: false end end end