card 1.108.1 → 1.109.0

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 (128) hide show
  1. checksums.yaml +4 -4
  2. data/VERSION +1 -1
  3. data/config/environments/development.rb +1 -1
  4. data/config/environments/production.rb +5 -2
  5. data/config/initializers/01_core_extensions/array.rb +1 -0
  6. data/config/initializers/01_core_extensions/hash.rb +4 -0
  7. data/config/initializers/02_patches/active_record.rb +1 -1
  8. data/config/initializers/core_extensions.rb +0 -1
  9. data/config/initializers/deck_config.rb +3 -3
  10. data/config/initializers/patches.rb +6 -6
  11. data/lib/card/auth/current.rb +8 -6
  12. data/lib/card/auth.rb +7 -6
  13. data/lib/card/cache/class_methods.rb +2 -4
  14. data/lib/card/cache/shared.rb +1 -1
  15. data/lib/card/cache/temporary.rb +2 -2
  16. data/lib/card/codename.rb +0 -1
  17. data/lib/card/content/chunk/abstract.rb +1 -0
  18. data/lib/card/content/chunk.rb +0 -1
  19. data/lib/card/content/clean.rb +4 -2
  20. data/lib/card/content/diff/l_c_s.rb +1 -2
  21. data/lib/card/content/diff/result.rb +2 -1
  22. data/lib/card/content/diff.rb +2 -1
  23. data/lib/card/content/parser.rb +8 -7
  24. data/lib/card/content.rb +1 -1
  25. data/lib/card/director/subdirector_array.rb +1 -0
  26. data/lib/card/director.rb +1 -1
  27. data/lib/card/dirty/method_factory.rb +1 -0
  28. data/lib/card/env/location.rb +3 -3
  29. data/lib/card/env/location_history.rb +12 -11
  30. data/lib/card/env/success/target.rb +4 -4
  31. data/lib/card/env/support.rb +24 -2
  32. data/lib/card/error.rb +1 -0
  33. data/lib/card/fetch/store.rb +1 -1
  34. data/lib/card/format/error.rb +1 -0
  35. data/lib/card/format/method_delegation.rb +6 -4
  36. data/lib/card/format/registration.rb +5 -3
  37. data/lib/card/format/wrapper.rb +1 -0
  38. data/lib/card/mailer.rb +1 -14
  39. data/lib/card/name/all/parts.rb +1 -1
  40. data/lib/card/name/all.rb +1 -0
  41. data/lib/card/name/name_variants.rb +1 -0
  42. data/lib/card/query/abstract_query/query_helper.rb +1 -2
  43. data/lib/card/query/abstract_query/tie.rb +1 -1
  44. data/lib/card/query/abstract_query.rb +3 -3
  45. data/lib/card/query/card_class.rb +1 -0
  46. data/lib/card/query/clause.rb +1 -0
  47. data/lib/card/query/join.rb +3 -3
  48. data/lib/card/reference/all.rb +6 -7
  49. data/lib/card/rule/cache.rb +1 -0
  50. data/lib/card/rule/preference_cache.rb +2 -0
  51. data/lib/card/rule/read_rule_cache.rb +3 -0
  52. data/lib/card/set/event/all.rb +6 -4
  53. data/lib/card/set/event/callbacks.rb +1 -0
  54. data/lib/card/set/event/options.rb +3 -2
  55. data/lib/card/set/event/skip_and_trigger.rb +1 -1
  56. data/lib/card/set/event.rb +2 -2
  57. data/lib/card/set/format/abstract_format/view_definition.rb +1 -1
  58. data/lib/card/set/format/haml_paths.rb +1 -1
  59. data/lib/card/set/format.rb +4 -4
  60. data/lib/card/set/helpers.rb +4 -4
  61. data/lib/card/set/i18n_scanner.rb +23 -22
  62. data/lib/card/set/i18n_scope.rb +4 -3
  63. data/lib/card/set/pattern/all.rb +1 -1
  64. data/lib/card/set/pattern/base.rb +6 -3
  65. data/lib/card/set/pattern/class_methods.rb +1 -1
  66. data/lib/card/set/pattern.rb +1 -1
  67. data/lib/card/set/required_field.rb +3 -0
  68. data/lib/card/set/trait.rb +6 -1
  69. data/lib/card/subcards/all.rb +12 -4
  70. data/lib/card/view/cache/cache_action.rb +1 -1
  71. data/lib/card/view/cache.rb +1 -1
  72. data/lib/card/view/classy.rb +5 -5
  73. data/lib/card/view/options/key_lists.rb +1 -0
  74. data/lib/card/view/options/voo_api.rb +1 -1
  75. data/lib/cardio/command/application.rb +1 -1
  76. data/lib/cardio/command/custom.rb +7 -6
  77. data/lib/cardio/command/rake_command.rb +3 -2
  78. data/lib/cardio/command/rspec_command.rb +1 -0
  79. data/lib/cardio/generators/deck_generator_loader.rb +1 -1
  80. data/lib/cardio/generators.rb +4 -3
  81. data/lib/cardio/migration/port.rb +2 -0
  82. data/lib/cardio/migration/stamp.rb +1 -0
  83. data/lib/cardio/migration/transform.rb +1 -0
  84. data/lib/cardio/migration.rb +2 -0
  85. data/lib/cardio/mod/class_methods.rb +1 -2
  86. data/lib/cardio/mod/dirs.rb +2 -4
  87. data/lib/cardio/mod/eat/edibles.rb +8 -6
  88. data/lib/cardio/mod/eat.rb +6 -5
  89. data/lib/cardio/mod/load_strategy/set_binding_magic.rb +1 -1
  90. data/lib/cardio/mod/load_strategy/tmp_files.rb +3 -2
  91. data/lib/cardio/mod/load_strategy.rb +1 -0
  92. data/lib/cardio/mod/loader/set_pattern_loader.rb +4 -0
  93. data/lib/cardio/mod/loader/set_template.rb +14 -4
  94. data/lib/cardio/mod/loader.rb +2 -2
  95. data/lib/cardio/mod/sow/card_source.rb +1 -1
  96. data/lib/cardio/mod/sow/remote_source.rb +32 -0
  97. data/lib/cardio/mod/sow.rb +10 -10
  98. data/lib/cardio/railtie.rb +1 -0
  99. data/lib/cardio/script_loader.rb +1 -1
  100. data/lib/cardio/seed.rb +1 -1
  101. data/lib/cardio/utils.rb +1 -1
  102. data/lib/cardio/version.rb +2 -1
  103. data/lib/cardio.rb +3 -0
  104. data/lib/generators/deck/templates/config.ru.erb +1 -1
  105. data/mod/core/config/locales/en.yml +1 -0
  106. data/mod/core/data/schema/20141001105348_move_revisions_to_actions.rb +2 -2
  107. data/mod/core/data/schema/20241017160402_unique_codename.rb +8 -0
  108. data/mod/core/data/transform/20150724123438_update_file_and_image_cards.rb +1 -1
  109. data/mod/core/lib/tasks/card/export.rake +28 -0
  110. data/mod/core/lib/tasks/card/migrate.rake +3 -3
  111. data/mod/core/lib/tasks/card/seed.rake +2 -1
  112. data/mod/core/lib/tasks/card.rake +47 -16
  113. data/mod/core/set/all/admin.rb +1 -2
  114. data/mod/core/set/all/assign_attributes.rb +3 -2
  115. data/mod/core/set/all/codename.rb +7 -0
  116. data/mod/core/set/all/debug.rb +3 -3
  117. data/mod/core/set/all/initialize.rb +1 -0
  118. data/mod/core/set/all/states.rb +7 -6
  119. data/mod/core/set/all/type.rb +2 -0
  120. data/mod/core/set/all/utils.rb +0 -1
  121. data/mod/core/set/self/admin.rb +2 -1
  122. data/mod/core/set/self/autoname.rb +1 -1
  123. data/mod/core/set/self/mod.rb +4 -4
  124. data/mod/core/set/self/trash.rb +1 -1
  125. data/mod/core/set/type/mod.rb +18 -15
  126. data/mod/core/set_pattern/09_self.rb +4 -0
  127. data/mod/core/spec/set/all/trash_spec.rb +7 -7
  128. metadata +42 -29
@@ -11,9 +11,24 @@ namespace :card do
11
11
  task :update do
12
12
  failing_loudly "decko update" do
13
13
  ENV["NO_RAILS_CACHE"] = "true"
14
- # Benchmark.bm do |x|
15
- ["migrate:port", "migrate:schema", "migrate:recode", :eat, "migrate:transform",
16
- "mod:uninstall", "mod:install", "mod:symlink", :reset].each do |task|
14
+ run_tasks ["migrate:port", "migrate:schema", "migrate:recode",
15
+ :eat, "migrate:transform",
16
+ "mod:uninstall", "mod:install", "mod:symlink", :reset] # , true
17
+ end
18
+ end
19
+
20
+ def run_tasks tasks, with_benchmark: false
21
+ if with_benchmark
22
+ require "benchmark"
23
+ Benchmark.bm do |x|
24
+ x.report("total") do
25
+ tasks.each do |task|
26
+ x.report(task) { Rake::Task["card:#{task}"].invoke }
27
+ end
28
+ end
29
+ end
30
+ else
31
+ tasks.each do |task|
17
32
  Rake::Task["card:#{task}"].invoke
18
33
  end
19
34
  end
@@ -21,8 +36,7 @@ namespace :card do
21
36
 
22
37
  desc "Ingests card data from mod yaml"
23
38
  task eat: :environment do
24
- puts "eating"
25
- parse_options :eat do
39
+ run_with_options :eat, Cardio::Mod::Eat, "eating" do
26
40
  add_opt :m, :mod, "only eat cards in given mod"
27
41
  add_opt :n, :name, "only eat card with name (handles : for codenames)"
28
42
  add_opt :u, :user, "user to credit unless specified (default is Decko Bot)"
@@ -31,26 +45,46 @@ namespace :card do
31
45
  add_opt :e, :env, "environment (test, production, etc)"
32
46
  flag_opt :v, :verbose, "output progress info and error backtraces"
33
47
  end
48
+ end
34
49
 
35
- adjust_environment options, :eat do
36
- rake_result(:eat) { Cardio::Mod::Eat.new(**options).up }
37
- end
50
+ def args_without_env_arg
51
+ env_index = ARGV.find_index { |entry| %w[-e --env].include?(entry) }
52
+ args =
53
+ if env_index
54
+ ARGV[1..].select.with_index do |_, index|
55
+ (index != env_index - 1) && (index != env_index)
56
+ end
57
+ else
58
+ ARGV[1..]
59
+ end
60
+ args&.join " "
38
61
  end
39
62
 
40
- def adjust_environment options, task
63
+ def adjust_environment options, args_without_env, task, task_message
41
64
  if (env = options.delete(:env))
42
- task_options = options.map { |k, v| "--#{k}=#{v}" }.join(" ")
43
- system "env RAILS_ENV=#{env} bundle exec rake card:#{task} #{task_options}"
65
+ command = "env RAILS_ENV=#{env} bundle exec rake card:#{task} #{args_without_env}"
66
+ puts command.yellow
67
+ success = system command
68
+ exit success # to avoid that rake tries to run the arguments as rake tasks
44
69
  else
70
+ puts task_message
45
71
  yield
46
72
  end
47
73
  end
48
74
 
75
+ def run_with_options task_name, task_class, start_message, &block
76
+ args_without_env = args_without_env_arg
77
+ parse_options task_name, &block
78
+ adjust_environment options, args_without_env, task_name, start_message do
79
+ rake_result(task_name) { task_class.new(**options).run }
80
+ end
81
+ end
82
+
49
83
  desc "Exports card data to mod yaml"
50
84
  task sow: :environment do
51
- puts "sowing"
52
- parse_options :sow do
85
+ run_with_options :sow, Cardio::Mod::Sow, "sowing" do
53
86
  add_opt :n, :name, "export card with name/mark (handles : and ~ prefixes)"
87
+ add_opt :r, :remote, "export card from remote deck (with -n)"
54
88
  flag_opt :i, :items, "also export card items (with -n)"
55
89
  flag_opt :o, :only_items, "only export card items (with -n)", items: :only
56
90
  add_opt :c, :cql, "export cards found by CQL (in JSON format)"
@@ -60,9 +94,6 @@ namespace :card do
60
94
  add_opt :t, :field_tags, "comma-separated list of field tag marks"
61
95
  add_opt :e, :env, "environment (test, production, etc)"
62
96
  end
63
- adjust_environment options, :sow do
64
- rake_result(:sow) { Cardio::Mod::Sow.new(**options).out }
65
- end
66
97
  end
67
98
 
68
99
  desc "Clears both cache and tmpfiles"
@@ -1,4 +1,3 @@
1
-
2
1
  basket[:tasks] = {}
3
2
  basket[:config_title] = {
4
3
  basic: "Basic configuration",
@@ -59,7 +58,7 @@ def all_admin_configs_of_category category
59
58
  end
60
59
 
61
60
  def config_codenames_grouped_by_title configs
62
- configs&.group_by { |c| c.title }&.map do |title, grouped_configs|
61
+ configs&.group_by(&:title)&.map do |title, grouped_configs|
63
62
  [title, grouped_configs.map { |config| config.codename.to_sym }]
64
63
  end
65
64
  end
@@ -18,6 +18,7 @@ end
18
18
 
19
19
  protected
20
20
 
21
+ # extends Card Class
21
22
  module ClassMethods
22
23
  def assign_or_newish name, attributes, fetch_opts={}
23
24
  if (known_card = Card.fetch(name, fetch_opts))
@@ -47,10 +48,10 @@ def prepare_assignment_args args
47
48
  args
48
49
  end
49
50
 
50
- def assign_with_set_modules args
51
+ def assign_with_set_modules args, &block
51
52
  return yield unless args[:name] || args[:type_id]
52
53
 
53
- refresh_set_modules { yield }
54
+ refresh_set_modules(&block)
54
55
  end
55
56
 
56
57
  def assign_with_subcards args
@@ -1,6 +1,7 @@
1
1
  event :validate_codename, :validate, on: :update, changed: :codename do
2
2
  validate_codename_permission
3
3
  validate_codename_uniqueness
4
+ validate_codename_simplicity
4
5
  end
5
6
 
6
7
  event :reset_codename_cache, :integrate, changed: :codename do
@@ -30,3 +31,9 @@ def validate_codename_uniqueness
30
31
 
31
32
  errors.add :codename, t(:core_error_code_in_use, codename: codename)
32
33
  end
34
+
35
+ def validate_codename_simplicity
36
+ return if name.simple?
37
+
38
+ errors.add :codename, t(:core_codename_must_be_simple)
39
+ end
@@ -10,9 +10,9 @@ end
10
10
  private
11
11
 
12
12
  def inspect_tags
13
- %w[trash new frozen readonly virtual set_mods_loaded].map do |tag|
14
- tag if send "#{tag}?"
15
- end.compact
13
+ %w[trash new frozen readonly virtual set_mods_loaded].select do |tag|
14
+ send "#{tag}?"
15
+ end
16
16
  end
17
17
 
18
18
  def debug_type
@@ -1,5 +1,6 @@
1
1
  JUNK_INIT_ARGS = %i[missing skip_virtual id].freeze
2
2
 
3
+ # extends Card Class
3
4
  module ClassMethods
4
5
  def new args={}, _options={}
5
6
  with_normalized_new_args args do |normalized_args|
@@ -13,6 +13,7 @@
13
13
  # - *known* cards are either _real_ or _virtual_
14
14
  # - *new* (or *unreal*) cards are either _unknown_ or _virtual_
15
15
 
16
+ # extends Card Class
16
17
  module ClassMethods
17
18
  def real? mark
18
19
  quick_fetch(mark).present?
@@ -28,10 +29,9 @@ end
28
29
  # @return [Symbol] :real, :virtual, or :unknown
29
30
  def state anti_fishing=true
30
31
  case
31
- when !known? then :unknown
32
- when anti_fishing && !ok?(:read) then :unknown
33
- when real? then :real
34
- when virtual? then :virtual
32
+ when !known? || (anti_fishing && !ok?(:read)) then :unknown
33
+ when real? then :real
34
+ when virtual? then :virtual
35
35
  else :wtf
36
36
  end
37
37
  end
@@ -68,8 +68,9 @@ end
68
68
 
69
69
  # @return [True/False]
70
70
  def new?
71
- new_record? || # not yet in db (from ActiveRecord)
72
- !@from_trash.nil? # in process of restoration from trash
71
+ (new_record? || # not yet in db (from ActiveRecord) or
72
+ !@from_trash.nil?) && # in process of restoration from trash, but
73
+ !trash? # not in trash
73
74
  end
74
75
  alias_method :new_card?, :new?
75
76
  alias_method :unreal?, :new?
@@ -1,3 +1,4 @@
1
+ # extends Card Class
1
2
  module ClassMethods
2
3
  def default_type_id
3
4
  @default_type_id ||= Card.fetch_type_id %i[all default]
@@ -66,6 +67,7 @@ end
66
67
 
67
68
  def type_id_from_code
68
69
  return if simple?
70
+
69
71
  each_type_assigning_module_key do |module_key|
70
72
  type_id = Card::Set::Type.assignment[module_key]&.card_id
71
73
  return type_id if type_id
@@ -1,4 +1,3 @@
1
-
2
1
  def mod_path modname
3
2
  Cardio::Mod.dirs.path modname
4
3
  end
@@ -23,6 +23,7 @@ end
23
23
 
24
24
  event :admin_tasks, :initialize, on: :update do
25
25
  return unless (task = Env.params[:task]&.to_sym) && (task_config = basket[:tasks][task])
26
+
26
27
  raise Card::Error::PermissionDenied, self unless Auth.always_ok?
27
28
 
28
29
  # when :repair_references then Card::Reference.repair_all
@@ -46,7 +47,7 @@ end
46
47
 
47
48
  def not_allowed task
48
49
  raise Card::Error::PermissionDenied,
49
- "The admin task '#{task}' is disabled for security reasons.<br>"\
50
+ "The admin task '#{task}' is disabled for security reasons.<br>" \
50
51
  "You can enable it with the config option 'allow_irreversible_admin_tasks'"
51
52
  end
52
53
 
@@ -1,3 +1,3 @@
1
1
  setting_opts group: :templating, position: 4,
2
- help_text: "Autogenerate name for new cards by incrementing this value. "\
2
+ help_text: "Autogenerate name for new cards by incrementing this value. " \
3
3
  "[[http://decko.org/autonaming|more]]"
@@ -1,13 +1,13 @@
1
1
  include_set Abstract::List
2
2
 
3
- def item_codenames
3
+ def item_codes
4
4
  Cardio.mods.map do |mod|
5
5
  "#{mod}_mod"
6
6
  end
7
7
  end
8
8
 
9
9
  def content
10
- item_codenames.map(&:cardname).compact.to_pointer_content
10
+ item_codes.map(&:cardname).compact.to_pointer_content
11
11
  end
12
12
 
13
13
  format :html do
@@ -18,7 +18,7 @@ format :html do
18
18
  card.all_admin_configs_grouped_by(:category, :mod)[view_name.to_s]
19
19
  .map do |(mod, configs)|
20
20
  list_section(mod.name, configs.map { |c| c.codename.to_sym })
21
- end.join("<br\>")
21
+ end.join("<br/>")
22
22
  ]
23
23
  end
24
24
  end
@@ -33,7 +33,7 @@ format :html do
33
33
  list_section cat, configs.map(&:codename)
34
34
  end)
35
35
  ]
36
- end.join("<br\>")
36
+ end.join("<br/>")
37
37
  ]
38
38
  end
39
39
  end
@@ -37,7 +37,7 @@ format :html do
37
37
  btn_type: :default,
38
38
  path: { mark: :admin, action: :update, task: :empty_trash,
39
39
  success: { mark: "~#{card.id}" } },
40
- "data-confirm" => "Are you sure you want to delete "\
40
+ "data-confirm" => "Are you sure you want to delete " \
41
41
  "all cards in the trash?")
42
42
  )
43
43
  end
@@ -53,17 +53,20 @@ format :html do
53
53
  view :styles do
54
54
  style = card.fetch :style
55
55
  return unless style
56
+
56
57
  section "Styles", nest(style, view: :core)
57
58
  end
58
59
 
59
60
  view :scripts do
60
61
  style = card.fetch :script
61
62
  return unless style
63
+
62
64
  section "Scripts", nest(style, view: :core)
63
65
  end
64
66
 
65
67
  view :gem_info do
66
68
  return unless card.mod&.spec
69
+
67
70
  properties =
68
71
  %w[name summary version authors description email homepage].map do |property|
69
72
  "#{property}: #{card.mod.spec.send(property)}"
@@ -113,7 +116,7 @@ def scripts?
113
116
  end
114
117
 
115
118
  def depends_on?
116
- mod&.spec&.dependencies.present?
119
+ depends_on.present?
117
120
  end
118
121
 
119
122
  def description?
@@ -125,10 +128,7 @@ def views?
125
128
  end
126
129
 
127
130
  def depends_on
128
- mod&.spec&.dependencies
129
- &.map { |dep| dep.name }
130
- &.select { |name| name.starts_with? "card-mod" }
131
- &.map { |name| "mod_#{name[8..-1]}" }
131
+ @depends_on ||= card_mods { mod&.spec&.dependencies }
132
132
  end
133
133
 
134
134
  def tasks
@@ -138,9 +138,7 @@ end
138
138
  def settings
139
139
  return unless admin_config
140
140
 
141
- admin_config["settings"]&.map do |setting|
142
- setting.to_sym
143
- end
141
+ admin_config["settings"]&.map(&:to_sym)
144
142
  end
145
143
 
146
144
  def configurations
@@ -162,12 +160,9 @@ def views
162
160
  end
163
161
 
164
162
  def description
165
- default = if mod&.spec&.description.present?
166
- mod&.spec&.description
167
- else
168
- mod&.spec&.summary
169
- end
170
- t("#{modname}_mod_description", default: default)
163
+ spec = mod&.spec
164
+ default = spec&.description.present? ? spec&.description : spec&.summary
165
+ t "#{modname}_mod_description", default: default
171
166
  end
172
167
 
173
168
  def modname
@@ -205,8 +200,10 @@ end
205
200
 
206
201
  def load_admin_config
207
202
  return unless admin_config_exists?
203
+
208
204
  admin_config = YAML.load_file admin_config_path
209
205
  return {} unless admin_config # blank manifest
206
+
210
207
  # validate_manifest manifest
211
208
  admin_config
212
209
  end
@@ -222,6 +219,12 @@ end
222
219
 
223
220
  private
224
221
 
222
+ def card_mods
223
+ yield&.map(&:name)
224
+ &.select { |name| name.starts_with? "card-mod" }
225
+ &.map { |name| "mod_#{name[8..]}" }
226
+ end
227
+
225
228
  def read_admin_yml
226
- YAML.safe_load File.read(filename), [Symbol] if File.exist? filename
229
+ YAML.safe_load_file filename, permitted_classes: [Symbol] if File.exist? filename
227
230
  end
@@ -21,3 +21,7 @@ end
21
21
  def anchor_id card
22
22
  card.id
23
23
  end
24
+
25
+ def anchor_parts_count anchor_name=nil
26
+ anchor_name&.part_names&.size || 1
27
+ end
@@ -12,7 +12,7 @@ RSpec.describe Card::Set::All::Trash do
12
12
  it "deletes account of user", as_bot: true do
13
13
  expect(Card["Sample User", :account]).to be_a Card
14
14
  Card["Sample User"].delete!
15
- expect(Card["Sample User", :account]).not_to be
15
+ expect(Card["Sample User", :account]).to be_nil
16
16
  end
17
17
 
18
18
  describe "event: validate_delete" do
@@ -98,15 +98,15 @@ RSpec.describe Card::Set::All::Trash do
98
98
  create! "#{book1}+value"
99
99
  create! "#{book2}+value"
100
100
 
101
- expect(Card["CA"]).to be
101
+ expect(Card["CA"]).to be_truthy
102
102
 
103
103
  Card["CA"].delete!
104
104
 
105
- expect(Card["CA"]).not_to be
106
- expect(Card[book1]).not_to be
107
- expect(Card["#{book1}+value"]).not_to be
108
- expect(Card[book2]).not_to be
109
- expect(Card["#{book2}+value"]).not_to be
105
+ expect(Card["CA"]).to be_nil
106
+ expect(Card[book1]).to be_nil
107
+ expect(Card["#{book1}+value"]).to be_nil
108
+ expect(Card[book2]).to be_nil
109
+ expect(Card["#{book2}+value"]).to be_nil
110
110
  end
111
111
 
112
112
  it "handles compound cards", as_bot: true do
metadata CHANGED
@@ -1,16 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: card
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.108.1
4
+ version: 1.109.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ethan McCutchen
8
8
  - Philipp Kühl
9
9
  - Gerry Gleason
10
- autorequire:
11
10
  bindir: bin
12
11
  cert_chain: []
13
- date: 2024-11-22 00:00:00.000000000 Z
12
+ date: 1980-01-02 00:00:00.000000000 Z
14
13
  dependencies:
15
14
  - !ruby/object:Gem::Dependency
16
15
  name: cardname
@@ -18,14 +17,14 @@ dependencies:
18
17
  requirements:
19
18
  - - '='
20
19
  - !ruby/object:Gem::Version
21
- version: 0.18.1
20
+ version: 0.19.0
22
21
  type: :runtime
23
22
  prerelease: false
24
23
  version_requirements: !ruby/object:Gem::Requirement
25
24
  requirements:
26
25
  - - '='
27
26
  - !ruby/object:Gem::Version
28
- version: 0.18.1
27
+ version: 0.19.0
29
28
  - !ruby/object:Gem::Dependency
30
29
  name: rake
31
30
  requirement: !ruby/object:Gem::Requirement
@@ -60,14 +59,14 @@ dependencies:
60
59
  requirements:
61
60
  - - "~>"
62
61
  - !ruby/object:Gem::Version
63
- version: '0.8'
62
+ version: '1.1'
64
63
  type: :runtime
65
64
  prerelease: false
66
65
  version_requirements: !ruby/object:Gem::Requirement
67
66
  requirements:
68
67
  - - "~>"
69
68
  - !ruby/object:Gem::Version
70
- version: '0.8'
69
+ version: '1.1'
71
70
  - !ruby/object:Gem::Dependency
72
71
  name: timecop
73
72
  requirement: !ruby/object:Gem::Requirement
@@ -86,16 +85,30 @@ dependencies:
86
85
  name: zeitwerk
87
86
  requirement: !ruby/object:Gem::Requirement
88
87
  requirements:
89
- - - "!="
88
+ - - "~>"
90
89
  - !ruby/object:Gem::Version
91
- version: 2.5.0
90
+ version: 2.7.2
92
91
  type: :runtime
93
92
  prerelease: false
94
93
  version_requirements: !ruby/object:Gem::Requirement
95
94
  requirements:
96
- - - "!="
95
+ - - "~>"
96
+ - !ruby/object:Gem::Version
97
+ version: 2.7.2
98
+ - !ruby/object:Gem::Dependency
99
+ name: csv
100
+ requirement: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - "~>"
103
+ - !ruby/object:Gem::Version
104
+ version: '3.3'
105
+ type: :runtime
106
+ prerelease: false
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - "~>"
97
110
  - !ruby/object:Gem::Version
98
- version: 2.5.0
111
+ version: '3.3'
99
112
  - !ruby/object:Gem::Dependency
100
113
  name: haml
101
114
  requirement: !ruby/object:Gem::Requirement
@@ -270,98 +283,98 @@ dependencies:
270
283
  requirements:
271
284
  - - "~>"
272
285
  - !ruby/object:Gem::Version
273
- version: '7.1'
286
+ version: '7.2'
274
287
  type: :runtime
275
288
  prerelease: false
276
289
  version_requirements: !ruby/object:Gem::Requirement
277
290
  requirements:
278
291
  - - "~>"
279
292
  - !ruby/object:Gem::Version
280
- version: '7.1'
293
+ version: '7.2'
281
294
  - !ruby/object:Gem::Dependency
282
295
  name: activestorage
283
296
  requirement: !ruby/object:Gem::Requirement
284
297
  requirements:
285
298
  - - "~>"
286
299
  - !ruby/object:Gem::Version
287
- version: '7.1'
300
+ version: '7.2'
288
301
  type: :runtime
289
302
  prerelease: false
290
303
  version_requirements: !ruby/object:Gem::Requirement
291
304
  requirements:
292
305
  - - "~>"
293
306
  - !ruby/object:Gem::Version
294
- version: '7.1'
307
+ version: '7.2'
295
308
  - !ruby/object:Gem::Dependency
296
309
  name: actionview
297
310
  requirement: !ruby/object:Gem::Requirement
298
311
  requirements:
299
312
  - - "~>"
300
313
  - !ruby/object:Gem::Version
301
- version: '7.1'
314
+ version: '7.2'
302
315
  type: :runtime
303
316
  prerelease: false
304
317
  version_requirements: !ruby/object:Gem::Requirement
305
318
  requirements:
306
319
  - - "~>"
307
320
  - !ruby/object:Gem::Version
308
- version: '7.1'
321
+ version: '7.2'
309
322
  - !ruby/object:Gem::Dependency
310
323
  name: actionmailer
311
324
  requirement: !ruby/object:Gem::Requirement
312
325
  requirements:
313
326
  - - "~>"
314
327
  - !ruby/object:Gem::Version
315
- version: '7.1'
328
+ version: '7.2'
316
329
  type: :runtime
317
330
  prerelease: false
318
331
  version_requirements: !ruby/object:Gem::Requirement
319
332
  requirements:
320
333
  - - "~>"
321
334
  - !ruby/object:Gem::Version
322
- version: '7.1'
335
+ version: '7.2'
323
336
  - !ruby/object:Gem::Dependency
324
337
  name: activejob
325
338
  requirement: !ruby/object:Gem::Requirement
326
339
  requirements:
327
340
  - - "~>"
328
341
  - !ruby/object:Gem::Version
329
- version: '7.1'
342
+ version: '7.2'
330
343
  type: :runtime
331
344
  prerelease: false
332
345
  version_requirements: !ruby/object:Gem::Requirement
333
346
  requirements:
334
347
  - - "~>"
335
348
  - !ruby/object:Gem::Version
336
- version: '7.1'
349
+ version: '7.2'
337
350
  - !ruby/object:Gem::Dependency
338
351
  name: actionmailbox
339
352
  requirement: !ruby/object:Gem::Requirement
340
353
  requirements:
341
354
  - - "~>"
342
355
  - !ruby/object:Gem::Version
343
- version: '7.1'
356
+ version: '7.2'
344
357
  type: :runtime
345
358
  prerelease: false
346
359
  version_requirements: !ruby/object:Gem::Requirement
347
360
  requirements:
348
361
  - - "~>"
349
362
  - !ruby/object:Gem::Version
350
- version: '7.1'
363
+ version: '7.2'
351
364
  - !ruby/object:Gem::Dependency
352
365
  name: railties
353
366
  requirement: !ruby/object:Gem::Requirement
354
367
  requirements:
355
368
  - - "~>"
356
369
  - !ruby/object:Gem::Version
357
- version: '7.1'
370
+ version: '7.2'
358
371
  type: :runtime
359
372
  prerelease: false
360
373
  version_requirements: !ruby/object:Gem::Requirement
361
374
  requirements:
362
375
  - - "~>"
363
376
  - !ruby/object:Gem::Version
364
- version: '7.1'
377
+ version: '7.2'
365
378
  description: Cards are wiki-inspired data atoms.Card "Sharks" use links, nests, types,
366
379
  patterned names, queries, views, events, and rules to create rich structures.
367
380
  email:
@@ -621,6 +634,7 @@ files:
621
634
  - lib/cardio/mod/module_template.rb
622
635
  - lib/cardio/mod/sow.rb
623
636
  - lib/cardio/mod/sow/card_source.rb
637
+ - lib/cardio/mod/sow/remote_source.rb
624
638
  - lib/cardio/mod/sow/yaml_dump.rb
625
639
  - lib/cardio/railtie.rb
626
640
  - lib/cardio/record.rb
@@ -755,6 +769,7 @@ files:
755
769
  - mod/core/data/transform/20230502094848_repair_all_references.rb
756
770
  - mod/core/lib/admin_item.rb
757
771
  - mod/core/lib/tasks/card.rake
772
+ - mod/core/lib/tasks/card/export.rake
758
773
  - mod/core/lib/tasks/card/migrate.rake
759
774
  - mod/core/lib/tasks/card/mod.rake
760
775
  - mod/core/lib/tasks/card/seed.rake
@@ -816,7 +831,6 @@ metadata:
816
831
  bug_tracker_uri: https://github.com/decko-commons/decko/issues
817
832
  wiki_uri: https://decko.org
818
833
  documentation_url: http://docs.decko.org/
819
- post_install_message:
820
834
  rdoc_options: []
821
835
  require_paths:
822
836
  - lib
@@ -824,15 +838,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
824
838
  requirements:
825
839
  - - ">="
826
840
  - !ruby/object:Gem::Version
827
- version: '3.0'
841
+ version: '3.2'
828
842
  required_rubygems_version: !ruby/object:Gem::Requirement
829
843
  requirements:
830
844
  - - ">="
831
845
  - !ruby/object:Gem::Version
832
846
  version: '0'
833
847
  requirements: []
834
- rubygems_version: 3.5.10
835
- signing_key:
848
+ rubygems_version: 3.6.8
836
849
  specification_version: 4
837
850
  summary: a simple engine for emergent data structures
838
851
  test_files: []