Class: Thermos::Beverage

Inherits:
Object
  • Object
show all
Defined in:
lib/thermos/beverage.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(key:, model:, deps:, action:, lookup_key: nil, filter: nil, queue: nil) ⇒ Beverage

Returns a new instance of Beverage.



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/thermos/beverage.rb', line 7

def initialize(
  key:,
  model:,
  deps:,
  action:,
  lookup_key: nil,
  filter: nil,
  queue: nil
)
  @key = key
  @model = model
  @lookup_key = lookup_key || :id
  @filter = filter || nil
  @deps = generate_deps(model, deps)
  @action = action
  @queue = queue || ActiveJob::Base.default_queue_name

  set_observers
end

Instance Attribute Details

#actionObject (readonly)

Returns the value of attribute action.



5
6
7
# File 'lib/thermos/beverage.rb', line 5

def action
  @action
end

#depsObject (readonly)

Returns the value of attribute deps.



5
6
7
# File 'lib/thermos/beverage.rb', line 5

def deps
  @deps
end

#filterObject (readonly)

Returns the value of attribute filter.



5
6
7
# File 'lib/thermos/beverage.rb', line 5

def filter
  @filter
end

#keyObject (readonly)

Returns the value of attribute key.



5
6
7
# File 'lib/thermos/beverage.rb', line 5

def key
  @key
end

#lookup_keyObject (readonly)

Returns the value of attribute lookup_key.



5
6
7
# File 'lib/thermos/beverage.rb', line 5

def lookup_key
  @lookup_key
end

#modelObject (readonly)

Returns the value of attribute model.



5
6
7
# File 'lib/thermos/beverage.rb', line 5

def model
  @model
end

#queueObject (readonly)

Returns the value of attribute queue.



5
6
7
# File 'lib/thermos/beverage.rb', line 5

def queue
  @queue
end

Instance Method Details

#lookup_keys_for_dep_model(dep_model) ⇒ Object



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

def lookup_keys_for_dep_model(dep_model)
  @deps
    .select { |dep| dep.klass == dep_model.class }
    .flat_map do |dep|
      lookup_keys = []

      @model
        .joins(dep.path)
        .where(dep.table => { id: dep_model.id })
        .find_each do |model|
          lookup_keys << model.send(@lookup_key) if should_fill?(model)
        end

      lookup_keys
    end
    .uniq
end

#should_fill?(model) ⇒ Boolean

Returns:

  • (Boolean)


45
46
47
# File 'lib/thermos/beverage.rb', line 45

def should_fill?(model)
  @filter.class == Proc ? !!@filter.call(model) : true
end