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
@@ -43,12 +43,14 @@ class Card
43
43
  def new_supercard_args
44
44
  # special case. gets absolutized incorrectly. fix in name?
45
45
  return {} if view_opts[:nest_name].strip.blank?
46
+
46
47
  { supercard: format.context_card }
47
48
  end
48
49
 
49
50
  def new_main_args
50
51
  nest_name = view_opts[:nest_name]
51
52
  return {} unless nest_name =~ /main/
53
+
52
54
  { name: nest_name.gsub(/^_main\+/, "+"),
53
55
  supercard: format.root.card }
54
56
  end
@@ -41,7 +41,7 @@ class Card
41
41
  # @param view [Symbol]
42
42
  # @return [Symbol ] viewname
43
43
  def modal_nest_view view
44
- # Note: the subformat always has the same nest_mode as its parent format
44
+ # NOTE: the subformat always has the same nest_mode as its parent format
45
45
  case nest_mode
46
46
  when :edit then view_in_edit_mode(view)
47
47
  when :template then :template_nest
@@ -3,7 +3,7 @@ class Card
3
3
  module Nesting
4
4
  # Formats can have subformats. Lineage can be retraced through "parent" format.
5
5
  module Subformat
6
- # note: while it is possible to have a subformat of a different class,
6
+ # NOTE: while it is possible to have a subformat of a different class,
7
7
  # the :format_class value takes precedence over :format.
8
8
  def subformat subcard, opts={}
9
9
  subcard = subformat_card subcard
@@ -56,6 +56,7 @@ class Card
56
56
 
57
57
  def subformat_card subcard
58
58
  return subcard if subcard.is_a? Card
59
+
59
60
  Card.fetch subcard, new: {}
60
61
  end
61
62
  end
@@ -65,8 +65,8 @@ class Card
65
65
  end
66
66
 
67
67
  def pretty_path source_location
68
- source_location.first.gsub(%r{^.+mod\d+-([^/]+)}, '\1: ') + ":" +
69
- source_location.second.to_s
68
+ "#{source_location.first.gsub(%r{^.+mod\d+-([^/]+)},
69
+ '\1: ')}:#{source_location.second}"
70
70
  end
71
71
 
72
72
  # :standard, :always, :never
@@ -46,4 +46,4 @@ class Card
46
46
  end
47
47
  end
48
48
  end
49
- end
49
+ end
data/lib/card/lexicon.rb CHANGED
@@ -45,7 +45,8 @@ class Card
45
45
  # end
46
46
 
47
47
  def lex_to_name lex
48
- return lex unless lex&.is_a? Array
48
+ return lex unless lex.is_a? Array
49
+
49
50
  lex.map { |side_id| name side_id or return }.join(Card::Name.joint).to_name
50
51
  end
51
52
 
@@ -83,7 +84,7 @@ class Card
83
84
  end
84
85
 
85
86
  def cache_key lex
86
- "L-" + (lex.is_a?(Array) ? lex.join("-") : lex.to_name.key)
87
+ "L-#{lex.is_a?(Array) ? lex.join('-') : lex.to_name.key}"
87
88
  end
88
89
  end
89
90
  end
data/lib/card/mark.rb CHANGED
@@ -23,16 +23,7 @@ class Card
23
23
  def id_or_name parts
24
24
  mark = parts.flatten
25
25
  mark = mark.first if mark.size <= 1
26
- id_from_mark(mark) || name_from_mark(mark)
27
- end
28
-
29
- def id_from_mark mark
30
- case mark
31
- when Integer then mark
32
- when Symbol then Card::Codename.id! mark
33
- when String then id_from_string mark
34
- when Card then mark.id
35
- end
26
+ id_from_mark(mark) || Card::Name[mark]
36
27
  end
37
28
 
38
29
  # translates string identifiers into an id:
@@ -48,20 +39,31 @@ class Card
48
39
  end
49
40
  end
50
41
 
51
- def bad_mark mark
52
- case mark
42
+ def name_from_id_from_string id, string
43
+ fetch_name(id) { bad_mark string }
44
+ end
45
+
46
+ private
47
+
48
+ def bad_mark string
49
+ case string
53
50
  when ID_MARK_RE
54
51
  raise Card::Error::NotFound, "id doesn't exist: #{Regexp.last_match[:id]}"
55
52
  when CODENAME_MARK_RE
56
53
  raise Card::Error::CodenameNotFound,
57
54
  "codename doesn't exist: #{Regexp.last_match[:codename]}"
58
55
  else
59
- raise Card::Error, "invalid mark: #{mark}"
56
+ raise Card::Error, "invalid mark: #{string}"
60
57
  end
61
58
  end
62
59
 
63
- def name_from_mark mark
64
- Card::Name[mark]
60
+ def id_from_mark mark
61
+ case mark
62
+ when Integer then mark
63
+ when Symbol then Card::Codename.id! mark
64
+ when String then id_from_string mark
65
+ when Card then mark.id
66
+ end
65
67
  end
66
68
  end
67
69
  end
@@ -12,8 +12,8 @@ class Card
12
12
  include SaveHelperHelper
13
13
  include SaveArguments
14
14
 
15
- def with_user user_name
16
- Card::Auth.with(current_id: Card.fetch_id(user_name)) { yield }
15
+ def with_user user_name, &block
16
+ Card::Auth.with(current_id: Card.fetch_id(user_name), &block)
17
17
  end
18
18
 
19
19
  def create_card name_or_args, content_or_args=nil
@@ -121,7 +121,7 @@ class Card
121
121
 
122
122
  # TODO: this is too specific for this
123
123
  def add_script name, opts={}
124
- name.sub!(/^script\:?\s?/, "") # in case name is given with prefix
124
+ name.sub!(/^script:?\s?/, "") # in case name is given with prefix
125
125
  # remove it so that we don't double it
126
126
 
127
127
  add_coderule_item name, "script",
data/lib/card/name.rb CHANGED
@@ -41,8 +41,8 @@ class Card
41
41
 
42
42
  if !validated_parts && str.include?(joint)
43
43
  compose Cardname.split_parts(str)
44
- elsif (id = Card.id_from_string(str)) # handles ~ and :
45
- Card.fetch_name(id) { Card.bad_mark(str) }
44
+ elsif (id = Card.id_from_string str) # handles ~[id] and :[codename]
45
+ Card.name_from_id_from_string id, str
46
46
  else
47
47
  super str
48
48
  end
@@ -50,17 +50,18 @@ class Card
50
50
 
51
51
  # interprets symbols/integers as codenames/ids
52
52
  def smart_compose parts
53
- name_parts = parts.flatten.map { |part| self[part] }
54
- new name_parts.join(joint), true
53
+ new_from_parts(parts) { |part| self[part] }
55
54
  end
56
55
 
57
56
  def compose parts
58
- name_parts = parts.flatten.map { |part| new part }
59
- new name_parts.join(joint), true
57
+ new_from_parts(parts) { |part| new part }
60
58
  end
61
59
 
62
- def url_key_to_standard key
63
- key.to_s.tr "_", " "
60
+ private
61
+
62
+ def new_from_parts parts, &block
63
+ name_parts = parts.flatten.map(&block)
64
+ new name_parts.join(joint), true
64
65
  end
65
66
  end
66
67
 
@@ -73,7 +74,7 @@ class Card
73
74
  end
74
75
 
75
76
  def code
76
- Card::Codename[Card.fetch_id self]
77
+ Card::Codename[card_id]
77
78
  end
78
79
 
79
80
  def setting?
data/lib/card/name/all.rb CHANGED
@@ -53,6 +53,7 @@ class Card
53
53
 
54
54
  def update_subcard_names new_name, name_to_replace=nil
55
55
  return unless @subcards
56
+
56
57
  subcards.each do |subcard|
57
58
  update_subcard_name subcard, new_name, name_to_replace if subcard.new?
58
59
  end
@@ -60,6 +61,7 @@ class Card
60
61
 
61
62
  def key= newkey
62
63
  return if newkey == key
64
+
63
65
  update_cache_key key do
64
66
  write_attribute :key, (name.simple? ? newkey : nil)
65
67
  @key = newkey
@@ -100,6 +102,7 @@ class Card
100
102
 
101
103
  def clean_patterns
102
104
  return unless patterns?
105
+
103
106
  reset_patterns
104
107
  patterns
105
108
  end
@@ -18,19 +18,18 @@ class Card
18
18
  child_ids :left
19
19
  end
20
20
 
21
- def each_child
21
+ def each_child &block
22
22
  return unless id
23
23
 
24
24
  Card.where(
25
25
  "(left_id = #{id} or right_id = #{id}) and trash is false"
26
- ).each do |child|
27
- yield child
28
- end
26
+ ).each(&block)
29
27
  end
30
28
 
31
29
  # eg, A+B is a child of A and B
32
30
  def child_ids side=nil
33
31
  return [] unless id
32
+
34
33
  side ||= name.simple? ? :part : :left_id
35
34
  Auth.as_bot do
36
35
  Card.search({ side => id, return: :id, limit: 0 }, "children of #{name}")
@@ -8,8 +8,10 @@ class Card
8
8
 
9
9
  def uniquify_name name, rename=:new
10
10
  return name unless Card.exists? name
11
+
11
12
  uniq_name = generate_alternative_name name
12
13
  return uniq_name unless rename == :old
14
+
13
15
  rename!(name, uniq_name)
14
16
  name
15
17
  end
@@ -24,7 +24,8 @@ class Card
24
24
 
25
25
  # @return [True/False]
26
26
  def field_of? context
27
- return false unless junction?
27
+ return false unless compound?
28
+
28
29
  if context.present?
29
30
  absolute_name(context).left_name.key == context.to_name.key
30
31
  else
@@ -53,7 +54,8 @@ class Card
53
54
 
54
55
  # @return [True/False]
55
56
  def trait_name? *traitlist
56
- return false unless junction?
57
+ return false unless compound?
58
+
57
59
  right_key = right_name.key
58
60
  traitlist.any? do |codename|
59
61
  Card::Codename.name(codename)&.key == right_key
@@ -22,7 +22,6 @@ class Card
22
22
  Card.fetch self, new: {}
23
23
  end
24
24
 
25
- # @return [Integer] id of card with name
26
25
  def card_id
27
26
  Card.fetch_id self
28
27
  end
data/lib/card/query.rb CHANGED
@@ -48,28 +48,28 @@ class Card
48
48
  # their values are translated fairly directly into SQL-safe values.
49
49
  # (These are referred to as "properties" in CQL documentation. Need to
50
50
  # reconcile #EFM)
51
- basic: %i[id name key type_id content left_id right_id
52
- creator_id updater_id codename read_rule_id],
51
+ basic: %i[id name key type_id content left_id right_id
52
+ creator_id updater_id codename read_rule_id],
53
53
  # "Relational" values can involve tying multiple queries together
54
- relational: %i[type
55
- part left right
56
- editor_of edited_by last_editor_of last_edited_by
57
- creator_of created_by
58
- updater_of updated_by
59
- link_to linked_to_by
60
- include included_by
61
- nest nested_by
54
+ relational: %i[type
55
+ part left right
56
+ editor_of edited_by last_editor_of last_edited_by
57
+ creator_of created_by
58
+ updater_of updated_by
59
+ link_to linked_to_by
60
+ include included_by
61
+ nest nested_by
62
62
 
63
- refer_to referred_to_by
64
- member_of member
63
+ refer_to referred_to_by
64
+ member_of member
65
65
 
66
- found_by
67
- not sort match name_match complete],
66
+ found_by
67
+ not sort match name_match complete],
68
68
 
69
69
  plus_relational: %i[plus left_plus right_plus],
70
- conjunction: %i[and or all any],
71
- ignore: %i[prepend append vars],
72
- deprecated: %i[view params size]
70
+ conjunction: %i[and or all any],
71
+ ignore: %i[prepend append vars],
72
+ deprecated: %i[view params size]
73
73
  }.each_with_object({}) do |pair, h|
74
74
  pair[1].each { |v| h[v] = pair[0] }
75
75
  end
@@ -53,6 +53,7 @@ class Card
53
53
 
54
54
  def no_method_for_attribute_type attribute, type
55
55
  return if type == :ignore
56
+
56
57
  if type == :deprecated
57
58
  deprecated_attribute attribute
58
59
  else
@@ -10,6 +10,7 @@ class Card
10
10
  # match term anywhere in name or content
11
11
  def match val
12
12
  return unless val.present?
13
+
13
14
  subconds = %i[name content].map do |field|
14
15
  Value.new([:match, val], self).to_sql field
15
16
  end
@@ -19,7 +20,7 @@ class Card
19
20
  # match names beginning with term
20
21
  def complete val
21
22
  val = val.to_name
22
- if val.junction?
23
+ if val.compound?
23
24
  interpret left: val.left
24
25
  interpret right: { complete: val.right } if val.right.present?
25
26
  else
@@ -8,6 +8,7 @@ class Card
8
8
  clause.symbolize_keys!
9
9
  clause.each do |key, val|
10
10
  next if key.to_sym == :return
11
+
11
12
  # when return values are relative, they are relative to the name of the
12
13
  # card returned, not the context card
13
14
  clause[key] = normalize_value val
@@ -33,7 +33,7 @@ class Card
33
33
  # DEPRECATE?
34
34
 
35
35
  def member_of val
36
- interpret right_plus: [Card::RolesID, refer_to: val]
36
+ interpret right_plus: [Card::RolesID, { refer_to: val }]
37
37
  end
38
38
 
39
39
  def member val
@@ -58,7 +58,7 @@ class Card
58
58
  private
59
59
 
60
60
  def inside_or?
61
- from&.is_a?(Card::Query) && from.mods[:conj] == "or"
61
+ from.is_a?(Card::Query) && from.mods[:conj] == "or"
62
62
  end
63
63
 
64
64
  # the options :to and :from can be translated into the full table/alias/field trio.
@@ -21,6 +21,7 @@ class Card
21
21
 
22
22
  def exact_name_match field
23
23
  return false unless match_prefix == "=" && field.to_sym == :name
24
+
24
25
  "#{field_sql field} = #{quote match_term.to_name.key}"
25
26
  end
26
27
 
@@ -58,12 +58,14 @@ class Card
58
58
  interpret_reference ref_hash, referee_name, ref_type
59
59
  end
60
60
  return if ref_hash.empty?
61
+
61
62
  Reference.mass_insert reference_values_array(ref_hash)
62
63
  end
63
64
 
64
65
  # delete references from this card
65
66
  def delete_references_out
66
67
  raise "id required to delete references" if id.nil?
68
+
67
69
  Reference.where(referer_id: id).delete_all
68
70
  end
69
71
 
@@ -71,9 +73,11 @@ class Card
71
73
 
72
74
  def with_normalized_referee referee_name
73
75
  return unless referee_name # eg commented nest has no referee_name
76
+
74
77
  referee_name = referee_name.to_name
75
78
  referee_key = referee_name.key
76
79
  return if referee_key == key # don't create self reference
80
+
77
81
  yield referee_name, referee_key, Lexicon.id(referee_name)
78
82
  end
79
83
 
@@ -103,10 +107,10 @@ class Card
103
107
  end
104
108
  end
105
109
 
106
- def each_reference_type ref_types
110
+ def each_reference_type ref_types, &block
107
111
  ref_types.delete PARTIAL_REF_CODE if ref_types.size > 1
108
112
  # partial references are not necessary if there are explicit references
109
- ref_types.each { |ref_type| yield ref_type }
113
+ ref_types.each(&block)
110
114
  end
111
115
 
112
116
  # invokes the given block for each reference in content with
@@ -122,6 +126,7 @@ class Card
122
126
  # but when A's name is changed we have to find and update that link.
123
127
  def interpret_partial_references ref_hash, referee_name
124
128
  return if referee_name.simple?
129
+
125
130
  [referee_name.left, referee_name.right].each do |sidename|
126
131
  interpret_reference ref_hash, sidename, PARTIAL_REF_CODE
127
132
  end