Class: WorkerPlugins::AddQuery
Instance Attribute Summary collapse
Instance Method Summary
collapse
#db_now_value, #postgres?, #quote, #quote_column, #quote_table, #sqlite?
Constructor Details
#initialize(query:, workplace:) ⇒ AddQuery
Returns a new instance of AddQuery.
4
5
6
7
8
|
# File 'app/services/worker_plugins/add_query.rb', line 4
def initialize(query:, workplace:)
@query = query
.except(:order) @workplace = workplace
end
|
Instance Attribute Details
#query ⇒ Object
Returns the value of attribute query.
2
3
4
|
# File 'app/services/worker_plugins/add_query.rb', line 2
def query
@query
end
|
#workplace ⇒ Object
Returns the value of attribute workplace.
2
3
4
|
# File 'app/services/worker_plugins/add_query.rb', line 2
def workplace
@workplace
end
|
Instance Method Details
#add_query_to_workplace ⇒ Object
16
17
18
|
# File 'app/services/worker_plugins/add_query.rb', line 16
def add_query_to_workplace
WorkerPlugins::WorkplaceLink.connection.execute(sql)
end
|
#created ⇒ Object
20
21
22
|
# File 'app/services/worker_plugins/add_query.rb', line 20
def created
@created ||= resources_to_add.pluck(primary_key.to_sym)
end
|
#ids_added_already ⇒ Object
30
31
32
33
34
35
36
|
# File 'app/services/worker_plugins/add_query.rb', line 30
def ids_added_already
WorkerPlugins::SelectColumnWithTypeCast.execute!(
column_name_to_select: :resource_id,
column_to_compare_with: model_class.column_for_attribute(:id),
query: ids_added_already_query
)
end
|
#ids_added_already_query ⇒ Object
24
25
26
27
28
|
# File 'app/services/worker_plugins/add_query.rb', line 24
def ids_added_already_query
workplace
.workplace_links
.where(resource_type: model_class.name, resource_id: query_with_selected_ids)
end
|
#model_class ⇒ Object
38
39
40
|
# File 'app/services/worker_plugins/add_query.rb', line 38
def model_class
@model_class ||= query.klass
end
|
10
11
12
13
14
|
# File 'app/services/worker_plugins/add_query.rb', line 10
def perform
created add_query_to_workplace
succeed!(created:)
end
|
#primary_key ⇒ Object
42
43
44
|
# File 'app/services/worker_plugins/add_query.rb', line 42
def primary_key
@primary_key ||= resources_to_add.klass.primary_key
end
|
#query_with_selected_ids ⇒ Object
#resources_to_add ⇒ Object
54
55
56
57
58
59
|
# File 'app/services/worker_plugins/add_query.rb', line 54
def resources_to_add
@resources_to_add ||= query
.distinct
.where
.not(id: ids_added_already)
end
|
#select_sql ⇒ Object
61
62
63
64
65
66
67
68
69
70
71
|
# File 'app/services/worker_plugins/add_query.rb', line 61
def select_sql
@select_sql ||= resources_to_add
.select("
#{db_now_value},
#{quote(resources_to_add.klass.name)},
#{quote_table(resources_to_add.klass.table_name)}.#{quote_column(primary_key)},
#{db_now_value},
#{select_workplace_id_sql}
")
.to_sql
end
|
#select_workplace_id_sql ⇒ Object
73
74
75
76
77
78
79
80
81
|
# File 'app/services/worker_plugins/add_query.rb', line 73
def select_workplace_id_sql
workplace_id_column = WorkerPlugins::WorkplaceLink.columns.find { |column| column.name == "workplace_id" }
if workplace_id_column.type == :uuid
"CAST(#{quote(workplace.id)} AS UUID)"
else
quote(workplace.id)
end
end
|
#sql ⇒ Object
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
# File 'app/services/worker_plugins/add_query.rb', line 83
def sql
@sql ||= "
INSERT INTO
worker_plugins_workplace_links
(
created_at,
resource_type,
resource_id,
updated_at,
workplace_id
)
#{select_sql}
"
end
|