Module: Card::Set::All::Rules

Extended by:
Card::Set
Defined in:
tmpsets/set/mod001-01_core/all/rules.rb

Defined Under Namespace

Modules: ClassMethods

Constant Summary collapse

RuleSQL =
%{
  select rules.id as rule_id, settings.id as setting_id, sets.id as set_id, sets.left_id as anchor_id, sets.right_id as set_tag_id
  from cards rules
  join cards sets     on rules.left_id  = sets.id
  join cards settings on rules.right_id = settings.id
  where sets.type_id     = #{Card::SetID }    and sets.trash     is false
  and   settings.type_id = #{Card::SettingID} and settings.trash is false
  and                                             rules.trash    is false
  and   (settings.codename != 'follow' or rules.db_content != '');
}
ReadRuleSQL =
%{
  select refs.referee_id as party_id, read_rules.id as read_rule_id
  from cards read_rules
  join card_references refs on refs.referer_id    = read_rules.id
  join cards sets           on read_rules.left_id = sets.id
  where read_rules.right_id = #{Card::ReadID} and read_rules.trash is false and sets.type_id = #{Card::SetID};
}

Instance Method Summary collapse

Methods included from Card::Set

abstract_set?, all_set?, card_accessor, card_reader, card_writer, clean_empty_module_from_hash, clean_empty_modules, define_active_job, define_event_method, define_event_perform_later_method, define_on_format, ensure_set, event, extended, format, process_base_module_list, process_base_modules, register_set, register_set_format, shortname, view, write_tmp_file

Instance Method Details

#is_rule?Boolean

Returns:

  • (Boolean)


26
27
28
# File 'tmpsets/set/mod001-01_core/all/rules.rb', line 26

def is_rule?
  is_standard_rule? || is_user_rule?
end

#is_standard_rule?Boolean

Returns:

  • (Boolean)


30
31
32
33
34
35
# File 'tmpsets/set/mod001-01_core/all/rules.rb', line 30

def is_standard_rule?
  (r = right( :skip_modules=>true )) &&
  r.type_id == Card::SettingID       &&
  (l = left( :skip_modules=>true ))  &&
  l.type_id == Card::SetID
end

#is_user_rule?Boolean

Returns:

  • (Boolean)


37
38
39
40
41
42
43
44
45
# File 'tmpsets/set/mod001-01_core/all/rules.rb', line 37

def is_user_rule?
  cardname.parts.length > 2                                  &&
  (r = right( :skip_modules=>true ))                         &&
   r.type_id == Card::SettingID                              &&
  (set = self[0..-3, :skip_modules=>true])                   &&
   set.type_id == Card::SetID                                &&
  (user = self[-2, :skip_modules=>true] )                    &&
  (user.type_id == Card::UserID  || user.codename == 'all' )
end


77
78
79
80
81
82
83
84
85
86
87
88
89
# File 'tmpsets/set/mod001-01_core/all/rules.rb', line 77

def related_sets with_self = false
  # refers to sets that users may configure from the current card - NOT to sets to which the current card belongs

  sets = []
  sets << ["#{name}+*type",  Card::TypeSet.label( name) ] if known? && type_id==Card::CardtypeID
  sets << ["#{name}+*self",  Card::SelfSet.label( name) ] if with_self
  sets << ["#{name}+*right", Card::RightSet.label(name) ] if known? && cardname.simple?

#      Card.search(:type=>'Set',:left=>{:right=>name},:right=>'*type plus right',:return=>'name').each do |set_name|
#        sets<< set_name
#      end
  sets
end

#rule(setting_code, options = {}) ⇒ Object



48
49
50
51
52
# File 'tmpsets/set/mod001-01_core/all/rules.rb', line 48

def rule setting_code, options={}
  options[:skip_modules] = true
  card = rule_card setting_code, options
  card && card.db_content
end

#rule_card(setting_code, options = {}) ⇒ Object



54
55
56
# File 'tmpsets/set/mod001-01_core/all/rules.rb', line 54

def rule_card setting_code, options={}
  Card.fetch rule_card_id( setting_code, options ), options
end

#rule_card_id(setting_code, options = {}) ⇒ Object



58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'tmpsets/set/mod001-01_core/all/rules.rb', line 58

def rule_card_id setting_code, options={}
  fallback = options.delete( :fallback )

  if Card::Setting.user_specific? setting_code
    user_id = options[:user_id] || (options[:user] and options[:user].id) || Auth.current_id
    if user_id
      fallback = "#{setting_code}+#{AllID}"
      setting_code = "#{setting_code}+#{user_id}"
    end
  end

  rule_set_keys.each do |rule_set_key|
    rule_id = self.class.rule_cache["#{rule_set_key}+#{setting_code}"]
    rule_id ||= fallback && self.class.rule_cache["#{rule_set_key}+#{fallback}"]
    return rule_id if rule_id
  end
  nil
end