From edb5a63190c1bf5b060eac81113f4dce642254ab Mon Sep 17 00:00:00 2001 From: Joshua Plicque Date: Sat, 12 Nov 2016 19:18:29 -0500 Subject: [PATCH 1/5] Update for Rails 5 on postgresql --- .travis.yml | 8 +++---- README.md | 2 +- gemfiles/activerecord-4.2/Gemfile.mysql2 | 10 --------- gemfiles/activerecord-4.2/Gemfile.sqlite3 | 10 --------- .../Gemfile.base | 2 +- .../Gemfile.postgresql | 0 .../active_record/validations.rb | 22 +++++++++---------- schema_dev.yml | 6 ++--- schema_validations.gemspec | 4 ++-- spec/spec_helper.rb | 9 ++++++++ 10 files changed, 29 insertions(+), 44 deletions(-) delete mode 100644 gemfiles/activerecord-4.2/Gemfile.mysql2 delete mode 100644 gemfiles/activerecord-4.2/Gemfile.sqlite3 rename gemfiles/{activerecord-4.2 => activerecord-5.0}/Gemfile.base (67%) rename gemfiles/{activerecord-4.2 => activerecord-5.0}/Gemfile.postgresql (100%) diff --git a/.travis.yml b/.travis.yml index 8cf2a6a..ec47d60 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,12 +5,10 @@ --- sudo: false rvm: -- 2.1.5 +- 2.3.1 gemfile: -- gemfiles/activerecord-4.2/Gemfile.mysql2 -- gemfiles/activerecord-4.2/Gemfile.postgresql -- gemfiles/activerecord-4.2/Gemfile.sqlite3 -env: POSTGRESQL_DB_USER=postgres MYSQL_DB_USER=travis +- gemfiles/activerecord-5.0/Gemfile.postgresql +env: POSTGRESQL_DB_USER=postgres addons: postgresql: '9.4' before_script: bundle exec rake create_databases diff --git a/README.md b/README.md index 9751ec7..56b92e5 100644 --- a/README.md +++ b/README.md @@ -174,7 +174,7 @@ As of version 1.2.0, SchemaValidations supports and is tested on: -* ruby **2.1.5** with activerecord **4.2**, using **mysql2**, **postgresql** or **sqlite3** +* ruby **2.3.1** with activerecord **5.0**, using **postgresql** diff --git a/gemfiles/activerecord-4.2/Gemfile.mysql2 b/gemfiles/activerecord-4.2/Gemfile.mysql2 deleted file mode 100644 index 9ce0bb5..0000000 --- a/gemfiles/activerecord-4.2/Gemfile.mysql2 +++ /dev/null @@ -1,10 +0,0 @@ -require "pathname" -eval(Pathname.new(__FILE__).dirname.join("Gemfile.base").read, binding) - -platform :ruby do - gem "mysql2", '>= 0.3.18', '< 0.5' -end - -platform :jruby do - gem 'activerecord-jdbcmysql-adapter' -end diff --git a/gemfiles/activerecord-4.2/Gemfile.sqlite3 b/gemfiles/activerecord-4.2/Gemfile.sqlite3 deleted file mode 100644 index a116d6d..0000000 --- a/gemfiles/activerecord-4.2/Gemfile.sqlite3 +++ /dev/null @@ -1,10 +0,0 @@ -require "pathname" -eval(Pathname.new(__FILE__).dirname.join("Gemfile.base").read, binding) - -platform :ruby do - gem "sqlite3" -end - -platform :jruby do - gem 'activerecord-jdbcsqlite3-adapter', '>=1.3.0.beta2' -end \ No newline at end of file diff --git a/gemfiles/activerecord-4.2/Gemfile.base b/gemfiles/activerecord-5.0/Gemfile.base similarity index 67% rename from gemfiles/activerecord-4.2/Gemfile.base rename to gemfiles/activerecord-5.0/Gemfile.base index ad6a424..b18bf66 100644 --- a/gemfiles/activerecord-4.2/Gemfile.base +++ b/gemfiles/activerecord-5.0/Gemfile.base @@ -1,3 +1,3 @@ eval File.read File.expand_path('../../Gemfile.base', __FILE__) -gem "activerecord", "~> 4.2.6" +gem "activerecord", "~> 5.0.0" diff --git a/gemfiles/activerecord-4.2/Gemfile.postgresql b/gemfiles/activerecord-5.0/Gemfile.postgresql similarity index 100% rename from gemfiles/activerecord-4.2/Gemfile.postgresql rename to gemfiles/activerecord-5.0/Gemfile.postgresql diff --git a/lib/schema_validations/active_record/validations.rb b/lib/schema_validations/active_record/validations.rb index d76d93d..ce2db2f 100644 --- a/lib/schema_validations/active_record/validations.rb +++ b/lib/schema_validations/active_record/validations.rb @@ -99,8 +99,8 @@ def load_column_validations #:nodoc: when respond_to?(:defined_enums) && defined_enums.has_key?(column.name) then :enum when column.type == :integer then :integer when column.type == :decimal then :decimal - when column.number? then :numeric - when column.text? then :text + when column.type == :float then :numeric + when column.type == :text || column.type == :string then :text when column.type == :boolean then :boolean end @@ -133,15 +133,15 @@ def load_column_validations #:nodoc: end def load_integer_column_validations(name, column) # :nodoc: - options = { :allow_nil => true, :only_integer => true } - - if range = column.cast_type.try(:range) - options[:greater_than_or_equal_to] = range.begin - if range.exclude_end? - options[:less_than] = range.end - else - options[:less_than_or_equal_to] = range.end - end + integer_range = ::ActiveRecord::Type::Integer.new.range + # The Ruby Range object does not support excluding the beginning of a Range, + # so we always include :greater_than_or_equal_to + options = { :allow_nil => true, :only_integer => true, greater_than_or_equal_to: integer_range.begin } + + if integer_range.exclude_end? + options[:less_than] = integer_range.end + else + options[:less_than_or_equal_to] = integer_range.end end validate_logged :validates_numericality_of, name, options diff --git a/schema_dev.yml b/schema_dev.yml index 859b5fb..22c00d9 100644 --- a/schema_dev.yml +++ b/schema_dev.yml @@ -1,8 +1,6 @@ ruby: - - 2.1.5 + - 2.3.1 activerecord: - - 4.2 + - 5.0 db: - - mysql2 - postgresql - - sqlite3 diff --git a/schema_validations.gemspec b/schema_validations.gemspec index 2307ed8..88f036a 100644 --- a/schema_validations.gemspec +++ b/schema_validations.gemspec @@ -21,9 +21,9 @@ Gem::Specification.new do |s| s.require_paths = ["lib"] s.add_dependency("schema_plus_columns") - s.add_dependency("activerecord", "~> 4.2", ">= 4.2.1") + s.add_dependency("activerecord", "~> 5.0", ">= 4.2.1") s.add_dependency("valuable") - + s.add_development_dependency("schema_dev", "~> 3.6") s.add_development_dependency("rake") s.add_development_dependency("rdoc") diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 6b2d8ab..aa3a4f3 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -18,6 +18,15 @@ config.around(:each) do |example| DatabaseCleaner.clean remove_all_models + + class ActiveRecord::InternalMetadata + def self.create_table + end + + def self.[]=(first, second) + end + end + ActiveRecord::Migration.suppress_messages do example.run end From 3925aa9c7a49718fc623c6ab17a894d8dec50551 Mon Sep 17 00:00:00 2001 From: Joshua Plicque Date: Sat, 12 Nov 2016 19:44:18 -0500 Subject: [PATCH 2/5] Increase code coverage to 100% --- spec/validations_spec.rb | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/spec/validations_spec.rb b/spec/validations_spec.rb index 0474d57..010a844 100644 --- a/spec/validations_spec.rb +++ b/spec/validations_spec.rb @@ -97,12 +97,18 @@ class ArticleReview < ActiveRecord::Base expect(Article.new(votes: -2147483649).error_on(:votes).size).to eq(1) end + it "can include the end range" do + allow_any_instance_of(::ActiveRecord::Type::Integer).to receive(:range).and_return(-2147483648..2147483648) + + expect(Article.new(votes: 2147483648).error_on(:votes).size).to eq(0) + end + it "should validate the range of decimal precision with scale" do expect(Article.new(max10: 10).error_on(:max10).size).to eq(1) expect(Article.new(max10: 5).error_on(:max10).size).to eq(0) expect(Article.new(max10: -10).error_on(:max10).size).to eq(1) end - + it "should validate the range of decimal precision without scale" do expect(Article.new(max100: 100).error_on(:max100).size).to eq(1) expect(Article.new(max100: 50).error_on(:max100).size).to eq(0) From 283cc7cb3a05a694affb7bf0cb31236468710dde Mon Sep 17 00:00:00 2001 From: Joshua Plicque Date: Sat, 12 Nov 2016 20:20:25 -0500 Subject: [PATCH 3/5] Add support for sqlite3 --- .travis.yml | 1 + README.md | 2 +- gemfiles/activerecord-5.0/Gemfile.sqlite3 | 10 ++++++++++ schema_dev.yml | 1 + 4 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 gemfiles/activerecord-5.0/Gemfile.sqlite3 diff --git a/.travis.yml b/.travis.yml index ec47d60..3de010b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,6 +8,7 @@ rvm: - 2.3.1 gemfile: - gemfiles/activerecord-5.0/Gemfile.postgresql +- gemfiles/activerecord-5.0/Gemfile.sqlite3 env: POSTGRESQL_DB_USER=postgres addons: postgresql: '9.4' diff --git a/README.md b/README.md index 56b92e5..ed970b6 100644 --- a/README.md +++ b/README.md @@ -174,7 +174,7 @@ As of version 1.2.0, SchemaValidations supports and is tested on: -* ruby **2.3.1** with activerecord **5.0**, using **postgresql** +* ruby **2.3.1** with activerecord **5.0**, using **postgresql** and **sqlite3** diff --git a/gemfiles/activerecord-5.0/Gemfile.sqlite3 b/gemfiles/activerecord-5.0/Gemfile.sqlite3 new file mode 100644 index 0000000..a116d6d --- /dev/null +++ b/gemfiles/activerecord-5.0/Gemfile.sqlite3 @@ -0,0 +1,10 @@ +require "pathname" +eval(Pathname.new(__FILE__).dirname.join("Gemfile.base").read, binding) + +platform :ruby do + gem "sqlite3" +end + +platform :jruby do + gem 'activerecord-jdbcsqlite3-adapter', '>=1.3.0.beta2' +end \ No newline at end of file diff --git a/schema_dev.yml b/schema_dev.yml index 22c00d9..bc7fbe0 100644 --- a/schema_dev.yml +++ b/schema_dev.yml @@ -4,3 +4,4 @@ activerecord: - 5.0 db: - postgresql + - sqlite3 From b615555e5c3f23d8ca248f6cfa2b96cd3d91e39c Mon Sep 17 00:00:00 2001 From: Joshua Plicque Date: Sat, 12 Nov 2016 20:33:36 -0500 Subject: [PATCH 4/5] Add back tests for Rails 4.2 --- .travis.yml | 2 ++ README.md | 1 + gemfiles/activerecord-4.2/Gemfile.base | 3 +++ gemfiles/activerecord-4.2/Gemfile.postgresql | 10 ++++++++++ gemfiles/activerecord-4.2/Gemfile.sqlite3 | 10 ++++++++++ schema_dev.yml | 1 + schema_validations.gemspec | 2 +- 7 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 gemfiles/activerecord-4.2/Gemfile.base create mode 100644 gemfiles/activerecord-4.2/Gemfile.postgresql create mode 100644 gemfiles/activerecord-4.2/Gemfile.sqlite3 diff --git a/.travis.yml b/.travis.yml index 3de010b..b35bd7d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,6 +7,8 @@ sudo: false rvm: - 2.3.1 gemfile: +- gemfiles/activerecord-4.2/Gemfile.postgresql +- gemfiles/activerecord-4.2/Gemfile.sqlite3 - gemfiles/activerecord-5.0/Gemfile.postgresql - gemfiles/activerecord-5.0/Gemfile.sqlite3 env: POSTGRESQL_DB_USER=postgres diff --git a/README.md b/README.md index ed970b6..2d48bc9 100644 --- a/README.md +++ b/README.md @@ -174,6 +174,7 @@ As of version 1.2.0, SchemaValidations supports and is tested on: +* ruby **2.3.1** with activerecord **4.2**, using **postgresql** and **sqlite3** * ruby **2.3.1** with activerecord **5.0**, using **postgresql** and **sqlite3** diff --git a/gemfiles/activerecord-4.2/Gemfile.base b/gemfiles/activerecord-4.2/Gemfile.base new file mode 100644 index 0000000..ad6a424 --- /dev/null +++ b/gemfiles/activerecord-4.2/Gemfile.base @@ -0,0 +1,3 @@ +eval File.read File.expand_path('../../Gemfile.base', __FILE__) + +gem "activerecord", "~> 4.2.6" diff --git a/gemfiles/activerecord-4.2/Gemfile.postgresql b/gemfiles/activerecord-4.2/Gemfile.postgresql new file mode 100644 index 0000000..2c00e63 --- /dev/null +++ b/gemfiles/activerecord-4.2/Gemfile.postgresql @@ -0,0 +1,10 @@ +require "pathname" +eval(Pathname.new(__FILE__).dirname.join("Gemfile.base").read, binding) + +platform :ruby do + gem "pg" +end + +platform :jruby do + gem 'activerecord-jdbcpostgresql-adapter' +end \ No newline at end of file diff --git a/gemfiles/activerecord-4.2/Gemfile.sqlite3 b/gemfiles/activerecord-4.2/Gemfile.sqlite3 new file mode 100644 index 0000000..a116d6d --- /dev/null +++ b/gemfiles/activerecord-4.2/Gemfile.sqlite3 @@ -0,0 +1,10 @@ +require "pathname" +eval(Pathname.new(__FILE__).dirname.join("Gemfile.base").read, binding) + +platform :ruby do + gem "sqlite3" +end + +platform :jruby do + gem 'activerecord-jdbcsqlite3-adapter', '>=1.3.0.beta2' +end \ No newline at end of file diff --git a/schema_dev.yml b/schema_dev.yml index bc7fbe0..bab125f 100644 --- a/schema_dev.yml +++ b/schema_dev.yml @@ -1,6 +1,7 @@ ruby: - 2.3.1 activerecord: + - 4.2 - 5.0 db: - postgresql diff --git a/schema_validations.gemspec b/schema_validations.gemspec index 88f036a..986f0af 100644 --- a/schema_validations.gemspec +++ b/schema_validations.gemspec @@ -21,7 +21,7 @@ Gem::Specification.new do |s| s.require_paths = ["lib"] s.add_dependency("schema_plus_columns") - s.add_dependency("activerecord", "~> 5.0", ">= 4.2.1") + s.add_dependency("activerecord", ">= 4.2.1", "< 5.1") s.add_dependency("valuable") s.add_development_dependency("schema_dev", "~> 3.6") From 853763217186a2d75ba7e899e684a7c12186774e Mon Sep 17 00:00:00 2001 From: Joshua Plicque Date: Sat, 12 Nov 2016 20:42:49 -0500 Subject: [PATCH 5/5] Add back support for mysql2 tests --- .travis.yml | 4 +++- README.md | 4 ++-- gemfiles/activerecord-4.2/Gemfile.mysql2 | 10 ++++++++++ gemfiles/activerecord-5.0/Gemfile.mysql2 | 10 ++++++++++ schema_dev.yml | 1 + 5 files changed, 26 insertions(+), 3 deletions(-) create mode 100644 gemfiles/activerecord-4.2/Gemfile.mysql2 create mode 100644 gemfiles/activerecord-5.0/Gemfile.mysql2 diff --git a/.travis.yml b/.travis.yml index b35bd7d..2754218 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,11 +7,13 @@ sudo: false rvm: - 2.3.1 gemfile: +- gemfiles/activerecord-4.2/Gemfile.mysql2 - gemfiles/activerecord-4.2/Gemfile.postgresql - gemfiles/activerecord-4.2/Gemfile.sqlite3 +- gemfiles/activerecord-5.0/Gemfile.mysql2 - gemfiles/activerecord-5.0/Gemfile.postgresql - gemfiles/activerecord-5.0/Gemfile.sqlite3 -env: POSTGRESQL_DB_USER=postgres +env: POSTGRESQL_DB_USER=postgres MYSQL_DB_USER=travis addons: postgresql: '9.4' before_script: bundle exec rake create_databases diff --git a/README.md b/README.md index 2d48bc9..7c7d74a 100644 --- a/README.md +++ b/README.md @@ -174,8 +174,8 @@ As of version 1.2.0, SchemaValidations supports and is tested on: -* ruby **2.3.1** with activerecord **4.2**, using **postgresql** and **sqlite3** -* ruby **2.3.1** with activerecord **5.0**, using **postgresql** and **sqlite3** +* ruby **2.3.1** with activerecord **4.2**, using **mysql2**, **postgresql** or **sqlite3** +* ruby **2.3.1** with activerecord **5.0**, using **mysql2**, **postgresql** or **sqlite3** diff --git a/gemfiles/activerecord-4.2/Gemfile.mysql2 b/gemfiles/activerecord-4.2/Gemfile.mysql2 new file mode 100644 index 0000000..9ce0bb5 --- /dev/null +++ b/gemfiles/activerecord-4.2/Gemfile.mysql2 @@ -0,0 +1,10 @@ +require "pathname" +eval(Pathname.new(__FILE__).dirname.join("Gemfile.base").read, binding) + +platform :ruby do + gem "mysql2", '>= 0.3.18', '< 0.5' +end + +platform :jruby do + gem 'activerecord-jdbcmysql-adapter' +end diff --git a/gemfiles/activerecord-5.0/Gemfile.mysql2 b/gemfiles/activerecord-5.0/Gemfile.mysql2 new file mode 100644 index 0000000..f6e58e3 --- /dev/null +++ b/gemfiles/activerecord-5.0/Gemfile.mysql2 @@ -0,0 +1,10 @@ +require "pathname" +eval(Pathname.new(__FILE__).dirname.join("Gemfile.base").read, binding) + +platform :ruby do + gem "mysql2" +end + +platform :jruby do + gem 'activerecord-jdbcmysql-adapter' +end diff --git a/schema_dev.yml b/schema_dev.yml index bab125f..93b8c0b 100644 --- a/schema_dev.yml +++ b/schema_dev.yml @@ -4,5 +4,6 @@ activerecord: - 4.2 - 5.0 db: + - mysql2 - postgresql - sqlite3