occams-record 0.33.0 → 0.34.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 79f596ff4340bb78be9568862a4e2ed4b170cc5e5433ea5e89d039e05d12b608
4
- data.tar.gz: 461865caca31938b4edcef8ad8301654a78d0d7f335cef094b8e939c6a02bb5d
3
+ metadata.gz: 2b133d571ce7f9e293908fe1a19e7b835032daa6df97c8b24ecd5a62aba90d59
4
+ data.tar.gz: db6b2825f6a449be9fa4354d062c45b7705a00a99faefe3ec3b6549e852f59d2
5
5
  SHA512:
6
- metadata.gz: 3e2a1ed22da61aecccf805fbe5cfbae7abe4b9b49ffb55fc270f9166744d5e36eac8acbb4d0e6a4cb76da537a1f18daca40d28c574425d5cb12c658126f0a62c
7
- data.tar.gz: ff1d5d5e82e39e88a7316905b9342209bd91c7c76a7b26418a48ae96344849701a4abcac2729980ace7a42be09ba6419360d49efeebde942b3e3838a9ef2c1db
6
+ metadata.gz: 60ebbebfea762188eb0b05e6d80821299f243e91a58ff9b4feea538e3363a6975ef07268c8fef4233442c92f6ff6283c02b884f4c030cfe0f4ea4ceb95fdf429
7
+ data.tar.gz: e6d2b6e806a238fb910a2abc4cf3415f4376e2c169039f9ab276b17fb833582ea4222b842e5b887150d97441be04772cb47c4544bf36ada165ef593d00c97dd2
@@ -18,9 +18,11 @@ module OccamsRecord
18
18
  # Initialize a new eager loading context.
19
19
  #
20
20
  # @param mode [ActiveRecord::Base] the model that contains the associations that will be referenced.
21
+ # @param polymorphic [Boolean] When true, model is allowed to change, and it's assumed that not every loader
22
+ # is applicable to every model.
21
23
  #
22
- def initialize(model = nil)
23
- @model = model
24
+ def initialize(model = nil, polymorphic: false)
25
+ @model, @polymorphic = model, polymorphic
24
26
  @loaders = []
25
27
  @dynamic_loaders = []
26
28
  end
@@ -33,8 +35,8 @@ module OccamsRecord
33
35
  def model=(model)
34
36
  @model = model
35
37
  @loaders = @loaders + @dynamic_loaders.map { |args|
36
- build_loader(*args)
37
- }
38
+ @polymorphic ? build_loader(*args) : build_loader!(*args)
39
+ }.compact
38
40
  @dynamic_loaders = []
39
41
  end
40
42
 
@@ -75,7 +77,7 @@ module OccamsRecord
75
77
  #
76
78
  def add(assoc, scope = nil, select: nil, use: nil, as: nil, optimizer: :select, &builder)
77
79
  if @model
78
- loader = build_loader(assoc, scope, select, use, as, optimizer, builder)
80
+ loader = build_loader!(assoc, scope, select, use, as, optimizer, builder)
79
81
  @loaders << loader
80
82
  loader
81
83
  else
@@ -100,10 +102,16 @@ module OccamsRecord
100
102
 
101
103
  private
102
104
 
105
+ def build_loader!(assoc, scope, select, use, as, optimizer, builder)
106
+ build_loader(assoc, scope, select, use, as, optimizer, builder) ||
107
+ raise("OccamsRecord: No assocation `:#{assoc}` on `#{@model.name}` or subclasses")
108
+ end
109
+
103
110
  def build_loader(assoc, scope, select, use, as, optimizer, builder)
104
- ref = @model.reflections[assoc.to_s]
105
- ref ||= @model.subclasses.map(&:reflections).detect { |x| x.has_key? assoc.to_s }&.[](assoc.to_s)
106
- raise "OccamsRecord: No assocation `:#{assoc}` on `#{@model.name}` or subclasses" if ref.nil?
111
+ ref = @model.reflections[assoc.to_s] ||
112
+ @model.subclasses.map(&:reflections).detect { |x| x.has_key? assoc.to_s }&.[](assoc.to_s)
113
+ return nil if ref.nil?
114
+
107
115
  scope ||= ->(q) { q.select select } if select
108
116
  loader_class = !!ref.through_reflection ? EagerLoaders::Through : EagerLoaders.fetch!(ref)
109
117
  loader_class.new(ref, scope, use: use, as: as, optimizer: optimizer, &builder)
@@ -21,7 +21,7 @@ module OccamsRecord
21
21
  @name = (as || ref.name).to_s
22
22
  @foreign_type = @ref.foreign_type.to_sym
23
23
  @foreign_key = @ref.foreign_key.to_sym
24
- @eager_loaders = EagerLoaders::Context.new
24
+ @eager_loaders = EagerLoaders::Context.new(nil, polymorphic: true)
25
25
  instance_eval(&builder) if builder
26
26
  end
27
27
 
@@ -3,5 +3,5 @@
3
3
  #
4
4
  module OccamsRecord
5
5
  # Library version
6
- VERSION = '0.33.0'.freeze
6
+ VERSION = '0.34.0'.freeze
7
7
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: occams-record
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.33.0
4
+ version: 0.34.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jordan Hollinger