card 1.101.4 → 1.101.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (216) hide show
  1. checksums.yaml +4 -4
  2. data/VERSION +1 -1
  3. data/config/i18n-tasks.yml +0 -5
  4. data/config/initializers/01_core_extensions/array.rb +2 -1
  5. data/config/initializers/01_core_extensions/hash.rb +1 -0
  6. data/config/initializers/01_core_extensions/object.rb +15 -11
  7. data/config/initializers/02_patches/active_job.rb +1 -1
  8. data/config/initializers/02_patches/active_record.rb +1 -3
  9. data/config/initializers/02_patches/better_errors.rb +1 -3
  10. data/config/initializers/02_patches/kaminari.rb +2 -2
  11. data/config/initializers/deck_config.rb +1 -1
  12. data/config/initializers/inflections.rb +1 -0
  13. data/config/initializers/internationalization.rb +23 -21
  14. data/config/initializers/mime_types.rb +1 -0
  15. data/config/initializers/notification.rb +1 -0
  16. data/config/initializers/patches.rb +6 -5
  17. data/config/locales/en.yml +10 -16
  18. data/db/migrate/20110511221913_require_earlier_migrations.rb +1 -0
  19. data/db/migrate/20121111025347_require_1_10_migrations.rb +1 -0
  20. data/db/migrate/20121118114000_split_link_type.rb +1 -0
  21. data/db/migrate/20121118115000_update_link_type.rb +1 -0
  22. data/db/migrate/20130106052640_table_cleanup.rb +2 -2
  23. data/db/migrate/20130109015336_trunk_left.rb +1 -0
  24. data/db/migrate/20130411210957_update_codenames.rb +1 -0
  25. data/db/migrate/20140822073704_create_new_revision_tables.rb +1 -0
  26. data/db/migrate/20141001105348_move_revisions_to_actions.rb +9 -3
  27. data/db/migrate/20141216053032_better_index_names.rb +9 -6
  28. data/db/migrate/20170908114442_create_delayed_jobs.rb +1 -1
  29. data/db/migrate/20170908114452_increase_text_size_for_delayed_jobs.rb +1 -1
  30. data/db/migrate/20180514152037_add_card_virtuals_table.rb +1 -1
  31. data/db/migrate_core_cards/20120611203506_rails_inflection_updates.rb +2 -1
  32. data/db/migrate_core_cards/20130411191151_renaming_for_menu.rb +9 -9
  33. data/db/migrate_core_cards/20130419215612_import_help_text.rb +3 -2
  34. data/db/migrate_core_cards/20130823192433_add_style_cards.rb +5 -5
  35. data/db/migrate_core_cards/20130910183318_move_styles_to_content.rb +3 -2
  36. data/db/migrate_core_cards/20130920291703_update_stylesheets.rb +2 -4
  37. data/db/migrate_core_cards/20131016172445_common_css_patch.rb +1 -3
  38. data/db/migrate_core_cards/20140110193325_reset_account_request_type.rb +1 -3
  39. data/db/migrate_core_cards/20140307231621_user_data_to_cards.rb +12 -8
  40. data/db/migrate_core_cards/20140317035504_account_requests_to_signups.rb +2 -4
  41. data/db/migrate_core_cards/20140512155840_add_script_cards.rb +16 -9
  42. data/db/migrate_core_cards/20140629222005_add_email_cards.rb +19 -11
  43. data/db/migrate_core_cards/20140725180118_config_card_updates.rb +1 -1
  44. data/db/migrate_core_cards/20141115034214_config_descriptions_etc.rb +1 -1
  45. data/db/migrate_core_cards/20141119001955_make_symlinks_relative.rb +1 -1
  46. data/db/migrate_core_cards/20141204061304_watchers_to_following.rb +2 -0
  47. data/db/migrate_core_cards/20141216155251_add_more_following_cards.rb +4 -2
  48. data/db/migrate_core_cards/20150202143810_import_bootstrap_layout.rb +1 -1
  49. data/db/migrate_core_cards/20150220134731_following_to_follow_rule.rb +3 -4
  50. data/db/migrate_core_cards/20150317162412_bootstrap_themes.rb +8 -4
  51. data/db/migrate_core_cards/20150326205655_bootswatch_themes.rb +14 -7
  52. data/db/migrate_core_cards/20150429090551_search_card_context.rb +6 -4
  53. data/db/migrate_core_cards/20150508212032_menu_compatibility.rb +4 -2
  54. data/db/migrate_core_cards/20150510031118_fix_skin_codenames.rb +2 -1
  55. data/db/migrate_core_cards/20150601133433_add_recent_setting_session_card.rb +3 -3
  56. data/db/migrate_core_cards/20150610171702_add_debugger_session_card.rb +2 -1
  57. data/db/migrate_core_cards/20150610180019_add_recaptcha_key_and_admin_info_cards.rb +4 -3
  58. data/db/migrate_core_cards/20150724123438_update_file_and_image_cards.rb +6 -2
  59. data/db/migrate_core_cards/20150807205221_create_references_for_search_cards.rb +1 -1
  60. data/db/migrate_core_cards/20150824135418_update_file_history.rb +2 -0
  61. data/db/migrate_core_cards/20160804112510_reorganize_scripts.rb +1 -1
  62. data/db/migrate_core_cards/20160811115836_rename_stats_to_admin.rb +1 -0
  63. data/db/migrate_core_cards/20160914132636_fix_mod_files.rb +2 -0
  64. data/db/migrate_core_cards/20161102202156_tweak_recaptcha_setting_cards.rb +6 -6
  65. data/db/migrate_core_cards/20161103154836_update_keys.rb +2 -1
  66. data/db/migrate_core_cards/20170209132834_email_test_context.rb +2 -0
  67. data/db/migrate_core_cards/20170314175313_add_notification_event_card.rb +3 -3
  68. data/db/migrate_core_cards/20170515101262_add_advanced_edit_cards.rb +1 -1
  69. data/db/migrate_core_cards/20170608200649_add_input_options_codename.rb +1 -1
  70. data/db/migrate_core_cards/20180712042655_head_rule.rb +3 -4
  71. data/db/migrate_core_cards/20180905061537_migrate_layouts.rb +4 -4
  72. data/db/migrate_core_cards/20181120200937_update_layout.rb +1 -1
  73. data/db/migrate_core_cards/20190320091257_upgrade_recaptcha_to_v3.rb +7 -7
  74. data/db/migrate_core_cards/20190424100531_update_credit_image.rb +1 -0
  75. data/db/migrate_core_cards/20190502130029_add_shark_and_help_desk_role.rb +15 -14
  76. data/db/migrate_core_cards/20190503122739_update_pristine_data.rb +1 -1
  77. data/db/migrate_core_cards/20190625153616_pointer_overhaul.rb +9 -5
  78. data/db/migrate_core_cards/20190718140126_add_guides.rb +3 -3
  79. data/db/migrate_core_cards/20190822093633_move_help_text_to_code.rb +1 -2
  80. data/db/migrate_core_cards/20190823220018_cleanup_for_decko_1_0.rb +1 -1
  81. data/db/migrate_core_cards/20190829093961_cardtype_grouping.rb +7 -7
  82. data/db/migrate_core_cards/20190902193208_input_type.rb +1 -3
  83. data/db/migrate_core_cards/20190909104250_add_cardtype_input_types.rb +2 -2
  84. data/db/migrate_core_cards/20191028135243_add_link_editor_to_tiny_mce_config.rb +1 -0
  85. data/db/migrate_core_cards/20191115160748_history_cleanup.rb +0 -1
  86. data/db/migrate_core_cards/20191118145629_codename_fixes.rb +1 -2
  87. data/db/migrate_core_cards/20200821231558_add_nest_list_type.rb +1 -1
  88. data/db/seed/new/card_actions.yml +2153 -2145
  89. data/db/seed/new/card_acts.yml +3 -3
  90. data/db/seed/new/card_references.yml +900 -858
  91. data/db/seed/new/cards.yml +4869 -4848
  92. data/db/seed/new/schema_migrations_deck_cards.yml +2 -0
  93. data/db/seed/test/fixtures/card_actions.yml +3563 -3547
  94. data/db/seed/test/fixtures/card_acts.yml +675 -675
  95. data/db/seed/test/fixtures/card_changes.yml +103 -103
  96. data/db/seed/test/fixtures/card_references.yml +2165 -2123
  97. data/db/seed/test/fixtures/cards.yml +7862 -7751
  98. data/db/seed/test/fixtures/schema_migrations_deck_cards.yml +2 -0
  99. data/db/test_seed.rb +33 -34
  100. data/lib/card.rb +1 -0
  101. data/lib/card/auth/token.rb +2 -2
  102. data/lib/card/cache.rb +2 -1
  103. data/lib/card/cache/all.rb +5 -0
  104. data/lib/card/cache/card_class.rb +3 -0
  105. data/lib/card/codename.rb +1 -1
  106. data/lib/card/content.rb +4 -8
  107. data/lib/card/content/chunk.rb +1 -1
  108. data/lib/card/content/clean.rb +4 -3
  109. data/lib/card/content/diff.rb +3 -2
  110. data/lib/card/content/diff/l_c_s/processor.rb +1 -1
  111. data/lib/card/content/diff/result.rb +1 -0
  112. data/lib/card/content/parser.rb +2 -2
  113. data/lib/card/content/truncate.rb +6 -6
  114. data/lib/card/director.rb +1 -1
  115. data/lib/card/director/all.rb +2 -2
  116. data/lib/card/director/card_methods.rb +1 -0
  117. data/lib/card/director/event_delay.rb +4 -6
  118. data/lib/card/director/run.rb +2 -0
  119. data/lib/card/director/stages.rb +3 -2
  120. data/lib/card/env/location.rb +4 -3
  121. data/lib/card/fetch.rb +7 -4
  122. data/lib/card/fetch/all.rb +1 -0
  123. data/lib/card/fetch/card_class.rb +35 -27
  124. data/lib/card/fetch/results.rb +9 -0
  125. data/lib/card/fetch/retrieve.rb +2 -0
  126. data/lib/card/fetch/store.rb +1 -0
  127. data/lib/card/format/content.rb +1 -3
  128. data/lib/card/format/error.rb +6 -1
  129. data/lib/card/format/method_delegation.rb +10 -2
  130. data/lib/card/format/nest.rb +2 -1
  131. data/lib/card/format/nest/fetch.rb +2 -0
  132. data/lib/card/format/nesting/mode.rb +1 -1
  133. data/lib/card/format/nesting/subformat.rb +2 -1
  134. data/lib/card/format/render.rb +2 -2
  135. data/lib/card/format/wrapper.rb +1 -1
  136. data/lib/card/lexicon.rb +3 -2
  137. data/lib/card/mark.rb +17 -15
  138. data/lib/card/model/save_helper.rb +3 -3
  139. data/lib/card/name.rb +10 -9
  140. data/lib/card/name/all.rb +3 -0
  141. data/lib/card/name/all/descendants.rb +3 -4
  142. data/lib/card/name/card_class.rb +2 -0
  143. data/lib/card/name/fields_and_traits.rb +4 -2
  144. data/lib/card/name/name_variants.rb +0 -1
  145. data/lib/card/query.rb +17 -17
  146. data/lib/card/query/card_query/interpretation.rb +1 -0
  147. data/lib/card/query/card_query/match_attributes.rb +2 -1
  148. data/lib/card/query/card_query/normalization.rb +1 -0
  149. data/lib/card/query/card_query/reference_attributes.rb +1 -1
  150. data/lib/card/query/join.rb +1 -1
  151. data/lib/card/query/value/match_value.rb +1 -0
  152. data/lib/card/reference/all.rb +7 -2
  153. data/lib/card/rule/all.rb +1 -0
  154. data/lib/card/rule/cache.rb +2 -0
  155. data/lib/card/set/advanced_api.rb +3 -2
  156. data/lib/card/set/event.rb +2 -2
  157. data/lib/card/set/event/all.rb +6 -0
  158. data/lib/card/set/event/delayed_event.rb +6 -6
  159. data/lib/card/set/event/options.rb +1 -0
  160. data/lib/card/set/format/abstract_format/view_definition.rb +1 -0
  161. data/lib/card/set/format/abstract_format/view_opts.rb +1 -0
  162. data/lib/card/set/i18n_scope.rb +4 -2
  163. data/lib/card/set/inheritance.rb +0 -1
  164. data/lib/card/set/loader.rb +0 -2
  165. data/lib/card/set/pattern/base.rb +3 -2
  166. data/lib/card/set/pattern/class_methods.rb +2 -2
  167. data/lib/card/set/required_field.rb +4 -1
  168. data/lib/card/setting.rb +3 -0
  169. data/lib/card/subcards.rb +3 -4
  170. data/lib/card/tasks/card/file_card_creator/abstract_file_card/ruby_file.rb +1 -1
  171. data/lib/card/tasks/card/file_card_creator/output_helper.rb +2 -4
  172. data/lib/card/tasks/card/migrate.rake +2 -2
  173. data/lib/card/view/cache.rb +6 -8
  174. data/lib/card/view/cache/cache_action.rb +1 -2
  175. data/lib/card/view/cache/stub.rb +1 -1
  176. data/lib/card/view/options.rb +3 -3
  177. data/lib/card/view/permission.rb +1 -0
  178. data/lib/cardio.rb +1 -1
  179. data/lib/cardio/migration.rb +1 -1
  180. data/lib/cardio/migration/deck_structure.rb +2 -4
  181. data/lib/cardio/migration/import.rb +2 -2
  182. data/lib/cardio/migration/import/import_data.rb +1 -0
  183. data/lib/cardio/mod.rb +1 -0
  184. data/lib/cardio/mod/load_strategy.rb +2 -4
  185. data/lib/cardio/mod/loader/set_loader.rb +2 -1
  186. data/lib/cardio/mod/module_template.rb +1 -0
  187. data/lib/cardio/modfiles.rb +2 -4
  188. data/lib/cardio/schema.rb +2 -4
  189. data/lib/cardio/utils.rb +1 -0
  190. data/lib/generators/card/format/format_generator.rb +1 -1
  191. data/lib/generators/card/migration/migration_generator.rb +2 -1
  192. data/lib/generators/card/mod/mod_generator.rb +3 -2
  193. data/lib/generators/card/set/set_generator.rb +3 -3
  194. data/lib/generators/card/template/template_generator.rb +1 -1
  195. data/mod/admin/set/self/admin.rb +6 -3
  196. data/mod/admin/set/self/trash.rb +1 -0
  197. data/mod/admin/spec/set/self/admin_spec.rb +4 -4
  198. data/mod/core/set/all/abort.rb +5 -5
  199. data/mod/core/set/all/assign_attributes.rb +5 -8
  200. data/mod/core/set/all/codename.rb +1 -0
  201. data/mod/core/set/all/collection.rb +4 -6
  202. data/mod/core/set/all/content.rb +3 -2
  203. data/mod/core/set/all/contextual_content.rb +2 -4
  204. data/mod/core/set/all/name_events.rb +13 -6
  205. data/mod/core/set/all/reference_events.rb +2 -0
  206. data/mod/core/set/all/states.rb +3 -3
  207. data/mod/core/set/all/subcards.rb +1 -1
  208. data/mod/core/set/all/trash.rb +5 -1
  209. data/mod/core/set/all/type.rb +4 -2
  210. data/mod/core/set/all/utils.rb +1 -1
  211. data/mod/core/spec/set/all/assign_attributes_spec.rb +10 -9
  212. data/mod/core/spec/set/all/clean_me_spec.rb +19 -4
  213. data/mod/core/spec/set/all/collection_spec.rb +1 -1
  214. data/mod/core/spec/set/all/export_spec.rb +1 -0
  215. data/mod/core/spec/set/all/initialize_spec.rb +11 -11
  216. metadata +4 -4
@@ -16,6 +16,7 @@ class Card
16
16
 
17
17
  def altered_view
18
18
  return if skip_check?
19
+
19
20
  alter_unknown || denial
20
21
  end
21
22
 
data/lib/cardio.rb CHANGED
@@ -26,7 +26,7 @@ module Cardio
26
26
 
27
27
  def load_card?
28
28
  ActiveRecord::Base.connection && !card_defined?
29
- rescue
29
+ rescue StandardError
30
30
  false
31
31
  end
32
32
 
@@ -14,7 +14,7 @@ module Cardio
14
14
  # Migrations are subclasses of Cardio::Migration or Card::CoreMigration
15
15
  # but they don't inherit the @type. The method below solves this problem.
16
16
  def type
17
- @type || (ancestors[1]&.type)
17
+ @type || ancestors[1]&.type
18
18
  end
19
19
 
20
20
  def find_unused_name base_name
@@ -9,10 +9,8 @@ module Cardio
9
9
  class DeckStructure < Migration
10
10
  @type = :deck
11
11
 
12
- def contentedly
13
- Cardio.schema_mode :deck do
14
- yield
15
- end
12
+ def contentedly &block
13
+ Cardio.schema_mode :deck, &block
16
14
  end
17
15
  end
18
16
  end
@@ -112,9 +112,9 @@ module Cardio
112
112
  def parse_and_symbolize json
113
113
  parsed = JSON.parse(json)
114
114
  case parsed
115
- when Hash then
115
+ when Hash
116
116
  parsed.deep_symbolize_keys
117
- when Array then
117
+ when Array
118
118
  parsed.map(&:deep_symbolize_keys)
119
119
  else
120
120
  parsed
@@ -42,6 +42,7 @@ module Cardio
42
42
  unless attributes
43
43
  raise("no entry for #{key} (key: #{key.to_name.key}) in #{@path}")
44
44
  end
45
+
45
46
  prepare_for_import attributes
46
47
  end
47
48
  end
data/lib/cardio/mod.rb CHANGED
@@ -78,6 +78,7 @@ module Cardio
78
78
 
79
79
  def dependencies name, nickname=true
80
80
  return unless (spec = gem_spec name, nickname)
81
+
81
82
  deps = spec&.dependencies || []
82
83
  dep_names = deps.map { |dep| dependencies dep.name, false }
83
84
  (dep_names << spec).flatten.compact.uniq
@@ -56,10 +56,8 @@ module Cardio
56
56
  end
57
57
  end
58
58
 
59
- def each_mod_dir module_type
60
- @mod_dirs.each module_type do |base_dir|
61
- yield base_dir
62
- end
59
+ def each_mod_dir module_type, &block
60
+ @mod_dirs.each module_type, &block
63
61
  end
64
62
 
65
63
  def each_file_in_dir base_dir, subdir=nil
@@ -53,7 +53,8 @@ module Cardio
53
53
 
54
54
  def add_explicit_format_modules
55
55
  @content.gsub!(/^ *format +:?(\w+)? *do *$/) do
56
- format_name = $1.blank? ? nil : $1.to_sym
56
+ format_name = Regexp.last_match(1)
57
+ format_name = format_name.blank? ? nil : format_name.to_sym
57
58
  "module #{module_name format_name}; " \
58
59
  "module_parent.send :register_set_format, "\
59
60
  "#{format_class format_name}, self; "\
@@ -63,6 +63,7 @@ module Cardio
63
63
 
64
64
  def module_comment
65
65
  return "" unless @strategy.clean_comments?
66
+
66
67
  @module_comment = nil if @module_comment.blank?
67
68
  [auto_comment, @module_comment].compact.join "\n"
68
69
  end
@@ -20,11 +20,9 @@ module Cardio
20
20
  each_gem_mod_path(&block)
21
21
  end
22
22
 
23
- def each_simple_mod_path
23
+ def each_simple_mod_path &block
24
24
  paths["mod"].each do |mods_path|
25
- Dir.glob("#{mods_path}/*").each do |single_mod_path|
26
- yield single_mod_path
27
- end
25
+ Dir.glob("#{mods_path}/*").each(&block)
28
26
  end
29
27
  end
30
28
 
data/lib/cardio/schema.rb CHANGED
@@ -37,14 +37,12 @@ module Cardio
37
37
  end
38
38
  end
39
39
 
40
- def with_suffix type
40
+ def with_suffix type, &block
41
41
  return yield unless (new_suffix = Cardio.schema_suffix type) &&
42
42
  new_suffix.present?
43
43
 
44
44
  original_name = ActiveRecord::Base.schema_migrations_table_name
45
- with_migration_table "#{original_name}#{new_suffix}", original_name do
46
- yield
47
- end
45
+ with_migration_table "#{original_name}#{new_suffix}", original_name, &block
48
46
  end
49
47
 
50
48
  def with_migration_table new_table_name, old_table_name
data/lib/cardio/utils.rb CHANGED
@@ -19,6 +19,7 @@ module Cardio
19
19
  # Why does cache clearing need to do this??
20
20
  def delete_tmp_files! id=nil
21
21
  raise "no files directory" unless files_dir
22
+
22
23
  delete_tmp_files id
23
24
  rescue StandardError
24
25
  Rails.logger.info "failed to remove tmp files"
@@ -5,7 +5,7 @@ require "generators/card"
5
5
  class Card
6
6
  module Generators
7
7
  class FormatGenerator < NamedBase
8
- source_root File.expand_path("../templates", __FILE__)
8
+ source_root File.expand_path("templates", __dir__)
9
9
 
10
10
  argument :module_name, required: true
11
11
  class_option "core", type: :boolean, aliases: "-c",
@@ -5,7 +5,7 @@ require "generators/card"
5
5
  class Card
6
6
  module Generators
7
7
  class MigrationGenerator < MigrationBase
8
- source_root File.expand_path("../templates", __FILE__)
8
+ source_root File.expand_path("templates", __dir__)
9
9
 
10
10
  class_option "core", type: :boolean, aliases: "-c",
11
11
  default: false, group: :runtime,
@@ -15,6 +15,7 @@ class Card
15
15
  migration_type = options["core"] ? :core_cards : :deck_cards
16
16
  mig_paths = Cardio.migration_paths(migration_type)
17
17
  raise "No migration directory for #{migration_type}" if mig_paths.blank?
18
+
18
19
  set_local_assigns!
19
20
  migration_template @migration_template,
20
21
  File.join(mig_paths.first, "#{file_name}.rb")
@@ -11,15 +11,16 @@ class Card
11
11
  desc: "create mod Card gem"
12
12
 
13
13
  def create_mod_tree
14
- create_empty_tree mod_path => { lib: [:javascript, :stylesheets],
14
+ create_empty_tree mod_path => { lib: %i[javascript stylesheets],
15
15
  public: [:assets],
16
- set: [] }
16
+ set: [] }
17
17
  end
18
18
 
19
19
  private
20
20
 
21
21
  def create_empty_tree structure
22
22
  return unless structure.present?
23
+
23
24
  if structure.is_a?(Hash)
24
25
  structure.each_pair do |k, v|
25
26
  empty_directory k.to_s
@@ -5,7 +5,7 @@ require "generators/card"
5
5
  class Card
6
6
  module Generators
7
7
  class SetGenerator < NamedBase
8
- source_root File.expand_path("../templates", __FILE__)
8
+ source_root File.expand_path("templates", __dir__)
9
9
 
10
10
  argument :set_pattern, required: true
11
11
  argument :anchors, required: true, type: :array
@@ -14,8 +14,8 @@ class Card
14
14
  desc: "create set files in Card gem"
15
15
 
16
16
  class_option "spec-only", type: :boolean,
17
- default: false, group: :runtime,
18
- desc: "create only spec file"
17
+ default: false, group: :runtime,
18
+ desc: "create only spec file"
19
19
 
20
20
  def create_files
21
21
  template "set_template.erb", set_path unless options["spec-only"]
@@ -7,7 +7,7 @@ class Card
7
7
  # A decko generator that creates a haml template for a view.
8
8
  # Run "decko generate card:template" to get usage information.
9
9
  class TemplateGenerator < NamedBase
10
- source_root File.expand_path("../templates", __FILE__)
10
+ source_root File.expand_path("templates", __dir__)
11
11
 
12
12
  argument :set_pattern, required: true
13
13
  argument :anchors, required: true, type: :array
@@ -4,17 +4,18 @@ basket :tasks
4
4
 
5
5
  def run_task_from_task_basket task
6
6
  task = task.to_sym
7
- task_data = tasks.find {|h| h[:name].to_sym == task.to_sym}
7
+ task_data = tasks.find { |h| h[:name].to_sym == task.to_sym }
8
8
  if !irreversibles_tasks_allowed? && task_data[:irreversible]
9
9
  not_allowed task_data[:stats][:link_text]
10
- else
11
- task_data[:execute_policy].call if task_data
10
+ elsif task_data
11
+ task_data[:execute_policy].call
12
12
  end
13
13
  end
14
14
 
15
15
  event :admin_tasks, :initialize, on: :update do
16
16
  return unless (task = Env.params[:task])
17
17
  raise Card::Error::PermissionDenied, self unless Auth.always_ok?
18
+
18
19
  case task.to_sym
19
20
  when :clear_cache then Card::Cache.reset_all
20
21
  when :repair_references then Card::Reference.repair_all
@@ -95,6 +96,7 @@ format :html do
95
96
  link_text: "clear cache", task: "clear_cache" }
96
97
  ]
97
98
  return stats unless oldmem
99
+
98
100
  stats << { title: "memory prev", count: oldmem, unit: "M" }
99
101
  stats << { title: "memory diff", count: newmem - oldmem, unit: "M" }
100
102
  stats
@@ -104,6 +106,7 @@ format :html do
104
106
  res = [(args[:title] || "")]
105
107
  res << "#{count(args[:count])}#{args[:unit]}"
106
108
  return res unless args[:task]
109
+
107
110
  res << link_to_card(:admin, (args[:link_text] || args[:task]),
108
111
  path: { action: :update, task: args[:task] })
109
112
  res
@@ -24,6 +24,7 @@ format :html do
24
24
  def restored
25
25
  return unless (res_id = Env.params[:restore]) &&
26
26
  (res_card = Card[res_id.to_i])
27
+
27
28
  alert :success, true do
28
29
  wrap_with(:h5, "restored") + subformat(res_card).render_bar
29
30
  end
@@ -8,8 +8,8 @@ describe Card::Set::Self::Admin do
8
8
  assert_view_select @core, "table"
9
9
  end
10
10
 
11
- context "#update" do
12
- let(:admin) {Card[:admin]}
11
+ describe "#update" do
12
+ let(:admin) { Card[:admin] }
13
13
 
14
14
  def run_admin_task task
15
15
  Card::Auth.as_bot do
@@ -29,14 +29,14 @@ describe Card::Set::Self::Admin do
29
29
  end
30
30
 
31
31
  context "irreversible tasks allowed" do
32
- around(:example) do |example|
32
+ around do |example|
33
33
  Cardio.config.allow_irreversible_admin_tasks = true
34
34
  example.run
35
35
  Cardio.config.allow_irreversible_admin_tasks = false
36
36
  end
37
37
 
38
38
  it "triggers empty trash (with right params)" do
39
- Card::Auth.as_bot {Card["A"].delete!}
39
+ Card::Auth.as_bot { Card["A"].delete! }
40
40
 
41
41
  expect(Card.where(trash: true)).not_to be_empty
42
42
  run_admin_task :empty_trash
@@ -1,4 +1,3 @@
1
-
2
1
  # The Card#abort method is for cleanly exiting an action without continuing
3
2
  # to process any further events.
4
3
  #
@@ -33,9 +32,10 @@ end
33
32
  private
34
33
 
35
34
  def handle_abort_error e
36
- if e.status == :triumph
35
+ case e.status
36
+ when :triumph
37
37
  @supercard ? raise(e) : true
38
- elsif e.status == :success
38
+ when :success
39
39
  abort_success
40
40
  end
41
41
  end
@@ -51,12 +51,12 @@ end
51
51
 
52
52
  # this is an override of standard rails behavior that rescues abort
53
53
  # makes it so that :success abortions do not rollback
54
- def with_transaction_returning_status
54
+ def with_transaction_returning_status &block
55
55
  status = nil
56
56
  self.class.transaction do
57
57
  add_to_transaction
58
58
  remember_transaction_record_state
59
- status = abortable { yield }
59
+ status = abortable(&block)
60
60
  raise ActiveRecord::Rollback unless status
61
61
  end
62
62
  status
@@ -5,8 +5,7 @@ def assign_attributes args={}
5
5
 
6
6
  assign_with_subcards args do
7
7
  assign_with_set_modules args do
8
- params = prepare_assignment_params args
9
- super params
8
+ super prepare_assignment_params(args)
10
9
  end
11
10
  end
12
11
  end
@@ -40,6 +39,7 @@ end
40
39
 
41
40
  def prepare_assignment_args args
42
41
  return {} unless args
42
+
43
43
  args = args.symbolize_keys
44
44
  normalize_type_attributes args
45
45
  stash_set_specific_attributes args
@@ -47,8 +47,7 @@ def prepare_assignment_args args
47
47
  end
48
48
 
49
49
  def assign_with_set_modules args
50
- set_changed = args[:name] || args[:type_id]
51
- return yield unless set_changed
50
+ return yield unless args[:name] || args[:type_id]
52
51
 
53
52
  refresh_set_modules { yield }
54
53
  end
@@ -56,9 +55,7 @@ end
56
55
  def assign_with_subcards args
57
56
  subcard_args = extract_subcard_args! args
58
57
  yield
59
- # name= must come before process subcards
60
- return unless subcard_args.present?
61
- subcards.add subcard_args
58
+ subcards.add subcard_args if subcard_args.present?
62
59
  end
63
60
 
64
61
  def refresh_set_modules
@@ -96,7 +93,7 @@ def type_id_from_codename type_code
96
93
  end
97
94
 
98
95
  def type_id_from_cardname type_name
99
- type_id_or_error(type_name) { Card.fetch_id type_name }
96
+ type_id_or_error(type_name) { type_name.card_id }
100
97
  end
101
98
 
102
99
  def type_id_or_error val
@@ -25,5 +25,6 @@ end
25
25
  def validate_codename_uniqueness
26
26
  return (self.codename = nil) if codename.blank?
27
27
  return if errors.present? || !Card.find_by_codename(codename)
28
+
28
29
  errors.add :codename, t(:core_error_code_in_use, codename: codename)
29
30
  end
@@ -1,10 +1,8 @@
1
1
  # shared methods for card collections (Pointers, Searches, Sets, etc.)
2
2
  module ClassMethods
3
- def search spec, comment=nil
3
+ def search spec, comment=nil, &block
4
4
  results = ::Card::Query.run(spec, comment)
5
- if block_given? && results.is_a?(Array)
6
- results.each { |result| yield result }
7
- end
5
+ results.each(&block) if block_given? && results.is_a?(Array)
8
6
  results
9
7
  end
10
8
 
@@ -14,11 +12,11 @@ module ClassMethods
14
12
  search spec.merge(return: "count")
15
13
  end
16
14
 
17
- def find_each options={}
15
+ def find_each options={}, &block
18
16
  # this is a copy from rails (3.2.16) and is needed because this
19
17
  # is performed by a relation (ActiveRecord::Relation)
20
18
  find_in_batches(options) do |records|
21
- records.each { |record| yield record }
19
+ records.each(&block)
22
20
  end
23
21
  end
24
22
 
@@ -67,7 +67,8 @@ end
67
67
  format do
68
68
  ONE_LINE_CHARACTER_LIMIT = 60
69
69
 
70
- def chunk_list # override to customize by set
70
+ # override to customize by set
71
+ def chunk_list
71
72
  :default
72
73
  end
73
74
 
@@ -117,7 +118,7 @@ format do
117
118
  if text.size <= limit
118
119
  text
119
120
  else
120
- text[0..(limit - 3)] + "..."
121
+ "#{text[0..(limit - 3)]}..."
121
122
  end
122
123
  end
123
124
 
@@ -15,10 +15,8 @@ format do
15
15
  card.context_card
16
16
  end
17
17
 
18
- def with_context context_card
19
- card.with_context context_card do
20
- yield
21
- end
18
+ def with_context context_card, &block
19
+ card.with_context context_card, &block
22
20
  end
23
21
 
24
22
  def contextual_content context_card, options={}