Class: WorkerPlugins::SwitchCollection

Inherits:
ApplicationService show all
Defined in:
app/services/worker_plugins/switch_collection.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from ApplicationService

#db_now_value, #postgres?, #quote, #sqlite?

Constructor Details

#initialize(query:, workplace:) ⇒ SwitchCollection



4
5
6
7
# File 'app/services/worker_plugins/switch_collection.rb', line 4

def initialize(query:, workplace:)
  @query = query
  @workplace = workplace
end

Instance Attribute Details

#queryObject (readonly)

Returns the value of attribute query.



2
3
4
# File 'app/services/worker_plugins/switch_collection.rb', line 2

def query
  @query
end

#workplaceObject (readonly)

Returns the value of attribute workplace.



2
3
4
# File 'app/services/worker_plugins/switch_collection.rb', line 2

def workplace
  @workplace
end

Instance Method Details

#ids_added_alreadyObject



31
32
33
34
35
36
37
# File 'app/services/worker_plugins/switch_collection.rb', line 31

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_queryObject



25
26
27
28
29
# File 'app/services/worker_plugins/switch_collection.rb', line 25

def ids_added_already_query
  workplace
    .workplace_links
    .where(resource_type: model_class.name, resource_id: query_with_selected_ids)
end

#model_classObject



39
40
41
# File 'app/services/worker_plugins/switch_collection.rb', line 39

def model_class
  @model_class ||= query.klass
end

#performObject



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'app/services/worker_plugins/switch_collection.rb', line 9

def perform
  if resources_to_add.count.zero?
    result = WorkerPlugins::RemoveCollection.execute!(query: query, workplace: workplace)
    succeed!(
      destroyed: result.fetch(:destroyed),
      mode: :destroyed
    )
  else
    result = WorkerPlugins::AddCollection.execute!(query: query, workplace: workplace)
    succeed!(
      created: result.fetch(:created),
      mode: :created
    )
  end
end

#query_with_selected_idsObject



43
44
45
46
47
48
49
# File 'app/services/worker_plugins/switch_collection.rb', line 43

def query_with_selected_ids
  WorkerPlugins::SelectColumnWithTypeCast.execute!(
    column_name_to_select: :id,
    column_to_compare_with: WorkerPlugins::WorkplaceLink.column_for_attribute(:resource_id),
    query: query
  )
end

#resources_to_addObject



51
52
53
# File 'app/services/worker_plugins/switch_collection.rb', line 51

def resources_to_add
  @resources_to_add ||= query.where.not(id: ids_added_already)
end