From 3425d3288e3d0729569f2d253b9a226bfa36c66a Mon Sep 17 00:00:00 2001 From: Justin Mazzi Date: Fri, 28 Feb 2020 14:55:04 -0500 Subject: [PATCH 01/10] Bump version --- lib/crypt_keeper/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/crypt_keeper/version.rb b/lib/crypt_keeper/version.rb index 077ae5f..ed2f9a3 100644 --- a/lib/crypt_keeper/version.rb +++ b/lib/crypt_keeper/version.rb @@ -1,3 +1,3 @@ module CryptKeeper - VERSION = "2.0.1" + VERSION = "2.1.0" end From c5d947d4f877d37ca21f7bf2a9b006711d933155 Mon Sep 17 00:00:00 2001 From: Justin Mazzi Date: Fri, 17 Jul 2020 11:32:41 -0400 Subject: [PATCH 02/10] Fix indenting --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 8cb333d..30f2982 100644 --- a/README.md +++ b/README.md @@ -151,10 +151,10 @@ Searching ciphertext is a complex problem that varies depending on the encryptio * ActiveSupport's MessageEncryptor uses a random initialization vector when generating keys. The same plaintext encrypted multiple times will have different output each time for the ciphertext. Since this is the case, it is not possible to search leveraging the database. Database rows will need to be filtered in memory. It is suggested that you use a scope or ActiveRecord batches to narrow the results before seaching them. * Mysql AES - * Surprisingly, MySQL's implementation of AES does not use a random initialization vector. The column containing the ciphertext can be indexed and searched quickly. + * Surprisingly, MySQL's implementation of AES does not use a random initialization vector. The column containing the ciphertext can be indexed and searched quickly. * PostgresSQL PGP - * PGP also uses a random initialization vector which means it generates unique output each time you encrypt plaintext. Although the database can be searched by performing row level decryption and comparing the plaintext, it will not be able to use an index. A scope or batch is suggested when searching. + * PGP also uses a random initialization vector which means it generates unique output each time you encrypt plaintext. Although the database can be searched by performing row level decryption and comparing the plaintext, it will not be able to use an index. A scope or batch is suggested when searching. ## How the search interface is used From b5398079eab10ad2cb93e5b2fa66fbf28c3adddd Mon Sep 17 00:00:00 2001 From: Nik Wakelin Date: Fri, 11 Dec 2020 13:28:39 +1300 Subject: [PATCH 03/10] Allows Rails 6.1 This includes the following minor changes: * Use a binary column rather than a stub: The AR::Base#columns_hash is now a frozen object, which prevents stubbing methods on it. This change adds a `storage_binary` column to the model and tests that directly instead. * Force binary string encoding for queries In some cases we need to send binary sequences to the database that are invalid UTF-8 characters, so we'll convert the query to binary encoding just in case. --- .travis.yml | 13 ++++++++++++- Appraisals | 11 +++++++++++ crypt_keeper.gemspec | 4 ++-- gemfiles/activerecord_4_2.gemfile | 1 + gemfiles/activerecord_5_0.gemfile | 1 + gemfiles/activerecord_6_1.gemfile | 9 +++++++++ lib/crypt_keeper/helper.rb | 4 ++++ spec/crypt_keeper/model_spec.rb | 3 +-- spec/support/active_record.rb | 1 + 9 files changed, 42 insertions(+), 5 deletions(-) create mode 100644 gemfiles/activerecord_6_1.gemfile diff --git a/.travis.yml b/.travis.yml index 3b50d82..ba7b9ac 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,6 +6,7 @@ rvm: - 2.4.5 - 2.5.3 - 2.6.4 + - 2.7.2 gemfile: - gemfiles/activerecord_4_2.gemfile @@ -13,6 +14,8 @@ gemfile: - gemfiles/activerecord_5_1.gemfile - gemfiles/activerecord_5_2.gemfile - gemfiles/activerecord_6_0.gemfile + - gemfiles/activerecord_6_1.gemfile + matrix: exclude: @@ -22,18 +25,24 @@ matrix: gemfile: gemfiles/activerecord_5_1.gemfile - rvm: 2.2.10 gemfile: gemfiles/activerecord_6_0.gemfile + - rvm: 2.2.10 + gemfile: gemfiles/activerecord_6_1.gemfile - rvm: 2.3.8 gemfile: gemfiles/activerecord_5_0.gemfile - rvm: 2.3.8 gemfile: gemfiles/activerecord_5_1.gemfile - rvm: 2.3.8 gemfile: gemfiles/activerecord_6_0.gemfile + - rvm: 2.3.8 + gemfile: gemfiles/activerecord_6_1.gemfile - rvm: 2.4.5 gemfile: gemfiles/activerecord_5_0.gemfile - rvm: 2.4.5 gemfile: gemfiles/activerecord_5_1.gemfile - rvm: 2.4.5 gemfile: gemfiles/activerecord_6_0.gemfile + - rvm: 2.4.5 + gemfile: gemfiles/activerecord_6_1.gemfile - rvm: 2.5.3 gemfile: gemfiles/activerecord_5_0.gemfile - rvm: 2.5.3 @@ -53,7 +62,9 @@ before_script: - psql crypt_keeper_providers -c 'CREATE EXTENSION IF NOT EXISTS pgcrypto;' -U postgres - mysql -e 'CREATE DATABASE crypt_keeper_providers' -branches: master +branches: + - master + - allow-6-1 notifications: email: diff --git a/Appraisals b/Appraisals index d5f953b..a7e4f82 100644 --- a/Appraisals +++ b/Appraisals @@ -2,11 +2,16 @@ appraise "activerecord_4_2" do gem "activerecord", "~> 4.2.0" gem "activesupport", "~> 4.2.0" gem "sqlite3", "~> 1.3.0" + + # otherwise you get "undefined method `new' for BigDecimal:Class" in Ruby 2.7 + gem "bigdecimal", "1.3.5" end appraise "activerecord_5_0" do gem "activerecord", "~> 5.0.0" gem "activesupport", "~> 5.0.0" + + gem "sqlite3", "~> 1.3.6" end appraise "activerecord_5_1" do @@ -23,3 +28,9 @@ appraise "activerecord_6_0" do gem "activerecord", "~> 6.0.0" gem "activesupport", "~> 6.0.0" end + +appraise "activerecord_6_1" do + gem "activerecord", "~> 6.1.0" + gem "activesupport", "~> 6.1.0" + gem "pg", "~> 1.1" +end \ No newline at end of file diff --git a/crypt_keeper.gemspec b/crypt_keeper.gemspec index 0ea5e20..5775968 100644 --- a/crypt_keeper.gemspec +++ b/crypt_keeper.gemspec @@ -18,8 +18,8 @@ Gem::Specification.new do |gem| gem.post_install_message = "WARNING: CryptKeeper 2.0 contains breaking changes and may require you to reencrypt your data! Please view the README at https://github.com/jmazzi/crypt_keeper for more information." - gem.add_runtime_dependency 'activerecord', '>= 4.2', '< 6.1' - gem.add_runtime_dependency 'activesupport', '>= 4.2', '< 6.1' + gem.add_runtime_dependency 'activerecord', '>= 4.2', '<= 6.1' + gem.add_runtime_dependency 'activesupport', '>= 4.2', '<= 6.1' gem.add_development_dependency 'rspec', '~> 3.5.0' gem.add_development_dependency 'guard', '~> 2.6.1' diff --git a/gemfiles/activerecord_4_2.gemfile b/gemfiles/activerecord_4_2.gemfile index 1653569..b83e8cf 100644 --- a/gemfiles/activerecord_4_2.gemfile +++ b/gemfiles/activerecord_4_2.gemfile @@ -5,5 +5,6 @@ source "https://rubygems.org" gem "activerecord", "~> 4.2.0" gem "activesupport", "~> 4.2.0" gem "sqlite3", "~> 1.3.0" +gem "bigdecimal", "1.3.5" gemspec :path => "../" diff --git a/gemfiles/activerecord_5_0.gemfile b/gemfiles/activerecord_5_0.gemfile index a06e237..993e2f3 100644 --- a/gemfiles/activerecord_5_0.gemfile +++ b/gemfiles/activerecord_5_0.gemfile @@ -4,5 +4,6 @@ source "https://rubygems.org" gem "activerecord", "~> 5.0.0" gem "activesupport", "~> 5.0.0" +gem "sqlite3", "~> 1.3.6" gemspec :path => "../" diff --git a/gemfiles/activerecord_6_1.gemfile b/gemfiles/activerecord_6_1.gemfile new file mode 100644 index 0000000..ade7a9c --- /dev/null +++ b/gemfiles/activerecord_6_1.gemfile @@ -0,0 +1,9 @@ +# This file was generated by Appraisal + +source "https://rubygems.org" + +gem "activerecord", "~> 6.1.0" +gem "activesupport", "~> 6.1.0" +gem "pg", "~> 1.1" + +gemspec :path => "../" diff --git a/lib/crypt_keeper/helper.rb b/lib/crypt_keeper/helper.rb index 970db03..2c3b064 100644 --- a/lib/crypt_keeper/helper.rb +++ b/lib/crypt_keeper/helper.rb @@ -12,6 +12,10 @@ module SQL def escape_and_execute_sql(query, new_transaction: false) query = ::ActiveRecord::Base.send :sanitize_sql_array, query + # force binary encoding to avoid "invalid byte sequence in UTF-8" errors + # when we send binary AES keys (f.ex) to the database + query = query.b if query.respond_to?(:b) + if CryptKeeper.silence_logs? ::ActiveRecord::Base.logger.silence do execute_sql(query, new_transaction: new_transaction) diff --git a/spec/crypt_keeper/model_spec.rb b/spec/crypt_keeper/model_spec.rb index ca690f6..746415b 100644 --- a/spec/crypt_keeper/model_spec.rb +++ b/spec/crypt_keeper/model_spec.rb @@ -25,8 +25,7 @@ end it "allows binary as a valid type" do - subject.crypt_keeper :storage, encryptor: :fake_encryptor - allow(subject.columns_hash['storage']).to receive(:type).and_return(:binary) + subject.crypt_keeper :storage_binary, encryptor: :fake_encryptor expect(subject.new.save).to be_truthy end diff --git a/spec/support/active_record.rb b/spec/support/active_record.rb index 8b860fa..1794eb4 100644 --- a/spec/support/active_record.rb +++ b/spec/support/active_record.rb @@ -18,6 +18,7 @@ def define_schema! create_table :sensitive_data, :force => true do |t| t.column :name, :string t.column :storage, :text + t.column :storage_binary, :binary t.column :secret, :text end end From 399d39e28065f7334ac32419a55943658f133462 Mon Sep 17 00:00:00 2001 From: Nik Wakelin Date: Wed, 30 Dec 2020 13:51:03 +1300 Subject: [PATCH 04/10] Removes building the development branch on Travis --- .travis.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index ba7b9ac..ba58223 100644 --- a/.travis.yml +++ b/.travis.yml @@ -64,7 +64,6 @@ before_script: branches: - master - - allow-6-1 notifications: email: From 5cf6d57a20454bbe00219bf60fef89edee38a576 Mon Sep 17 00:00:00 2001 From: Nik Wakelin Date: Fri, 8 Jan 2021 12:51:38 +1300 Subject: [PATCH 05/10] Adds trailing newline to Appraisals file --- Appraisals | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Appraisals b/Appraisals index a7e4f82..a8d6497 100644 --- a/Appraisals +++ b/Appraisals @@ -33,4 +33,4 @@ appraise "activerecord_6_1" do gem "activerecord", "~> 6.1.0" gem "activesupport", "~> 6.1.0" gem "pg", "~> 1.1" -end \ No newline at end of file +end From 82b30939c089bb347b9fe70424e4701e9b5b65a3 Mon Sep 17 00:00:00 2001 From: Nik Wakelin Date: Fri, 8 Jan 2021 13:35:56 +1300 Subject: [PATCH 06/10] Tests for encryption/decryption backed by a binary field --- spec/crypt_keeper/model_spec.rb | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/spec/crypt_keeper/model_spec.rb b/spec/crypt_keeper/model_spec.rb index 746415b..a4b0da4 100644 --- a/spec/crypt_keeper/model_spec.rb +++ b/spec/crypt_keeper/model_spec.rb @@ -54,6 +54,7 @@ end end + context "Encryption and Decryption" do let(:plain_text) { 'plain_text' } let(:cipher_text) { 'tooltxet_nialp' } @@ -104,6 +105,21 @@ expect_any_instance_of(CryptKeeper::Provider::Encryptor).to_not receive(:decrypt) subject.find(record.id).storage end + + context "with a binary database field" do + subject { create_encrypted_model :storage_binary, passphrase: 'tool', encryptor: :encryptor } + + it "encrypts the data" do + expect_any_instance_of(CryptKeeper::Provider::Encryptor).to receive(:encrypt).with('testing') + subject.create!(storage_binary: 'testing') + end + + it "decrypts the data" do + record = subject.create!(storage_binary: 'testing') + expect_any_instance_of(CryptKeeper::Provider::Encryptor).to receive(:decrypt).at_least(1).times.with('toolgnitset') + subject.find(record.id).storage_binary + end + end end context "Search" do From 9be778043de52a794bb5bb2fd70cb61ff5a416e8 Mon Sep 17 00:00:00 2001 From: Nik Wakelin Date: Sat, 9 Jan 2021 13:29:58 +1300 Subject: [PATCH 07/10] Allows Rails 6.2 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Jesper Rønn-Jensen --- crypt_keeper.gemspec | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crypt_keeper.gemspec b/crypt_keeper.gemspec index 5775968..325fdcf 100644 --- a/crypt_keeper.gemspec +++ b/crypt_keeper.gemspec @@ -18,8 +18,8 @@ Gem::Specification.new do |gem| gem.post_install_message = "WARNING: CryptKeeper 2.0 contains breaking changes and may require you to reencrypt your data! Please view the README at https://github.com/jmazzi/crypt_keeper for more information." - gem.add_runtime_dependency 'activerecord', '>= 4.2', '<= 6.1' - gem.add_runtime_dependency 'activesupport', '>= 4.2', '<= 6.1' + gem.add_runtime_dependency 'activerecord', '>= 4.2', '< 6.2' + gem.add_runtime_dependency 'activesupport', '>= 4.2', '< 6.2' gem.add_development_dependency 'rspec', '~> 3.5.0' gem.add_development_dependency 'guard', '~> 2.6.1' From beccea95bcc0687bc167de07a1fbec648b7787a0 Mon Sep 17 00:00:00 2001 From: Justin Mazzi Date: Fri, 9 Apr 2021 11:14:58 -0400 Subject: [PATCH 08/10] Release Rails 6.1 support --- lib/crypt_keeper/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/crypt_keeper/version.rb b/lib/crypt_keeper/version.rb index ed2f9a3..83d52e5 100644 --- a/lib/crypt_keeper/version.rb +++ b/lib/crypt_keeper/version.rb @@ -1,3 +1,3 @@ module CryptKeeper - VERSION = "2.1.0" + VERSION = "2.2.0" end From 0059de02fea683ba9498f4dca5a1106508ff460a Mon Sep 17 00:00:00 2001 From: Nik Wakelin Date: Thu, 30 Dec 2021 15:47:23 +1300 Subject: [PATCH 09/10] Support Ruby 3.0 / 3.1 and add Github Actions CI configuration * Moves from Travis (defunct?) to Github Actions for build * Small fix for tests on Rails 7.0 (`constantize` now raises a `NameError`) * Build the `7-0-stable` branch instead of `7.0` for tests in order to support Ruby 3.1 (once rails/rails#43951 is merged this can be removed) --- .github/workflows/ruby.yml | 79 +++++++++++++++++++++++++++++++ Appraisals | 9 +++- Rakefile | 2 +- crypt_keeper.gemspec | 6 +-- gemfiles/activerecord_5_0.gemfile | 2 +- gemfiles/activerecord_7_0.gemfile | 9 ++++ lib/crypt_keeper/model.rb | 3 ++ spec/github_actions.database.yml | 25 ++++++++++ 8 files changed, 129 insertions(+), 6 deletions(-) create mode 100644 .github/workflows/ruby.yml create mode 100644 gemfiles/activerecord_7_0.gemfile create mode 100644 spec/github_actions.database.yml diff --git a/.github/workflows/ruby.yml b/.github/workflows/ruby.yml new file mode 100644 index 0000000..a437088 --- /dev/null +++ b/.github/workflows/ruby.yml @@ -0,0 +1,79 @@ +name: Tests + +on: [push, pull_request] + +jobs: + test: + name: Test on Ruby ${{ matrix.ruby-version }} / Active Record ${{ matrix.rails }} + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + ruby-version: [ '2.7', '3.0', '3.1'] + rails: ['5_0', '5_1', '5_2', '6_0', '6_1', '7_0'] + exclude: + # exclude unsupported ruby versions: https://github.com/rails/rails/issues/40938 + - ruby-version: '3.0' + rails: '5_0' + - ruby-version: '3.0' + rails: '5_1' + - ruby-version: '3.0' + rails: '5_2' + - ruby-version: '3.1' + rails: '5_0' + - ruby-version: '3.1' + rails: '5_1' + - ruby-version: '3.1' + rails: '5_2' + + env: + TESTING_RAILS_VERSION: ${{ matrix.rails }} + BUNDLE_GEMFILE: ${{ github.workspace }}/gemfiles/activerecord_${{ matrix.rails }}.gemfile + + services: + postgres: + image: postgres + env: + POSTGRES_USER: crypt_keeper + POSTGRES_PASSWORD: crypt_keeper + POSTGRES_DB: crypt_keeper_providers + options: >- + --health-cmd pg_isready + --health-interval 10s + --health-timeout 5s + --health-retries 5 + ports: + - 5432:5432 + mysql: + image: mysql:5.7 + env: + MYSQL_DATABASE: crypt_keeper_providers + MYSQL_USER: crypt_keeper + MYSQL_PASSWORD: crypt_keeper + MYSQL_ROOT_PASSWORD: rootpassword + ports: + - 33306:3306 + options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3 + + steps: + - uses: actions/checkout@v2 + + - name: Setup System + run: sudo apt-get install libsqlite3-dev + + - name: Set up Ruby + uses: ruby/setup-ruby@v1 + with: + ruby-version: ${{ matrix.ruby-version }} + bundler-cache: true + + - name: Copy database config + run: | + cp spec/github_actions.database.yml spec/database.yml + + - name: Enable pgcrypto extension + run: | + PGPASSWORD=crypt_keeper psql crypt_keeper_providers -h localhost -p 5432 -U crypt_keeper -tc "CREATE EXTENSION IF NOT EXISTS pgcrypto;" + + - name: Run tests + run: bundle exec rake diff --git a/Appraisals b/Appraisals index a8d6497..4f973a5 100644 --- a/Appraisals +++ b/Appraisals @@ -11,7 +11,7 @@ appraise "activerecord_5_0" do gem "activerecord", "~> 5.0.0" gem "activesupport", "~> 5.0.0" - gem "sqlite3", "~> 1.3.6" + gem "sqlite3", "~> 1.3.11" end appraise "activerecord_5_1" do @@ -34,3 +34,10 @@ appraise "activerecord_6_1" do gem "activesupport", "~> 6.1.0" gem "pg", "~> 1.1" end + +appraise "activerecord_7_0" do + # We need this PR https://github.com/rails/rails/pull/43951 in order to support ruby 3.1 + gem "activerecord", github: "rails/rails", branch: "7-0-stable" + gem "activesupport", github: "rails/rails", branch: "7-0-stable" + gem "pg", "~> 1.1" +end diff --git a/Rakefile b/Rakefile index f899090..f1cc2a1 100644 --- a/Rakefile +++ b/Rakefile @@ -6,7 +6,7 @@ require "appraisal" RSpec::Core::RakeTask.new :spec Bundler::GemHelper.install_tasks -if !ENV["APPRAISAL_INITIALIZED"] && !ENV["TRAVIS"] +if !ENV["APPRAISAL_INITIALIZED"] && !ENV["TRAVIS"] && !ENV["GITHUB_ACTIONS"] task default: :appraisal else task default: :spec diff --git a/crypt_keeper.gemspec b/crypt_keeper.gemspec index 325fdcf..4602351 100644 --- a/crypt_keeper.gemspec +++ b/crypt_keeper.gemspec @@ -18,15 +18,15 @@ Gem::Specification.new do |gem| gem.post_install_message = "WARNING: CryptKeeper 2.0 contains breaking changes and may require you to reencrypt your data! Please view the README at https://github.com/jmazzi/crypt_keeper for more information." - gem.add_runtime_dependency 'activerecord', '>= 4.2', '< 6.2' - gem.add_runtime_dependency 'activesupport', '>= 4.2', '< 6.2' + gem.add_runtime_dependency 'activerecord', '>= 4.2', '<= 7' + gem.add_runtime_dependency 'activesupport', '>= 4.2', '<= 7' gem.add_development_dependency 'rspec', '~> 3.5.0' gem.add_development_dependency 'guard', '~> 2.6.1' gem.add_development_dependency 'guard-rspec', '~> 4.2.9' gem.add_development_dependency 'rake', '~> 10.3.1' gem.add_development_dependency 'rb-fsevent', '~> 0.9.1' - gem.add_development_dependency 'coveralls' + gem.add_development_dependency 'coveralls_reborn' gem.add_development_dependency 'appraisal', '~> 2.1.0' if RUBY_PLATFORM == 'java' diff --git a/gemfiles/activerecord_5_0.gemfile b/gemfiles/activerecord_5_0.gemfile index 993e2f3..42f1499 100644 --- a/gemfiles/activerecord_5_0.gemfile +++ b/gemfiles/activerecord_5_0.gemfile @@ -4,6 +4,6 @@ source "https://rubygems.org" gem "activerecord", "~> 5.0.0" gem "activesupport", "~> 5.0.0" -gem "sqlite3", "~> 1.3.6" +gem "sqlite3", "~> 1.3.11" gemspec :path => "../" diff --git a/gemfiles/activerecord_7_0.gemfile b/gemfiles/activerecord_7_0.gemfile new file mode 100644 index 0000000..53311f4 --- /dev/null +++ b/gemfiles/activerecord_7_0.gemfile @@ -0,0 +1,9 @@ +# This file was generated by Appraisal + +source "https://rubygems.org" + +gem "activerecord", :github => "rails/rails", :branch => "7-0-stable" +gem "activesupport", :github => "rails/rails", :branch => "7-0-stable" +gem "pg", "~> 1.1" + +gemspec :path => "../" diff --git a/lib/crypt_keeper/model.rb b/lib/crypt_keeper/model.rb index 2a1a491..7a18ed1 100644 --- a/lib/crypt_keeper/model.rb +++ b/lib/crypt_keeper/model.rb @@ -119,6 +119,9 @@ def decrypt_table! # Private: The encryptor class def encryptor_klass @encryptor_klass ||= "CryptKeeper::Provider::#{crypt_keeper_encryptor.to_s.camelize}".constantize + rescue NameError + # couldn’t constantize... + nil end # Private: The encryptor instance. diff --git a/spec/github_actions.database.yml b/spec/github_actions.database.yml new file mode 100644 index 0000000..88a26b5 --- /dev/null +++ b/spec/github_actions.database.yml @@ -0,0 +1,25 @@ +postgres: + adapter: postgresql + encoding: utf8 + reconnect: false + host: localhost + database: crypt_keeper_providers + pool: 5 + username: crypt_keeper + password: crypt_keeper + min_messages: WARNING +mysql: + adapter: mysql2 + encoding: utf8 + reconnect: false + database: crypt_keeper_providers + pool: 5 + host: 127.0.0.1 + port: 33306 + username: crypt_keeper + password: crypt_keeper +sqlite: + adapter: sqlite3 + encoding: utf8 + reconnect: false + database: ':memory:' From 53f720a9bc9a05da4dbc4ce42a4b7abbeaa8f608 Mon Sep 17 00:00:00 2001 From: Nik Wakelin Date: Wed, 12 Jan 2022 09:43:44 +1300 Subject: [PATCH 10/10] Allow Rails to the next point release --- crypt_keeper.gemspec | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crypt_keeper.gemspec b/crypt_keeper.gemspec index a25f06e..636575b 100644 --- a/crypt_keeper.gemspec +++ b/crypt_keeper.gemspec @@ -18,8 +18,8 @@ Gem::Specification.new do |gem| gem.post_install_message = "WARNING: CryptKeeper 2.0 contains breaking changes and may require you to reencrypt your data! Please view the README at https://github.com/jmazzi/crypt_keeper for more information." - gem.add_runtime_dependency 'activerecord', '>= 4.2', '<= 7' - gem.add_runtime_dependency 'activesupport', '>= 4.2', '<= 7' + gem.add_runtime_dependency 'activerecord', '>= 4.2', '< 7.1' + gem.add_runtime_dependency 'activesupport', '>= 4.2', '< 7.1' gem.add_development_dependency 'rspec', '~> 3.5.0' gem.add_development_dependency 'guard', '~> 2.6.1'