card 1.103.2 → 1.103.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/VERSION +1 -1
- data/config/environments/production.rb +9 -9
- data/db/migrate_core_cards/20130411191151_renaming_for_menu.rb +0 -1
- data/db/migrate_core_cards/20140317035504_account_requests_to_signups.rb +0 -2
- data/db/migrate_core_cards/20150202143810_import_bootstrap_layout.rb +0 -2
- data/db/migrate_core_cards/20190417142612_reorganize_scripts_2.rb +1 -3
- data/db/migrate_core_cards/20190502130029_add_shark_and_help_desk_role.rb +1 -1
- data/db/migrate_core_cards/20190710090209_homepage_tweaks.rb +3 -7
- data/db/migrate_core_cards/20190823220018_cleanup_for_decko_1_0.rb +2 -4
- data/db/migrate_core_cards/20190902193208_input_type.rb +3 -8
- data/db/migrate_core_cards/20190904174403_token_upgrade.rb +1 -1
- data/db/migrate_core_cards/data/1.12_stylesheets/traditional.scss +1 -2
- data/db/seed/new/card_actions.yml +2381 -2381
- data/db/seed/new/card_acts.yml +3 -3
- data/db/seed/new/card_references.yml +1026 -1033
- data/db/seed/new/cards.yml +5291 -5293
- data/db/seed/test/fixtures/cards.yml +6 -6
- data/lib/card/content/chunk.rb +0 -1
- data/lib/card/content/diff/summary.rb +14 -18
- data/lib/card/content.rb +9 -1
- data/lib/card/director/act_direction.rb +5 -3
- data/lib/card/director/stages.rb +2 -0
- data/lib/card/fetch/results.rb +6 -6
- data/lib/card/{tasks/card/file_card_creator → file_card_creator}/abstract_file_card/migration_file.rb +0 -0
- data/lib/card/{tasks/card/file_card_creator → file_card_creator}/abstract_file_card/ruby_file.rb +0 -0
- data/lib/card/{tasks/card/file_card_creator → file_card_creator}/abstract_file_card/source_file.rb +0 -0
- data/lib/card/{tasks/card/file_card_creator → file_card_creator}/abstract_file_card.rb +0 -5
- data/lib/card/{tasks/card/file_card_creator → file_card_creator}/haml_card.rb +0 -0
- data/lib/card/{tasks/card/file_card_creator → file_card_creator}/output_helper.rb +0 -0
- data/lib/card/{tasks/card/file_card_creator → file_card_creator}/script_card.rb +0 -0
- data/lib/card/{tasks/card/file_card_creator → file_card_creator}/style_card.rb +0 -0
- data/lib/card/{tasks/card/file_card_creator.rb → file_card_creator.rb} +0 -5
- data/lib/card/format/content.rb +5 -7
- data/lib/card/format/render.rb +10 -10
- data/lib/card/format.rb +3 -8
- data/lib/card/lexicon.rb +30 -7
- data/lib/card/model/save_helper.rb +1 -1
- data/lib/card/name/card_class.rb +1 -1
- data/lib/card/name.rb +6 -6
- data/lib/card/set/card_methods.rb +13 -0
- data/lib/card/set/event/skip_and_trigger.rb +8 -0
- data/lib/card/set/format/abstract_format/wrapper.rb +1 -1
- data/lib/card/set/format/abstract_format.rb +2 -1
- data/lib/card/set/format.rb +2 -3
- data/lib/card/set/helpers.rb +55 -0
- data/lib/card/set/inheritance.rb +1 -1
- data/lib/card/set/pattern/all.rb +7 -6
- data/lib/card/set/pattern/class_methods.rb +2 -2
- data/lib/card/set/pattern.rb +30 -19
- data/lib/card/set/registrar.rb +8 -2
- data/lib/card/set.rb +14 -7
- data/lib/card/view/classy.rb +15 -27
- data/lib/card/view/options/voo_api.rb +3 -1
- data/lib/card/view.rb +1 -0
- data/lib/card.rb +9 -11
- data/lib/cardio/generators/deck_helper.rb +0 -4
- data/lib/cardio/mod/load_strategy/set_tmp_files.rb +10 -4
- data/lib/cardio/mod/load_strategy.rb +3 -4
- data/lib/cardio/mod/loader/set_loader.rb +13 -13
- data/lib/cardio/mod/loader.rb +1 -1
- data/lib/cardio/railtie.rb +6 -2
- data/lib/generators/deck/templates/Gemfile.erb +1 -1
- data/lib/generators/deck/templates/Rakefile.erb +6 -2
- data/lib/generators/deck/templates/simplecov.rb.erb +7 -11
- data/lib/{card/tasks → tasks}/card/asset.rake +0 -0
- data/lib/{card/tasks → tasks}/card/create.rake +0 -0
- data/lib/{card/tasks → tasks}/card/migrate.rake +0 -0
- data/lib/{card/tasks → tasks}/card/mod.rake +0 -0
- data/lib/{card/tasks → tasks}/card.rake +0 -0
- data/mod/admin/set/all/admin.rb +16 -0
- data/mod/admin/set/self/admin.rb +2 -6
- data/mod/admin/set/self/admin_info.rb +2 -5
- data/mod/core/locales/en.yml +4 -5
- data/mod/core/set/all/name_events.rb +1 -1
- data/mod/core/set/all/reference_events.rb +5 -10
- data/mod/core/set/all/trash.rb +2 -3
- data/mod/core/spec/set/all/name_events_spec.rb +10 -10
- data/mod/core/spec/set/all/trash_spec.rb +1 -1
- metadata +20 -19
- data/lib/card/set/basket.rb +0 -59
data/lib/card/set/pattern.rb
CHANGED
@@ -2,42 +2,53 @@ class Card
|
|
2
2
|
module Set
|
3
3
|
class Pattern
|
4
4
|
class << self
|
5
|
-
def
|
6
|
-
|
7
|
-
Card::Set.const_remove_if_defined set_pattern.to_s.split("::").last
|
8
|
-
end
|
9
|
-
Card.set_patterns = []
|
10
|
-
@card_keys = nil
|
5
|
+
def concrete
|
6
|
+
@concrete ||= []
|
11
7
|
end
|
12
8
|
|
13
|
-
def
|
14
|
-
|
9
|
+
def reset
|
10
|
+
reloadables.each do |set_pattern|
|
11
|
+
Set.const_remove_if_defined set_pattern.to_s.split("::").last
|
12
|
+
end
|
13
|
+
@concrete = []
|
14
|
+
@card_keys = @codes = @nonbase_codes = @ids = nil
|
15
15
|
end
|
16
16
|
|
17
|
-
def
|
18
|
-
|
19
|
-
|
20
|
-
|
17
|
+
def reloadables
|
18
|
+
r = concrete.push(Abstract)
|
19
|
+
r.delete Set::All
|
20
|
+
r
|
21
21
|
end
|
22
22
|
|
23
23
|
def find pattern_code
|
24
|
-
|
24
|
+
concrete.find { |sub| sub.pattern_code == pattern_code }
|
25
25
|
end
|
26
26
|
|
27
27
|
def card_keys
|
28
28
|
@card_keys ||=
|
29
|
-
|
30
|
-
|
31
|
-
hash[card_key] = true
|
29
|
+
concrete.each_with_object({}) do |set_pattern, hash|
|
30
|
+
hash[set_pattern.pattern_id.cardname.key] = true
|
32
31
|
end
|
33
32
|
end
|
34
33
|
|
35
|
-
def
|
36
|
-
|
34
|
+
def grouped_codes with_all: true
|
35
|
+
g = [[:abstract], nonbase_codes.reverse]
|
36
|
+
g.unshift [:all] if with_all
|
37
|
+
g
|
37
38
|
end
|
38
39
|
|
40
|
+
def ids
|
41
|
+
@ids ||= concrete.map(&:pattern_id)
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
|
39
46
|
def codes
|
40
|
-
|
47
|
+
@codes ||= concrete.map(&:pattern_code)
|
48
|
+
end
|
49
|
+
|
50
|
+
def nonbase_codes
|
51
|
+
@nonbase_codes ||= codes.tap { |list| list.delete :all }
|
41
52
|
end
|
42
53
|
end
|
43
54
|
end
|
data/lib/card/set/registrar.rb
CHANGED
@@ -48,6 +48,14 @@ class Card
|
|
48
48
|
base_modules.clear
|
49
49
|
end
|
50
50
|
|
51
|
+
def finalize_load
|
52
|
+
# basket.freeze
|
53
|
+
# basket.each_value(&:freeze)
|
54
|
+
clean_empty_modules
|
55
|
+
end
|
56
|
+
|
57
|
+
private
|
58
|
+
|
51
59
|
def clean_empty_modules
|
52
60
|
clean_empty_module_from_hash modules[:nonbase]
|
53
61
|
modules[:nonbase_format].each_value do |hash|
|
@@ -62,8 +70,6 @@ class Card
|
|
62
70
|
end
|
63
71
|
end
|
64
72
|
|
65
|
-
private
|
66
|
-
|
67
73
|
# makes sets ready for dynamic loading via #include_set_modules
|
68
74
|
def register_set_of_type set_module, set_type
|
69
75
|
mods = modules[set_type]
|
data/lib/card/set.rb
CHANGED
@@ -48,7 +48,6 @@ class Card
|
|
48
48
|
module Set
|
49
49
|
include Event::Api
|
50
50
|
include Trait
|
51
|
-
include Basket
|
52
51
|
include Inheritance
|
53
52
|
|
54
53
|
include Format
|
@@ -58,15 +57,23 @@ class Card
|
|
58
57
|
extend I18nScope
|
59
58
|
extend Registrar
|
60
59
|
|
61
|
-
|
60
|
+
class << self
|
61
|
+
attr_accessor :modules, :traits, :basket
|
62
62
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
63
|
+
def reset
|
64
|
+
self.modules = {
|
65
|
+
base: [], base_format: {},
|
66
|
+
nonbase: {}, nonbase_format: {},
|
67
|
+
abstract: {}, abstract_format: {}
|
68
|
+
}
|
69
|
+
|
70
|
+
self.basket = {}
|
71
|
+
end
|
67
72
|
end
|
68
73
|
|
69
|
-
|
74
|
+
delegate :basket, to: Set
|
75
|
+
|
76
|
+
reset
|
70
77
|
|
71
78
|
# SET MODULE API
|
72
79
|
#
|
data/lib/card/view/classy.rb
CHANGED
@@ -24,9 +24,7 @@ class Card
|
|
24
24
|
# :single_use the same as :nests but is removed after the first use
|
25
25
|
# :global always everywhere
|
26
26
|
def class_up klass, classier, scope=:subviews
|
27
|
-
|
28
|
-
|
29
|
-
storage_voo(scope).add_extra_classes klass, classier, scope
|
27
|
+
storage_voo(scope).add_extra_classes klass.to_s, classier, scope
|
30
28
|
end
|
31
29
|
|
32
30
|
def class_down klass, classier
|
@@ -55,10 +53,8 @@ class Card
|
|
55
53
|
end
|
56
54
|
|
57
55
|
def add_extra_classes key, classier, scope
|
58
|
-
|
59
|
-
|
60
|
-
class_list(type)[key] =
|
61
|
-
[class_list(type)[key], classier].flatten.compact.join(" ")
|
56
|
+
list = class_list class_list_type(scope)
|
57
|
+
list[key] = [list[key], classier].flatten.compact.join " "
|
62
58
|
end
|
63
59
|
|
64
60
|
# remove classes everywhere where they are visible for the given scope
|
@@ -83,9 +79,7 @@ class Card
|
|
83
79
|
|
84
80
|
def extra_classes klass
|
85
81
|
klass = klass.first if klass.is_a?(Array)
|
86
|
-
|
87
|
-
|
88
|
-
deep_extra_classes klass, :self
|
82
|
+
deep_extra_classes klass.to_s, :self
|
89
83
|
end
|
90
84
|
|
91
85
|
# recurse through voos and formats to find all extra classes
|
@@ -135,33 +129,27 @@ class Card
|
|
135
129
|
end
|
136
130
|
|
137
131
|
def class_list type=:private
|
138
|
-
|
139
|
-
when :private, :format_private, :public, :single_use
|
140
|
-
@class_list ||= {}
|
141
|
-
@class_list[type] ||= {}
|
142
|
-
else
|
132
|
+
unless type.in? %i[private format_private public single_use]
|
143
133
|
raise ArgumentError, "#{type} not a valid class list"
|
144
134
|
end
|
135
|
+
@class_list ||= {}
|
136
|
+
@class_list[type] ||= {}
|
145
137
|
end
|
146
138
|
|
139
|
+
CLASS_LIST_TYPE = { view: :private,
|
140
|
+
format: :format_private,
|
141
|
+
subviews: :format_private,
|
142
|
+
nests: :public,
|
143
|
+
global: :public,
|
144
|
+
single_use: :single_use }.freeze
|
145
|
+
|
147
146
|
# Translates scopes to the privacy types used to manage the class lists.
|
148
147
|
# A #classy calls looks in the following class_lists:
|
149
148
|
# private - only in the same voo
|
150
149
|
# format_private - the same voo and all parent voos in the same format
|
151
150
|
# public - in all voos in all parent formats
|
152
151
|
def class_list_type scope
|
153
|
-
|
154
|
-
when :view
|
155
|
-
:private
|
156
|
-
when :format, :subviews
|
157
|
-
:format_private
|
158
|
-
when :nests, :global
|
159
|
-
:public
|
160
|
-
when :single_use
|
161
|
-
:single_use
|
162
|
-
else
|
163
|
-
raise ArgumentError, "invalid class_up scope: #{scope}"
|
164
|
-
end
|
152
|
+
CLASS_LIST_TYPE[scope] || raise(ArgumentError, "invalid class_up scope: #{scope}")
|
165
153
|
end
|
166
154
|
end
|
167
155
|
end
|
@@ -49,7 +49,9 @@ class Card
|
|
49
49
|
# because they can get changed after. current solution is a compromise.
|
50
50
|
# @return [Hash]
|
51
51
|
def slot_options
|
52
|
-
normalized_options.merge(view: requested_view)
|
52
|
+
normalized_options.merge(view: requested_view)
|
53
|
+
.merge(normalized_visibility_options)
|
54
|
+
.slice(*Options.slot_keys)
|
53
55
|
end
|
54
56
|
|
55
57
|
# ACCESSOR_HELPERS
|
data/lib/card/view.rb
CHANGED
data/lib/card.rb
CHANGED
@@ -123,8 +123,7 @@ class Card < Cardio::Record
|
|
123
123
|
include Director::CardMethods
|
124
124
|
include Name::All
|
125
125
|
include Content::All
|
126
|
-
include Set::
|
127
|
-
include Set::Pattern::All
|
126
|
+
include Set::CardMethods
|
128
127
|
include Cache::All
|
129
128
|
include Director::All
|
130
129
|
include Reference::All
|
@@ -140,28 +139,27 @@ class Card < Cardio::Record
|
|
140
139
|
has_many :actions, -> { where(draft: [nil, false]).order :id }
|
141
140
|
has_many :drafts, -> { where(draft: true).order :id }, class_name: :Action
|
142
141
|
|
143
|
-
cattr_accessor :
|
142
|
+
cattr_accessor :action_specific_attributes, :set_specific_attributes
|
143
|
+
alias_method :card_id, :id
|
144
144
|
|
145
145
|
class << self
|
146
146
|
delegate :config, :paths, to: Cardio
|
147
147
|
end
|
148
148
|
|
149
|
-
self.set_patterns = []
|
150
149
|
self.action_specific_attributes = [
|
151
150
|
:supercard,
|
152
151
|
:superleft,
|
153
|
-
:action,
|
154
|
-
:current_action,
|
152
|
+
:action, # [Symbol] :create, :update, or :delete
|
153
|
+
:current_action, # [Card::Action]
|
155
154
|
:last_action_id_before_edit,
|
156
155
|
|
157
|
-
:skip, # skip event(s) for all cards in act
|
158
|
-
:skip_in_action, # skip event for just this card
|
159
|
-
:trigger, # trigger event(s) for all cards in act
|
160
|
-
:trigger_in_action, # trigger event for just this card
|
156
|
+
:skip, # [Array] skip event(s) for all cards in act
|
157
|
+
:skip_in_action, # [Array] skip event for just this card
|
158
|
+
:trigger, # [Array] trigger event(s) for all cards in act
|
159
|
+
:trigger_in_action, # [Array] trigger event for just this card
|
161
160
|
:comment, # obviated soon
|
162
161
|
|
163
162
|
# TODO: refactor following to use skip/trigger
|
164
|
-
:update_referers, # wrong mechanism for this
|
165
163
|
:update_all_users, # if the above is wrong then this one too
|
166
164
|
:silent_change # and this probably too
|
167
165
|
]
|
@@ -21,13 +21,19 @@ module Cardio
|
|
21
21
|
end
|
22
22
|
|
23
23
|
def load_tmp_files
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
Loader.load_dir "#{pattern_dir}/**" if Dir.exist? pattern_dir
|
24
|
+
pattern_groups.each do |pattern_group|
|
25
|
+
mod_dirs.each_tmp(:set) do |set_tmp_dir|
|
26
|
+
load_tmp_files_for_pattern pattern_group, set_tmp_dir
|
28
27
|
end
|
29
28
|
end
|
30
29
|
end
|
30
|
+
|
31
|
+
def load_tmp_files_for_pattern pattern_group, set_tmp_dir
|
32
|
+
pattern_group.each do |pattern|
|
33
|
+
pattern_dir = "#{set_tmp_dir}/#{pattern}"
|
34
|
+
Loader.load_dir "#{pattern_dir}/**" if Dir.exist? pattern_dir
|
35
|
+
end
|
36
|
+
end
|
31
37
|
end
|
32
38
|
end
|
33
39
|
end
|
@@ -14,9 +14,7 @@ module Cardio
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def class_for_set_pattern strategy
|
17
|
-
|
18
|
-
|
19
|
-
Eval
|
17
|
+
strategy == :tmp_files ? PatternTmpFiles : Eval
|
20
18
|
end
|
21
19
|
|
22
20
|
def tmp_files?
|
@@ -25,7 +23,8 @@ module Cardio
|
|
25
23
|
end
|
26
24
|
|
27
25
|
attr_reader :loader
|
28
|
-
delegate :template_class, :each_file, :mod_dirs, :parts_from_path,
|
26
|
+
delegate :template_class, :pattern_groups, :each_file, :mod_dirs, :parts_from_path,
|
27
|
+
to: :loader
|
29
28
|
|
30
29
|
def initialize loader
|
31
30
|
LoadStrategy.current = self.class
|
@@ -5,10 +5,6 @@ module Cardio
|
|
5
5
|
# The mods are given by a Mod::Dirs object.
|
6
6
|
# SetLoader can use three different strategies to load the set modules.
|
7
7
|
class SetLoader < Loader
|
8
|
-
def template_class
|
9
|
-
SetTemplate
|
10
|
-
end
|
11
|
-
|
12
8
|
def initialize args={}
|
13
9
|
@no_all = args.delete :no_all
|
14
10
|
super load_strategy: args[:load_strategy], mod_dirs: args[:mod_dirs]
|
@@ -20,22 +16,26 @@ module Cardio
|
|
20
16
|
|
21
17
|
def load
|
22
18
|
super
|
23
|
-
|
24
|
-
Card::Set.clean_empty_modules
|
19
|
+
Card::Set.finalize_load
|
25
20
|
end
|
26
21
|
|
27
|
-
|
28
|
-
|
29
|
-
method = @no_all ? :nonbase_codes : :codes
|
30
|
-
Card::Set::Pattern.send method
|
22
|
+
def template_class
|
23
|
+
SetTemplate
|
31
24
|
end
|
32
25
|
|
33
26
|
def each_file &block
|
34
|
-
|
35
|
-
|
27
|
+
pattern_groups.each do |pattern_group|
|
28
|
+
each_file_with_patterns pattern_group, &block
|
29
|
+
end
|
36
30
|
end
|
37
31
|
|
38
|
-
def
|
32
|
+
def pattern_groups
|
33
|
+
Card::Set::Pattern.grouped_codes with_all: !@no_all
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
def each_file_with_patterns patterns, &block
|
39
39
|
each_mod_dir :set do |base_dir|
|
40
40
|
patterns.each do |pattern|
|
41
41
|
each_file_in_dir base_dir, pattern.to_s, &block
|
data/lib/cardio/mod/loader.rb
CHANGED
data/lib/cardio/railtie.rb
CHANGED
@@ -83,16 +83,17 @@ module Cardio
|
|
83
83
|
|
84
84
|
c.paths.tap do |p|
|
85
85
|
p["config/environments"].unshift "#{card_root}/config/environments"
|
86
|
-
|
87
86
|
p["config/initializers"] << "#{card_root}/config/initializers"
|
88
87
|
p.add "late/initializers", glob: "**/*.rb"
|
89
88
|
|
90
|
-
p["lib/tasks"] << "#{card_root}/lib/
|
89
|
+
p["lib/tasks"] << "#{card_root}/lib/tasks"
|
91
90
|
|
92
91
|
p.add "mod", with: "#{card_root}/mod"
|
93
92
|
p["mod"] << "mod"
|
94
93
|
p.add "files"
|
95
94
|
|
95
|
+
p.add "lib/graph_q_l/types/query.rb"
|
96
|
+
|
96
97
|
p.add "db", with: "#{card_root}/db"
|
97
98
|
p.add "db/seeds.rb", with: "#{card_root}/db/seeds.rb"
|
98
99
|
p.add "db/migrate", with: "#{card_root}/db/migrate"
|
@@ -105,9 +106,12 @@ module Cardio
|
|
105
106
|
c.autoload_paths += Dir["#{mod_path}/lib"]
|
106
107
|
c.watchable_dirs["#{mod_path}/set"] = %i[rb haml]
|
107
108
|
|
109
|
+
p["lib/graph_q_l/types/query.rb"] <<
|
110
|
+
"#{mod_path}/lib/graph_q_l/types/query.rb"
|
108
111
|
p["config/initializers"] << "#{mod_path}/init/early"
|
109
112
|
p["late/initializers"] << "#{mod_path}/init/late"
|
110
113
|
p["config/locales"] << "#{mod_path}/locales"
|
114
|
+
p["lib/tasks"] << "#{mod_path}/lib/tasks"
|
111
115
|
end
|
112
116
|
|
113
117
|
p["app/models"] = []
|
@@ -30,7 +30,7 @@ gem "card-mod-defaults"<%= repo_path_constraint :mod %>
|
|
30
30
|
# BACKGROUND
|
31
31
|
# A background gem is needed to run tasks like sending notifications in a background
|
32
32
|
# process.
|
33
|
-
# See https://github.com/decko-commons/decko/tree/
|
33
|
+
# See https://github.com/decko-commons/decko/tree/main/card-mod-delayed_job
|
34
34
|
# for additional configuration details.
|
35
35
|
<%= "# " if shark? %>gem "card-mod-delayed_job"<%= repo_path_constraint :mod %>
|
36
36
|
|
@@ -1,5 +1,9 @@
|
|
1
|
-
# Add your own tasks in files
|
2
|
-
#
|
1
|
+
# Add your own tasks in files ending in .rake a mod or deck's lib/tasks directory.
|
2
|
+
#
|
3
|
+
# Deck example: mydeck/lib/tasks/mytasks.rake
|
4
|
+
# Mod example mydecko/mod/mymod/lib/tasks/mytasks.rake
|
5
|
+
#
|
6
|
+
# Tasks in these files will automatically be available to Rake.
|
3
7
|
|
4
8
|
require File.expand_path("../config/application", __FILE__)
|
5
9
|
|
@@ -1,9 +1,11 @@
|
|
1
1
|
|
2
2
|
if ENV["<%= 'REPO_' if platypus? %>TMPSETS"] && ENV["COVERAGE"] != "false"
|
3
3
|
SimpleCov.start do
|
4
|
-
def
|
5
|
-
|
6
|
-
|
4
|
+
def add_mod_groups dir_pattern
|
5
|
+
Dir[dir_pattern].each do |path|
|
6
|
+
modname = File.basename path
|
7
|
+
add_group "Mod: #{modname}", %r{(mod/|mod\d{3}-)#{modname}}
|
8
|
+
end
|
7
9
|
end
|
8
10
|
<% if platypus? %>
|
9
11
|
root "<%= expanded_repo_path %>"
|
@@ -16,15 +18,9 @@ if ENV["<%= 'REPO_' if platypus? %>TMPSETS"] && ENV["COVERAGE"] != "false"
|
|
16
18
|
add_group "Cardname", "cardname"
|
17
19
|
add_group "Decko", "decko"
|
18
20
|
|
19
|
-
|
20
|
-
match = path.match %r{/card[-/]mod[-/](?<modname>.*)$}
|
21
|
-
add_mod_group match[:modname]
|
22
|
-
end
|
21
|
+
add_mod_groups "#{root}/{card/,}/mod/*"
|
23
22
|
<% else %>
|
24
|
-
|
25
|
-
modname = path.gsub "mod/", ""
|
26
|
-
add_mod_group modname
|
27
|
-
end
|
23
|
+
add_mod_groups "mod/*"
|
28
24
|
<% end %>
|
29
25
|
add_filter "/spec/"
|
30
26
|
add_filter "/features/"
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1,16 @@
|
|
1
|
+
|
2
|
+
basket[:tasks] = []
|
3
|
+
|
4
|
+
# to add an admin task:
|
5
|
+
#
|
6
|
+
# basket[:tasks] << {
|
7
|
+
# name: NAME,
|
8
|
+
# irreversible: TRUE/FALSE,
|
9
|
+
# execute_policy: -> { TASK_CODE },
|
10
|
+
# stats: {
|
11
|
+
# title: TITLE_STRING,
|
12
|
+
# count: -> { COUNT_CODE },
|
13
|
+
# link_text: LINK_STRING,
|
14
|
+
# task:
|
15
|
+
# }
|
16
|
+
# }
|
data/mod/admin/set/self/admin.rb
CHANGED
@@ -1,10 +1,6 @@
|
|
1
|
-
# collect arrays of the form
|
2
|
-
# [task symbol, { execute_policy: block, stats_policy: block }]
|
3
|
-
basket :tasks
|
4
|
-
|
5
1
|
def run_task_from_task_basket task
|
6
2
|
task = task.to_sym
|
7
|
-
task_data = tasks.find { |h| h[:name].to_sym == task.to_sym }
|
3
|
+
task_data = basket[:tasks].find { |h| h[:name].to_sym == task.to_sym }
|
8
4
|
if !irreversibles_tasks_allowed? && task_data[:irreversible]
|
9
5
|
not_allowed task_data[:stats][:link_text]
|
10
6
|
elsif task_data
|
@@ -47,7 +43,7 @@ format :html do
|
|
47
43
|
stats = card_stats
|
48
44
|
stats += cache_stats
|
49
45
|
stats += memory_stats
|
50
|
-
|
46
|
+
basket[:tasks].each do |task|
|
51
47
|
stats += Array.wrap task[:stats]
|
52
48
|
end
|
53
49
|
table_content = stats.map { |args| stat_row(args) }
|
@@ -1,12 +1,9 @@
|
|
1
|
-
basket :
|
2
|
-
|
1
|
+
basket[:warnings] = [:no_email_delivery]
|
3
2
|
# For each warning in the basket (eg :my_warning), the core view
|
4
3
|
# will run a test by appending a question mark (eg #my_warning?).
|
5
4
|
# If it fails it will generate a message by appending message
|
6
5
|
# (eg #my_warning_message).
|
7
6
|
|
8
|
-
add_to_basket :warnings, :no_email_delivery
|
9
|
-
|
10
7
|
def no_email_delivery?
|
11
8
|
Card.config.action_mailer.perform_deliveries == false
|
12
9
|
end
|
@@ -17,7 +14,7 @@ end
|
|
17
14
|
|
18
15
|
format :html do
|
19
16
|
view :core do
|
20
|
-
warnings =
|
17
|
+
warnings = basket[:warnings].map do |warning|
|
21
18
|
card.send("#{warning}?") ? send("#{warning}_message") : nil
|
22
19
|
end
|
23
20
|
warnings.compact!
|
data/mod/core/locales/en.yml
CHANGED
@@ -21,10 +21,9 @@ en:
|
|
21
21
|
core_exception_almost_deleted: Narrowly averted deleting current file
|
22
22
|
core_is_incomplete: is incomplete
|
23
23
|
core_only_admins_codename: only admins can set codename
|
24
|
-
core_rename_and_update: "Rename and Update"
|
25
24
|
core_renaming: "Renaming"
|
26
25
|
core_rename: "Rename"
|
27
|
-
core_rename_confirm: "Are you sure you want to rename"
|
28
|
-
|
29
|
-
|
30
|
-
|
26
|
+
core_rename_confirm: "Are you sure you want to rename?"
|
27
|
+
|
28
|
+
skip_update_referer_content:
|
29
|
+
do not update references to this name
|
@@ -77,7 +77,7 @@ event :update_lexicon, :finalize, changed: :name, on: :save do
|
|
77
77
|
end
|
78
78
|
|
79
79
|
event :cascade_name_changes, :finalize, on: :update, changed: :name do
|
80
|
-
each_descendant { |d| d.rename_as_descendant
|
80
|
+
each_descendant { |d| d.rename_as_descendant !skip_update_referers? }
|
81
81
|
end
|
82
82
|
|
83
83
|
protected
|
@@ -1,10 +1,5 @@
|
|
1
|
-
# test for updating referer content
|
2
|
-
event :prepare_referer_update, :validate, on: :update, changed: :name do
|
3
|
-
self.update_referers = ![nil, false, "false"].member?(update_referers)
|
4
|
-
end
|
5
|
-
|
6
1
|
# on rename, update names in cards that refer to self by name (as directed)
|
7
|
-
event :update_referer_content, :finalize, on: :update,
|
2
|
+
event :update_referer_content, :finalize, on: :update, changed: :name, skip: :allowed do
|
8
3
|
referers.each do |card|
|
9
4
|
next if card.structure
|
10
5
|
|
@@ -19,13 +14,13 @@ end
|
|
19
14
|
# eg. A links to X+Y. if X+Y is renamed and we're not updating the link in A,
|
20
15
|
# then we need to be sure that A has a partial reference
|
21
16
|
event :update_referer_references_out, :finalize,
|
22
|
-
changed: :name, on: :update, when: :
|
17
|
+
changed: :name, on: :update, when: :skip_update_referers? do
|
23
18
|
referers.map(&:update_references_out)
|
24
19
|
end
|
25
20
|
|
26
21
|
# when name changes, update references to card
|
27
22
|
event :refresh_references_in, :finalize, changed: :name, on: :save do
|
28
|
-
Reference.unmap_referees id if action == :update &&
|
23
|
+
Reference.unmap_referees id if action == :update && skip_update_referers?
|
29
24
|
Reference.map_referees key, id
|
30
25
|
end
|
31
26
|
|
@@ -51,8 +46,8 @@ end
|
|
51
46
|
|
52
47
|
protected
|
53
48
|
|
54
|
-
def
|
55
|
-
|
49
|
+
def skip_update_referers?
|
50
|
+
skip_event? :update_referer_content
|
56
51
|
end
|
57
52
|
|
58
53
|
private
|
data/mod/core/set/all/trash.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
|
-
|
2
|
-
:tasks,
|
1
|
+
basket[:tasks] << {
|
3
2
|
name: :empty_trash,
|
4
3
|
irreversible: true,
|
5
4
|
execute_policy: -> { Card.empty_trash },
|
@@ -9,7 +8,7 @@ Self::Admin.add_to_basket(
|
|
9
8
|
link_text: "empty trash",
|
10
9
|
task: "empty_trash"
|
11
10
|
}
|
12
|
-
|
11
|
+
}
|
13
12
|
|
14
13
|
module ClassMethods
|
15
14
|
def empty_trash
|