diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml
new file mode 100644
index 00000000..55c9224a
--- /dev/null
+++ b/.github/workflows/codeql-analysis.yml
@@ -0,0 +1,79 @@
+# For most projects, this workflow file will not need changing; you simply need
+# to commit it to your repository.
+#
+# You may wish to alter this file to override the set of languages analyzed,
+# or to provide custom queries or build logic.
+#
+# ******** NOTE ********
+# We have attempted to detect the languages in your repository. Please check
+# the `language` matrix defined below to confirm you have the correct set of
+# supported CodeQL languages.
+#
+name: "CodeQL"
+on:
+ push:
+ branches: [ "master" ]
+ pull_request:
+ # The branches below must be a subset of the branches above
+ branches: [ "master" ]
+ schedule:
+ - cron: '45 8 * * 3'
+
+jobs:
+ analyze:
+ name: Analyze
+ runs-on: ubuntu-latest
+ permissions:
+ actions: read
+ contents: read
+ security-events: write
+
+ strategy:
+ fail-fast: false
+ matrix:
+ language: [ 'ruby' ]
+ # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
+ # Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support
+
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v3
+
+ # Initializes the CodeQL tools for scanning.
+ - name: Initialize CodeQL
+ uses: github/codeql-action/init@v2
+ with:
+ languages: ${{ matrix.language }}
+ # If you wish to specify custom queries, you can do so here or in a config file.
+ # By default, queries listed here will override any specified in a config file.
+ # Prefix the list here with "+" to use these queries and those in the config file.
+
+ # Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
+ # queries: security-extended,security-and-quality
+
+
+ # Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
+ # If this step fails, then you should remove it and run the build manually (see below)
+ - name: Autobuild
+ uses: github/codeql-action/autobuild@v2
+
+ # âšī¸ Command-line programs to run using the OS shell.
+ # đ See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
+
+ # If the Autobuild fails above, remove it and uncomment the following three lines.
+ # modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance.
+
+ # - run: |
+ # echo "Run, Build Application using script"
+ # ./location_of_script_within_repo/buildscript.sh
+
+ - name: Perform CodeQL Analysis
+ uses: github/codeql-action/analyze@v2
+ with:
+ category: "/language:${{matrix.language}}"
+ - name: Setup Ruby, JRuby and TruffleRuby
+ # You may pin to the exact commit or the version.
+ # uses: ruby/setup-ruby@3068fa83f9cbd7ae106cac45483635a2f3a195c9
+ uses: ruby/setup-ruby@v1.117.0
+ with:
+ bundler: true
diff --git a/.gitignore b/.gitignore
index a2e2d631..c507a689 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,3 +4,5 @@
pkg
Gemfile.lock
coverage
+/.idea
+/gemfiles/*.gemfile.lock
diff --git a/.travis.base.yml b/.travis.base.yml
new file mode 100644
index 00000000..0623d46b
--- /dev/null
+++ b/.travis.base.yml
@@ -0,0 +1,38 @@
+os: linux
+dist: xenial
+language: ruby
+cache: bundler
+script: "bundle exec rake test"
+rvm:
+ - 2.0
+ - 2.1
+ - 2.2
+ - 2.3
+ - 2.4
+ - 2.5
+ - 2.6
+ - 2.7
+ - 3.0
+ - head
+ - rbx
+gemfile:
+ - gemfiles/rails_3.0.gemfile
+ - gemfiles/rails_3.1.gemfile
+ - gemfiles/rails_3.2.gemfile
+ - gemfiles/rails_4.0.gemfile
+ - gemfiles/rails_4.1.gemfile
+ - gemfiles/rails_4.2.gemfile
+ - gemfiles/rails_5.0.gemfile
+ - gemfiles/rails_5.1.gemfile
+ - gemfiles/rails_5.2.gemfile
+ - gemfiles/rails_6.0.gemfile
+ - gemfiles/rails_6.1.gemfile
+ - gemfiles/rails_7_edge.gemfile
+ - gemfiles/datamapper.gemfile
+ - gemfiles/sequel.gemfile
+jobs:
+ allow_failures:
+ - rvm: head
+ - gemfile: gemfiles/rails_7_edge.gemfile
+ - rvm: rbx
+ fast_finish: false
diff --git a/.travis.yml b/.travis.yml
index f75b2ede..a180ad9d 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,60 +1,158 @@
-sudo: false
+---
+os: linux
+dist: xenial
language: ruby
cache: bundler
+script: bundle exec rake test
rvm:
- - 2.0
- - 2.1
- - 2.2.2
- - 2.3.0
- - 2.4.0
- - 2.5.0
- - rbx
-env:
- - ACTIVERECORD=3.0.0
- - ACTIVERECORD=3.1.0
- - ACTIVERECORD=3.2.0
- - ACTIVERECORD=4.0.0
- - ACTIVERECORD=4.1.0
- - ACTIVERECORD=4.2.0
- - ACTIVERECORD=5.0.0
- - ACTIVERECORD=5.1.1
-matrix:
- exclude:
- - rvm: 2.0
- env: ACTIVERECORD=5.0.0
- - rvm: 2.0
- env: ACTIVERECORD=5.1.1
- - rvm: 2.1
- env: ACTIVERECORD=5.0.0
- - rvm: 2.1
- env: ACTIVERECORD=5.1.1
- - rvm: 2.4.0
- env: ACTIVERECORD=3.0.0
- - rvm: 2.4.0
- env: ACTIVERECORD=3.1.0
- - rvm: 2.4.0
- env: ACTIVERECORD=3.2.0
- - rvm: 2.4.0
- env: ACTIVERECORD=4.0.0
- - rvm: 2.4.0
- env: ACTIVERECORD=4.1.0
- - rvm: 2.5.0
- env: ACTIVERECORD=3.0.0
- - rvm: 2.5.0
- env: ACTIVERECORD=3.1.0
- - rvm: 2.5.0
- env: ACTIVERECORD=3.2.0
- - rvm: 2.5.0
- env: ACTIVERECORD=4.0.0
- - rvm: 2.5.0
- env: ACTIVERECORD=4.1.0
- - rvm: rbx
- env: ACTIVERECORD=5.0.0
- - rvm: rbx
- env: ACTIVERECORD=5.1.1
+- 2.0
+- 2.1
+- 2.2
+- 2.3
+- 2.4
+- 2.5
+- 2.6
+- 2.7
+- 3.0
+- head
+- rbx
+gemfile:
+- gemfiles/rails_3.0.gemfile
+- gemfiles/rails_3.1.gemfile
+- gemfiles/rails_3.2.gemfile
+- gemfiles/rails_4.0.gemfile
+- gemfiles/rails_4.1.gemfile
+- gemfiles/rails_4.2.gemfile
+- gemfiles/rails_5.0.gemfile
+- gemfiles/rails_5.1.gemfile
+- gemfiles/rails_5.2.gemfile
+- gemfiles/rails_6.0.gemfile
+- gemfiles/rails_6.1.gemfile
+- gemfiles/rails_7_edge.gemfile
+- gemfiles/datamapper.gemfile
+- gemfiles/sequel.gemfile
+jobs:
allow_failures:
- - rvm: rbx
- fast_finish: true
-addons:
- code_climate:
- repo_token: a90435ed4954dd6e9f3697a20c5bc3754f67d94703f870e8fc7b00f69f5b2d06
+ - rvm: head
+ - gemfile: gemfiles/rails_7_edge.gemfile
+ - rvm: rbx
+ - gemfile: gemfiles/rails_4.2.gemfile
+ rvm: '2.0'
+ - gemfile: gemfiles/rails_4.2.gemfile
+ rvm: '2.1'
+ - gemfile: gemfiles/rails_4.2.gemfile
+ rvm: '2.2'
+ - gemfile: gemfiles/rails_4.2.gemfile
+ rvm: '2.3'
+ - gemfile: gemfiles/rails_4.2.gemfile
+ rvm: '2.4'
+ fast_finish: false
+ exclude:
+ - gemfile: gemfiles/rails_3.0.gemfile
+ rvm: '2.4'
+ - gemfile: gemfiles/rails_3.0.gemfile
+ rvm: '2.5'
+ - gemfile: gemfiles/rails_3.0.gemfile
+ rvm: '2.6'
+ - gemfile: gemfiles/rails_3.0.gemfile
+ rvm: '2.7'
+ - gemfile: gemfiles/rails_3.0.gemfile
+ rvm: '3.0'
+ - gemfile: gemfiles/rails_3.0.gemfile
+ rvm: head
+ - gemfile: gemfiles/rails_3.1.gemfile
+ rvm: '2.4'
+ - gemfile: gemfiles/rails_3.1.gemfile
+ rvm: '2.5'
+ - gemfile: gemfiles/rails_3.1.gemfile
+ rvm: '2.6'
+ - gemfile: gemfiles/rails_3.1.gemfile
+ rvm: '2.7'
+ - gemfile: gemfiles/rails_3.1.gemfile
+ rvm: '3.0'
+ - gemfile: gemfiles/rails_3.1.gemfile
+ rvm: head
+ - gemfile: gemfiles/rails_3.2.gemfile
+ rvm: '2.4'
+ - gemfile: gemfiles/rails_3.2.gemfile
+ rvm: '2.5'
+ - gemfile: gemfiles/rails_3.2.gemfile
+ rvm: '2.6'
+ - gemfile: gemfiles/rails_3.2.gemfile
+ rvm: '2.7'
+ - gemfile: gemfiles/rails_3.2.gemfile
+ rvm: '3.0'
+ - gemfile: gemfiles/rails_3.2.gemfile
+ rvm: head
+ - gemfile: gemfiles/rails_4.0.gemfile
+ rvm: '2.4'
+ - gemfile: gemfiles/rails_4.0.gemfile
+ rvm: '2.5'
+ - gemfile: gemfiles/rails_4.0.gemfile
+ rvm: '2.6'
+ - gemfile: gemfiles/rails_4.0.gemfile
+ rvm: '2.7'
+ - gemfile: gemfiles/rails_4.0.gemfile
+ rvm: '3.0'
+ - gemfile: gemfiles/rails_4.0.gemfile
+ rvm: head
+ - gemfile: gemfiles/rails_4.1.gemfile
+ rvm: '2.4'
+ - gemfile: gemfiles/rails_4.1.gemfile
+ rvm: '2.5'
+ - gemfile: gemfiles/rails_4.1.gemfile
+ rvm: '2.6'
+ - gemfile: gemfiles/rails_4.1.gemfile
+ rvm: '2.7'
+ - gemfile: gemfiles/rails_4.1.gemfile
+ rvm: '3.0'
+ - gemfile: gemfiles/rails_4.1.gemfile
+ rvm: head
+ - gemfile: gemfiles/rails_5.0.gemfile
+ rvm: '2.0'
+ - gemfile: gemfiles/rails_5.0.gemfile
+ rvm: '2.1'
+ - gemfile: gemfiles/rails_5.1.gemfile
+ rvm: '2.0'
+ - gemfile: gemfiles/rails_5.1.gemfile
+ rvm: '2.1'
+ - gemfile: gemfiles/rails_5.2.gemfile
+ rvm: '2.0'
+ - gemfile: gemfiles/rails_5.2.gemfile
+ rvm: '2.1'
+ - gemfile: gemfiles/rails_5.2.gemfile
+ rvm: '2.2'
+ - gemfile: gemfiles/rails_5.2.gemfile
+ rvm: '2.3'
+ - gemfile: gemfiles/rails_5.2.gemfile
+ rvm: '2.4'
+ - gemfile: gemfiles/rails_6.0.gemfile
+ rvm: '2.0'
+ - gemfile: gemfiles/rails_6.0.gemfile
+ rvm: '2.1'
+ - gemfile: gemfiles/rails_6.0.gemfile
+ rvm: '2.2'
+ - gemfile: gemfiles/rails_6.0.gemfile
+ rvm: '2.3'
+ - gemfile: gemfiles/rails_6.0.gemfile
+ rvm: '2.4'
+ - gemfile: gemfiles/rails_6.1.gemfile
+ rvm: '2.0'
+ - gemfile: gemfiles/rails_6.1.gemfile
+ rvm: '2.1'
+ - gemfile: gemfiles/rails_6.1.gemfile
+ rvm: '2.2'
+ - gemfile: gemfiles/rails_6.1.gemfile
+ rvm: '2.3'
+ - gemfile: gemfiles/rails_6.1.gemfile
+ rvm: '2.4'
+ - gemfile: gemfiles/rails_7_edge.gemfile
+ rvm: '2.0'
+ - gemfile: gemfiles/rails_7_edge.gemfile
+ rvm: '2.1'
+ - gemfile: gemfiles/rails_7_edge.gemfile
+ rvm: '2.2'
+ - gemfile: gemfiles/rails_7_edge.gemfile
+ rvm: '2.3'
+ - gemfile: gemfiles/rails_7_edge.gemfile
+ rvm: '2.4'
diff --git a/Appraisals b/Appraisals
new file mode 100644
index 00000000..48cdf6ed
--- /dev/null
+++ b/Appraisals
@@ -0,0 +1,32 @@
+
+SUPPORTED_RAILS_VERSIONS = %w[3.0 3.1 3.2 4.0 4.1 4.2 5.0 5.1 5.2 6.0 6.1]
+
+SUPPORTED_RAILS_VERSIONS.each do |rails_ver|
+ appraise "rails-#{rails_ver}" do
+ gem 'activerecord', "~> #{rails_ver}.x"
+ gem 'actionpack', "~> #{rails_ver}.x"
+
+ if %w[3.0 3.1 3.2].include?(rails_ver)
+ gem 'sqlite3'
+ #gem 'activerecord-sqlite3-adapter'
+ end
+
+ end
+end
+
+appraise 'rails-7-edge' do
+ gem 'activerecord', git: 'https://github.com/rails/rails', branch: 'main'
+ gem 'actionpack', git: 'https://github.com/rails/rails', branch: 'main'
+end
+
+appraise 'datamapper' do
+ gem 'datamapper'
+ gem 'dm-sqlite-adapter'
+end
+
+appraise 'sequel' do
+ gem 'sequel'
+end
+
+
+
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 52ef721b..98975883 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,10 @@
# attr_encrypted #
+## 3.2.0 ##
+* Added: Support Rails upto 6.2 and Ruby upto 3.0 (@mvastola)
+* Added: `appraisal` gem to organize testing with different versions of dependencies (@mvastola)
+* Changed: Outdated version dependencies in `gemspec` (@mvastola)
+
## 3.1.0 ##
* Added: Abitilty to encrypt empty values. (@tamird)
* Added: MIT license
diff --git a/Gemfile b/Gemfile
index fa75df15..7149fa36 100644
--- a/Gemfile
+++ b/Gemfile
@@ -1,3 +1,20 @@
source 'https://rubygems.org'
gemspec
+
+gem 'sqlite3'
+
+if RUBY_VERSION < '2.1.0'
+ gem 'nokogiri'
+ gem 'public_suffix', '< 3.0.0'
+end
+
+platforms :jruby do
+ gem 'activerecord-jdbcsqlite3-adapter'
+ gem 'jdbc-sqlite3', '< 3.8.7' # 3.8.7 is nice and broke
+end
+
+group :development do
+ gem 'wwtd', require: false
+ gem 'rubocop', require: false
+end
diff --git a/README.md b/README.md
index 87ac7219..8f5e5f1f 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,3 @@
-## Maintainer(s) wanted!!!
-
-**If you have an interest in maintaining this project... please see https://github.com/attr-encrypted/attr_encrypted/issues/379**
-
# attr_encrypted
[](https://travis-ci.org/attr-encrypted/attr_encrypted) [](https://codeclimate.com/github/attr-encrypted/attr_encrypted/coverage) [](https://codeclimate.com/github/attr-encrypted/attr_encrypted) [](https://badge.fury.io/rb/attr_encrypted) [](https://hakiri.io/github/attr-encrypted/attr_encrypted/master)
@@ -10,7 +6,6 @@ Generates attr_accessors that transparently encrypt and decrypt attributes.
It works with ANY class, however, you get a few extra features when you're using it with `ActiveRecord`, `DataMapper`, or `Sequel`.
-
## Installation
Add attr_encrypted to your gemfile:
diff --git a/Rakefile b/Rakefile
index 3dbc96ce..7f453bb0 100644
--- a/Rakefile
+++ b/Rakefile
@@ -3,6 +3,7 @@
require 'rake/testtask'
require 'rdoc/task'
require "bundler/gem_tasks"
+require 'wwtd/tasks'
desc 'Test the attr_encrypted gem.'
Rake::TestTask.new(:test) do |t|
@@ -22,4 +23,7 @@ Rake::RDocTask.new(:rdoc) do |rdoc|
end
desc 'Default: run unit tests.'
-task :default => :test
+if !ENV["APPRAISAL_INITIALIZED"] && !ENV["TRAVIS"]
+ task :default => :appraisal
+end
+#task :default => :test
diff --git a/attr_encrypted.gemspec b/attr_encrypted.gemspec
index 41f96ed9..d214ae0f 100644
--- a/attr_encrypted.gemspec
+++ b/attr_encrypted.gemspec
@@ -7,62 +7,47 @@ require 'attr_encrypted/version'
require 'date'
Gem::Specification.new do |s|
- s.name = 'attr_encrypted'
- s.version = AttrEncrypted::Version.string
- s.date = Date.today
+ s.name = 'attr_encrypted'
+ s.version = AttrEncrypted::Version.string
s.summary = 'Encrypt and decrypt attributes'
s.description = 'Generates attr_accessors that encrypt and decrypt attributes transparently'
- s.authors = ['Sean Huber', 'S. Brent Faulkner', 'William Monk', 'Stephen Aghaulor']
- s.email = ['seah@shuber.io', 'sbfaulkner@gmail.com', 'billy.monk@gmail.com', 'saghaulor@gmail.com']
- s.homepage = 'http://github.com/attr-encrypted/attr_encrypted'
- s.license = 'MIT'
+ s.authors = ['Mike Vastola', 'Rob Law', 'Sean Huber', 'S. Brent Faulkner', 'William Monk', 'Stephen Aghaulor']
+ s.email = ['open-source@dailypay.com']
+ s.license = 'MIT'
- s.has_rdoc = false
- s.rdoc_options = ['--line-numbers', '--inline-source', '--main', 'README.rdoc']
+ s.metadata = {
+ 'homepage_uri' => "https://github.com/attr-encrypted/attr_encrypted",
+ 'source_code_uri' => "https://github.com/attr-encrypted/attr_encrypted",
+ 'changelog_uri' => "https://github.com/attr-encrypted/attr_encrypted/blob/master/CHANGELOG.md",
+ 'bug_tracker_uri' => "https://github.com/attr-encrypted/attr_encrypted/issues",
+ 'documentation_uri' => "https://rubydoc.info/gems/attr_encrypted",
+ 'wiki_uri' => "https://github.com/attr-encrypted/attr_encrypted/wiki",
+ }
- s.require_paths = ['lib']
+ s.rdoc_options = %w[--line-numbers --inline-source --main README.rdoc]
+ s.extra_rdoc_files = %w[README.md]
+ s.require_paths = ['lib']
- s.files = `git ls-files`.split("\n")
- s.test_files = `git ls-files -- test/*`.split("\n")
+ s.files = `git ls-files`.split("\n")
+ s.test_files = `git ls-files -- test/*`.split("\n")
s.required_ruby_version = '>= 2.0.0'
- s.add_dependency('encryptor', ['~> 3.0.0'])
- # support for testing with specific active record version
- activerecord_version = if ENV.key?('ACTIVERECORD')
- "~> #{ENV['ACTIVERECORD']}"
- else
- '>= 2.0.0'
- end
- s.add_development_dependency('activerecord', activerecord_version)
- s.add_development_dependency('actionpack', activerecord_version)
- s.add_development_dependency('datamapper')
- s.add_development_dependency('rake')
- s.add_development_dependency('minitest')
- s.add_development_dependency('sequel')
- if RUBY_VERSION < '2.1.0'
- s.add_development_dependency('nokogiri', '< 1.7.0')
- s.add_development_dependency('public_suffix', '< 3.0.0')
- end
- if defined?(RUBY_ENGINE) && RUBY_ENGINE.to_sym == :jruby
- s.add_development_dependency('activerecord-jdbcsqlite3-adapter')
- s.add_development_dependency('jdbc-sqlite3', '< 3.8.7') # 3.8.7 is nice and broke
- else
- s.add_development_dependency('sqlite3')
- end
- s.add_development_dependency('dm-sqlite-adapter')
- s.add_development_dependency('simplecov')
- s.add_development_dependency('simplecov-rcov')
- s.add_development_dependency("codeclimate-test-reporter", '<= 0.6.0')
+ s.add_dependency 'encryptor', '~> 3.0.0'
+ s.add_development_dependency 'appraisal'
+ s.add_development_dependency 'rake'
+ s.add_development_dependency 'minitest'
+ s.add_development_dependency 'simplecov'
+ s.add_development_dependency 'simplecov-rcov'
+ s.add_development_dependency 'codeclimate-test-reporter', '<= 0.6.0'
- s.cert_chain = ['certs/saghaulor.pem']
+ s.cert_chain = %w[certs/saghaulor.pem]
s.signing_key = File.expand_path("~/.ssh/gem-private_key.pem") if $0 =~ /gem\z/
s.post_install_message = "\n\n\nWARNING: Several insecure default options and features were deprecated in attr_encrypted v2.0.0.\n
Additionally, there was a bug in Encryptor v2.0.0 that insecurely encrypted data when using an AES-*-GCM algorithm.\n
This bug was fixed but introduced breaking changes between v2.x and v3.x.\n
Please see the README for more information regarding upgrading to attr_encrypted v3.0.0.\n\n\n"
-
end
diff --git a/gemfiles/datamapper.gemfile b/gemfiles/datamapper.gemfile
new file mode 100644
index 00000000..947dec8f
--- /dev/null
+++ b/gemfiles/datamapper.gemfile
@@ -0,0 +1,19 @@
+# This file was generated by Appraisal
+
+source "https://rubygems.org"
+
+gem "sqlite3"
+gem "datamapper"
+gem "dm-sqlite-adapter"
+
+group :development do
+ gem "wwtd", require: false
+ gem "rubocop", require: false
+end
+
+platforms :jruby do
+ gem "activerecord-jdbcsqlite3-adapter"
+ gem "jdbc-sqlite3", "< 3.8.7"
+end
+
+gemspec path: "../"
diff --git a/gemfiles/rails_3.0.gemfile b/gemfiles/rails_3.0.gemfile
new file mode 100644
index 00000000..6186e5f2
--- /dev/null
+++ b/gemfiles/rails_3.0.gemfile
@@ -0,0 +1,19 @@
+# This file was generated by Appraisal
+
+source "https://rubygems.org"
+
+gem "sqlite3"
+gem "activerecord", "~> 3.0.x"
+gem "actionpack", "~> 3.0.x"
+
+group :development do
+ gem "wwtd", require: false
+ gem "rubocop", require: false
+end
+
+platforms :jruby do
+ gem "activerecord-jdbcsqlite3-adapter"
+ gem "jdbc-sqlite3", "< 3.8.7"
+end
+
+gemspec path: "../"
diff --git a/gemfiles/rails_3.1.gemfile b/gemfiles/rails_3.1.gemfile
new file mode 100644
index 00000000..26d35a83
--- /dev/null
+++ b/gemfiles/rails_3.1.gemfile
@@ -0,0 +1,19 @@
+# This file was generated by Appraisal
+
+source "https://rubygems.org"
+
+gem "sqlite3"
+gem "activerecord", "~> 3.1.x"
+gem "actionpack", "~> 3.1.x"
+
+group :development do
+ gem "wwtd", require: false
+ gem "rubocop", require: false
+end
+
+platforms :jruby do
+ gem "activerecord-jdbcsqlite3-adapter"
+ gem "jdbc-sqlite3", "< 3.8.7"
+end
+
+gemspec path: "../"
diff --git a/gemfiles/rails_3.2.gemfile b/gemfiles/rails_3.2.gemfile
new file mode 100644
index 00000000..57ee512e
--- /dev/null
+++ b/gemfiles/rails_3.2.gemfile
@@ -0,0 +1,19 @@
+# This file was generated by Appraisal
+
+source "https://rubygems.org"
+
+gem "sqlite3"
+gem "activerecord", "~> 3.2.x"
+gem "actionpack", "~> 3.2.x"
+
+group :development do
+ gem "wwtd", require: false
+ gem "rubocop", require: false
+end
+
+platforms :jruby do
+ gem "activerecord-jdbcsqlite3-adapter"
+ gem "jdbc-sqlite3", "< 3.8.7"
+end
+
+gemspec path: "../"
diff --git a/gemfiles/rails_4.0.gemfile b/gemfiles/rails_4.0.gemfile
new file mode 100644
index 00000000..9ff9a3bc
--- /dev/null
+++ b/gemfiles/rails_4.0.gemfile
@@ -0,0 +1,19 @@
+# This file was generated by Appraisal
+
+source "https://rubygems.org"
+
+gem "sqlite3"
+gem "activerecord", "~> 4.0.x"
+gem "actionpack", "~> 4.0.x"
+
+group :development do
+ gem "wwtd", require: false
+ gem "rubocop", require: false
+end
+
+platforms :jruby do
+ gem "activerecord-jdbcsqlite3-adapter"
+ gem "jdbc-sqlite3", "< 3.8.7"
+end
+
+gemspec path: "../"
diff --git a/gemfiles/rails_4.1.gemfile b/gemfiles/rails_4.1.gemfile
new file mode 100644
index 00000000..ac7fb5be
--- /dev/null
+++ b/gemfiles/rails_4.1.gemfile
@@ -0,0 +1,19 @@
+# This file was generated by Appraisal
+
+source "https://rubygems.org"
+
+gem "sqlite3"
+gem "activerecord", "~> 4.1.x"
+gem "actionpack", "~> 4.1.x"
+
+group :development do
+ gem "wwtd", require: false
+ gem "rubocop", require: false
+end
+
+platforms :jruby do
+ gem "activerecord-jdbcsqlite3-adapter"
+ gem "jdbc-sqlite3", "< 3.8.7"
+end
+
+gemspec path: "../"
diff --git a/gemfiles/rails_4.2.gemfile b/gemfiles/rails_4.2.gemfile
new file mode 100644
index 00000000..79b59bf4
--- /dev/null
+++ b/gemfiles/rails_4.2.gemfile
@@ -0,0 +1,19 @@
+# This file was generated by Appraisal
+
+source "https://rubygems.org"
+
+gem "sqlite3"
+gem "activerecord", "~> 4.2.x"
+gem "actionpack", "~> 4.2.x"
+
+group :development do
+ gem "wwtd", require: false
+ gem "rubocop", require: false
+end
+
+platforms :jruby do
+ gem "activerecord-jdbcsqlite3-adapter"
+ gem "jdbc-sqlite3", "< 3.8.7"
+end
+
+gemspec path: "../"
diff --git a/gemfiles/rails_5.0.gemfile b/gemfiles/rails_5.0.gemfile
new file mode 100644
index 00000000..2007eb36
--- /dev/null
+++ b/gemfiles/rails_5.0.gemfile
@@ -0,0 +1,19 @@
+# This file was generated by Appraisal
+
+source "https://rubygems.org"
+
+gem "sqlite3"
+gem "activerecord", "~> 5.0.x"
+gem "actionpack", "~> 5.0.x"
+
+group :development do
+ gem "wwtd", require: false
+ gem "rubocop", require: false
+end
+
+platforms :jruby do
+ gem "activerecord-jdbcsqlite3-adapter"
+ gem "jdbc-sqlite3", "< 3.8.7"
+end
+
+gemspec path: "../"
diff --git a/gemfiles/rails_5.1.gemfile b/gemfiles/rails_5.1.gemfile
new file mode 100644
index 00000000..4359fe23
--- /dev/null
+++ b/gemfiles/rails_5.1.gemfile
@@ -0,0 +1,19 @@
+# This file was generated by Appraisal
+
+source "https://rubygems.org"
+
+gem "sqlite3"
+gem "activerecord", "~> 5.1.x"
+gem "actionpack", "~> 5.1.x"
+
+group :development do
+ gem "wwtd", require: false
+ gem "rubocop", require: false
+end
+
+platforms :jruby do
+ gem "activerecord-jdbcsqlite3-adapter"
+ gem "jdbc-sqlite3", "< 3.8.7"
+end
+
+gemspec path: "../"
diff --git a/gemfiles/rails_5.2.gemfile b/gemfiles/rails_5.2.gemfile
new file mode 100644
index 00000000..c0c34a9c
--- /dev/null
+++ b/gemfiles/rails_5.2.gemfile
@@ -0,0 +1,19 @@
+# This file was generated by Appraisal
+
+source "https://rubygems.org"
+
+gem "sqlite3"
+gem "activerecord", "~> 5.2.x"
+gem "actionpack", "~> 5.2.x"
+
+group :development do
+ gem "wwtd", require: false
+ gem "rubocop", require: false
+end
+
+platforms :jruby do
+ gem "activerecord-jdbcsqlite3-adapter"
+ gem "jdbc-sqlite3", "< 3.8.7"
+end
+
+gemspec path: "../"
diff --git a/gemfiles/rails_6.0.gemfile b/gemfiles/rails_6.0.gemfile
new file mode 100644
index 00000000..faa558d2
--- /dev/null
+++ b/gemfiles/rails_6.0.gemfile
@@ -0,0 +1,19 @@
+# This file was generated by Appraisal
+
+source "https://rubygems.org"
+
+gem "sqlite3"
+gem "activerecord", "~> 6.0.x"
+gem "actionpack", "~> 6.0.x"
+
+group :development do
+ gem "wwtd", require: false
+ gem "rubocop", require: false
+end
+
+platforms :jruby do
+ gem "activerecord-jdbcsqlite3-adapter"
+ gem "jdbc-sqlite3", "< 3.8.7"
+end
+
+gemspec path: "../"
diff --git a/gemfiles/rails_6.1.gemfile b/gemfiles/rails_6.1.gemfile
new file mode 100644
index 00000000..6d2dc9e5
--- /dev/null
+++ b/gemfiles/rails_6.1.gemfile
@@ -0,0 +1,19 @@
+# This file was generated by Appraisal
+
+source "https://rubygems.org"
+
+gem "sqlite3"
+gem "activerecord", "~> 6.1.x"
+gem "actionpack", "~> 6.1.x"
+
+group :development do
+ gem "wwtd", require: false
+ gem "rubocop", require: false
+end
+
+platforms :jruby do
+ gem "activerecord-jdbcsqlite3-adapter"
+ gem "jdbc-sqlite3", "< 3.8.7"
+end
+
+gemspec path: "../"
diff --git a/gemfiles/rails_6.2.gemfile b/gemfiles/rails_6.2.gemfile
new file mode 100644
index 00000000..c5f9fd75
--- /dev/null
+++ b/gemfiles/rails_6.2.gemfile
@@ -0,0 +1,13 @@
+# This file was generated by Appraisal
+
+source "https://rubygems.org"
+
+gem "activerecord", "~> 6.2.x"
+gem "actionpack", "~> 6.2.x"
+
+group :development do
+ gem "wwtd", require: false
+ gem "rubocop", require: false
+end
+
+gemspec path: "../"
diff --git a/gemfiles/rails_7_edge.gemfile b/gemfiles/rails_7_edge.gemfile
new file mode 100644
index 00000000..1124155b
--- /dev/null
+++ b/gemfiles/rails_7_edge.gemfile
@@ -0,0 +1,19 @@
+# This file was generated by Appraisal
+
+source "https://rubygems.org"
+
+gem "sqlite3"
+gem "activerecord", git: "https://github.com/rails/rails", branch: "main"
+gem "actionpack", git: "https://github.com/rails/rails", branch: "main"
+
+group :development do
+ gem "wwtd", require: false
+ gem "rubocop", require: false
+end
+
+platforms :jruby do
+ gem "activerecord-jdbcsqlite3-adapter"
+ gem "jdbc-sqlite3", "< 3.8.7"
+end
+
+gemspec path: "../"
diff --git a/gemfiles/sequel.gemfile b/gemfiles/sequel.gemfile
new file mode 100644
index 00000000..e1932f3b
--- /dev/null
+++ b/gemfiles/sequel.gemfile
@@ -0,0 +1,18 @@
+# This file was generated by Appraisal
+
+source "https://rubygems.org"
+
+gem "sqlite3"
+gem "sequel"
+
+group :development do
+ gem "wwtd", require: false
+ gem "rubocop", require: false
+end
+
+platforms :jruby do
+ gem "activerecord-jdbcsqlite3-adapter"
+ gem "jdbc-sqlite3", "< 3.8.7"
+end
+
+gemspec path: "../"
diff --git a/lib/attr_encrypted/version.rb b/lib/attr_encrypted/version.rb
index 723ebe9f..34d4ea4d 100644
--- a/lib/attr_encrypted/version.rb
+++ b/lib/attr_encrypted/version.rb
@@ -4,7 +4,7 @@ module AttrEncrypted
# Contains information about this gem's version
module Version
MAJOR = 3
- MINOR = 1
+ MINOR = 2
PATCH = 0
# Returns a version string by joining MAJOR, MINOR, and PATCH with '.'
@@ -15,5 +15,12 @@ module Version
def self.string
[MAJOR, MINOR, PATCH].join('.')
end
+
+ # Return current version as a `Gem::Version` object (for easier comparison)
+ #
+ # @return [Gem::Version] the current version of the gem
+ def get
+ ::Gem::Version.new string
+ end
end
end
diff --git a/scripts/generate_travis_excludes.rb b/scripts/generate_travis_excludes.rb
new file mode 100755
index 00000000..1770aa8c
--- /dev/null
+++ b/scripts/generate_travis_excludes.rb
@@ -0,0 +1,81 @@
+#!/usr/bin/env ruby
+
+require 'rubygems'
+require 'yaml'
+
+class String
+ def versionish?
+ ::Gem::Version.correct?(self)
+ end
+end
+
+class Numeric
+ def versionish?
+ true
+ end
+end
+
+TRAVIS_TEMPLATE_PATH = File.expand_path('../.travis.base.yml', __dir__)
+TRAVIS_CONFIG_PATH = File.expand_path('../.travis.yml', __dir__)
+
+GEMFILE_RUBY_VERSIONS = {
+ 'gemfiles/rails_3.0.gemfile': '< 2.4',
+ 'gemfiles/rails_3.1.gemfile': '< 2.4',
+ 'gemfiles/rails_3.2.gemfile': '< 2.4',
+ 'gemfiles/rails_4.0.gemfile': '< 2.4',
+ 'gemfiles/rails_4.1.gemfile': '< 2.4',
+ # apparently supports up to at least ruby 2.5
+ 'gemfiles/rails_4.2.gemfile': '>= 0',
+ 'gemfiles/rails_5.0.gemfile': '>= 2.2',
+ 'gemfiles/rails_5.1.gemfile': '>= 2.2',
+ 'gemfiles/rails_5.2.gemfile': '>= 2.5',
+ 'gemfiles/rails_6.0.gemfile': '>= 2.5',
+ 'gemfiles/rails_6.1.gemfile': '>= 2.5',
+ 'gemfiles/rails_7_edge.gemfile': '>= 2.5',
+ #'gemfiles/datamapper.gemfile': '>= 0',
+ #'gemfiles/sequel.gemfile': '>= 0',
+}.transform_values { |ver| Gem::Requirement.create(ver.to_s) }
+
+GEMFILE_FAILABLE_RUBY_VERSIONS = {
+ 'gemfiles/rails_4.2.gemfile': '>= 2.5',
+}.transform_values { |ver| Gem::Requirement.create(ver.to_s) }
+
+TREAT_RUBY_HEAD_AS = Gem::Version.new('3.1')
+
+travis_config = YAML.load_file(TRAVIS_TEMPLATE_PATH)
+
+ruby_versions = travis_config['rvm'].select(&:versionish?).map { |ver| Gem::Version.new(ver) }
+ruby_versions << TREAT_RUBY_HEAD_AS
+
+travis_config['jobs'] ||= {}
+excludes = (travis_config['jobs']['exclude'] ||= [])
+failables = (travis_config['jobs']['allow_failures'] ||= [])
+
+requirement_combinations = GEMFILE_RUBY_VERSIONS.to_a.product(ruby_versions)
+failable_combinations = GEMFILE_FAILABLE_RUBY_VERSIONS.to_a.product(ruby_versions)
+
+requirement_combinations.each do |((gemfile, constraint), ruby_ver)|
+ next if constraint.satisfied_by?(ruby_ver)
+
+ rvm = ruby_ver == TREAT_RUBY_HEAD_AS ? 'head' : ruby_ver.to_s
+ excludes << {
+ 'gemfile' => gemfile.to_s,
+ 'rvm' => rvm
+ }
+end
+
+failable_combinations.each do |((gemfile, constraint), ruby_ver)|
+ next if constraint.satisfied_by?(ruby_ver)
+
+ rvm = ruby_ver == TREAT_RUBY_HEAD_AS ? 'head' : ruby_ver.to_s
+ failables << {
+ 'gemfile' => gemfile.to_s,
+ 'rvm' => rvm
+ }
+end
+
+File.open TRAVIS_CONFIG_PATH, 'wt' do |f|
+ YAML.dump(travis_config, f)
+end
+
+printf "Done. (%d excludes and %d allowed failures)\n", excludes.size, failables.size
diff --git a/test/active_record_test.rb b/test/active_record_test.rb
index 8ec31aea..12143773 100644
--- a/test/active_record_test.rb
+++ b/test/active_record_test.rb
@@ -1,6 +1,7 @@
# frozen_string_literal: true
require_relative 'test_helper'
+return unless defined?(ActiveRecord)
ActiveRecord::Base.establish_connection(adapter: 'sqlite3', database: ':memory:')
diff --git a/test/compatibility_test.rb b/test/compatibility_test.rb
index 7585895e..18351533 100644
--- a/test/compatibility_test.rb
+++ b/test/compatibility_test.rb
@@ -2,6 +2,7 @@
# -*- encoding: utf-8 -*-
require_relative 'test_helper'
+return unless defined?(ActiveRecord)
# Test to ensure that existing representations in database do not break on
# migrating to new versions of this gem. This ensures that future versions of
diff --git a/test/data_mapper_test.rb b/test/data_mapper_test.rb
index 3fb284a6..7c3dc00f 100644
--- a/test/data_mapper_test.rb
+++ b/test/data_mapper_test.rb
@@ -1,6 +1,7 @@
# frozen_string_literal: true
require_relative 'test_helper'
+return unless defined?(DataMapper)
DataMapper.setup(:default, 'sqlite3::memory:')
diff --git a/test/legacy_active_record_test.rb b/test/legacy_active_record_test.rb
index 80231857..5c43e565 100644
--- a/test/legacy_active_record_test.rb
+++ b/test/legacy_active_record_test.rb
@@ -2,6 +2,7 @@
# -*- encoding: utf-8 -*-
require_relative 'test_helper'
+return unless defined?(ActiveRecord)
ActiveRecord::Base.establish_connection :adapter => 'sqlite3', :database => ':memory:'
diff --git a/test/legacy_data_mapper_test.rb b/test/legacy_data_mapper_test.rb
index 03916dd9..e450b5c9 100644
--- a/test/legacy_data_mapper_test.rb
+++ b/test/legacy_data_mapper_test.rb
@@ -1,6 +1,7 @@
# frozen_string_literal: true
require_relative 'test_helper'
+return unless defined?(DataMapper)
DataMapper.setup(:default, 'sqlite3::memory:')
diff --git a/test/legacy_sequel_test.rb b/test/legacy_sequel_test.rb
index fd46301e..7c67d942 100644
--- a/test/legacy_sequel_test.rb
+++ b/test/legacy_sequel_test.rb
@@ -1,6 +1,7 @@
# frozen_string_literal: true
require_relative 'test_helper'
+return unless defined?(Sequel)
DB.create_table :legacy_humans do
primary_key :id
diff --git a/test/sequel_test.rb b/test/sequel_test.rb
index 1df52031..2926ae28 100644
--- a/test/sequel_test.rb
+++ b/test/sequel_test.rb
@@ -1,6 +1,7 @@
# frozen_string_literal: true
require_relative 'test_helper'
+return unless defined?(Sequel)
DB.create_table :humans do
primary_key :id