Module: Card::Setting

Overview

Used to extend setting modules like Card::Set::Self::Create in the settings mod

Constant Summary collapse

@@group_names =
{
  templating:  'Templating',
  permission:  'Permissions',
  webpage:     'Webpage',
  pointer:     'Pointer',
  editing_cue: 'Editing cues',
  event:       'Events',
  other:       'Other',
  config:      'Config'
}
@@groups =
@@group_names.keys.each_with_object({}) do |key, groups|
  groups[key] = []
end
@@user_specific =
::Set.new

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#codenameObject

Let M = Card::Setting (module)

E = Card::Set::Self::Create (module extended with M)
O = Card['*create']         (object)

accessible in E



11
12
13
# File 'mod/04_settings/lib/card/setting.rb', line 11

def codename
  @codename
end

Class Method Details

.extended(host_class) ⇒ Object



14
15
16
17
# File 'mod/04_settings/lib/card/setting.rb', line 14

def self.extended host_class
  # accessible in E and O
  host_class.mattr_accessor :restricted_to_type, :rule_type_editable
end

.user_specific?(codename) ⇒ Boolean

Returns:

  • (Boolean)


34
35
36
# File 'mod/04_settings/lib/card/setting.rb', line 34

def self.user_specific? codename
  @@user_specific.include? codename
end

Instance Method Details

#applies_to_cardtype(type_id) ⇒ Object



78
79
80
# File 'mod/04_settings/lib/card/setting.rb', line 78

def applies_to_cardtype type_id
  !restricted_to_type || restricted_to_type.include?(type_id)
end

#set_position(group, pos) ⇒ Object



66
67
68
69
70
71
72
73
74
75
76
# File 'mod/04_settings/lib/card/setting.rb', line 66

def set_position group, pos
  if pos
    if @@groups[group][pos - 1]
      @@groups[group].insert(pos - 1, self)
    else
      @@groups[group][pos - 1] = self
    end
  else
    @@groups[group] << self
  end
end

#setting_opts(opts) ⇒ Object

usage: setting_opts group: :permission | :event | …

position:     <Fixnum> (starting at 1, default: add to end)
rule_type_editable: true | false (default: false)
restricted_to_type: <cardtype> | [ <cardtype>, ...]


47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'mod/04_settings/lib/card/setting.rb', line 47

def setting_opts opts
  group = opts[:group] || :other
  @@groups[group] ||= []
  set_position group, opts[:position]

  @codename = opts[:codename] ||
              name.match(/::(\w+)$/)[1].underscore.to_sym
  self.rule_type_editable = opts[:rule_type_editable]
  self.restricted_to_type =
    if opts[:restricted_to_type]
      type_ids = [opts[:restricted_to_type]].flatten.map do |cardtype|
        to_type_id(cardtype)
      end
      ::Set.new(type_ids)
    end
  return unless opts[:user_specific]
  @@user_specific << @codename
end

#to_type_id(type) ⇒ Object



38
39
40
# File 'mod/04_settings/lib/card/setting.rb', line 38

def to_type_id type
  type.is_a?(Fixnum) ? type : Card::Codename[type]
end