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

.codenamesObject



19
20
21
# File 'mod/settings/lib/card/setting.rb', line 19

def self.codenames
  Card::Setting.groups.values.flatten.compact.map(&:codename)
end

.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, :short_help_text
end

.user_specific?(codename) ⇒ Boolean

Returns:

  • (Boolean)


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

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

Instance Method Details

#applies_to_cardtype(type_id) ⇒ Object



72
73
74
# File 'mod/settings/lib/card/setting.rb', line 72

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

#set_position(group, pos) ⇒ Object



60
61
62
63
64
65
66
67
68
69
70
# File 'mod/settings/lib/card/setting.rb', line 60

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
# 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 = permitted_type_ids opts[:restricted_to_type]
  self.short_help_text = opts[:help_text]
  return unless opts[:user_specific]
  @@user_specific << @codename
end