Class: Activecube::Query::Slice

Inherits:
Item
  • Object
show all
Defined in:
lib/activecube/query/slice.rb

Instance Attribute Summary collapse

Attributes inherited from Item

#cube, #definition, #key

Instance Method Summary collapse

Methods inherited from Item

#required_column_names

Constructor Details

#initialize(cube, key, dimension, field = nil, modifier = nil) ⇒ Slice

Returns a new instance of Slice.



5
6
7
8
9
10
# File 'lib/activecube/query/slice.rb', line 5

def initialize cube, key, dimension, field = nil, modifier = nil
  super cube, key, dimension
  @field = field
  @modifier = modifier
  field_methods! if field.try(:definition).kind_of?(Hash)
end

Instance Attribute Details

#fieldObject (readonly)

Returns the value of attribute field.



4
5
6
# File 'lib/activecube/query/slice.rb', line 4

def field
  @field
end

#modifierObject (readonly)

Returns the value of attribute modifier.



4
5
6
# File 'lib/activecube/query/slice.rb', line 4

def modifier
  @modifier
end

Instance Method Details

#[](key) ⇒ Object



12
13
14
15
16
17
# File 'lib/activecube/query/slice.rb', line 12

def [] key
  unless (definition.kind_of? Activecube::Dimension) && !self.field && (field = definition.class.fields[key])
    raise "Field #{key} is not defined for #{definition.name}"
  end
  Slice.new cube, key, definition, field
end

#alias!(new_key) ⇒ Object



19
20
21
# File 'lib/activecube/query/slice.rb', line 19

def alias! new_key
  self.class.new cube, new_key, definition, field, modifier
end

#append_query(_model, cube_query, table, query) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/activecube/query/slice.rb', line 27

def append_query _model, cube_query, table, query

  attr_alias = "`#{key.to_s}`"
  expr = field ? Arel.sql( modifier || field.definition ) : table[dimension_class.column_name]
  query = query.project(expr.as(attr_alias))

  if identity = dimension_class.identity
    query = query.project(table[identity]).group(table[identity])
  else
    query = query.group(attr_alias)
  end

  if cube_query.orderings.empty?
    query = query.order(attr_alias)
  end

  query
end

#dimension_classObject



23
24
25
# File 'lib/activecube/query/slice.rb', line 23

def dimension_class
  definition.class
end

#to_sObject



46
47
48
# File 'lib/activecube/query/slice.rb', line 46

def to_s
  "Dimension #{super}"
end