Class: RedisCounters::Dumpers::Destination

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Includes:
RedisCounters::Dumpers::Dsl::Destination
Defined in:
lib/redis_counters/dumpers/destination.rb

Overview

Класс представляет конечную точку сохранения данных счетчика.

Описывает в какую модель (таблицу), какие поля имеющиеся в распоряжении дампера, должны быть сохранены и каким образом.

По сути, мерджит указанные поля из temp - таблицы, дампера в указанную таблицу.

Может использоваться как напрямую так и с помощью DSL (см. модуль RedisCounters::Dumpers::Dsl::Destination).

Constant Summary collapse

VALUE_DELIMITER =
','.freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(engine) ⇒ Destination

Returns a new instance of Destination.



84
85
86
87
88
89
# File 'lib/redis_counters/dumpers/destination.rb', line 84

def initialize(engine)
  @engine = engine
  @fields_map = HashWithIndifferentAccess.new
  @conditions = []
  @source_conditions = []
end

Instance Attribute Details

#conditionsObject

Список дополнительных условий, которые применяются при обновлении целевой таблицы, Array of String. Каждое условие представляет собой строку - часть SQL выражения, которое может включать именованные параметры из числа доступных в хеше оббщих параметров дампера: engine.common_params. Условия соеденяются через AND.



60
61
62
# File 'lib/redis_counters/dumpers/destination.rb', line 60

def conditions
  @conditions
end

#engineObject

Ссылка на родительский движек - дампер.



24
25
26
# File 'lib/redis_counters/dumpers/destination.rb', line 24

def engine
  @engine
end

#fieldsObject

Список полей, из доступных дамперу, которые необходимо сохранить, Array.



30
31
32
# File 'lib/redis_counters/dumpers/destination.rb', line 30

def fields
  @fields
end

#fields_mapObject

Карта полей - карта псевдонимов полей, Hash. Названия полей в целевой таблице, могут отличаться от названий полей дампера. Для сопоставления полей целевой таблицы и дампера, необходимо заполнить карту соответствия. Карта, заполняется только для тех полей, названия которых отличаются. Во всех свойствах, содержащий указания полей: fields, key_fields, increment_fields, conditions используются имена конечных полей целевой таблицы.

Example:

fields_map = {:pages => :value, :date => :start_month_date}

Означает, что целевое поле :pages, указывает на поле :value, дампера, а целевое поле :date, указывает на поле :start_month_date, дампера.



51
52
53
# File 'lib/redis_counters/dumpers/destination.rb', line 51

def fields_map
  @fields_map
end

#group_byObject

Список полей по которым будет группироваться таблицы с исходными данным, Array



54
55
56
# File 'lib/redis_counters/dumpers/destination.rb', line 54

def group_by
  @group_by
end

#increment_fieldsObject

Список полей, которые будет инкрементированы при обновлении существующей записи, Array.



37
38
39
# File 'lib/redis_counters/dumpers/destination.rb', line 37

def increment_fields
  @increment_fields
end

#key_fieldsObject

Список полей, по комбинации которых, будет происходить определение существования записи, при мердже данных, Array.



34
35
36
# File 'lib/redis_counters/dumpers/destination.rb', line 34

def key_fields
  @key_fields
end

#matching_exprObject

Public: Опциональное выражение для определения одинаковых записей в исходной (source) и целевой (target) таблицах. Эту опцию имеет смысл использовать если например нужно добавить функцию на какую-нибудь колонку, например:

matching_expr <<-SQL

(source.company_id, source.date, coalesce(source.referer, '')) =
  (target.company_id, target.date, coalesce(target.referer, ''))

SQL

Returns String



79
80
81
# File 'lib/redis_counters/dumpers/destination.rb', line 79

def matching_expr
  @matching_expr
end

#modelObject

Модель, в таблицу, которой будет производится мердж данных, AR::Model.



27
28
29
# File 'lib/redis_counters/dumpers/destination.rb', line 27

def model
  @model
end

#source_conditionsObject

Список дополнительных условий, которые применяются для выборки из source-таблицы для обновления target, Array of String. Каждое условие представляет собой строку - часть SQL выражения, которое может включать именованные параметры из числа доступных в хеше общих параметров дампера: engine.common_params. Условия соединяются через AND.



67
68
69
# File 'lib/redis_counters/dumpers/destination.rb', line 67

def source_conditions
  @source_conditions
end

#value_delimiterObject

Разделитель значений, String.



82
83
84
# File 'lib/redis_counters/dumpers/destination.rb', line 82

def value_delimiter
  @value_delimiter
end

Instance Method Details

#mergeObject



91
92
93
94
95
# File 'lib/redis_counters/dumpers/destination.rb', line 91

def merge
  sql = generate_query
  sql = model.send(:sanitize_sql, [sql, engine.common_params])
  connection.execute sql
end