card 1.101.4 → 1.101.5

Sign up to get free protection for your applications and to get access to all the features.
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