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 [![Build Status](https://secure.travis-ci.org/attr-encrypted/attr_encrypted.svg)](https://travis-ci.org/attr-encrypted/attr_encrypted) [![Test Coverage](https://codeclimate.com/github/attr-encrypted/attr_encrypted/badges/coverage.svg)](https://codeclimate.com/github/attr-encrypted/attr_encrypted/coverage) [![Code Climate](https://codeclimate.com/github/attr-encrypted/attr_encrypted/badges/gpa.svg)](https://codeclimate.com/github/attr-encrypted/attr_encrypted) [![Gem Version](https://badge.fury.io/rb/attr_encrypted.svg)](https://badge.fury.io/rb/attr_encrypted) [![security](https://hakiri.io/github/attr-encrypted/attr_encrypted/master.svg)](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