From 32915112f62225710223c535054a0b611f4d6b67 Mon Sep 17 00:00:00 2001 From: Ray Zane Date: Fri, 30 Mar 2018 14:23:47 -0400 Subject: [PATCH] Rename JoinExpression to Join --- .../active_record/query_methods.rb | 4 ++-- lib/baby_squeel/association.rb | 2 +- .../{join_expression.rb => join.rb} | 4 ++-- .../builder.rb => join_dependency.rb} | 24 ++++++++++++++++--- lib/baby_squeel/join_dependency/injector.rb | 23 ------------------ lib/baby_squeel/table.rb | 8 +++---- spec/baby_squeel/association_spec.rb | 6 ++--- .../join_dependency/injector_spec.rb | 2 +- .../{join_expression_spec.rb => join_spec.rb} | 2 +- spec/baby_squeel/table_spec.rb | 2 +- 10 files changed, 36 insertions(+), 41 deletions(-) rename lib/baby_squeel/{join_expression.rb => join.rb} (90%) rename lib/baby_squeel/{join_dependency/builder.rb => join_dependency.rb} (74%) delete mode 100644 lib/baby_squeel/join_dependency/injector.rb rename spec/baby_squeel/{join_expression_spec.rb => join_spec.rb} (95%) diff --git a/lib/baby_squeel/active_record/query_methods.rb b/lib/baby_squeel/active_record/query_methods.rb index de2ba90..a9c585a 100644 --- a/lib/baby_squeel/active_record/query_methods.rb +++ b/lib/baby_squeel/active_record/query_methods.rb @@ -1,5 +1,5 @@ require 'baby_squeel/dsl' -require 'baby_squeel/join_dependency/injector' +require 'baby_squeel/join_dependency' module BabySqueel module ActiveRecord @@ -39,7 +39,7 @@ def when_having(&block) # This is a monkey patch, and I'm not happy about it. # Active Record will call `group_by` on the `joins`. The # Injector has a custom `group_by` method that handles - # BabySqueel::JoinExpression nodes. + # BabySqueel::Join nodes. if ::ActiveRecord::VERSION::MAJOR >= 5 && ::ActiveRecord::VERSION::MINOR >= 2 def build_joins(manager, joins, aliases) super manager, BabySqueel::JoinDependency::Injector.new(joins), aliases diff --git a/lib/baby_squeel/association.rb b/lib/baby_squeel/association.rb index cf890d0..153767f 100644 --- a/lib/baby_squeel/association.rb +++ b/lib/baby_squeel/association.rb @@ -47,7 +47,7 @@ def needs_polyamorous? _join == Arel::Nodes::OuterJoin || _reflection.polymorphic? end - # See JoinExpression#add_to_tree. + # See Join#add_to_tree. def add_to_tree(hash) polyamorous = Polyamorous::Join.new( _reflection.name, diff --git a/lib/baby_squeel/join_expression.rb b/lib/baby_squeel/join.rb similarity index 90% rename from lib/baby_squeel/join_expression.rb rename to lib/baby_squeel/join.rb index 8ffb197..a6b027e 100644 --- a/lib/baby_squeel/join_expression.rb +++ b/lib/baby_squeel/join.rb @@ -2,8 +2,8 @@ module BabySqueel # This is the thing that gets added to Active Record's joins_values. # By including Polyamorous::TreeNode, when this instance is found when # traversing joins in ActiveRecord::Associations::JoinDependency::walk_tree, - # JoinExpression#add_to_tree will be called. - class JoinExpression + # Join#add_to_tree will be called. + class Join include Polyamorous::TreeNode def initialize(associations) diff --git a/lib/baby_squeel/join_dependency/builder.rb b/lib/baby_squeel/join_dependency.rb similarity index 74% rename from lib/baby_squeel/join_dependency/builder.rb rename to lib/baby_squeel/join_dependency.rb index f500035..249f85c 100644 --- a/lib/baby_squeel/join_dependency/builder.rb +++ b/lib/baby_squeel/join_dependency.rb @@ -2,14 +2,32 @@ module BabySqueel module JoinDependency - # Unfortunately, this is mostly all duplication of - # ActiveRecord::QueryMethods#build_joins + # This class allows BabySqueel to slip custom + # joins_values into Active Record's JoinDependency + class Injector < Array # :nodoc: + # Active Record will call group_by on this object + # in ActiveRecord::QueryMethods#build_joins. This + # allows BabySqueel::Joins to be treated + # like typical join hashes until Polyamorous can + # deal with them. + def group_by + super do |join| + case join + when BabySqueel::Join + :association_join + else + yield join + end + end + end + end + class Builder # :nodoc: attr_reader :join_dependency def initialize(relation) @join_dependency = ::JoinDependency.from_relation(relation) do |join| - :association_join if join.kind_of? BabySqueel::JoinExpression + :association_join if join.kind_of? BabySqueel::Join end end diff --git a/lib/baby_squeel/join_dependency/injector.rb b/lib/baby_squeel/join_dependency/injector.rb deleted file mode 100644 index c8df3a7..0000000 --- a/lib/baby_squeel/join_dependency/injector.rb +++ /dev/null @@ -1,23 +0,0 @@ -module BabySqueel - module JoinDependency - # This class allows BabySqueel to slip custom - # joins_values into Active Record's JoinDependency - class Injector < Array # :nodoc: - # Active Record will call group_by on this object - # in ActiveRecord::QueryMethods#build_joins. This - # allows BabySqueel::JoinExpressions to be treated - # like typical join hashes until Polyamorous can - # deal with them. - def group_by - super do |join| - case join - when BabySqueel::JoinExpression - :association_join - else - yield join - end - end - end - end - end -end diff --git a/lib/baby_squeel/table.rb b/lib/baby_squeel/table.rb index fe87c35..2d1b603 100644 --- a/lib/baby_squeel/table.rb +++ b/lib/baby_squeel/table.rb @@ -1,6 +1,6 @@ require 'baby_squeel/resolver' -require 'baby_squeel/join_expression' -require 'baby_squeel/join_dependency/builder' +require 'baby_squeel/join' +require 'baby_squeel/join_dependency' module BabySqueel class Table @@ -96,13 +96,13 @@ def find_alias(associations = []) # 2. Implicit join without using an outer join. In this case, we'll just # give a hash to Active Record, and join the normal way. # 3. Implicit join using an outer join. In this case, we need to use - # Polyamorous to build the join. We'll return a JoinExpression. + # Polyamorous to build the join. We'll return a Join. # def _arel(associations = []) if _on _join.new(_table, Arel::Nodes::On.new(_on)) elsif associations.any?(&:needs_polyamorous?) - JoinExpression.new(associations) + Join.new(associations) elsif associations.any? associations.reverse.inject({}) do |names, assoc| { assoc._reflection.name => names } diff --git a/spec/baby_squeel/association_spec.rb b/spec/baby_squeel/association_spec.rb index 4e35729..5068f2e 100644 --- a/spec/baby_squeel/association_spec.rb +++ b/spec/baby_squeel/association_spec.rb @@ -121,7 +121,7 @@ def make_tree(tree_node) expect(assoc._arel).to be_an(Arel::Nodes::InnerJoin) end - it 'sets an on clause on the JoinExpression' do + it 'sets an on clause on the Join' do expect(assoc._on).not_to be_nil end @@ -144,8 +144,8 @@ def make_tree(tree_node) end context 'when outer joining' do - it 'resolves to a JoinExpression' do - expect(association.outer._arel).to be_a(BabySqueel::JoinExpression) + it 'resolves to a Join' do + expect(association.outer._arel).to be_a(BabySqueel::Join) end it 'throws a fit when an alias is attempted' do diff --git a/spec/baby_squeel/join_dependency/injector_spec.rb b/spec/baby_squeel/join_dependency/injector_spec.rb index 67c98a8..6eb51ba 100644 --- a/spec/baby_squeel/join_dependency/injector_spec.rb +++ b/spec/baby_squeel/join_dependency/injector_spec.rb @@ -2,7 +2,7 @@ describe BabySqueel::JoinDependency::Injector do let(:join_path) { - BabySqueel::JoinExpression.new([]) + BabySqueel::Join.new([]) } let(:joins_values) { diff --git a/spec/baby_squeel/join_expression_spec.rb b/spec/baby_squeel/join_spec.rb similarity index 95% rename from spec/baby_squeel/join_expression_spec.rb rename to spec/baby_squeel/join_spec.rb index a5698a0..b61f8aa 100644 --- a/spec/baby_squeel/join_expression_spec.rb +++ b/spec/baby_squeel/join_spec.rb @@ -1,6 +1,6 @@ require 'spec_helper' -describe BabySqueel::JoinExpression do +describe BabySqueel::Join do let(:association1) { create_association Author, :posts } let(:association2) { create_association Post, :comments } diff --git a/spec/baby_squeel/table_spec.rb b/spec/baby_squeel/table_spec.rb index 852ba77..8614f19 100644 --- a/spec/baby_squeel/table_spec.rb +++ b/spec/baby_squeel/table_spec.rb @@ -17,7 +17,7 @@ context 'when outer joining' do let(:association) { create_association(Author, :posts).outer } - specify { is_expected.to be_a(BabySqueel::JoinExpression) } + specify { is_expected.to be_a(BabySqueel::Join) } end context 'when not joining' do