diff --git a/Gemfile b/Gemfile index 191edd3..674038b 100644 --- a/Gemfile +++ b/Gemfile @@ -4,3 +4,7 @@ source "https://rubygems.org" gemspec gem 'pry' + +group :test do + gem 'activesupport', '~> 5.0' +end diff --git a/lib/consistency_fail/models.rb b/lib/consistency_fail/models.rb index 8554106..4b049a2 100644 --- a/lib/consistency_fail/models.rb +++ b/lib/consistency_fail/models.rb @@ -17,8 +17,9 @@ def dirs def preload_all self.dirs.each do |d| - Dir.glob(File.join(d, "**", "*.rb")).each do |model_filename| - Kernel.require_dependency model_filename + ruby_files = Dir.glob(File.join(d, "**", "*.rb")).sort + ruby_files.each do |model_filename| + Kernel.require model_filename end end end diff --git a/spec/index_spec.rb b/spec/index_spec.rb index e63a3d2..0992efd 100644 --- a/spec/index_spec.rb +++ b/spec/index_spec.rb @@ -1,13 +1,16 @@ +require_relative 'support/models/correct_address' +require_relative 'support/models/wrong_address' + describe ConsistencyFail::Index do - + let(:index) do ConsistencyFail::Index.new( - CorrectAddress, - CorrectAddress.table_name, + CorrectAddress, + CorrectAddress.table_name, ["city", "state"] ) end - + describe "value objectiness" do it "holds onto model, table name, and columns" do expect(index.model).to eq(CorrectAddress) @@ -24,12 +27,12 @@ end end - describe "equality test" do + describe "equality test" do it "passes when everything matches" do expect(index).to eq( ConsistencyFail::Index.new( - "CorrectAddress".constantize, - "correct_addresses", + "CorrectAddress".constantize, + "correct_addresses", ["city", "state"] ) ) @@ -38,8 +41,8 @@ it "fails when tables are different" do expect(index).not_to eq( ConsistencyFail::Index.new( - CorrectAttachment, - CorrectAttachment.table_name, + CorrectAttachment, + CorrectAttachment.table_name, ["attachable_id", "attachable_type"] ) ) @@ -48,12 +51,12 @@ it "fails when columns are different" do expect(index).not_to eq( ConsistencyFail::Index.new( - CorrectAddress, - CorrectAddress.table_name, + CorrectAddress, + CorrectAddress.table_name, ["correct_user_id"] ) ) end end - + end diff --git a/spec/models_spec.rb b/spec/models_spec.rb index d365503..fef0a71 100644 --- a/spec/models_spec.rb +++ b/spec/models_spec.rb @@ -1,5 +1,5 @@ describe ConsistencyFail::Models do - + def models(load_path) ConsistencyFail::Models.new(load_path) end @@ -19,7 +19,7 @@ def models(load_path) expect(models.dirs).to eq([Pathname.new("app/models")]) end - it "preloads models by calling require_dependency" do + it "preloads models" do models = models(["foo/bar/baz", "app/models", "some/other/models"]) allow(Dir).to receive(:glob). with(File.join("app/models", "**", "*.rb")). @@ -28,9 +28,9 @@ def models(load_path) with(File.join("some/other/models", "**", "*.rb")). and_return(["some/other/models/foo.rb"]) - expect(Kernel).to receive(:require_dependency).with("app/models/user.rb") - expect(Kernel).to receive(:require_dependency).with("app/models/address.rb") - expect(Kernel).to receive(:require_dependency).with("some/other/models/foo.rb") + expect(Kernel).to receive(:require).with("app/models/user.rb") + expect(Kernel).to receive(:require).with("app/models/address.rb") + expect(Kernel).to receive(:require).with("some/other/models/foo.rb") models.preload_all end @@ -44,5 +44,9 @@ def models(load_path) expect(models([]).all).to eq([model_a, model_c, model_b]) end - + + it "preloads models successfully" do + models = models([File.join(File.dirname(__FILE__), "support/models")]) + expect {models.preload_all}.not_to raise_error + end end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index fc968a9..75da0f4 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -2,7 +2,10 @@ Bundler.require(:default, :test) -Dir['./spec/support/**/*.rb'].sort.each { |file| require file } +require_relative 'support/active_record' +require_relative 'support/schema' +require 'active_support/dependencies' +ActiveSupport::Dependencies.autoload_paths << './spec/support/models' RSpec.configure do |config| config.around do |example| diff --git a/spec/support/models/blob.rb b/spec/support/models/blob.rb new file mode 100644 index 0000000..954c8e5 --- /dev/null +++ b/spec/support/models/blob.rb @@ -0,0 +1,4 @@ +class Blob < ActiveRecord::Base + require_dependency 'blob/edible' + include Edible +end diff --git a/spec/support/models/blob/edible.rb b/spec/support/models/blob/edible.rb new file mode 100644 index 0000000..f7ee826 --- /dev/null +++ b/spec/support/models/blob/edible.rb @@ -0,0 +1,2 @@ +module Blob::Edible +end diff --git a/spec/support/schema.rb b/spec/support/schema.rb index 6209e96..c37f39c 100644 --- a/spec/support/schema.rb +++ b/spec/support/schema.rb @@ -118,4 +118,8 @@ execute 'CREATE VIEW new_correct_people AS '\ 'SELECT * FROM correct_people '\ 'WHERE created_at = updated_at' + + create_table :blob do |t| + t.timestamps + end end