counterwise 0.1.5 → 0.1.6

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: 3058578dbb5742b22c61ec6bfbd79253bd39886684760bd1afe2674c4e97eb00
4
- data.tar.gz: 8cd7bb0ad3fd770090cd3a156dca65a7d5c6dd9ba607dbcce500c6c94f182a31
3
+ metadata.gz: 1246c81e123d325511e259e5382592fdb52b4a10ea034c007bf3abc7f2b50148
4
+ data.tar.gz: 9a37bacf70d97d5199ebc945ceb72027e02752bcb0f6aa3abe853d77ff5b76ad
5
5
  SHA512:
6
- metadata.gz: 2ebfb183bba510a0e2322e73d7881fed711369575ceb1c48fa128ccacb1482fdec5dbc7b631232d3de0c9f84c4ea4c9620552b96b82212a1751be209ea6d29ec
7
- data.tar.gz: 5ed67f84bfffa86e5d438477a4c8f184cfa7b6e0bd26040e56defca7b3ba5877527c57a78b3d9f5868c75860d7b305225c82be24665761b9d3d7952a6bd3809f
6
+ metadata.gz: 5f01c473682cc7720d7801b31da1e728cd9e0b0f3c2ec8b4556ffbb4f220734cb950f37b08111af5c712bd85fd2fd1993bbb0932a12d0c353c3beb122aee15db
7
+ data.tar.gz: d6f9b153dc5fd8f78e4b652d58b9cf5a660c30f5a260bcec5b6c1e6d3378e60343730c074d9fbdc1cd76459d31ddc1f5c9ccaf4bb074f693ba15fb8ca0d96c0a
@@ -57,13 +57,24 @@ module Counter::Counters
57
57
  definition = definition_class.instance
58
58
  definition.model = self
59
59
 
60
+ counter_subquery = ->(counter_class) do
61
+ record_name = counter_class.instance.record_name
62
+
63
+ Counter::Value
64
+ .select(:value)
65
+ .where("parent_id = #{table_name}.id AND parent_type = '#{name}' AND name = '#{record_name}'")
66
+ .limit(1)
67
+ .to_sql
68
+ end
69
+
60
70
  scope :with_counter_data_from, ->(*counter_classes) {
61
71
  subqueries = ["#{table_name}.*"]
72
+
62
73
  counter_classes.each do |counter_class|
63
- sql = Counter::Value.select("value")
64
- .where("parent_id = #{table_name}.id AND parent_type = '#{name}' AND name = '#{counter_class.instance.record_name}'").to_sql
65
- subqueries << "(#{sql}) AS #{counter_class.instance.name}_data"
74
+ subquery = counter_subquery.call(counter_class)
75
+ subqueries << Arel.sql("(#{subquery}) AS #{"#{counter_class.instance.name}_data"}")
66
76
  end
77
+
67
78
  select(subqueries)
68
79
  }
69
80
 
@@ -74,15 +85,16 @@ module Counter::Counters
74
85
  counter_class.is_a?(Class) &&
75
86
  counter_class.ancestors.include?(Counter::Definition)
76
87
  }
77
- order_params = {}
78
- order_hash.map do |counter_class, direction|
88
+
89
+ order_clauses = order_hash.map do |counter_class, direction|
79
90
  if counter_class.is_a?(String) || counter_class.is_a?(Symbol)
80
- order_params[counter_class] = direction
91
+ "#{counter_class} #{direction.to_s.upcase}"
81
92
  elsif counter_class.ancestors.include?(Counter::Definition)
82
- order_params["#{counter_class.instance.name}_data"] = direction
93
+ "(#{counter_subquery.call(counter_class)}) #{direction.to_s.upcase}"
83
94
  end
84
95
  end
85
- with_counter_data_from(*counter_classes).order(order_params)
96
+
97
+ with_counter_data_from(*counter_classes).order(Arel.sql(order_clauses.join(", ")))
86
98
  }
87
99
 
88
100
  scope :with_counters, -> { includes(:counters) }
@@ -1,3 +1,3 @@
1
1
  module Counter
2
- VERSION = "0.1.5"
2
+ VERSION = "0.1.6"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: counterwise
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jamie Lawrence
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-04-15 00:00:00.000000000 Z
11
+ date: 2025-07-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '7'
19
+ version: '8'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '7'
26
+ version: '8'
27
27
  description: Counting and aggregation library for Rails.
28
28
  email:
29
29
  - jamie@ideasasylum.com
@@ -80,14 +80,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
80
80
  requirements:
81
81
  - - ">="
82
82
  - !ruby/object:Gem::Version
83
- version: '0'
83
+ version: 3.4.0
84
84
  required_rubygems_version: !ruby/object:Gem::Requirement
85
85
  requirements:
86
86
  - - ">="
87
87
  - !ruby/object:Gem::Version
88
88
  version: '0'
89
89
  requirements: []
90
- rubygems_version: 3.4.10
90
+ rubygems_version: 3.5.16
91
91
  signing_key:
92
92
  specification_version: 4
93
93
  summary: Counters and the counting counters that count them