iron-cms 0.17.2 → 0.18.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 (142) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +88 -4
  3. data/app/assets/builds/iron.css +255 -106
  4. data/app/assets/tailwind/iron/application.css +1 -0
  5. data/app/assets/tailwind/iron/components/file-upload.css +26 -0
  6. data/app/assets/tailwind/iron/lexxy.css +111 -87
  7. data/app/controllers/concerns/iron/schema_editing.rb +19 -0
  8. data/app/controllers/iron/api/schema/base_controller.rb +25 -0
  9. data/app/controllers/iron/api/schema/block_definitions_controller.rb +49 -0
  10. data/app/controllers/iron/api/schema/content_types_controller.rb +64 -0
  11. data/app/controllers/iron/api/schema/field_definitions_controller.rb +88 -0
  12. data/app/controllers/iron/api/schema/locales_controller.rb +52 -0
  13. data/app/controllers/iron/application_controller.rb +1 -1
  14. data/app/controllers/iron/block_definitions_controller.rb +1 -0
  15. data/app/controllers/iron/content_types_controller.rb +1 -0
  16. data/app/controllers/iron/field_definitions_controller.rb +2 -1
  17. data/app/controllers/iron/first_runs_controller.rb +1 -1
  18. data/app/controllers/iron/locales_controller.rb +1 -0
  19. data/app/controllers/iron/sessions_controller.rb +1 -1
  20. data/app/helpers/iron/avatar_helper.rb +24 -2
  21. data/app/javascript/iron/controllers/file_upload_controller.js +38 -7
  22. data/app/models/iron/account.rb +1 -1
  23. data/app/models/iron/api/openapi_spec.rb +37 -15
  24. data/app/models/iron/block_definition/exportable.rb +1 -1
  25. data/app/models/iron/block_definition.rb +3 -1
  26. data/app/models/iron/content.rb +176 -0
  27. data/app/models/iron/content_type/exportable.rb +3 -1
  28. data/app/models/iron/content_type/importable.rb +1 -1
  29. data/app/models/iron/content_type.rb +6 -1
  30. data/app/models/iron/entry/content_assignable.rb +10 -2
  31. data/app/models/iron/exporter.rb +1 -26
  32. data/app/models/iron/field/length_constrained.rb +17 -0
  33. data/app/models/iron/field/validatable.rb +16 -0
  34. data/app/models/iron/field.rb +1 -1
  35. data/app/models/iron/field_definition/exportable.rb +3 -4
  36. data/app/models/iron/field_definition/importable.rb +16 -9
  37. data/app/models/iron/field_definition/ranked.rb +1 -1
  38. data/app/models/iron/field_definition/searchable.rb +2 -0
  39. data/app/models/iron/field_definition/validatable.rb +40 -0
  40. data/app/models/iron/field_definition/validations.rb +175 -0
  41. data/app/models/iron/field_definition.rb +1 -1
  42. data/app/models/iron/field_definitions/date.rb +2 -0
  43. data/app/models/iron/field_definitions/file.rb +3 -11
  44. data/app/models/iron/field_definitions/number.rb +2 -0
  45. data/app/models/iron/field_definitions/reference.rb +2 -0
  46. data/app/models/iron/field_definitions/rich_text_area.rb +1 -0
  47. data/app/models/iron/field_definitions/text_area.rb +2 -0
  48. data/app/models/iron/field_definitions/text_field.rb +1 -9
  49. data/app/models/iron/fields/block.rb +5 -1
  50. data/app/models/iron/fields/block_list.rb +5 -1
  51. data/app/models/iron/fields/date.rb +19 -2
  52. data/app/models/iron/fields/file.rb +5 -3
  53. data/app/models/iron/fields/number.rb +28 -1
  54. data/app/models/iron/fields/reference.rb +2 -0
  55. data/app/models/iron/fields/rich_text_area.rb +2 -0
  56. data/app/models/iron/fields/text_area.rb +4 -0
  57. data/app/models/iron/fields/text_field.rb +9 -5
  58. data/app/models/iron/importer.rb +1 -54
  59. data/app/models/iron/locale.rb +2 -0
  60. data/app/models/iron/schema/auto_dumpable.rb +26 -0
  61. data/app/models/iron/schema/diff.rb +194 -0
  62. data/app/models/iron/schema/validation.rb +214 -0
  63. data/app/models/iron/schema.rb +282 -0
  64. data/app/models/iron/seed.rb +5 -3
  65. data/app/models/iron/system.rb +7 -0
  66. data/app/models/iron/user/deactivatable.rb +5 -0
  67. data/app/models/iron/user.rb +18 -1
  68. data/app/views/iron/api/fields/_rich_text_area.json.jbuilder +2 -2
  69. data/app/views/iron/api/schema/block_definitions/_block_definition.json.jbuilder +4 -0
  70. data/app/views/iron/api/schema/block_definitions/index.json.jbuilder +1 -0
  71. data/app/views/iron/api/schema/block_definitions/show.json.jbuilder +1 -0
  72. data/app/views/iron/api/schema/content_types/_content_type.json.jbuilder +5 -0
  73. data/app/views/iron/api/schema/content_types/index.json.jbuilder +1 -0
  74. data/app/views/iron/api/schema/content_types/show.json.jbuilder +1 -0
  75. data/app/views/iron/api/schema/field_definitions/_field_definition.json.jbuilder +7 -0
  76. data/app/views/iron/api/schema/field_definitions/show.json.jbuilder +1 -0
  77. data/app/views/iron/api/schema/locales/_locale.json.jbuilder +4 -0
  78. data/app/views/iron/api/schema/locales/index.json.jbuilder +1 -0
  79. data/app/views/iron/api/schema/locales/show.json.jbuilder +1 -0
  80. data/app/views/iron/block_definitions/_empty_state.html.erb +5 -3
  81. data/app/views/iron/block_definitions/_form.html.erb +3 -1
  82. data/app/views/iron/block_definitions/edit.html.erb +19 -17
  83. data/app/views/iron/block_definitions/index.html.erb +7 -3
  84. data/app/views/iron/block_definitions/show.html.erb +14 -8
  85. data/app/views/iron/content_types/_content_type.html.erb +1 -1
  86. data/app/views/iron/content_types/_empty_state.html.erb +5 -3
  87. data/app/views/iron/content_types/_form.html.erb +12 -8
  88. data/app/views/iron/content_types/edit.html.erb +19 -17
  89. data/app/views/iron/content_types/index.html.erb +7 -3
  90. data/app/views/iron/content_types/show.html.erb +14 -8
  91. data/app/views/iron/entries/_empty_state.html.erb +1 -1
  92. data/app/views/iron/entries/edit.html.erb +1 -1
  93. data/app/views/iron/entries/entry.html.erb +1 -1
  94. data/app/views/iron/entries/fields/_block.html.erb +4 -0
  95. data/app/views/iron/entries/fields/_block_list.html.erb +2 -0
  96. data/app/views/iron/entries/fields/_boolean.html.erb +1 -0
  97. data/app/views/iron/entries/fields/_date.html.erb +3 -2
  98. data/app/views/iron/entries/fields/_field_errors.html.erb +7 -0
  99. data/app/views/iron/entries/fields/_field_label.html.erb +8 -0
  100. data/app/views/iron/entries/fields/_file.html.erb +11 -19
  101. data/app/views/iron/entries/fields/_number.html.erb +6 -2
  102. data/app/views/iron/entries/fields/_reference.html.erb +2 -1
  103. data/app/views/iron/entries/fields/_reference_list.html.erb +2 -0
  104. data/app/views/iron/entries/fields/_rich_text_area.html.erb +2 -1
  105. data/app/views/iron/entries/fields/_text_area.html.erb +6 -2
  106. data/app/views/iron/entries/fields/_text_field.html.erb +5 -12
  107. data/app/views/iron/field_definitions/_field_definition.html.erb +51 -29
  108. data/app/views/iron/field_definitions/date/_form.html.erb +5 -1
  109. data/app/views/iron/field_definitions/edit.html.erb +10 -8
  110. data/app/views/iron/field_definitions/file/_form.html.erb +6 -0
  111. data/app/views/iron/field_definitions/new.html.erb +5 -3
  112. data/app/views/iron/field_definitions/number/_form.html.erb +23 -1
  113. data/app/views/iron/field_definitions/reference/_form.html.erb +5 -0
  114. data/app/views/iron/field_definitions/rich_text_area/_form.html.erb +5 -0
  115. data/app/views/iron/field_definitions/text_area/_form.html.erb +23 -0
  116. data/app/views/iron/field_definitions/text_field/_form.html.erb +20 -1
  117. data/app/views/iron/home/_content_types.html.erb +1 -1
  118. data/app/views/iron/locales/_form.html.erb +5 -3
  119. data/app/views/iron/locales/edit.html.erb +1 -1
  120. data/app/views/iron/locales/index.html.erb +12 -6
  121. data/app/views/iron/shared/_schema_lock_badge.html.erb +19 -0
  122. data/config/locales/en.yml +13 -1
  123. data/config/locales/it.yml +18 -1
  124. data/config/routes.rb +11 -0
  125. data/db/migrate/20260612131538_create_iron_systems.rb +9 -0
  126. data/exe/iron +5 -0
  127. data/lib/generators/iron/agents/agents_generator.rb +52 -0
  128. data/lib/generators/iron/agents/templates/AGENTS.md +24 -0
  129. data/lib/generators/iron/agents/templates/SKILL.md +423 -0
  130. data/lib/generators/iron/install/install_generator.rb +118 -0
  131. data/lib/generators/iron/install/templates/iron_release.rake +5 -0
  132. data/lib/generators/iron/install/templates/schema.json +12 -0
  133. data/lib/generators/iron/install/templates/seeds.rb +13 -0
  134. data/lib/generators/iron/pages/pages_generator.rb +5 -0
  135. data/lib/generators/iron/pages/templates/pages_controller.rb +1 -1
  136. data/lib/generators/iron/pages/templates/show.html.erb +1 -1
  137. data/lib/install/template.rb +9 -0
  138. data/lib/iron/cli.rb +43 -0
  139. data/lib/iron/version.rb +1 -1
  140. data/lib/tasks/iron_content.rake +82 -0
  141. data/lib/tasks/iron_schema.rake +45 -0
  142. metadata +62 -3
@@ -0,0 +1,82 @@
1
+ module Iron
2
+ module ContentCommands
3
+ module_function
4
+
5
+ def run
6
+ puts JSON.pretty_generate(yield)
7
+ rescue Iron::Content::InvalidContent => e
8
+ abort JSON.pretty_generate({ errors: e.errors })
9
+ rescue Iron::Content::Error => e
10
+ abort e.message
11
+ rescue ActiveRecord::RecordNotFound => e
12
+ abort not_found_message(e)
13
+ end
14
+
15
+ def payload
16
+ raw = ENV["PAYLOAD"] || (ENV["FILE"] && File.read(ENV["FILE"])) || ($stdin.read unless $stdin.tty?)
17
+ raw.present? ? JSON.parse(raw) : {}
18
+ rescue JSON::ParserError => e
19
+ abort "Invalid JSON payload: #{e.message}"
20
+ end
21
+
22
+ def not_found_message(error)
23
+ case error.model
24
+ when "Iron::ContentType"
25
+ "Unknown content type #{ENV["HANDLE"].inspect}. Known handles: #{Iron::ContentType.pluck(:handle).join(", ")}"
26
+ when "Iron::Locale"
27
+ "Unknown locale #{ENV["LOCALE"].inspect}. Known locales: #{Iron::Locale.pluck(:code).join(", ")}"
28
+ else
29
+ error.message
30
+ end
31
+ end
32
+ end
33
+ end
34
+
35
+ namespace :iron do
36
+ namespace :content do
37
+ desc "List all entries of a content type (HANDLE=required, LOCALE=optional)"
38
+ task list: :environment do
39
+ handle = ENV.fetch("HANDLE") { abort "HANDLE is required. Usage: bin/rails iron:content:list HANDLE=blog" }
40
+
41
+ Iron::ContentCommands.run do
42
+ Iron::Content.list(handle, locale: ENV["LOCALE"])
43
+ end
44
+ end
45
+
46
+ desc "Get an entry (HANDLE=required; ID= or ROUTE= for collections, neither for singles; LOCALE=optional)"
47
+ task get: :environment do
48
+ handle = ENV.fetch("HANDLE") { abort "HANDLE is required. Usage: bin/rails iron:content:get HANDLE=blog ID=1" }
49
+
50
+ Iron::ContentCommands.run do
51
+ Iron::Content.get(handle, id: ENV["ID"], route: ENV["ROUTE"], locale: ENV["LOCALE"])
52
+ end
53
+ end
54
+
55
+ desc "Create an entry (HANDLE=required; content JSON via PAYLOAD=, FILE=, or stdin; ROUTE= and LOCALE= optional)"
56
+ task create: :environment do
57
+ handle = ENV.fetch("HANDLE") { abort "HANDLE is required. Usage: bin/rails iron:content:create HANDLE=blog PAYLOAD='{\"title\":\"Hello\"}'" }
58
+
59
+ Iron::ContentCommands.run do
60
+ Iron::Content.create(handle, Iron::ContentCommands.payload, route: ENV["ROUTE"], locale: ENV["LOCALE"])
61
+ end
62
+ end
63
+
64
+ desc "Update an entry (HANDLE=required; ID= or ROUTE= for collections, neither upserts singles; content JSON via PAYLOAD=, FILE=, or stdin; LOCALE=optional)"
65
+ task update: :environment do
66
+ handle = ENV.fetch("HANDLE") { abort "HANDLE is required. Usage: bin/rails iron:content:update HANDLE=blog ID=1 PAYLOAD='{\"title\":\"Hello\"}'" }
67
+
68
+ Iron::ContentCommands.run do
69
+ Iron::Content.update(handle, Iron::ContentCommands.payload, id: ENV["ID"], route: ENV["ROUTE"], locale: ENV["LOCALE"])
70
+ end
71
+ end
72
+
73
+ desc "Delete an entry (HANDLE=required; ID= or ROUTE=)"
74
+ task delete: :environment do
75
+ handle = ENV.fetch("HANDLE") { abort "HANDLE is required. Usage: bin/rails iron:content:delete HANDLE=blog ID=1" }
76
+
77
+ Iron::ContentCommands.run do
78
+ Iron::Content.delete(handle, id: ENV["ID"], route: ENV["ROUTE"])
79
+ end
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,45 @@
1
+ namespace :iron do
2
+ namespace :schema do
3
+ desc "Dump the CMS schema to db/cms/schema.json (SCHEMA_PATH=optional output path, FORMAT=json for machine output)"
4
+ task dump: :environment do
5
+ path = Iron::Schema.dump(ENV["SCHEMA_PATH"])
6
+
7
+ if ENV["FORMAT"] == "json"
8
+ puts JSON.pretty_generate(path: path.to_s)
9
+ else
10
+ puts "Schema dumped to #{path}"
11
+ end
12
+ end
13
+
14
+ desc "Show drift between db/cms/schema.json and the database (SCHEMA_PATH=optional input path, FORMAT=json for machine output)"
15
+ task diff: :environment do
16
+ diff = Iron::Schema.diff(ENV["SCHEMA_PATH"])
17
+
18
+ if ENV["FORMAT"] == "json"
19
+ puts JSON.pretty_generate(diff.to_h)
20
+ else
21
+ puts diff
22
+ end
23
+ rescue Iron::Schema::FileMissing, Iron::Schema::InvalidSchema => error
24
+ abort error.message
25
+ end
26
+
27
+ desc "Apply db/cms/schema.json to the database (SCHEMA_PATH=optional input path, PRUNE=1 destroys objects missing from the file, FORMAT=json for machine output)"
28
+ task apply: :environment do
29
+ prune = ENV["PRUNE"] == "1"
30
+ diff = Iron::Schema.apply(ENV["SCHEMA_PATH"], prune: prune)
31
+
32
+ if ENV["FORMAT"] == "json"
33
+ puts JSON.pretty_generate(diff.to_h)
34
+ elsif diff.empty?
35
+ puts "Schema is in sync."
36
+ else
37
+ applied = diff.size(include_removals: prune)
38
+ puts "Applied #{applied} #{"change".pluralize(applied)}:"
39
+ puts diff
40
+ end
41
+ rescue Iron::Schema::FileMissing, Iron::Schema::InvalidSchema => error
42
+ abort error.message
43
+ end
44
+ end
45
+ end
metadata CHANGED
@@ -1,11 +1,11 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: iron-cms
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.17.2
4
+ version: 0.18.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Massimo De Marchi
8
- bindir: bin
8
+ bindir: exe
9
9
  cert_chain: []
10
10
  date: 1980-01-02 00:00:00.000000000 Z
11
11
  dependencies:
@@ -23,6 +23,20 @@ dependencies:
23
23
  - - "~>"
24
24
  - !ruby/object:Gem::Version
25
25
  version: '8.0'
26
+ - !ruby/object:Gem::Dependency
27
+ name: thor
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: '1.0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '1.0'
26
40
  - !ruby/object:Gem::Dependency
27
41
  name: activestorage
28
42
  requirement: !ruby/object:Gem::Requirement
@@ -268,7 +282,8 @@ dependencies:
268
282
  description: A Rails engine for managing and publishing content with a flexible schema.
269
283
  email:
270
284
  - massimo@inkofpixel.com
271
- executables: []
285
+ executables:
286
+ - iron
272
287
  extensions: []
273
288
  extra_rdoc_files: []
274
289
  files:
@@ -290,6 +305,7 @@ files:
290
305
  - app/assets/tailwind/iron/components/field-definition.css
291
306
  - app/assets/tailwind/iron/components/fieldset.css
292
307
  - app/assets/tailwind/iron/components/file-scope-picker.css
308
+ - app/assets/tailwind/iron/components/file-upload.css
293
309
  - app/assets/tailwind/iron/components/form.css
294
310
  - app/assets/tailwind/iron/components/icon-picker.css
295
311
  - app/assets/tailwind/iron/components/input.css
@@ -311,12 +327,18 @@ files:
311
327
  - app/controllers/concerns/iron/authentication.rb
312
328
  - app/controllers/concerns/iron/authorization.rb
313
329
  - app/controllers/concerns/iron/locale_aware.rb
330
+ - app/controllers/concerns/iron/schema_editing.rb
314
331
  - app/controllers/concerns/iron/web_page.rb
315
332
  - app/controllers/iron/account/exports_controller.rb
316
333
  - app/controllers/iron/account/imports_controller.rb
317
334
  - app/controllers/iron/api/base_controller.rb
318
335
  - app/controllers/iron/api/content_controller.rb
319
336
  - app/controllers/iron/api/openapi_controller.rb
337
+ - app/controllers/iron/api/schema/base_controller.rb
338
+ - app/controllers/iron/api/schema/block_definitions_controller.rb
339
+ - app/controllers/iron/api/schema/content_types_controller.rb
340
+ - app/controllers/iron/api/schema/field_definitions_controller.rb
341
+ - app/controllers/iron/api/schema/locales_controller.rb
320
342
  - app/controllers/iron/api/search_controller.rb
321
343
  - app/controllers/iron/api/uploads_controller.rb
322
344
  - app/controllers/iron/application_controller.rb
@@ -392,6 +414,7 @@ files:
392
414
  - app/models/iron/block_definition.rb
393
415
  - app/models/iron/block_definition/exportable.rb
394
416
  - app/models/iron/block_definition/importable.rb
417
+ - app/models/iron/content.rb
395
418
  - app/models/iron/content_type.rb
396
419
  - app/models/iron/content_type/exportable.rb
397
420
  - app/models/iron/content_type/field_queryable.rb
@@ -415,11 +438,15 @@ files:
415
438
  - app/models/iron/exporter.rb
416
439
  - app/models/iron/field.rb
417
440
  - app/models/iron/field/belongs_to_entry.rb
441
+ - app/models/iron/field/length_constrained.rb
442
+ - app/models/iron/field/validatable.rb
418
443
  - app/models/iron/field_definition.rb
419
444
  - app/models/iron/field_definition/exportable.rb
420
445
  - app/models/iron/field_definition/importable.rb
421
446
  - app/models/iron/field_definition/ranked.rb
422
447
  - app/models/iron/field_definition/searchable.rb
448
+ - app/models/iron/field_definition/validatable.rb
449
+ - app/models/iron/field_definition/validations.rb
423
450
  - app/models/iron/field_definitions/block.rb
424
451
  - app/models/iron/field_definitions/block_list.rb
425
452
  - app/models/iron/field_definitions/boolean.rb
@@ -451,11 +478,16 @@ files:
451
478
  - app/models/iron/person/transferable.rb
452
479
  - app/models/iron/qr_code_link.rb
453
480
  - app/models/iron/reference.rb
481
+ - app/models/iron/schema.rb
482
+ - app/models/iron/schema/auto_dumpable.rb
483
+ - app/models/iron/schema/diff.rb
484
+ - app/models/iron/schema/validation.rb
454
485
  - app/models/iron/search/query.rb
455
486
  - app/models/iron/search_record.rb
456
487
  - app/models/iron/search_record/fts.rb
457
488
  - app/models/iron/seed.rb
458
489
  - app/models/iron/session.rb
490
+ - app/models/iron/system.rb
459
491
  - app/models/iron/user.rb
460
492
  - app/models/iron/user/deactivatable.rb
461
493
  - app/models/iron/user/role.rb
@@ -481,6 +513,17 @@ files:
481
513
  - app/views/iron/api/fields/_rich_text_area.json.jbuilder
482
514
  - app/views/iron/api/fields/_text_area.json.jbuilder
483
515
  - app/views/iron/api/fields/_text_field.json.jbuilder
516
+ - app/views/iron/api/schema/block_definitions/_block_definition.json.jbuilder
517
+ - app/views/iron/api/schema/block_definitions/index.json.jbuilder
518
+ - app/views/iron/api/schema/block_definitions/show.json.jbuilder
519
+ - app/views/iron/api/schema/content_types/_content_type.json.jbuilder
520
+ - app/views/iron/api/schema/content_types/index.json.jbuilder
521
+ - app/views/iron/api/schema/content_types/show.json.jbuilder
522
+ - app/views/iron/api/schema/field_definitions/_field_definition.json.jbuilder
523
+ - app/views/iron/api/schema/field_definitions/show.json.jbuilder
524
+ - app/views/iron/api/schema/locales/_locale.json.jbuilder
525
+ - app/views/iron/api/schema/locales/index.json.jbuilder
526
+ - app/views/iron/api/schema/locales/show.json.jbuilder
484
527
  - app/views/iron/api/search/show.json.jbuilder
485
528
  - app/views/iron/block_definitions/_block_definition.html.erb
486
529
  - app/views/iron/block_definitions/_empty_state.html.erb
@@ -508,6 +551,8 @@ files:
508
551
  - app/views/iron/entries/fields/_block_list.html.erb
509
552
  - app/views/iron/entries/fields/_boolean.html.erb
510
553
  - app/views/iron/entries/fields/_date.html.erb
554
+ - app/views/iron/entries/fields/_field_errors.html.erb
555
+ - app/views/iron/entries/fields/_field_label.html.erb
511
556
  - app/views/iron/entries/fields/_file.html.erb
512
557
  - app/views/iron/entries/fields/_number.html.erb
513
558
  - app/views/iron/entries/fields/_reference.html.erb
@@ -566,6 +611,7 @@ files:
566
611
  - app/views/iron/settings/show.html.erb
567
612
  - app/views/iron/shared/_icon_picker.html.erb
568
613
  - app/views/iron/shared/_save_bar.html.erb
614
+ - app/views/iron/shared/_schema_lock_badge.html.erb
569
615
  - app/views/iron/shared/_select.html.erb
570
616
  - app/views/iron/users/_change_email_dialog.html.erb
571
617
  - app/views/iron/users/_change_language_dialog.html.erb
@@ -614,13 +660,24 @@ files:
614
660
  - db/migrate/20260215222227_add_authenticatable_to_iron_users.rb
615
661
  - db/migrate/20260215222735_remove_legacy_auth_from_iron_users.rb
616
662
  - db/migrate/20260221231832_create_iron_integrations.rb
663
+ - db/migrate/20260612131538_create_iron_systems.rb
664
+ - exe/iron
665
+ - lib/generators/iron/agents/agents_generator.rb
666
+ - lib/generators/iron/agents/templates/AGENTS.md
667
+ - lib/generators/iron/agents/templates/SKILL.md
668
+ - lib/generators/iron/install/install_generator.rb
669
+ - lib/generators/iron/install/templates/iron_release.rake
670
+ - lib/generators/iron/install/templates/schema.json
671
+ - lib/generators/iron/install/templates/seeds.rb
617
672
  - lib/generators/iron/pages/pages_generator.rb
618
673
  - lib/generators/iron/pages/templates/pages_controller.rb
619
674
  - lib/generators/iron/pages/templates/show.html.erb
620
675
  - lib/generators/iron/template/template_generator.rb
621
676
  - lib/generators/iron/template/templates/content_type.html.erb
677
+ - lib/install/template.rb
622
678
  - lib/iron-cms.rb
623
679
  - lib/iron.rb
680
+ - lib/iron/cli.rb
624
681
  - lib/iron/engine.rb
625
682
  - lib/iron/global_id/instance_scoped_locator.rb
626
683
  - lib/iron/image_analyzer.rb
@@ -633,6 +690,8 @@ files:
633
690
  - lib/iron/sdk.rb
634
691
  - lib/iron/version.rb
635
692
  - lib/puma/plugin/iron_tailwindcss.rb
693
+ - lib/tasks/iron_content.rake
694
+ - lib/tasks/iron_schema.rake
636
695
  - lib/tasks/iron_tailwindcss.rake
637
696
  - lib/tasks/iron_tasks.rake
638
697
  - vendor/javascript/@tailwindplus--elements.js