diff --git a/gemfiles/3.0.gemfile b/gemfiles/3.0.gemfile index a5426793f..a877e5c76 100644 --- a/gemfiles/3.0.gemfile +++ b/gemfiles/3.0.gemfile @@ -5,10 +5,10 @@ gem 'i18n', '~> 0.6.11' gem 'request_store', '~> 1.1.0' group :development, :test do - gem 'rake', '~> 10.1.1' + gem 'rake', '~> 10.4.2' gem 'rubocop', '~> 0.35.1' gem 'shoulda', '~> 3.5' - gem 'ffaker', '<= 1.31.0' + gem 'ffaker', '~> 2.1.0' gem 'timecop' # Testing of Rails @@ -19,7 +19,7 @@ group :development, :test do gem 'rack-test', '>= 0.6' # RSpec testing - gem 'rspec-rails', '~> 3.1.0' + gem 'rspec-rails', '~> 3.4.0' gem 'generator_spec' # To do proper transactional testing with ActiveSupport::TestCase on MySQL @@ -27,23 +27,11 @@ group :development, :test do platforms :ruby do gem 'sqlite3', '~> 1.2' - - # We would prefer to only constrain mysql2 to '~> 0.3', - # but a rails bug (https://github.com/rails/rails/issues/21544) - # requires us to constrain to '~> 0.3.20' for now. - gem 'mysql2', '~> 0.3.20' - + gem 'mysql2', '~> 0.3.20' # activerecord < 4.2.5 must use mysql2 < 0.4 gem 'pg', '~> 0.17.1' end - platforms :jruby, :ruby_18 do - # shoulda-matchers > 2.0 is not compatible with Ruby18. - # Since we can't specify difference between JRuby 18/19, we need to use shoulda-matchers 1.5 for all JRuby testing. - gem 'shoulda-matchers', '~> 1.5' - end - platforms :jruby do - # Use jRuby's sqlite3 adapter for jRuby gem 'activerecord-jdbcsqlite3-adapter', '~> 1.3' gem 'activerecord-jdbcpostgresql-adapter', '~> 1.3' gem 'activerecord-jdbcmysql-adapter', '~> 1.3' diff --git a/paper_trail.gemspec b/paper_trail.gemspec index 7705563a4..23c77826a 100644 --- a/paper_trail.gemspec +++ b/paper_trail.gemspec @@ -24,33 +24,28 @@ Gem::Specification.new do |s| s.add_dependency 'activesupport', ['>= 3.0', '< 6.0'] s.add_dependency 'request_store', '~> 1.1' - s.add_development_dependency 'rake', '~> 10.1.1' + s.add_development_dependency 'rake', '~> 10.4.2' s.add_development_dependency 'shoulda', '~> 3.5' - # s.add_development_dependency 'shoulda-matchers', '~> 1.5' # needed for ActiveRecord < 4 - s.add_development_dependency 'ffaker', '<= 1.31.0' + s.add_development_dependency 'ffaker', '~> 2.1.0' s.add_development_dependency 'railties', ['>= 3.0', '< 5.0'] s.add_development_dependency 'sinatra', '~> 1.0' s.add_development_dependency 'rack-test', '>= 0.6' - s.add_development_dependency 'rspec-rails', '~> 3.1.0' + s.add_development_dependency 'rspec-rails', '~> 3.4.0' s.add_development_dependency 'generator_spec' s.add_development_dependency 'database_cleaner', '~> 1.2' s.add_development_dependency 'pry-nav', '~> 0.2.4' s.add_development_dependency 'rubocop', '~> 0.35.1' s.add_development_dependency 'timecop' - # JRuby support for the test ENV - unless defined?(JRUBY_VERSION) - s.add_development_dependency 'sqlite3', '~> 1.2' - - # We would prefer to only constrain mysql2 to '~> 0.3', - # but a rails bug (https://github.com/rails/rails/issues/21544) - # requires us to constrain to '~> 0.3.20' for now. - s.add_development_dependency 'mysql2', '~> 0.3.20' - - s.add_development_dependency 'pg', '~> 0.17' - else + if defined?(JRUBY_VERSION) s.add_development_dependency 'activerecord-jdbcsqlite3-adapter', '~> 1.3' s.add_development_dependency 'activerecord-jdbcpostgresql-adapter', '~> 1.3' s.add_development_dependency 'activerecord-jdbcmysql-adapter', '~> 1.3' + else + s.add_development_dependency 'sqlite3', '~> 1.2' + s.add_development_dependency 'pg', '~> 0.17' + + # activerecord >= 4.2.5 may use mysql2 >= 0.4 + s.add_development_dependency 'mysql2', '~> 0.4.2' end end diff --git a/spec/models/boolit_spec.rb b/spec/models/boolit_spec.rb index 3e96141d3..95150a2b7 100644 --- a/spec/models/boolit_spec.rb +++ b/spec/models/boolit_spec.rb @@ -10,7 +10,7 @@ describe "Versioning", :versioning => true do subject { Boolit.create! } - before { subject.update_attributes!(:name => Faker::Name.name) } + before { subject.update_attributes!(:name => FFaker::Name.name) } it "should have versions" do expect(subject.versions.size).to eq(2) @@ -35,7 +35,7 @@ before do PaperTrail.serializer = CustomJsonSerializer subject.update_attributes!(:name => nil) - subject.update_attributes!(:name => Faker::Name.name) + subject.update_attributes!(:name => FFaker::Name.name) end after { PaperTrail.serializer = PaperTrail::Serializers::YAML } diff --git a/spec/models/callback_modifier_spec.rb b/spec/models/callback_modifier_spec.rb index 55d9c5f48..4f45d2300 100644 --- a/spec/models/callback_modifier_spec.rb +++ b/spec/models/callback_modifier_spec.rb @@ -5,13 +5,13 @@ describe 'callback-methods', :versioning => true do describe 'paper_trail_on_destroy' do it 'should add :destroy to paper_trail_options[:on]' do - modifier = NoArgDestroyModifier.create!(:some_content => Faker::Lorem.sentence) + modifier = NoArgDestroyModifier.create!(:some_content => FFaker::Lorem.sentence) expect(modifier.paper_trail_options[:on]).to eq [:destroy] end context 'when :before' do it 'should create the version before destroy' do - modifier = BeforeDestroyModifier.create!(:some_content => Faker::Lorem.sentence) + modifier = BeforeDestroyModifier.create!(:some_content => FFaker::Lorem.sentence) modifier.test_destroy expect(modifier.versions.last.reify).not_to be_flagged_deleted end @@ -19,7 +19,7 @@ context 'when :after' do it 'should create the version after destroy' do - modifier = AfterDestroyModifier.create!(:some_content => Faker::Lorem.sentence) + modifier = AfterDestroyModifier.create!(:some_content => FFaker::Lorem.sentence) modifier.test_destroy expect(modifier.versions.last.reify).to be_flagged_deleted end @@ -27,7 +27,7 @@ context 'when no argument' do it 'should default to after destroy' do - modifier = NoArgDestroyModifier.create!(:some_content => Faker::Lorem.sentence) + modifier = NoArgDestroyModifier.create!(:some_content => FFaker::Lorem.sentence) modifier.test_destroy expect(modifier.versions.last.reify).to be_flagged_deleted end @@ -36,12 +36,12 @@ describe 'paper_trail_on_update' do it 'should add :update to paper_trail_options[:on]' do - modifier = UpdateModifier.create!(:some_content => Faker::Lorem.sentence) + modifier = UpdateModifier.create!(:some_content => FFaker::Lorem.sentence) expect(modifier.paper_trail_options[:on]).to eq [:update] end it 'should create a version' do - modifier = UpdateModifier.create!(:some_content => Faker::Lorem.sentence) + modifier = UpdateModifier.create!(:some_content => FFaker::Lorem.sentence) modifier.update_attributes! :some_content => 'modified' expect(modifier.versions.last.event).to eq 'update' end @@ -49,43 +49,43 @@ describe 'paper_trail_on_create' do it 'should add :create to paper_trail_options[:on]' do - modifier = CreateModifier.create!(:some_content => Faker::Lorem.sentence) + modifier = CreateModifier.create!(:some_content => FFaker::Lorem.sentence) expect(modifier.paper_trail_options[:on]).to eq [:create] end it 'should create a version' do - modifier = CreateModifier.create!(:some_content => Faker::Lorem.sentence) + modifier = CreateModifier.create!(:some_content => FFaker::Lorem.sentence) expect(modifier.versions.last.event).to eq 'create' end end context 'when no callback-method used' do it 'should set paper_trail_options[:on] to [:create, :update, :destroy]' do - modifier = DefaultModifier.create!(:some_content => Faker::Lorem.sentence) + modifier = DefaultModifier.create!(:some_content => FFaker::Lorem.sentence) expect(modifier.paper_trail_options[:on]).to eq [:create, :update, :destroy] end it 'should default to track destroy' do - modifier = DefaultModifier.create!(:some_content => Faker::Lorem.sentence) + modifier = DefaultModifier.create!(:some_content => FFaker::Lorem.sentence) modifier.destroy expect(modifier.versions.last.event).to eq 'destroy' end it 'should default to track update' do - modifier = DefaultModifier.create!(:some_content => Faker::Lorem.sentence) + modifier = DefaultModifier.create!(:some_content => FFaker::Lorem.sentence) modifier.update_attributes! :some_content => 'modified' expect(modifier.versions.last.event).to eq 'update' end it 'should default to track create' do - modifier = DefaultModifier.create!(:some_content => Faker::Lorem.sentence) + modifier = DefaultModifier.create!(:some_content => FFaker::Lorem.sentence) expect(modifier.versions.last.event).to eq 'create' end end context 'when only one callback-method' do it 'does only track the corresponding event' do - modifier = CreateModifier.create!(:some_content => Faker::Lorem.sentence) + modifier = CreateModifier.create!(:some_content => FFaker::Lorem.sentence) modifier.update_attributes!(:some_content => 'modified') modifier.test_destroy expect(modifier.versions.collect(&:event)).to eq ['create'] diff --git a/spec/models/joined_version_spec.rb b/spec/models/joined_version_spec.rb index cc4d1c7c8..f867bcc35 100644 --- a/spec/models/joined_version_spec.rb +++ b/spec/models/joined_version_spec.rb @@ -3,7 +3,7 @@ describe JoinedVersion, :type => :model, :versioning => true do it { expect(JoinedVersion.superclass).to be PaperTrail::Version } - let(:widget) { Widget.create!(:name => Faker::Name.name) } + let(:widget) { Widget.create!(:name => FFaker::Name.name) } let(:version) { JoinedVersion.first } describe "Scopes" do diff --git a/spec/models/json_version_spec.rb b/spec/models/json_version_spec.rb index 694f87719..535fd60eb 100644 --- a/spec/models/json_version_spec.rb +++ b/spec/models/json_version_spec.rb @@ -26,12 +26,12 @@ let(:fruit_names) { %w(apple orange lemon banana lime coconut strawberry blueberry) } let(:fruit) { Fruit.new } let(:name) { 'pomegranate' } - let(:color) { Faker::Color.name } + let(:color) { FFaker::Color.name } before do fruit.update_attributes!(:name => name) fruit.update_attributes!(:name => fruit_names.sample, :color => color) - fruit.update_attributes!(:name => fruit_names.sample, :color => Faker::Color.name) + fruit.update_attributes!(:name => fruit_names.sample, :color => FFaker::Color.name) end it "should be able to locate versions according to their `object` contents" do @@ -56,12 +56,12 @@ let(:tropical_fruit_names) { %w(coconut pineapple kiwi mango melon) } let(:fruit) { Fruit.new } let(:name) { 'pomegranate' } - let(:color) { Faker::Color.name } + let(:color) { FFaker::Color.name } before do fruit.update_attributes!(:name => name) fruit.update_attributes!(:name => tropical_fruit_names.sample, :color => color) - fruit.update_attributes!(:name => fruit_names.sample, :color => Faker::Color.name) + fruit.update_attributes!(:name => fruit_names.sample, :color => FFaker::Color.name) end it "should be able to locate versions according to their `object_changes` contents" do diff --git a/spec/models/version_spec.rb b/spec/models/version_spec.rb index 557a489bf..4773d3c20 100644 --- a/spec/models/version_spec.rb +++ b/spec/models/version_spec.rb @@ -57,11 +57,11 @@ end context "Has previous version", :versioning => true do - let(:name) { Faker::Name.name } - let(:widget) { Widget.create!(:name => Faker::Name.name) } + let(:name) { FFaker::Name.name } + let(:widget) { Widget.create!(:name => FFaker::Name.name) } before do widget.versions.first.update_attributes!(:whodunnit => name) - widget.update_attributes!(:name => Faker::Name.first_name) + widget.update_attributes!(:name => FFaker::Name.first_name) end subject { widget.versions.last } @@ -92,7 +92,7 @@ describe '#terminator' do it { is_expected.to respond_to(:terminator) } - let(:attributes) { {:whodunnit => Faker::Name.first_name} } + let(:attributes) { {:whodunnit => FFaker::Name.first_name} } it "is an alias for the `whodunnit` attribute" do expect(subject.terminator).to eq(attributes[:whodunnit]) @@ -147,13 +147,13 @@ context "valid arguments", :versioning => true do let(:widget) { Widget.new } - let(:name) { Faker::Name.first_name } + let(:name) { FFaker::Name.first_name } let(:int) { rand(10) + 1 } before do widget.update_attributes!(:name => name, :an_integer => int) widget.update_attributes!(:name => 'foobar', :an_integer => 100) - widget.update_attributes!(:name => Faker::Name.last_name, :an_integer => 15) + widget.update_attributes!(:name => FFaker::Name.last_name, :an_integer => 15) end context "`serializer == YAML`" do @@ -191,13 +191,13 @@ context "valid arguments", :versioning => true do let(:widget) { Widget.new } - let(:name) { Faker::Name.first_name } + let(:name) { FFaker::Name.first_name } let(:int) { rand(5) + 2 } before do widget.update_attributes!(:name => name, :an_integer => 0) widget.update_attributes!(:name => 'foobar', :an_integer => 77) - widget.update_attributes!(:name => Faker::Name.last_name, :an_integer => int) + widget.update_attributes!(:name => FFaker::Name.last_name, :an_integer => int) end context "`serializer == YAML`" do diff --git a/spec/models/widget_spec.rb b/spec/models/widget_spec.rb index c748135af..453df9f90 100644 --- a/spec/models/widget_spec.rb +++ b/spec/models/widget_spec.rb @@ -125,8 +125,8 @@ it { is_expected.to respond_to(:paper_trail_originator) } describe "return value" do - let(:orig_name) { Faker::Name.name } - let(:new_name) { Faker::Name.name } + let(:orig_name) { FFaker::Name.name } + let(:new_name) { FFaker::Name.name } before { PaperTrail.whodunnit = orig_name } context "accessed from live model instance" do @@ -216,8 +216,8 @@ end context "block given" do - let(:orig_name) { Faker::Name.name } - let(:new_name) { Faker::Name.name } + let(:orig_name) { FFaker::Name.name } + let(:new_name) { FFaker::Name.name } before do PaperTrail.whodunnit = orig_name @@ -239,7 +239,9 @@ context "error within block" do it "should ensure that the whodunnit value still reverts to it's previous value" do - expect { widget.whodunnit(new_name) { raise } }.to raise_error + expect { + widget.whodunnit(new_name) { raise } + }.to raise_error(RuntimeError) expect(PaperTrail.whodunnit).to eq(orig_name) end end diff --git a/spec/paper_trail_spec.rb b/spec/paper_trail_spec.rb index 3f1b70a17..c1cb412aa 100644 --- a/spec/paper_trail_spec.rb +++ b/spec/paper_trail_spec.rb @@ -1,10 +1,11 @@ require 'rails_helper' -describe "PaperTrail RSpec Helper" do +describe PaperTrail do context 'default' do it 'should have versioning off by default' do expect(PaperTrail).not_to be_enabled end + it 'should turn versioning on in a `with_versioning` block' do expect(PaperTrail).not_to be_enabled with_versioning do @@ -16,7 +17,7 @@ context "error within `with_versioning` block" do it "should revert the value of `PaperTrail.enabled?` to it's previous state" do expect(PaperTrail).not_to be_enabled - expect { with_versioning { raise } }.to raise_error + expect { with_versioning { raise } }.to raise_error(RuntimeError) expect(PaperTrail).not_to be_enabled end end @@ -26,6 +27,7 @@ it 'should have versioning on by default' do expect(PaperTrail).to be_enabled end + it 'should keep versioning on after a with_versioning block' do expect(PaperTrail).to be_enabled with_versioning do diff --git a/spec/requests/articles_spec.rb b/spec/requests/articles_spec.rb index b19f41afd..70b61eaae 100644 --- a/spec/requests/articles_spec.rb +++ b/spec/requests/articles_spec.rb @@ -1,7 +1,7 @@ require 'rails_helper' describe "Articles management", :type => :request, :order => :defined do - let(:valid_params) { { :article => { :title => 'Doh', :content => Faker::Lorem.sentence } } } + let(:valid_params) { { :article => { :title => 'Doh', :content => FFaker::Lorem.sentence } } } context "versioning disabled" do specify { expect(PaperTrail).not_to be_enabled } diff --git a/test/functional/enabled_for_controller_test.rb b/test/functional/enabled_for_controller_test.rb index 2f7f9e2cd..e8a6eb2a2 100644 --- a/test/functional/enabled_for_controller_test.rb +++ b/test/functional/enabled_for_controller_test.rb @@ -6,7 +6,7 @@ class EnabledForControllerTest < ActionController::TestCase context "`PaperTrail.enabled? == true`" do should 'enabled_for_controller?.should == true' do assert PaperTrail.enabled? - post :create, :article => { :title => 'Doh', :content => Faker::Lorem.sentence } + post :create, :article => { :title => 'Doh', :content => FFaker::Lorem.sentence } assert_not_nil assigns(:article) assert PaperTrail.enabled_for_controller? assert_equal 1, assigns(:article).versions.length @@ -15,10 +15,10 @@ class EnabledForControllerTest < ActionController::TestCase context "`PaperTrail.enabled? == false`" do setup { PaperTrail.enabled = false } - + should 'enabled_for_controller?.should == false' do assert !PaperTrail.enabled? - post :create, :article => { :title => 'Doh', :content => Faker::Lorem.sentence } + post :create, :article => { :title => 'Doh', :content => FFaker::Lorem.sentence } assert !PaperTrail.enabled_for_controller? assert_equal 0, assigns(:article).versions.length end diff --git a/test/unit/cleaner_test.rb b/test/unit/cleaner_test.rb index cfc84d5ca..85b99ac89 100644 --- a/test/unit/cleaner_test.rb +++ b/test/unit/cleaner_test.rb @@ -5,7 +5,7 @@ class PaperTrailCleanerTest < ActiveSupport::TestCase def populate_db! @animals = [@animal = Animal.new, @dog = Dog.new, @cat = Cat.new] @animals.each do |animal| - 3.times { animal.update_attribute(:name, Faker::Name.name) } + 3.times { animal.update_attribute(:name, FFaker::Name.name) } end end @@ -47,7 +47,7 @@ def populate_db! setup do @animal.versions.each { |ver| ver.update_attribute(:created_at, ver.created_at - 1.day) } @date = @animal.versions.first.created_at.to_date - @animal.update_attribute(:name, Faker::Name.name) + @animal.update_attribute(:name, FFaker::Name.name) end should 'restrict the versions destroyed to those that were created on the date provided' do @@ -86,7 +86,7 @@ def populate_db! setup do [@animal, @dog].each do |animal| animal.versions.each { |ver| ver.update_attribute(:created_at, ver.created_at - 1.day) } - animal.update_attribute(:name, Faker::Name.name) + animal.update_attribute(:name, FFaker::Name.name) end @date = @animal.versions.first.created_at.to_date end diff --git a/test/unit/model_test.rb b/test/unit/model_test.rb index 5a03f2e5f..4f1131b8c 100644 --- a/test/unit/model_test.rb +++ b/test/unit/model_test.rb @@ -1366,7 +1366,7 @@ def without(&block) setup do PaperTrail.config.version_limit = 2 @widget = Widget.create! :name => 'Henry' - 6.times { @widget.update_attribute(:name, Faker::Lorem.word) } + 6.times { @widget.update_attribute(:name, FFaker::Lorem.word) } end teardown { PaperTrail.config.version_limit = nil } diff --git a/test/unit/serializers/json_test.rb b/test/unit/serializers/json_test.rb index 0ca7379bf..a96416ebb 100644 --- a/test/unit/serializers/json_test.rb +++ b/test/unit/serializers/json_test.rb @@ -6,12 +6,12 @@ class JSONTest < ActiveSupport::TestCase # Setup a hash with random values @hash = {} (1..4).each do |i| - @hash["key#{i}"] = Faker::Lorem.word + @hash["key#{i}"] = FFaker::Lorem.word end @hash_as_json = @hash.to_json # Setup an array of random words @array = [] - (rand(5) + 4).times { @array << Faker::Lorem.word } + (rand(5) + 4).times { @array << FFaker::Lorem.word } @array_as_json = @array.to_json end @@ -73,7 +73,7 @@ class JSONTest < ActiveSupport::TestCase assert grouping.instance_of?(Arel::Nodes::Grouping) matches = grouping.select { |v| v.instance_of?(Arel::Nodes::Matches) } - # Numeric arguments need to ensure that they match for only the number, not the beginning + # Numeric arguments need to ensure that they match for only the number, not the beginning # of a #, so it uses an Grouping matcher (See notes on `PaperTrail::Serializers::JSON`) if Arel::VERSION >= '6' assert_equal matches.first.right.val, "%\"arg1\":-3.5,%" diff --git a/test/unit/serializers/mixin_json_test.rb b/test/unit/serializers/mixin_json_test.rb index 72055978f..cad9f1159 100644 --- a/test/unit/serializers/mixin_json_test.rb +++ b/test/unit/serializers/mixin_json_test.rb @@ -7,7 +7,7 @@ class MixinJsonTest < ActiveSupport::TestCase # Setup a hash with random values, ensuring some values are nil @hash = {} (1..4).each do |i| - @hash["key#{i}"] = [Faker::Lorem.word, nil].sample + @hash["key#{i}"] = [FFaker::Lorem.word, nil].sample end @hash['tkey'] = nil @hash[''] = 'foo' diff --git a/test/unit/serializers/mixin_yaml_test.rb b/test/unit/serializers/mixin_yaml_test.rb index 6ad2559d9..4129d8df6 100644 --- a/test/unit/serializers/mixin_yaml_test.rb +++ b/test/unit/serializers/mixin_yaml_test.rb @@ -19,7 +19,7 @@ class MixinYamlTest < ActiveSupport::TestCase # Setup a hash with random values, ensuring some values are nil @hash = {} (1..4).each do |i| - @hash["key#{i}"] = [Faker::Lorem.word, nil].sample + @hash["key#{i}"] = [FFaker::Lorem.word, nil].sample end @hash['tkey'] = nil @hash[''] = 'foo' diff --git a/test/unit/serializers/yaml_test.rb b/test/unit/serializers/yaml_test.rb index bc033947e..a0c2ab167 100644 --- a/test/unit/serializers/yaml_test.rb +++ b/test/unit/serializers/yaml_test.rb @@ -6,12 +6,12 @@ class YamlTest < ActiveSupport::TestCase # Setup a hash with random values @hash = {} (1..4).each do |i| - @hash["key#{i}".to_sym] = Faker::Lorem.word + @hash["key#{i}".to_sym] = FFaker::Lorem.word end @hash_as_yaml = @hash.to_yaml # Setup an array of random words @array = [] - (rand(5) + 4).times { @array << Faker::Lorem.word } + (rand(5) + 4).times { @array << FFaker::Lorem.word } @array_as_yaml = @array.to_yaml end diff --git a/test/unit/version_test.rb b/test/unit/version_test.rb index 4f6f37ff6..b860c9e81 100644 --- a/test/unit/version_test.rb +++ b/test/unit/version_test.rb @@ -65,7 +65,7 @@ class VersionTest < ActiveSupport::TestCase context ".subsequent" do setup do 2.times do - @animal.update_attributes(name: Faker::Lorem.word) + @animal.update_attributes(name: FFaker::Lorem.word) end end @@ -92,7 +92,7 @@ class VersionTest < ActiveSupport::TestCase context ".preceding" do setup do 2.times do - @animal.update_attributes(name: Faker::Lorem.word) + @animal.update_attributes(name: FFaker::Lorem.word) end end