activecube 0.1.39 → 0.1.42

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: 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