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 +4 -4
- data/Gemfile.lock +1 -1
- data/lib/activecube/processor/composer.rb +1 -3
- data/lib/activecube/query/cube_query.rb +17 -31
- data/lib/activecube/query/ordering.rb +26 -5
- data/lib/activecube/query_methods.rb +1 -2
- data/lib/activecube/version.rb +1 -1
- metadata +2 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 7074b394ca4949bf0bedae97ac91b59ef8d742cb7c6ab77e5409345d77caa7bd
         | 
| 4 | 
            +
              data.tar.gz: e7872e83b417e7e9d34acd329627e68d8d1424771e507fd345bd4edac0bc04e9
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 693c8954a658b15c5f6f314b189fbff0a13777a8a84fbf1354d70610dabc903ef7be60475a4253e5bdd72e067a4a31aaaddb0821fa4949a4347be0abd5d28c02
         | 
| 7 | 
            +
              data.tar.gz: 2a04854410822d43e2b4e29b53c062cdf59b971137978081147133956fd1108e2bd1b633782347075e7aa81cc9d237d8da92d148f5064d4697ee20d3be56944c
         | 
    
        data/Gemfile.lock
    CHANGED
    
    
| @@ -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 | 
            -
                     | 
| 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 | 
            -
             | 
| 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
         | 
    
        data/lib/activecube/version.rb
    CHANGED
    
    
    
        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. | 
| 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- | 
| 11 | 
            +
            date: 2022-04-18 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: activerecord
         |