scopiform 0.2.10 → 0.2.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cca47f44f585db581edd54791485e5016ecc1d8f73c5e09dc0cb3be21a853d0e
4
- data.tar.gz: fea9cb2762ac42bdcb1089262ac0e116857fb1d568590bb3c570e9b1f49f60d8
3
+ metadata.gz: cf263f19bfbf29c2ce932d57306b0c4c0da85307b79a9f2df059fbe05a04a2b1
4
+ data.tar.gz: '0261898e3563b6ffeb8f5b3ae7e070e350929f8be178956e8fe5518ceaa8bd05'
5
5
  SHA512:
6
- metadata.gz: fc021d11757854fc08b8d238ffe7f8bdf2300cf94fb2ceb2d5b87720dbb9de977845343007e6f04377b93f1c95ee94cdc6b89c3daa29ac538cfa184aeb4cae72
7
- data.tar.gz: 97669e667b8610924637a185fd5b31c0421f03e54834ccc76fa4ea326fa68ce82e44011ce0c55a47d1f4a2380171c597e5f4c1a7dffca7ed644ee34f0ea8cceb
6
+ metadata.gz: a4a0b35d5023ac441e99b5b82bfefc79c5e2aa74f36d1464ccc659f1c4be2099eb3a45571fdb567b19835bacf78f148860f55ff56a455032df63a26bed269805
7
+ data.tar.gz: 973ecc6033a2461c5b6b111ed506ff6fdb291318e7348d4c8a17be8e9d86a5dec6dca2e2b620452024d73070a002e7813fdcb1a8c55ecac5dbc2df8732ffdc83
@@ -1,6 +1,6 @@
1
1
  module Scopiform
2
2
  class ScopeContext
3
- attr_accessor :association, :arel_table, :association_arel_table, :joins, :ancestors, :scopes
3
+ attr_accessor :association, :arel_table, :association_arel_table, :joins, :ancestors, :scopes, :has_manys
4
4
 
5
5
  def self.from(ctx)
6
6
  created = new
@@ -20,6 +20,7 @@ module Scopiform
20
20
  @joins = []
21
21
  @ancestors = []
22
22
  @scopes = []
23
+ @has_manys = []
23
24
  end
24
25
 
25
26
  def set(arel_table)
@@ -35,6 +36,10 @@ module Scopiform
35
36
  self.association = association.through_reflection
36
37
  end
37
38
 
39
+ unless association.has_one? || association.belongs_to?
40
+ has_manys << association.name
41
+ end
42
+
38
43
  ancestors << association.name.to_s.pluralize
39
44
  self.association_arel_table = association.klass.arel_table.alias(alias_name)
40
45
 
@@ -17,10 +17,13 @@ module Scopiform
17
17
 
18
18
  ctx.association = association
19
19
  ctx.build_joins
20
+ has_manys = ctx.has_manys.present?
20
21
 
21
22
  applied = ctx.association.klass.send(method, value, ctx: ScopeContext.from(ctx).set(ctx.association_arel_table))
22
23
 
23
- if is_root
24
+ if is_root && !has_manys
25
+ ctx.scopes.reduce(active_record.joins(ctx.joins).merge(applied)) { |chain, scope| chain.merge(scope) }
26
+ elsif is_root && has_manys
24
27
  ctx.scopes.reduce(active_record.distinct.joins(ctx.joins).merge(applied)) { |chain, scope| chain.merge(scope) }
25
28
  else
26
29
  ctx.scopes.reduce(active_record.all.merge(applied)) { |chain, scope| chain.merge(scope) }
@@ -1,3 +1,3 @@
1
1
  module Scopiform
2
- VERSION = '0.2.10'.freeze
2
+ VERSION = '0.2.11'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: scopiform
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.10
4
+ version: 0.2.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - jayce.pulsipher
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-09-08 00:00:00.000000000 Z
11
+ date: 2023-02-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -123,8 +123,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
123
123
  - !ruby/object:Gem::Version
124
124
  version: '0'
125
125
  requirements: []
126
- rubyforge_project:
127
- rubygems_version: 2.7.7
126
+ rubygems_version: 3.1.2
128
127
  signing_key:
129
128
  specification_version: 4
130
129
  summary: Generate scope methods to ActiveRecord classes based on columns and associations