Module: Card::Set::All::Follow::FollowerIds

Extended by:
Card::Set
Defined in:
tmpsets/set/mod017-follow/all/follow/follower_ids.rb

Overview

Set: All cards (Follow, FollowerIds)

Defined Under Namespace

Modules: ClassMethods

Constant Summary collapse

FOLLOWER_IDS_CACHE_KEY =
"FOLLOWER_IDS".freeze

Class Method Summary collapse

Instance Method Summary collapse

Methods included from I18nScope

#mod_name, #scope

Methods included from Loader

#clean_empty_module_from_hash, #clean_empty_modules, #extended, #process_base_modules, #register_set

Methods included from Helpers

#abstract_set?, #all_set?, #num_set_parts, #shortname, #underscore

Methods included from Card::Set::AdvancedApi

#attachment, #ensure_set, #stage_method

Methods included from Format

#before, #format, layout_method_name, #view, view_method_name, view_setting_method_name, wrapper_method_name

Methods included from Inheritance

#include_set, #include_set_formats

Methods included from Basket

#abstract_basket, #add_to_basket, #basket, #unshift_basket

Methods included from Trait

#card_accessor, #card_reader, #card_writer, #require_field

Methods included from Event::Api

#event

Class Method Details

.source_locationObject



7
# File 'tmpsets/set/mod017-follow/all/follow/follower_ids.rb', line 7

def self.source_location; "/Users/ethan/dev/decko/gem/card/mod/follow/set/all/follow/follower_ids.rb"; end

Instance Method Details

#direct_follower_ids(&block) ⇒ Object



90
91
92
93
94
95
96
# File 'tmpsets/set/mod017-follow/all/follow/follower_ids.rb', line 90

def direct_follower_ids &block
  ids = ::Set.new
  set_names.each do |set_name|
    direct_follower_ids_for_set setcard_from_name(set_name), ids, &block
  end
  ids
end

#direct_follower_ids_for_set(set_card, ids) ⇒ Object



102
103
104
105
106
107
108
109
# File 'tmpsets/set/mod017-follow/all/follow/follower_ids.rb', line 102

def direct_follower_ids_for_set set_card, ids
  set_card.all_user_ids_with_rule_for(:follow).each do |user_id|
    next if ids.include?(user_id) || !(option = follow_rule_option user_id)

    yield user_id, set_card, option if block_given?
    ids << user_id
  end
end

#direct_followersObject

all users (cards) that "directly" follow this card "direct" means there is a follow rule that applies explicitly to this card. one can also "indirectly" follow cards by following parent cards or other cards that nest this one.



84
85
86
87
88
# File 'tmpsets/set/mod017-follow/all/follow/follower_ids.rb', line 84

def direct_followers
  direct_follower_ids.map do |id|
    Card.fetch(id)
  end
end

#each_direct_follower_id_with_reasonObject



111
112
113
114
115
116
# File 'tmpsets/set/mod017-follow/all/follow/follower_ids.rb', line 111

def each_direct_follower_id_with_reason
  direct_follower_ids do |user_id, set_card, follow_option|
    reason = follow_option.gsub(/[\[\]]/, "")
    yield user_id, set_card: set_card, option: reason
  end
end

#follower_idsObject



58
59
60
61
62
63
64
# File 'tmpsets/set/mod017-follow/all/follow/follower_ids.rb', line 58

def follower_ids
  @follower_ids = read_follower_ids_cache || begin
    result = direct_follower_ids + indirect_follower_ids
    write_follower_ids_cache result
    result
  end
end

#follower_namesObject



48
49
50
# File 'tmpsets/set/mod017-follow/all/follow/follower_ids.rb', line 48

def follower_names
  followers.map(&:name)
end

#followersObject



52
53
54
55
56
# File 'tmpsets/set/mod017-follow/all/follow/follower_ids.rb', line 52

def followers
  follower_ids.map do |id|
    Card.fetch(id)
  end
end

#followers_countObject



66
67
68
# File 'tmpsets/set/mod017-follow/all/follow/follower_ids.rb', line 66

def followers_count
  follower_ids.size
end

#indirect_follower_idsObject



70
71
72
73
74
75
76
77
78
# File 'tmpsets/set/mod017-follow/all/follow/follower_ids.rb', line 70

def indirect_follower_ids
  result = ::Set.new
  left_card = left
  while left_card
    result += left_card.direct_follower_ids if left_card.followed_field? self
    left_card = left_card.left
  end
  result
end

#read_follower_ids_cacheObject



44
45
46
# File 'tmpsets/set/mod017-follow/all/follow/follower_ids.rb', line 44

def read_follower_ids_cache
  Card.follower_ids_cache[id]
end

#setcard_from_name(set_name) ⇒ Object



98
99
100
# File 'tmpsets/set/mod017-follow/all/follow/follower_ids.rb', line 98

def setcard_from_name set_name
  Card.fetch set_name, new: { type_id: Card::SetID }
end

#write_follower_ids_cache(user_ids) ⇒ Object



38
39
40
41
42
# File 'tmpsets/set/mod017-follow/all/follow/follower_ids.rb', line 38

def write_follower_ids_cache user_ids
  hash = Card.follower_ids_cache
  hash[id] = user_ids
  Card.write_follower_ids_cache hash
end