Sha256: 9168cc813a1fb0caa150caf19e675ed881c37c84c75ee8107b1538e23c7f29df

Contents?: true

Size: 927 Bytes

Versions: 4

Compression:

Stored size: 927 Bytes

Contents

# frozen_string_literal: true

module Thermos
  class Beverage
    attr_reader :key, :model, :deps, :action, :lookup_key

    def initialize(key:, model:, deps:, action:, lookup_key: nil)
      @key = key
      @model = model
      @lookup_key = lookup_key || :id
      @deps = deps.map do |dep|
        Dependency.new(model: model, association: dep)
      end
      @action = action

      set_observers
    end

    def lookup_keys_for_dep_model(dep_model)
      @deps.flat_map do |dep|
        return [] unless dep.klass == dep_model.class
        @model.joins(dep.association)
              .where(dep.table => { id: dep_model.id })
              .pluck(@lookup_key)
      end.uniq
    end

    private

    def set_observers
      observe(@model)
      @deps.each { |dep| observe(dep.klass) }
    end

    def observe(model)
      model.include(Notifier) unless model.included_modules.include?(Notifier)
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
thermos-0.3.0 lib/thermos/beverage.rb
thermos-0.2.1 lib/thermos/beverage.rb
thermos-0.2.0 lib/thermos/beverage.rb
thermos-0.1.1 lib/thermos/beverage.rb