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",
  editing:     "Editing",
  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' accessible in E



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

def codename
  @codename
end

Class Method Details

.extended(host_class) ⇒ Object



14
15
16
17
# File 'mod/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)


33
34
35
# File 'mod/settings/lib/card/setting.rb', line 33

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

Instance Method Details

#applies_to_cardtype(type_id) ⇒ Object



77
78
79
# File 'mod/settings/lib/card/setting.rb', line 77

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

#set_position(group, pos) ⇒ Object



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

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: (starting at 1, default: add to end) rule_type_editable: true | false (default: false) restricted_to_type: | [ , ...]



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

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



37
38
39
# File 'mod/settings/lib/card/setting.rb', line 37

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