diff --git a/.github/workflows/ruby.yml b/.github/workflows/ruby.yml index 55ec56b..4994ebb 100644 --- a/.github/workflows/ruby.yml +++ b/.github/workflows/ruby.yml @@ -26,15 +26,8 @@ jobs: strategy: fail-fast: false matrix: - gemfile: ['5.2', '6.0', '6.1', '7.0'] - ruby-version: ['2.6', '2.7', '3.0'] - exclude: - - gemfile: '5.2' - ruby-version: '2.7' - - gemfile: '5.2' - ruby-version: '3.0' - - gemfile: '7.0' - ruby-version: '2.6' + gemfile: ['7.0', '7.1'] + ruby-version: ['3.1', '3.2'] env: BUNDLE_GEMFILE: ${{ github.workspace }}/gemfiles/${{ matrix.gemfile }}.gemfile diff --git a/.gitignore b/.gitignore index a23586f..bcec2c9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ Gemfile.lock gemfiles/*.lock +TAGS diff --git a/.rubocop.yml b/.rubocop.yml new file mode 100644 index 0000000..72c675b --- /dev/null +++ b/.rubocop.yml @@ -0,0 +1,22 @@ +# .rubocop.yml + +# We want Exclude directives from different +# config files to get merged, not overwritten +inherit_mode: + merge: + - Exclude + +require: + - standard + - standard-custom + - standard-performance + - rubocop-performance + +inherit_gem: + standard: config/base.yml + standard-performance: config/base.yml + standard-custom: config/base.yml + +AllCops: + SuggestExtensions: false + TargetRubyVersion: 3.2 diff --git a/Appraisals b/Appraisals index d2e1878..08bed7a 100644 --- a/Appraisals +++ b/Appraisals @@ -1,19 +1,24 @@ -appraise '5.2' do - gem 'activerecord', '~> 5.2.0' - gem 'mysql2', '~> 0.4.0' +appraise "5.2" do + gem "activerecord", "~> 5.2.0" + gem "mysql2", "~> 0.4.0" end -appraise '6.0' do - gem 'activerecord', '~> 6.0.3.3' - gem 'mysql2', '~> 0.4.0' +appraise "6.0" do + gem "activerecord", "~> 6.0.3.3" + gem "mysql2", "~> 0.4.0" end -appraise '6.1' do - gem 'activerecord', '~> 6.1.0' - gem 'mysql2', '~> 0.5.3' +appraise "6.1" do + gem "activerecord", "~> 6.1.0" + gem "mysql2", "~> 0.5.3" end -appraise '7.0' do - gem 'activerecord', '~> 7.0.0' - gem 'mysql2', '~> 0.5.3' +appraise "7.0" do + gem "activerecord", "~> 7.0.0" + gem "mysql2", "~> 0.5.3" +end + +appraise "7.1" do + gem "activerecord", "~> 7.1.0" + gem "mysql2", "~> 0.5.5" end diff --git a/Gemfile b/Gemfile index ed85cba..b7bbf0d 100644 --- a/Gemfile +++ b/Gemfile @@ -1,4 +1,4 @@ -source 'https://rubygems.org' +source "https://rubygems.org" gemspec -gem 'appraisal' +gem "appraisal" diff --git a/Rakefile b/Rakefile index 8280b5f..c439f7a 100644 --- a/Rakefile +++ b/Rakefile @@ -1,6 +1,6 @@ -desc 'Run tests' +desc "Run tests" task :test do |t| - sh 'rspec spec' + sh "rspec spec" end -task :default => :test +task default: :test diff --git a/gemfiles/.bundle/config b/gemfiles/.bundle/config new file mode 100644 index 0000000..c127f80 --- /dev/null +++ b/gemfiles/.bundle/config @@ -0,0 +1,2 @@ +--- +BUNDLE_RETRY: "1" diff --git a/gemfiles/6.0.gemfile b/gemfiles/6.0.gemfile deleted file mode 100644 index c12d399..0000000 --- a/gemfiles/6.0.gemfile +++ /dev/null @@ -1,9 +0,0 @@ -# This file was generated by Appraisal - -source "https://rubygems.org" - -gem "appraisal" -gem "activerecord", "~> 6.0.3.3" -gem "mysql2", "~> 0.4.0" - -gemspec path: "../" diff --git a/gemfiles/6.1.gemfile b/gemfiles/6.1.gemfile deleted file mode 100644 index 07b476c..0000000 --- a/gemfiles/6.1.gemfile +++ /dev/null @@ -1,9 +0,0 @@ -# This file was generated by Appraisal - -source "https://rubygems.org" - -gem "appraisal" -gem "activerecord", "~> 6.1.0" -gem "mysql2", "~> 0.5.3" - -gemspec path: "../" diff --git a/gemfiles/5.2.gemfile b/gemfiles/7.1.gemfile similarity index 65% rename from gemfiles/5.2.gemfile rename to gemfiles/7.1.gemfile index 94fe48e..e870846 100644 --- a/gemfiles/5.2.gemfile +++ b/gemfiles/7.1.gemfile @@ -3,7 +3,7 @@ source "https://rubygems.org" gem "appraisal" -gem "activerecord", "~> 5.2.0" -gem "mysql2", "~> 0.4.0" +gem "activerecord", "~> 7.1.0" +gem "mysql2", "~> 0.5.5" gemspec path: "../" diff --git a/lib/seeder/version.rb b/lib/seeder/version.rb index 258f28b..1534f8c 100644 --- a/lib/seeder/version.rb +++ b/lib/seeder/version.rb @@ -1,3 +1,3 @@ class Seeder - VERSION = '1.4.0' + VERSION = "1.5.0" end diff --git a/seeder.gemspec b/seeder.gemspec index 6814a09..d62e01f 100644 --- a/seeder.gemspec +++ b/seeder.gemspec @@ -1,5 +1,4 @@ -# -*- encoding: utf-8 -*- -require 'rubygems' unless defined? Gem +require "rubygems" unless defined? Gem require File.dirname(__FILE__) + "/lib/seeder/version" Gem::Specification.new do |s| @@ -13,11 +12,12 @@ Gem::Specification.new do |s| s.required_rubygems_version = ">= 1.3.6" s.files = `git ls-files`.split("\n") s.extra_rdoc_files = ["README.md", "LICENSE.txt"] - s.license = 'MIT' + s.license = "MIT" - s.add_dependency('activerecord', '>= 5.2', '< 7.1') + s.add_dependency("activerecord", ">= 5.2", "< 7.2") - s.add_development_dependency('mysql2', '>= 0.4.4', '< 0.6.0') - s.add_development_dependency('rspec', '~> 3.0') - s.add_development_dependency('rake', '>= 10.4') + s.add_development_dependency("mysql2", ">= 0.4.4", "< 0.6.0") + s.add_development_dependency("rspec", "~> 3.0") + s.add_development_dependency("rake", ">= 10.4") + s.add_development_dependency("standard") end diff --git a/spec/seeder_spec.rb b/spec/seeder_spec.rb index 849a7b2..4f8b2c2 100644 --- a/spec/seeder_spec.rb +++ b/spec/seeder_spec.rb @@ -1,19 +1,19 @@ -require 'spec_helper' +require "spec_helper" describe Seeder do before(:each) { Grade.delete_all } let(:seeder) do Seeder.new( - [{ 'student_id' => 1, 'course_id' => 1, 'grade' => 90 }, - { 'student_id' => 1, 'course_id' => 2, 'grade' => 80 }], + [{"student_id" => 1, "course_id" => 1, "grade" => 90}, + {"student_id" => 1, "course_id" => 2, "grade" => 80}], %w[student_id course_id], Grade ) end - describe '.create' do - it 'should call create on a new instance' do + describe ".create" do + it "should call create on a new instance" do seeder = double expect(Seeder).to receive(:new).with(:data, :keys, :model) .and_return(seeder) @@ -23,39 +23,39 @@ end end - describe '#new' do + describe "#new" do specify { expect(seeder.model).to eq Grade } specify { expect(seeder.keys).to eq [:student_id, :course_id] } specify do expect(seeder.data).to eq( - [{ student_id: 1, course_id: 1, grade: 90 }, - { student_id: 1, course_id: 2, grade: 80 }] + [{student_id: 1, course_id: 1, grade: 90}, + {student_id: 1, course_id: 2, grade: 80}] ) end end - describe '#delete_outdated_records' do + describe "#delete_outdated_records" do before do Grade.create!(student_id: 1, course_id: 3) Grade.create!(student_id: 1, course_id: 1) end - it 'should delete outdated records' do + it "should delete outdated records" do expect { seeder.delete_outdated_records }.to change { Grade.count }.to(1) expect(Grade.first.course_id).to eq 1 end end - describe '#update_existing_records' do + describe "#update_existing_records" do let!(:existing_grade) { Grade.create!(student_id: 1, course_id: 1) } - it 'should delete outdated records' do + it "should delete outdated records" do expect { seeder.update_existing_records } .to change { existing_grade.reload.grade }.to(90) end end - describe '#create_new_records' do + describe "#create_new_records" do let!(:existing_grade) { Grade.create!(student_id: 1, course_id: 1) } it 'should create new records when there are no existing records with @@ -65,15 +65,15 @@ end end - describe '#create' do - it 'calls the delete, update and create methods in order' do + describe "#create" do + it "calls the delete, update and create methods in order" do expect(seeder).to receive(:delete_outdated_records).ordered expect(seeder).to receive(:update_existing_records).ordered expect(seeder).to receive(:create_new_records).ordered seeder.create end - it 'aborts when an exception is raised' do + it "aborts when an exception is raised" do allow(seeder) .to receive(:create_new_records) .and_raise(ActiveRecord::RecordInvalid.new(Grade.new)) @@ -84,7 +84,7 @@ expect(Grade.all.map(&:attributes)).to eq(initial_attributes) end - it 'produces the appropriate results' do + it "produces the appropriate results" do grade1 = Grade.create!(student_id: 1, course_id: 3) grade2 = Grade.create!(student_id: 1, course_id: 1) @@ -104,5 +104,4 @@ expect(grade3.grade).to eq(80) end end - end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index acc3913..2f87023 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -1,13 +1,13 @@ -require 'active_record' -require 'seeder' +require "active_record" +require "seeder" ActiveRecord::Base.establish_connection( - adapter: 'mysql2', - database: ENV.fetch('DB_NAME', 'polymorpheus_test'), - host: ENV.fetch('DB_HOST', '127.0.0.1'), - password: ENV.fetch('DB_PASSWORD', ''), - port: ENV.fetch('DB_PORT', '3306'), - username: ENV.fetch('DB_USERNAME', 'root') + adapter: "mysql2", + database: ENV.fetch("DB_NAME", "polymorpheus_test"), + host: ENV.fetch("DB_HOST", "127.0.0.1"), + password: ENV.fetch("DB_PASSWORD", ""), + port: ENV.fetch("DB_PORT", "3306"), + username: ENV.fetch("DB_USERNAME", "root") ) RSpec.configure do |config| diff --git a/spec/support/active_record/connection_adapters/abstract_mysql_adapter.rb b/spec/support/active_record/connection_adapters/abstract_mysql_adapter.rb index 51129c3..95d5ecc 100644 --- a/spec/support/active_record/connection_adapters/abstract_mysql_adapter.rb +++ b/spec/support/active_record/connection_adapters/abstract_mysql_adapter.rb @@ -1,8 +1,8 @@ # Patch support for MySQL 5.7+ onto ActiveRecord < 4.1. if ActiveRecord::VERSION::MAJOR < 4 || - (ActiveRecord::VERSION::MAJOR == 4 && ActiveRecord::VERSION::MINOR < 1) + (ActiveRecord::VERSION::MAJOR == 4 && ActiveRecord::VERSION::MINOR < 1) - require 'active_record/connection_adapters/abstract_mysql_adapter' + require "active_record/connection_adapters/abstract_mysql_adapter" class ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter NATIVE_DATABASE_TYPES[:primary_key] = "int(11) auto_increment PRIMARY KEY" end