Sha256: c679cc119812d8bc41b3ccd688e82ca34254a1417579897ade76a05ae6f37359

Contents?: true

Size: 1.98 KB

Versions: 5

Compression:

Stored size: 1.98 KB

Contents

include Abstract::Permission

format :html do include Abstract::Permission::HtmlFormat end

event :cascade_read_rule, :finalize, after: :update_rule_cache, when: :is_rule? do
  return unless name_is_changing? || trash_is_changing?

  update_read_ruled_cards
end

def update_read_ruled_cards
  Card::Rule.clear_read_rule_cache
  Card.cache.reset # maybe be more surgical, just Auth.user related
  expire # probably shouldn't be necessary,
  # but was sometimes getting cached version when card should be in the
  # trash.  could be related to other bugs?

  processed = update_read_rules_of_set_members
  update_cards_with_read_rule_id processed unless new?
end

def update_read_rules_of_set_members
  return unless rule_pattern_index

  each_member do |member, processed|
    processed << member.key
    member.update_read_rule unless member_has_overriding_rule?(member)
  end
end

def member_has_overriding_rule? member
  pattern_index(Card.fetch_id(member.read_rule_class)) < rule_pattern_index
end

# cards with this card as a read_rule_id
# These may include cards that are no longer set members if the card was renamed
# (edge case)
def update_cards_with_read_rule_id processed
  processed ||= ::Set.new
  Card::Auth.as_bot do
    Card.search(read_rule_id: id) do |card|
      card.update_read_rule unless processed.include?(card.key)
    end
  end
end

def each_member
  Auth.as_bot do
    all_members.each_with_object(::Set.new) do |member, processed|
      yield member, processed
    end
  end
end

def all_members
  rule_set.item_cards limit: 0
end

def rule_pattern_index
  return if trash

  @rule_pattern_index ||= pattern_index rule_set&.tag&.id
end

def pattern_index pattern_id
  pattern_ids.index(pattern_id) || invalid_pattern_id(pattern_id)
end

def pattern_ids
  @pattern_ids ||= set_patterns.map(&:pattern_id)
end

def invalid_pattern_id pattern_id
  Rails.logger.info "invalid pattern id for read rule: #{pattern_id}"
end

event :process_read_rule_update_queue, :finalize do
  left&.update_read_rule
end

Version data entries

5 entries across 5 versions & 2 rubygems

Version Path
card-mod-permissions-0.11.3 set/right/read.rb
card-mod-permissions-0.11.2 set/right/read.rb
card-mod-permissions-0.11.1 set/right/read.rb
card-mod-permissions-0.11.0 set/right/read.rb
card-1.100.0 mod/settings/set/right/read.rb