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
@@ -10,7 +10,7 @@ class ImportBootstrapLayout < Cardio::Migration::Core
10
10
  end
11
11
 
12
12
  import_json "bootstrap_layout.json" # , pristine: true, output_file: nil
13
- if layout && layout.pristine? && (all = Card[:all])
13
+ if layout&.pristine? && (all = Card[:all])
14
14
  layout_rule_card = all.fetch :layout
15
15
  style_rule_card = all.fetch :style
16
16
  if layout_rule_card.pristine? && style_rule_card.pristine?
@@ -2,13 +2,12 @@
2
2
 
3
3
  class FollowingToFollowRule < Cardio::Migration::Core
4
4
  def up
5
- Card.search(right: { codename: "following" }, left: { type: "user" }).each do |following_card|
5
+ Card.search(right: { codename: "following" },
6
+ left: { type: "user" }).each do |following_card|
6
7
  user_name = following_card.name.left
7
8
  following_card.item_names.each do |followed_set_name|
8
9
  set_card = Card.fetch(followed_set_name, new: {})
9
- if set_card.type_code != :set
10
- set_card = set_card.follow_set_card
11
- end
10
+ set_card = set_card.follow_set_card if set_card.type_code != :set
12
11
  rule = Card.fetch set_card.follow_rule_name(user_name), new: { type: "pointer" }
13
12
  rule.content = "[[*always]]"
14
13
  rule.save!
@@ -2,10 +2,13 @@
2
2
 
3
3
  class BootstrapThemes < Cardio::Migration::Core
4
4
  def up
5
- Card.create! name: "themeless bootstrap skin", type_code: :skin, content: "[[style: bootstrap]]\n[[style: jquery-ui-smoothness]]\n[[style: cards]]\n[[style: right sidebar]]\n[[style: bootstrap cards]]"
6
- %w(cerulean cosmo cyborg darkly flatly journal lumen paper readable sandstone simplex slate spacelab superhero united yeti).each do |theme|
5
+ Card.create! name: "themeless bootstrap skin", type_code: :skin,
6
+ content: "[[style: bootstrap]]\n[[style: jquery-ui-smoothness]]\n[[style: cards]]\n[[style: right sidebar]]\n[[style: bootstrap cards]]"
7
+ %w[cerulean cosmo cyborg darkly flatly journal lumen paper readable sandstone simplex
8
+ slate spacelab superhero united yeti].each do |theme|
7
9
  Card.create! name: "theme: #{theme}", type_code: :css, codename: "theme_#{theme}"
8
- Card.create! name: "#{theme} skin", type_code: :skin, codename: "#{theme}_skin", content: "[[themeless bootstrap skin]]\n[[theme: #{theme}]]"
10
+ Card.create! name: "#{theme} skin", type_code: :skin, codename: "#{theme}_skin",
11
+ content: "[[themeless bootstrap skin]]\n[[theme: #{theme}]]"
9
12
  end
10
13
 
11
14
  if credit_card = Card["*credit"]
@@ -30,7 +33,8 @@ class BootstrapThemes < Cardio::Migration::Core
30
33
  import_json "skin_images.json"
31
34
 
32
35
  if sidebar_card = Card["*sidebar"]
33
- new_content = sidebar_card.db_content.gsub(/(\*(logo|credit))\|content/, '\1|content_panel')
36
+ new_content = sidebar_card.db_content.gsub(/(\*(logo|credit))\|content/,
37
+ '\1|content_panel')
34
38
  sidebar_card.update! content: new_content
35
39
  end
36
40
  end
@@ -8,20 +8,27 @@ class BootswatchThemes < Cardio::Migration::Core
8
8
  bs.update! codename: nil
9
9
  bs.delete!
10
10
 
11
- Card.create! name: "bootswatch shared", type_code: :scss, codename: "bootswatch_shared"
12
- Card.create! name: "bootswatch theme+*right+*structure", type_id: Card::ScssID, content: "{{_left+variables}}{{bootswatch shared}}{{_left+style}}"
13
- %w(bootstrap_default cerulean cosmo cyborg darkly flatly journal lumen paper readable sandstone simplex slate spacelab superhero united yeti).each do |theme_name|
11
+ Card.create! name: "bootswatch shared", type_code: :scss,
12
+ codename: "bootswatch_shared"
13
+ Card.create! name: "bootswatch theme+*right+*structure", type_id: Card::ScssID,
14
+ content: "{{_left+variables}}{{bootswatch shared}}{{_left+style}}"
15
+ %w[bootstrap_default cerulean cosmo cyborg darkly flatly journal lumen paper readable
16
+ sandstone simplex slate spacelab superhero united yeti].each do |theme_name|
14
17
  path = data_path "themes/#{theme_name}"
15
18
  theme = Card.fetch "#{theme_name} skin"
16
19
  if theme
17
20
  theme.update! type_id: Card::SkinID, content: "[[themeless bootstrap skin]]\n[[+bootswatch theme]]", subcards: {
18
- "+variables" => { type_id: Card::ScssID, content: File.read(File.join path, "_variables.scss") },
19
- "+style" => { type_id: Card::ScssID, content: File.read(File.join path, "_bootswatch.scss") }
21
+ "+variables" => { type_id: Card::ScssID,
22
+ content: File.read(File.join(path, "_variables.scss")) },
23
+ "+style" => { type_id: Card::ScssID,
24
+ content: File.read(File.join(path, "_bootswatch.scss")) }
20
25
  }
21
26
  else
22
27
  Card.create! name: "#{theme_name.sub('_', ' ')} skin", type_id: Card::SkinID, content: "[[themeless bootstrap skin]]\n[[+bootswatch theme]]", subcards: {
23
- "+variables" => { type_id: Card::ScssID, content: File.read(File.join path, "_variables.scss") },
24
- "+style" => { type_id: Card::ScssID, content: File.read(File.join path, "_bootswatch.scss") }
28
+ "+variables" => { type_id: Card::ScssID,
29
+ content: File.read(File.join(path, "_variables.scss")) },
30
+ "+style" => { type_id: Card::ScssID,
31
+ content: File.read(File.join(path, "_bootswatch.scss")) }
25
32
  }
26
33
  end
27
34
  end
@@ -7,13 +7,14 @@ class SearchCardContext < Cardio::Migration::Core
7
7
  ["[lr]+", 'l\\1'],
8
8
  ["[LR]+", 'L\\1'],
9
9
  ["(?=[LR]*[lr]+)(?=[lr]*[LR]+)[lrLR]+", 'l\\1'], # mix of lowercase and uppercase l's and r's
10
- %w(left LL),
11
- %w(right LR),
12
- %w(self left),
10
+ %w[left LL],
11
+ %w[right LR],
12
+ %w[self left],
13
13
  ["", "left"]
14
14
  ]
15
15
  Card.search(type_id: ["in", Card::SearchTypeID, Card::SetID]).each do |card|
16
- next unless card.name.junction? && card.real?
16
+ next unless card.name.compound? && card.real?
17
+
17
18
  content = card.db_content
18
19
  replace.each do |key, val|
19
20
  content.gsub!(/(#{sep})_(#{key})(?=#{sep})/, "\\1_#{val}")
@@ -22,6 +23,7 @@ class SearchCardContext < Cardio::Migration::Core
22
23
  card.actions.each do |action|
23
24
  next unless (content_change = action.change :db_content)
24
25
  next if content_change.new_record?
26
+
25
27
  content = content_change.value
26
28
  replace.each do |key, val|
27
29
  content.gsub!(/(#{sep})_(#{key})(?=#{sep})/, "\\1_#{val}")
@@ -5,14 +5,16 @@ class MenuCompatibility < Cardio::Migration::Core
5
5
  # Add bootswatch shared to old skins so that menu works
6
6
  bootswatch_shared = Card[:bootswatch_shared]
7
7
  Card.search(type_id: Card::SkinID) do |skin|
8
- if skin.item_cards.find { |item_card| item_card.codename == :style_bootstrap_compatible }
8
+ if skin.item_cards.find do |item_card|
9
+ item_card.codename == :style_bootstrap_compatible
10
+ end
9
11
  skin.add_item! bootswatch_shared.name
10
12
  end
11
13
  end
12
14
 
13
15
  # Delete output files so all the styling and js changes take effect.
14
16
  # (this can be removed if/when later migrations update those things directly)
15
- [:style, :script].each do |setting|
17
+ %i[style script].each do |setting|
16
18
  Card.search(
17
19
  right_id: Card::MachineOutputID,
18
20
  left: { right: { codename: setting.to_s } }
@@ -4,7 +4,8 @@ class FixSkinCodenames < Cardio::Migration::Core
4
4
  def up
5
5
  # This is needed because the bootswatch_themes migration removed codenames.
6
6
  # They were no longer needed for style handling but are still needed for images
7
- %w(bootstrap_default cerulean cosmo cyborg darkly flatly journal lumen paper readable sandstone simplex slate spacelab superhero united yeti).each do |theme_name|
7
+ %w[bootstrap_default cerulean cosmo cyborg darkly flatly journal lumen paper readable
8
+ sandstone simplex slate spacelab superhero united yeti].each do |theme_name|
8
9
  theme_name = "#{theme_name}_skin"
9
10
  Card.fetch(theme_name).update! codename: theme_name
10
11
  end
@@ -9,9 +9,9 @@ class AddRecentSettingSessionCard < Cardio::Migration::Core
9
9
  subcards: {
10
10
  "+*self+*options" => { type_code: :search_type,
11
11
  content: '{"type":"setting"}' },
12
- "+*self+*update" => { content: "[[Anyone]]" },
13
- "+*self**create" => { content: "[[Anyone]]" },
14
- "+*self**read" => { content: "[[Anyone]]" }
12
+ "+*self+*update" => { content: "[[Anyone]]" },
13
+ "+*self**create" => { content: "[[Anyone]]" },
14
+ "+*self**read" => { content: "[[Anyone]]" }
15
15
  }
16
16
  )
17
17
  end
@@ -6,6 +6,7 @@ class AddDebuggerSessionCard < Cardio::Migration::Core
6
6
  subcards: {
7
7
  "+*self+*options" => "[[on]]",
8
8
  "+*self+*input" => "[[checkbox]]",
9
- "+*self+*help" => "show more useful error pages" }
9
+ "+*self+*help" => "show more useful error pages"
10
+ }
10
11
  end
11
12
  end
@@ -14,7 +14,7 @@ class AddRecaptchaKeyAndAdminInfoCards < Cardio::Migration::Core
14
14
  admin_only name: "*google_analytics_key",
15
15
  codename: "google_analytics_key"
16
16
 
17
- codenames = %w(debugger recaptcha_settings)
17
+ codenames = %w[debugger recaptcha_settings]
18
18
  content =
19
19
  codenames.map do |cn|
20
20
  "[[#{Card[cn.to_sym].name}]]"
@@ -28,6 +28,7 @@ class AddRecaptchaKeyAndAdminInfoCards < Cardio::Migration::Core
28
28
 
29
29
  def add_admin_info_to_home_card
30
30
  return unless (home = Card[Card[:home].db_content])
31
+
31
32
  new_content = home.db_content.prepend "{{*admin info|content}}\n"
32
33
  home.update! content: new_content
33
34
  end
@@ -39,7 +40,7 @@ class AddRecaptchaKeyAndAdminInfoCards < Cardio::Migration::Core
39
40
  "[[+private key]]\n" \
40
41
  "[[+proxy]]"
41
42
  Card::Cache.reset_all
42
- %w(public_key private_key proxy).each do |name|
43
+ %w[public_key private_key proxy].each do |name|
43
44
  Card.create!(
44
45
  name: "#{Card[:recaptcha_settings].name}+#{name.tr('_', ' ')}",
45
46
  codename: "recaptcha_#{name}"
@@ -49,7 +50,7 @@ class AddRecaptchaKeyAndAdminInfoCards < Cardio::Migration::Core
49
50
 
50
51
  def admin_only args
51
52
  create_or_update! args.reverse_merge(type_id: Card::PhraseID)
52
- %w(*read *update *delete).each do |perm|
53
+ %w[*read *update *delete].each do |perm|
53
54
  create_or_update! name: "#{args[:name]}+*self+#{perm}",
54
55
  content: "[[Administrator]]"
55
56
  end
@@ -15,6 +15,7 @@ class UpdateFileAndImageCards < Cardio::Migration::Core
15
15
  Card.search(type: [:in, "file", "image"]).each do |card|
16
16
  update_history card
17
17
  next unless card.db_content.present?
18
+
18
19
  update_db_content card
19
20
  update_filenames card
20
21
  end
@@ -37,9 +38,11 @@ class UpdateFileAndImageCards < Cardio::Migration::Core
37
38
  # swap variant and action_id/type_code in file name
38
39
  def update_filenames card
39
40
  return unless Dir.exist? card.store_dir
41
+
40
42
  symlink_target_hash =
41
43
  Dir.entries(card.store_dir).each_with_object({}) do |file, symlink_target|
42
44
  next unless (new_filename = get_new_file_name(file))
45
+
43
46
  file_path = File.join(card.store_dir, file)
44
47
  if File.symlink?(file_path)
45
48
  symlink_target[new_filename] = File.readlink(file_path)
@@ -69,11 +72,12 @@ class UpdateFileAndImageCards < Cardio::Migration::Core
69
72
  end
70
73
 
71
74
  def add_skin_thumbnails
72
- %w(cerulean_skin cosmo_skin cyborg_skin darkly_skin flatly_skin
75
+ %w[cerulean_skin cosmo_skin cyborg_skin darkly_skin flatly_skin
73
76
  journal_skin lumen_skin paper_skin readable_skin sandstone_skin
74
77
  simplex_skin slate_skin spacelab_skin superhero_skin united_skin
75
- yeti_skin).each do |name|
78
+ yeti_skin].each do |name|
76
79
  next unless (card = Card[name.to_sym])
80
+
77
81
  card.update! codename: nil
78
82
  if (card = Card.fetch name, :image)
79
83
  card.update_column :codename, "#{name}_image"
@@ -6,7 +6,7 @@ class CreateReferencesForSearchCards < Cardio::Migration::Core
6
6
  type_id: Card::SearchTypeID
7
7
  ).find_each.with_index do |card, index|
8
8
  card.update_references_out
9
- puts "completed #{index} search cards" if index % 100 == 0
9
+ puts "completed #{index} search cards" if (index % 100).zero?
10
10
  end
11
11
  end
12
12
  end
@@ -6,8 +6,10 @@ class UpdateFileHistory < Cardio::Migration::Core
6
6
  card.actions.each do |action|
7
7
  next unless (content_change = action.change :db_content)
8
8
  next if content_change.new_record?
9
+
9
10
  original_filename, file_type, action_id, mod = content_change.value.split("\n")
10
11
  next unless file_type.present? && action_id.present?
12
+
11
13
  value =
12
14
  if mod.present?
13
15
  ":#{card.codename}/#{mod}#{::File.extname(original_filename)}"
@@ -15,7 +15,7 @@ class ReorganizeScripts < Cardio::Migration::Core
15
15
  Card.search(type_id: Card::PointerID,
16
16
  right: { codename: "script" },
17
17
  link_to: "script: slot").each do |script_rule|
18
- [:script_tinymce, :script_ace, :bootstrap_js].each do |codename|
18
+ %i[script_tinymce script_ace bootstrap_js].each do |codename|
19
19
  name = Card[codename].name
20
20
  script_rule.drop_item name
21
21
  end
@@ -3,6 +3,7 @@
3
3
  class RenameStatsToAdmin < Cardio::Migration::Core
4
4
  def up
5
5
  return if Card::Codename.exist?(:admin) || !Card::Codename.exist?(:stats)
6
+
6
7
  Card[:stats].update! name: "*admin", codename: "admin"
7
8
  end
8
9
  end
@@ -6,6 +6,7 @@ class FixModFiles < Cardio::Migration::Core
6
6
  next unless card.coded?
7
7
  next unless card.db_content.include?("05_standard") ||
8
8
  card.db_content.include?("06_bootstrap")
9
+
9
10
  new_content = card.db_content.sub("05_standard", "standard")
10
11
  .sub("06_bootstrap", "bootstrap")
11
12
  card.update_column :db_content, new_content
@@ -17,6 +18,7 @@ class FixModFiles < Cardio::Migration::Core
17
18
  def update_history card
18
19
  card.actions.each do |action|
19
20
  next unless (content_change = action.change(:db_content))
21
+
20
22
  new_value = content_change.value.gsub("05_standard", "standard")
21
23
  .gsub("06_bootstrap", "bootstrap")
22
24
  content_change.update_column :value, new_value
@@ -4,12 +4,12 @@ class TweakRecaptchaSettingCards < Cardio::Migration::Core
4
4
  def up
5
5
  ensure_card name: "*recaptcha settings", type_id: Card::BasicID
6
6
  ensure_card name: "*recaptcha settings+*self+*structure",
7
- content: <<-STRING
8
- {{+public key}}
9
- {{+private key}}
10
- {{+proxy}}
11
- STRING
12
- %w(public_key private_key proxy).each do |name|
7
+ content: <<~STRING
8
+ {{+public key}}
9
+ {{+private key}}
10
+ {{+proxy}}
11
+ STRING
12
+ %w[public_key private_key proxy].each do |name|
13
13
  ensure_card name: "#{Card[:recaptcha_settings].name}+#{name.tr('_', ' ')}",
14
14
  type_id: Card::PhraseID
15
15
  end
@@ -5,6 +5,7 @@ class UpdateKeys < Cardio::Migration::Core
5
5
  Card.pluck(:id, :name, :key).each do |id, name, key|
6
6
  new_key = name.to_name.key
7
7
  next if new_key == key
8
+
8
9
  update_key id, key, new_key
9
10
  end
10
11
  end
@@ -34,7 +35,7 @@ class UpdateKeys < Cardio::Migration::Core
34
35
  # the living "matthia_tax".
35
36
  # The living card is the one that has been updated more recently.
36
37
  longer_untouched = [Card.find(id), Card.find_by_key(new_key)]
37
- .min { |a, b| a.updated_at <=> b.updated_at}
38
+ .min { |a, b| a.updated_at <=> b.updated_at }
38
39
  Card.where(id: longer_untouched).delete_all
39
40
  update_key id, key, new_key if longer_untouched != id
40
41
  end
@@ -35,11 +35,13 @@ class EmailTestContext < Cardio::Migration::Core
35
35
 
36
36
  def update_if_unchanged name, content
37
37
  return if (card = Card[name]) && card.updater.codename != :wagn_bot
38
+
38
39
  ensure_card name, content: content
39
40
  end
40
41
 
41
42
  def add_test_context email_template, content
42
43
  return unless Card[email_template]
44
+
43
45
  ensure_card [email_template, :test_context],
44
46
  content: content,
45
47
  type_id: Card::PointerID
@@ -3,16 +3,16 @@
3
3
  class AddNotificationEventCard < Cardio::Migration::Core
4
4
  def up
5
5
  ensure_card "Notification template", codename: "notification_template",
6
- type_id: Card::CardtypeID
6
+ type_id: Card::CardtypeID
7
7
  ensure_trait "*message", "message", default: { type_id: Card::PhraseID }
8
8
  ensure_trait "*disappear", "disappear", default: { type_id: Card::ToggleID }
9
9
  ensure_trait "*contextual class", "contextual_class",
10
10
  default: { type_id: Card::PointerID },
11
11
  input: "radio",
12
12
  options: { type_id: Card::PointerID,
13
- content: %w(success info warning danger) }
13
+ content: %w[success info warning danger] }
14
14
 
15
- [:create, :update, :delete].each do |action|
15
+ %i[create update delete].each do |action|
16
16
  update ["on_#{action}".to_sym, :right, :help],
17
17
  content: "Configure events to be executed when card id #{action}d"
18
18
  end
@@ -9,7 +9,7 @@ class AddAdvancedEditCards < Cardio::Migration::Core
9
9
  type_id: Card::RoleID
10
10
 
11
11
  Card::Cache.reset_all
12
- ensure_card [:roles, :right, :options],
12
+ ensure_card %i[roles right options],
13
13
  type_id: Card::SearchTypeID,
14
14
  content: %({"type":"role", "not":{"codename":["in","anyone","anyone_signed_in, anyone_with_role"]}})
15
15
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  class AddInputOptionsCodename < Cardio::Migration::Core
4
4
  def up
5
- ensure_card [:input, :right, :options],
5
+ ensure_card %i[input right options],
6
6
  codename: "input_options"
7
7
  end
8
8
  end
@@ -3,12 +3,11 @@
3
3
  class HeadRule < Cardio::Migration::Core
4
4
  def up
5
5
  update_card! :head, type_id: Card::SettingID
6
- ensure_card [:all, :head],
6
+ ensure_card %i[all head],
7
7
  type_id: Card::HtmlID,
8
8
  content: "{{*head|core}}"
9
- ensure_card [:head, :right, :help],
9
+ ensure_card %i[head right help],
10
10
  content: "head tag content"
11
- ensure_card [:head, :right, :default], type_id: Card::HtmlID
12
-
11
+ ensure_card %i[head right default], type_id: Card::HtmlID
13
12
  end
14
13
  end
@@ -24,12 +24,12 @@ class MigrateLayouts < Cardio::Migration::Core
24
24
  end
25
25
 
26
26
  def body_tag card
27
- card.content[/<body[^>]*>.*<\/body>/mi] || add_body_tag(card)
27
+ card.content[%r{<body[^>]*>.*</body>}mi] || add_body_tag(card)
28
28
  end
29
29
 
30
30
  def add_body_tag card
31
- content = card.content.gsub('<!DOCTYPE HTML>', '')
32
- .gsub(/\{\{\*head[^}]*\}\}/i, '').strip
31
+ content = card.content.gsub("<!DOCTYPE HTML>", "")
32
+ .gsub(/\{\{\*head[^}]*\}\}/i, "").strip
33
33
  "<body>\n #{content}\n</body>"
34
34
  end
35
35
 
@@ -48,7 +48,7 @@ class MigrateLayouts < Cardio::Migration::Core
48
48
  end
49
49
 
50
50
  def head_tag card
51
- if (match = card.content.match(/<head>(.*)<\/head>/mi))
51
+ if (match = card.content.match(%r{<head>(.*)</head>}mi))
52
52
  match[1].strip
53
53
  end
54
54
  end
@@ -4,4 +4,4 @@ class UpdateLayout < Cardio::Migration::Core
4
4
  def up
5
5
  merge_cards ["*header", "*main_menu"]
6
6
  end
7
- end
7
+ end