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
@@ -3,6 +3,7 @@
3
3
  event :validate_name, :validate, on: :save, changed: :name, when: :no_autoname? do
4
4
  validate_legality_of_name
5
5
  return if errors.any?
6
+
6
7
  Card.write_to_soft_cache self
7
8
  validate_uniqueness_of_name
8
9
  end
@@ -29,7 +30,7 @@ event :validate_legality_of_name do
29
30
  elsif !name.valid?
30
31
  errors.add :name, t(:core_error_banned_characters,
31
32
  banned: Card::Name.banned_array * " ")
32
- elsif changing_existing_tag_to_junction?
33
+ elsif changing_existing_tag_to_compound?
33
34
  errors.add :name, t(:core_error_name_tag, name: name)
34
35
  end
35
36
  end
@@ -44,6 +45,7 @@ end
44
45
 
45
46
  event :validate_renaming, :validate, on: :update, changed: :name, skip: :allowed do
46
47
  return if name_before_act&.to_name == name # just changing to new variant
48
+
47
49
  errors.add :content, t(:core_cannot_change_content) if content_is_changing?
48
50
  errors.add :type, t(:core_cannot_change_type) if type_is_changing?
49
51
  detect_illegal_compound_names
@@ -58,11 +60,13 @@ end
58
60
  event :rename_in_trash, after: :expire_old_name, on: :update do
59
61
  existing_card = Card.find_by_key_and_trash name.key, true
60
62
  return if !existing_card || existing_card == self
63
+
61
64
  existing_card.rename_as_trash_obstacle
62
65
  end
63
66
 
64
67
  event :prepare_left_and_right, :store, changed: :name, on: :save do
65
68
  return if name.simple?
69
+
66
70
  prepare_side :left
67
71
  prepare_side :right
68
72
  end
@@ -79,7 +83,7 @@ end
79
83
  protected
80
84
 
81
85
  def rename_as_trash_obstacle
82
- self.name = name + "*trash"
86
+ self.name = "#{name}*trash"
83
87
  rename_in_trash_without_callbacks
84
88
  save!
85
89
  end
@@ -105,11 +109,13 @@ end
105
109
 
106
110
  def detect_illegal_compound_names
107
111
  return unless changed_from_simple_to_compound? && child_ids(:right).present?
112
+
108
113
  errors.add :name, "illegal name change; existing names end in +#{name_before_act}"
109
114
  end
110
115
 
111
- def changing_existing_tag_to_junction?
112
- return false unless changing_name_to_junction?
116
+ def changing_existing_tag_to_compound?
117
+ return false unless changing_name_to_compound?
118
+
113
119
  name_in_use_as_tag?
114
120
  end
115
121
 
@@ -117,8 +123,8 @@ def name_in_use_as_tag?
117
123
  !Card.where(right_id: id, trash: false).take.nil?
118
124
  end
119
125
 
120
- def changing_name_to_junction?
121
- name.junction? && simple?
126
+ def changing_name_to_compound?
127
+ name.compound? && simple?
122
128
  end
123
129
 
124
130
  def old_name_in_way? sidecard
@@ -150,6 +156,7 @@ end
150
156
 
151
157
  def prepare_obstructed_side side, side_id, sidename
152
158
  return unless side_id && side_id == id
159
+
153
160
  clear_name sidename
154
161
  send "#{side}_id=", add_subcard(sidename)
155
162
  true
@@ -7,6 +7,7 @@ end
7
7
  event :update_referer_content, :finalize, on: :update, when: :update_referers do
8
8
  referers.each do |card|
9
9
  next if card.structure
10
+
10
11
  card.skip_event! :validate_renaming, :check_permissions
11
12
  card.content = card.replace_references name_before_act, name
12
13
  attach_subcard card
@@ -58,6 +59,7 @@ private
58
59
 
59
60
  def replace_reference chunk, old_name, new_name
60
61
  return unless (old = chunk.referee_name) && (new = old.swap old_name, new_name)
62
+
61
63
  chunk.referee_name = chunk.replace_reference old_name, new_name
62
64
  update_reference old.key, new.key
63
65
  end
@@ -17,8 +17,8 @@ module ClassMethods
17
17
  def real? mark
18
18
  quick_fetch(mark).present?
19
19
  end
20
- alias exist? real?
21
- alias exists? real?
20
+ alias_method :exist?, :real?
21
+ alias_method :exists?, :real?
22
22
 
23
23
  def known? mark
24
24
  fetch(mark).present?
@@ -81,4 +81,4 @@ end
81
81
 
82
82
  def user_changes?
83
83
  actions.joins(:act).where("card_acts.actor_id != ?", WagnBotID).exists?
84
- end
84
+ end
@@ -1,7 +1,7 @@
1
-
2
1
  event :reject_empty_subcards, :prepare_to_validate do
3
2
  subcards.each_with_key do |subcard, key|
4
3
  next unless subcard.new? && subcard.unfilled?
4
+
5
5
  remove_subcard(key)
6
6
  director.subdirectors.delete(subcard)
7
7
  end
@@ -36,6 +36,7 @@ module ClassMethods
36
36
 
37
37
  def delete_files_with_id file_id
38
38
  raise Card::Error, t(:core_exception_almost_deleted) if Card.exists?(file_id)
39
+
39
40
  ::FileUtils.rm_rf "#{dir}/#{file_id}", secure: true
40
41
  end
41
42
 
@@ -65,6 +66,7 @@ end
65
66
 
66
67
  def add_to_trash args
67
68
  return if new_card?
69
+
68
70
  yield args.merge trash: true
69
71
  end
70
72
 
@@ -77,6 +79,7 @@ end
77
79
  def pull_from_trash!
78
80
  return unless (id = Card::Lexicon.id key) # name is already known
79
81
  return unless (trashed_card = Card.where(id: id).take)&.trash
82
+
80
83
  # confirm name is actually in trash
81
84
 
82
85
  db_attributes["id"] = trashed_card.db_attributes["id"]
@@ -99,7 +102,7 @@ event :validate_delete, :validate, on: :delete do
99
102
  %w[default style layout create read update delete]
100
103
  # FIXME: HACK! should be configured in the rule
101
104
 
102
- if junction? && left&.codename == :all &&
105
+ if compound? && left&.codename == :all &&
103
106
  undeletable_all_rules_tags.member?(right.codename.to_s)
104
107
  errors.add :delete, t(:core_error_indestructible, name: name)
105
108
  end
@@ -109,6 +112,7 @@ end
109
112
 
110
113
  event :validate_delete_children, after: :validate_delete, on: :delete do
111
114
  return if errors.any?
115
+
112
116
  each_child do |child|
113
117
  child.include_set_modules
114
118
  delete_as_subcard child
@@ -1,4 +1,3 @@
1
-
2
1
  module ClassMethods
3
2
  def default_type_id
4
3
  @@default_type_id ||= Card[:all].fetch(:default, skip_modules: true).type_id
@@ -7,6 +6,7 @@ end
7
6
 
8
7
  def type_card
9
8
  return if type_id.nil?
9
+
10
10
  Card.quick_fetch type_id.to_i
11
11
  end
12
12
 
@@ -29,7 +29,7 @@ def type_cardname
29
29
  end
30
30
 
31
31
  def type= type_name
32
- self.type_id = Card.fetch_id type_name
32
+ self.type_id = type_name.card_id
33
33
  end
34
34
 
35
35
  def type_id= card_or_id
@@ -38,12 +38,14 @@ end
38
38
 
39
39
  def type_id_from_template
40
40
  return unless name && (t = template)
41
+
41
42
  reset_patterns # still necessary even with new template handling?
42
43
  self.type_id = t.type_id
43
44
  end
44
45
 
45
46
  event :validate_type_change, :validate, on: :update, changed: :type_id do
46
47
  return unless (c = dup) && c.action == :create && !c.valid?
48
+
47
49
  errors.add :type, t(:core_error_cant_change_errors,
48
50
  name: name,
49
51
  type_id: type_id,
@@ -41,7 +41,7 @@ module ClassMethods
41
41
 
42
42
  def resolve_file_attributes! attribs
43
43
  %i[image file].each do |attach|
44
- next unless attribs[attach] && attribs[attach].is_a?(String)
44
+ next unless attribs[attach].is_a?(String)
45
45
 
46
46
  attribs[attach] = ::File.open(attribs[attach])
47
47
  end
@@ -2,7 +2,8 @@
2
2
 
3
3
  RSpec.describe Card::Set::All::AssignAttributes do
4
4
  it "assigns attributes" do
5
- card = Card.new name: "#name", type: :basic, content: "#content", codename: "#codename"
5
+ card = Card.new name: "#name", type: :basic, content: "#content",
6
+ codename: "#codename"
6
7
  expect(card.attributes).to include(
7
8
  "name" => "#name",
8
9
  "db_content" => "#content",
@@ -31,18 +32,18 @@ RSpec.describe Card::Set::All::AssignAttributes do
31
32
  end
32
33
 
33
34
  it "assigns subfields" do
34
- card = Card.new name: "#name", subfields: { default: { content: "subcontent" } }
35
- expect(card.subcards.first).to eq "name+*default"
36
- subcard = card.subfield :default
37
- expect(subcard).to be_a(Card)
38
- expect(subcard.name).to eq "#name+*default"
39
- expect(subcard.content).to eq "subcontent"
40
- end
35
+ card = Card.new name: "#name", subfields: { default: { content: "subcontent" } }
36
+ expect(card.subcards.first).to eq "name+*default"
37
+ subcard = card.subfield :default
38
+ expect(subcard).to be_a(Card)
39
+ expect(subcard.name).to eq "#name+*default"
40
+ expect(subcard.content).to eq "subcontent"
41
+ end
41
42
 
42
43
  describe "set specific attributes" do
43
44
  example "file card with set specfic attribute" do
44
45
  card = Card.new name: "empty", type: :file, empty_ok: true
45
- expect(card.empty_ok?).to be_truthy
46
+ expect(card).to be_empty_ok
46
47
  end
47
48
  end
48
49
  end
@@ -19,13 +19,13 @@ RSpec.describe Card do
19
19
  context "when there is a general toc rule of 2" do
20
20
  before do
21
21
  Card::Auth.as_bot do
22
- create [:basic, :type, :table_of_contents], "2"
22
+ create %i[basic type table_of_contents], "2"
23
23
  end
24
24
  end
25
25
 
26
26
  specify do
27
27
  expect(c1.type_id).to eq(Card::BasicID)
28
- expect(rule_card).to be_a Card
28
+ expect(rule_card).to be_a described_class
29
29
  end
30
30
 
31
31
  describe ".rule" do
@@ -39,9 +39,11 @@ RSpec.describe Card do
39
39
  it "does not render for 'Onne Heading'" do
40
40
  expect(c1).not_to have_toc
41
41
  end
42
+
42
43
  it "renders for 'Twwo Heading'" do
43
44
  expect(c2).to have_toc
44
45
  end
46
+
45
47
  it "renders for 'Three Heading'" do
46
48
  expect(c3).to have_toc
47
49
  end
@@ -52,6 +54,7 @@ RSpec.describe Card do
52
54
  sets = described_class["A"].related_sets.map { |s| s[0] }
53
55
  expect(sets).to eq(["A+*right"])
54
56
  end
57
+
55
58
  it "has 2 sets (type, and right) for a cardtype card" do
56
59
  sets = described_class["Cardtype A"].related_sets.map { |s| s[0] }
57
60
  expect(sets).to eq(["Cardtype A+*type", "Cardtype A+*right"])
@@ -71,6 +74,7 @@ RSpec.describe Card do
71
74
  # sets.should == ['Cardtype A+*self', 'Cardtype A+*type',
72
75
  # 'Cardtype A+*right', 'RichText+Cardtype A+*type plus right']
73
76
  # end
77
+
74
78
  it "is empty for a non-simple card" do
75
79
  sets = described_class["A+B"].related_sets.map { |s| s[0] }
76
80
  expect(sets).to eq([])
@@ -99,9 +103,11 @@ RSpec.describe Card do
99
103
  it "does not render toc for 'Onne Heading'" do
100
104
  expect(c1).to have_toc
101
105
  end
106
+
102
107
  it "renders toc for 'Twwo Heading'" do
103
108
  expect(c2).to have_toc
104
109
  end
110
+
105
111
  it "does not render for 'Twwo Heading' when changed to 3" do
106
112
  rule_card.content = "3"
107
113
  expect(c2.rule(:table_of_contents)).to eq("3")
@@ -140,9 +146,11 @@ RSpec.describe Card do
140
146
  it "does not render for 'Onne Heading'" do
141
147
  expect(@c1).not_to have_toc
142
148
  end
149
+
143
150
  it "renders for 'Twwo Heading'" do
144
151
  expect(@c2).not_to have_toc
145
152
  end
153
+
146
154
  it "renders for 'Three Heading'" do
147
155
  expect(@c3).not_to have_toc
148
156
  end
@@ -173,8 +181,10 @@ RSpec.describe Card do
173
181
  described_class.create! name: "RichText+*type+*table of contents", content: "2"
174
182
  @c1 = described_class.create! name: "toc1", type: "CardtypeE",
175
183
  content: described_class["Onne Heading"].content
176
- @c2 = described_class.create! name: "toc2", content: described_class["Twwo Heading"].content
177
- @c3 = described_class.create! name: "toc3", content: described_class["Three Heading"].content
184
+ @c2 = described_class.create! name: "toc2",
185
+ content: described_class["Twwo Heading"].content
186
+ @c3 = described_class.create! name: "toc3",
187
+ content: described_class["Three Heading"].content
178
188
  expect(@c1.type_name).to eq("Cardtype E")
179
189
  @rule_card = @c1.rule_card(:table_of_contents)
180
190
 
@@ -190,6 +200,7 @@ RSpec.describe Card do
190
200
  end
191
201
  end
192
202
  end
203
+
193
204
  it "takes on new setting value" do
194
205
  c = described_class["toc1"]
195
206
  expect(c.rule_card(:table_of_contents).name)
@@ -201,10 +212,12 @@ RSpec.describe Card do
201
212
  it "does not render for 'Onne Heading'" do
202
213
  expect(@c1).not_to have_toc
203
214
  end
215
+
204
216
  it "renders for 'Twwo Heading'" do
205
217
  expect(@c2.rule(:table_of_contents)).to eq("2")
206
218
  expect(@c2).to have_toc
207
219
  end
220
+
208
221
  it "renders for 'Three Heading'" do
209
222
  expect(@c3).to have_toc
210
223
  end
@@ -231,9 +244,11 @@ RSpec.describe Card do
231
244
  it "does not render toc for 'Onne Heading'" do
232
245
  expect(c1).to have_toc
233
246
  end
247
+
234
248
  it "renders toc for 'Twwo Heading'" do
235
249
  expect(c2).to have_toc
236
250
  end
251
+
237
252
  it "does not render for 'Twwo Heading' when changed to 3" do
238
253
  rule_card.content = "3"
239
254
  expect(c2).not_to have_toc
@@ -18,7 +18,7 @@ RSpec.describe Card::Set::All::Collection do
18
18
  end
19
19
 
20
20
  it "handles searches relative to context card" do
21
- # note: A refers to 'Z'
21
+ # NOTE: A refers to 'Z'
22
22
  @context = "A"
23
23
  @args = { name: "foo", type: "Search",
24
24
  content: '{"referred_to_by":"_self"}' }
@@ -23,6 +23,7 @@ RSpec.describe Card::Set::All::Export do
23
23
  a_hash_including(name: "A+B", type: "RichText", content: "AlphaBeta")
24
24
  )
25
25
  end
26
+
26
27
  it "handles multi levels pointer cards" do
27
28
  inner_pointer = create "inner pointer", type: :pointer, content: "T"
28
29
  expect(export_pointer([inner_pointer.name, "A+B"])).to include(
@@ -54,34 +54,34 @@ describe Card::Set::All::Initialize do
54
54
 
55
55
  describe "module inclusion" do
56
56
  context "(search)" do
57
- before do
58
- @c = Card.new type: "Search", name: "Module Inclusion Test Card"
57
+ let :c do
58
+ Card.new type: "Search", name: "Module Inclusion Test Card"
59
59
  end
60
60
 
61
61
  it "happens after new" do
62
- expect(@c.respond_to?(:query)).to be_truthy
62
+ expect(c).to respond_to(:query)
63
63
  end
64
64
 
65
65
  it "happens after save" do
66
- expect(@c.respond_to?(:query)).to be_truthy
67
- @c.save!
68
- expect(@c.respond_to?(:query)).to be_truthy
66
+ expect(c).to respond_to(:query)
67
+ c.save!
68
+ expect(c).to respond_to(:query)
69
69
  end
70
70
 
71
71
  it "happens after fetch" do
72
- @c.save!
73
- c = Card.fetch(@c.name)
74
- expect(c.respond_to?(:query)).to be_truthy
72
+ c.save!
73
+ f = Card.fetch(c.name)
74
+ expect(f).to respond_to(:query)
75
75
  end
76
76
  end
77
77
 
78
78
  context "(pointer)" do
79
79
  it "happens with explicit pointer setting" do
80
- expect(Card.new(type: "Pointer").respond_to?(:add_item)).to be_truthy
80
+ expect(Card.new(type: "Pointer")).to respond_to(:add_item)
81
81
  end
82
82
 
83
83
  it "happens with implicit pointer setting (from template)" do
84
- expect(Card.new(name: "Home+*cc").respond_to?(:add_item)).to be_truthy
84
+ expect(Card.new(name: "Home+*cc")).to respond_to(:add_item)
85
85
  end
86
86
  end
87
87
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: card
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.101.4
4
+ version: 1.101.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ethan McCutchen
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2021-05-05 00:00:00.000000000 Z
13
+ date: 2021-05-10 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: cardname
@@ -18,14 +18,14 @@ dependencies:
18
18
  requirements:
19
19
  - - '='
20
20
  - !ruby/object:Gem::Version
21
- version: 0.11.4
21
+ version: 0.11.5
22
22
  type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  requirements:
26
26
  - - '='
27
27
  - !ruby/object:Gem::Version
28
- version: 0.11.4
28
+ version: 0.11.5
29
29
  - !ruby/object:Gem::Dependency
30
30
  name: rake
31
31
  requirement: !ruby/object:Gem::Requirement