activecube 0.1.39 → 0.1.42

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: 849b74aa2966edb904085a1ffe0f0ac9b0450dcb6bc21ab81741ab4b246c25a4
4
- data.tar.gz: '05138c6ffd9311667dabfe3b98ff2c7e432f77e5a12a89d7675b75284ec3d696'
3
+ metadata.gz: 7074b394ca4949bf0bedae97ac91b59ef8d742cb7c6ab77e5409345d77caa7bd
4
+ data.tar.gz: e7872e83b417e7e9d34acd329627e68d8d1424771e507fd345bd4edac0bc04e9
5
5
  SHA512:
6
- metadata.gz: 77c933cba35f04f5611d94da571db185505d81eda693d89b84ebbd952762095f2a561b2745a387bca9b61ce75ea2103a083975b96d3c8ae0f2707b73295df6be
7
- data.tar.gz: 5998bae42643d1a360b354653d894238365d2079c0ee67571c1ef1a7c566432333ef4c39c26045847b98ab91b6cab83286a82a57c9a296133dee28201b1fc59d
6
+ metadata.gz: 693c8954a658b15c5f6f314b189fbff0a13777a8a84fbf1354d70610dabc903ef7be60475a4253e5bdd72e067a4a31aaaddb0821fa4949a4347be0abd5d28c02
7
+ data.tar.gz: 2a04854410822d43e2b4e29b53c062cdf59b971137978081147133956fd1108e2bd1b633782347075e7aa81cc9d237d8da92d148f5064d4697ee20d3be56944c
data/Gemfile.lock CHANGED
@@ -9,7 +9,7 @@ GIT
9
9
  PATH
10
10
  remote: .
11
11
  specs:
12
- activecube (0.1.37)
12
+ activecube (0.1.41)
13
13
  activerecord (>= 5.2)
14
14
 
15
15
  GEM
@@ -75,9 +75,7 @@ module Activecube::Processor
75
75
  measures_by_tables = measure_tables.group_by(&:table)
76
76
  measures_by_tables.each_pair do |table, list|
77
77
  @models << table.model
78
- reduce_options = measures_by_tables.count==1 ? cube_query.options : []
79
- reduced = cube_query.reduced list.map(&:measure), reduce_options
80
- table_query = table.query reduced
78
+ table_query = table.query cube_query
81
79
  composed_query = composed_query ? table.join(cube_query, composed_query, table_query) : table_query
82
80
  end
83
81
  composed_query
@@ -61,6 +61,14 @@ module Activecube::Query
61
61
  self
62
62
  end
63
63
 
64
+ def desc_by_integer *args
65
+ clear_sql
66
+ args.each{|arg|
67
+ options << Ordering.new(arg, :desc, options = {with_length: true})
68
+ }
69
+ self
70
+ end
71
+
64
72
  def asc *args
65
73
  clear_sql
66
74
  args.each{|arg|
@@ -69,6 +77,14 @@ module Activecube::Query
69
77
  self
70
78
  end
71
79
 
80
+ def asc_by_integer *args
81
+ clear_sql
82
+ args.each{|arg|
83
+ options << Ordering.new(arg, :asc, options = {with_length: true})
84
+ }
85
+ self
86
+ end
87
+
72
88
  def offset *args
73
89
  clear_sql
74
90
  args.each{|arg|
@@ -124,36 +140,6 @@ module Activecube::Query
124
140
  (measures.map(&:selectors) + slices.map(&:selectors) + selectors).flatten.map(&:required_column_names).flatten.uniq
125
141
  end
126
142
 
127
- def reduced other_measures, other_options
128
-
129
- common_selectors = []
130
- other_measures.each_with_index do |m,i|
131
- if i==0
132
- common_selectors += m.selectors
133
- else
134
- common_selectors &= m.selectors
135
- end
136
- end
137
-
138
- if common_selectors.empty?
139
- reduced_measures = other_measures
140
- reduced_selectors = self.selectors
141
- else
142
- reduced_measures = other_measures.collect{|m|
143
- Measure.new m.cube, m.key, m.definition, (m.selectors - common_selectors), m.modifications
144
- }
145
- reduced_selectors = self.selectors + common_selectors
146
- end
147
-
148
- unless reduced_measures.detect{|rm| rm.selectors.empty? }
149
- reduced_selectors += [Selector.or(reduced_measures.map(&:selectors).flatten.uniq)]
150
- end
151
-
152
- return self if (reduced_measures == self.measures) && (reduced_selectors == self.selectors)
153
-
154
- CubeQuery.new cube, slices, reduced_measures, reduced_selectors, other_options, tables
155
- end
156
-
157
143
  def join_fields
158
144
  slices.map(&:group_by_columns).flatten.uniq
159
145
  end
@@ -168,4 +154,4 @@ module Activecube::Query
168
154
  @composed = nil
169
155
  end
170
156
  end
171
- end
157
+ end
@@ -2,15 +2,21 @@ module Activecube
2
2
  module Query
3
3
  class Ordering
4
4
 
5
- attr_reader :argument, :direction
6
- def initialize argument, direction
5
+ attr_reader :argument, :direction, :options
6
+ def initialize argument, direction, options = {}
7
7
  @argument = argument
8
8
  @direction = direction
9
+ @options = options
9
10
  end
10
11
 
11
12
  def append_query _model, _cube_query, _table, query
12
- text = argument.to_s.split(',').map{|s| quote s}.join(',')
13
- query.order(::Arel.sql(text).send(direction))
13
+ @text = argument.to_s.split(',').map{|s| quote s}.join(',')
14
+
15
+ if options[:with_length]
16
+ return by_length_order(query)
17
+ end
18
+
19
+ simple_order(query)
14
20
  end
15
21
 
16
22
  def quote s
@@ -21,6 +27,21 @@ module Activecube
21
27
  end
22
28
  end
23
29
 
30
+ private
31
+
32
+ attr_reader :text
33
+
34
+ def simple_order(query)
35
+ query.order(::Arel.sql(text).send(direction))
36
+ end
37
+
38
+ def by_length_order(query)
39
+ query.order(
40
+ ::Arel.sql("LENGTH(#{text})").send(direction),
41
+ ::Arel.sql(text).send(direction)
42
+ )
43
+ end
44
+
24
45
  end
25
46
  end
26
- end
47
+ end
@@ -5,7 +5,7 @@ module Activecube
5
5
 
6
6
  attr_reader :database, :role
7
7
 
8
- [:slice, :measure, :when, :desc, :asc, :limit, :offset].each do |method|
8
+ [:slice, :measure, :when, :desc, :desc_by_integer, :asc, :asc_by_integer, :limit, :offset].each do |method|
9
9
  define_method(method) do |*args|
10
10
  Query::CubeQuery.new(self).send method, *args
11
11
  end
@@ -13,7 +13,6 @@ module Activecube
13
13
 
14
14
  def connected_to database: nil, role: nil, &block
15
15
  raise Activecube::InputArgumentError, "Must pass block to method" unless block_given?
16
- raise "Database not defined" unless database
17
16
  super_model.connected_to(database: database, role: role) do
18
17
  @database = database
19
18
  @role = role
@@ -1,3 +1,3 @@
1
1
  module Activecube
2
- VERSION = "0.1.39"
2
+ VERSION = "0.1.42"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activecube
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.39
4
+ version: 0.1.42
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aleksey Studnev
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-02-10 00:00:00.000000000 Z
11
+ date: 2022-04-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord