diff --git a/CHANGELOG.md b/CHANGELOG.md index 1d440cea..d55ea51e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ## next - unreleased - Fix relation matching when attribute name collides with a method. [#281](https://github.com/active-hash/active_hash/pull/281) @flavorjones +- Fix association reflection in applications that don't use ActiveHash::Associations. [#286](https://github.com/active-hash/active_hash/pull/286) @iberianpig ## Version [3.2.0] - 2023-05-06 diff --git a/lib/active_hash/relation.rb b/lib/active_hash/relation.rb index b41581d1..30d5e783 100644 --- a/lib/active_hash/relation.rb +++ b/lib/active_hash/relation.rb @@ -22,6 +22,10 @@ def where(conditions_hash = :chain) spawn.where!(conditions_hash) end + def pretty_print(pp) + pp.pp(entries.to_ary) + end + class WhereChain attr_reader :relation @@ -164,13 +168,13 @@ def to_ary end def method_missing(method_name, *args) - return super unless klass.scopes.key?(method_name) + return super unless klass.scopes&.key?(method_name) instance_exec(*args, &klass.scopes[method_name]) end def respond_to_missing?(method_name, include_private = false) - klass.scopes.key?(method_name) || super + klass.scopes&.key?(method_name) || super end private diff --git a/lib/associations/associations.rb b/lib/associations/associations.rb index e41a7cd0..99e2f046 100644 --- a/lib/associations/associations.rb +++ b/lib/associations/associations.rb @@ -3,6 +3,10 @@ module Associations module ActiveRecordExtensions + def self.extended(base) + require_relative 'reflection_extensions' + end + def belongs_to(name, scope = nil, **options) klass_name = options.key?(:class_name) ? options[:class_name] : name.to_s.camelize klass = @@ -92,7 +96,6 @@ def belongs_to_active_hash(association_id, options = {}) end def self.included(base) - require_relative "reflection_extensions" base.extend Methods end diff --git a/spec/active_hash/relation_spec.rb b/spec/active_hash/relation_spec.rb index 432286d1..e40c7d0f 100644 --- a/spec/active_hash/relation_spec.rb +++ b/spec/active_hash/relation_spec.rb @@ -71,4 +71,16 @@ expect(klass.where(display: true).length).to eq(1) end end + + describe "#pretty_print" do + it "prints the records" do + out = StringIO.new + PP.pp(subject, out) + + expect(out.string.scan(/\bid\b/).length).to eq(2) + expect(out.string).to match(/\bCanada\b/) + expect(out.string).to match(/\bUS\b/) + expect(out.string).to_not match(/ActiveHash::Relation/) + end + end end