ro 4.4.0 → 5.1.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 (161) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +42 -16
  3. data/MIGRATION.md +320 -0
  4. data/README.md +31 -19
  5. data/a.yml +60 -0
  6. data/bin/ro +10 -0
  7. data/lib/ro/_lib.rb +1 -1
  8. data/lib/ro/asset.rb +48 -6
  9. data/lib/ro/collection.rb +51 -13
  10. data/lib/ro/migrator.rb +285 -0
  11. data/lib/ro/node.rb +53 -13
  12. data/lib/ro/root.rb +75 -1
  13. data/lib/ro/script/migrate.rb +204 -0
  14. data/lib/ro/script/server.rb +1 -1
  15. data/lib/ro.rb +1 -0
  16. data/public/api/ro/index-1.json +82 -148
  17. data/public/api/ro/index.json +82 -148
  18. data/public/api/ro/nerd/fastest-possible-embeddings/index.json +7 -8
  19. data/public/api/ro/nerd/ima/index.json +3 -4
  20. data/public/api/ro/nerd/index/index.json +5 -6
  21. data/public/api/ro/nerd/index-1.json +15 -18
  22. data/public/api/ro/nerd/index.json +15 -18
  23. data/public/api/ro/pages/contact/index.json +4 -5
  24. data/public/api/ro/pages/cv/index.json +3 -4
  25. data/public/api/ro/pages/disco/index.json +9 -10
  26. data/public/api/ro/pages/index/index.json +2 -3
  27. data/public/api/ro/pages/index-1.json +25 -82
  28. data/public/api/ro/pages/index.json +25 -82
  29. data/public/api/ro/pages/jess/index.json +4 -5
  30. data/public/api/ro/pages/now/index.json +3 -4
  31. data/public/api/ro/posts/almost-died-in-an-ice-cave/index.json +21 -22
  32. data/public/api/ro/posts/facebook-and-global-extremism/index.json +8 -9
  33. data/public/api/ro/posts/index-1.json +42 -48
  34. data/public/api/ro/posts/index.json +42 -48
  35. data/public/api/ro/posts/lemmings-considered-harmful/index.json +3 -4
  36. data/public/api/ro/posts/lost-in-the-desert/index.json +3 -4
  37. data/public/api/ro/posts/mission/index.json +3 -4
  38. data/public/api/ro/posts/return-your-laptop/index.json +4 -5
  39. data/ro.gemspec +247 -18
  40. data/specs/001-simplify-asset-structure/IMPLEMENTATION_SUMMARY.md +212 -0
  41. data/specs/001-simplify-asset-structure/checklists/requirements.md +36 -0
  42. data/specs/001-simplify-asset-structure/contracts/collection_api.md +407 -0
  43. data/specs/001-simplify-asset-structure/contracts/migrator_api.md +461 -0
  44. data/specs/001-simplify-asset-structure/contracts/node_api.md +294 -0
  45. data/specs/001-simplify-asset-structure/data-model.md +381 -0
  46. data/specs/001-simplify-asset-structure/plan.md +90 -0
  47. data/specs/001-simplify-asset-structure/quickstart.md +575 -0
  48. data/specs/001-simplify-asset-structure/research.md +333 -0
  49. data/specs/001-simplify-asset-structure/spec.md +127 -0
  50. data/specs/001-simplify-asset-structure/tasks.md +349 -0
  51. data/test/fixtures/new_structure/mixed/test-json.json +5 -0
  52. data/test/fixtures/new_structure/mixed/test-yaml.yml +3 -0
  53. data/test/fixtures/new_structure/posts/metadata-only.yml +7 -0
  54. data/test/fixtures/new_structure/posts/nested-test/assets/subdirectory/image.png +2 -0
  55. data/test/fixtures/new_structure/posts/nested-test.yml +7 -0
  56. data/test/fixtures/new_structure/posts/sample-post/assets/body.md +5 -0
  57. data/test/fixtures/new_structure/posts/sample-post/assets/image.jpg +2 -0
  58. data/test/fixtures/new_structure/posts/sample-post.yml +7 -0
  59. data/test/fixtures/old_structure/posts/assets-only/assets/test.txt +1 -0
  60. data/test/fixtures/old_structure/posts/sample-post/assets/body.md +5 -0
  61. data/test/fixtures/old_structure/posts/sample-post/assets/image.jpg +2 -0
  62. data/test/fixtures/old_structure/posts/sample-post/attributes.yml +2 -0
  63. data/test/integration/ro_integration_test.rb +165 -0
  64. data/test/test_helper.rb +149 -0
  65. data/test/tmp/migration_test_1760746513.backup.20251018001513/migration_test_1760746513/posts/sample-post/assets/image.jpg +2 -0
  66. data/test/tmp/migration_test_1760746513.backup.20251018001513/migration_test_1760746513/posts/sample-post/attributes.yml +7 -0
  67. data/test/tmp/migration_test_1760746513.backup.20251018001513/migration_test_1760746513/posts/sample-post/body.md +5 -0
  68. data/test/tmp/migration_test_1760746513.backup.20251018001513/posts/sample-post/assets/image.jpg +2 -0
  69. data/test/tmp/migration_test_1760746513.backup.20251018001513/posts/sample-post/attributes.yml +7 -0
  70. data/test/tmp/migration_test_1760746513.backup.20251018001513/posts/sample-post/body.md +5 -0
  71. data/test/tmp/migration_test_1760746556.backup.20251018001556/migration_test_1760746556/posts/sample-post/assets/image.jpg +2 -0
  72. data/test/tmp/migration_test_1760746556.backup.20251018001556/migration_test_1760746556/posts/sample-post/attributes.yml +7 -0
  73. data/test/tmp/migration_test_1760746556.backup.20251018001556/migration_test_1760746556/posts/sample-post/body.md +5 -0
  74. data/test/tmp/migration_test_1760746556.backup.20251018001556/posts/sample-post/assets/image.jpg +2 -0
  75. data/test/tmp/migration_test_1760746556.backup.20251018001556/posts/sample-post/attributes.yml +7 -0
  76. data/test/tmp/migration_test_1760746556.backup.20251018001556/posts/sample-post/body.md +5 -0
  77. data/test/tmp/migration_test_1760755248.backup.20251018024048/migration_test_1760755248/posts/sample-post/assets/image.jpg +2 -0
  78. data/test/tmp/migration_test_1760755248.backup.20251018024048/migration_test_1760755248/posts/sample-post/attributes.yml +7 -0
  79. data/test/tmp/migration_test_1760755248.backup.20251018024048/migration_test_1760755248/posts/sample-post/body.md +5 -0
  80. data/test/tmp/migration_test_1760755248.backup.20251018024048/posts/sample-post/assets/image.jpg +2 -0
  81. data/test/tmp/migration_test_1760755248.backup.20251018024048/posts/sample-post/attributes.yml +7 -0
  82. data/test/tmp/migration_test_1760755248.backup.20251018024048/posts/sample-post/body.md +5 -0
  83. data/test/tmp/migration_test_1760758803.backup.20251018034003/migration_test_1760758803/posts/sample-post/body.md +5 -0
  84. data/test/tmp/migration_test_1760758803.backup.20251018034003/migration_test_1760758803/posts/sample-post/image.jpg +2 -0
  85. data/test/tmp/migration_test_1760758803.backup.20251018034003/migration_test_1760758803/posts/sample-post.yml +7 -0
  86. data/test/tmp/migration_test_1760758803.backup.20251018034003/posts/sample-post/body.md +5 -0
  87. data/test/tmp/migration_test_1760758803.backup.20251018034003/posts/sample-post/image.jpg +2 -0
  88. data/test/tmp/migration_test_1760758803.backup.20251018034003/posts/sample-post.yml +7 -0
  89. data/test/tmp/migration_test_1760758869.backup.20251018034109/migration_test_1760758869/posts/sample-post/assets/body.md +5 -0
  90. data/test/tmp/migration_test_1760758869.backup.20251018034109/migration_test_1760758869/posts/sample-post/assets/image.jpg +2 -0
  91. data/test/tmp/migration_test_1760758869.backup.20251018034109/migration_test_1760758869/posts/sample-post/attributes.yml +2 -0
  92. data/test/tmp/migration_test_1760758869.backup.20251018034109/posts/sample-post/assets/body.md +5 -0
  93. data/test/tmp/migration_test_1760758869.backup.20251018034109/posts/sample-post/assets/image.jpg +2 -0
  94. data/test/tmp/migration_test_1760758869.backup.20251018034109/posts/sample-post/attributes.yml +2 -0
  95. data/test/tmp/migration_test_1760758920.backup.20251018034200/migration_test_1760758920/posts/sample-post/assets/body.md +5 -0
  96. data/test/tmp/migration_test_1760758920.backup.20251018034200/migration_test_1760758920/posts/sample-post/assets/image.jpg +2 -0
  97. data/test/tmp/migration_test_1760758920.backup.20251018034200/migration_test_1760758920/posts/sample-post/attributes.yml +2 -0
  98. data/test/tmp/migration_test_1760758920.backup.20251018034200/posts/sample-post/assets/body.md +5 -0
  99. data/test/tmp/migration_test_1760758920.backup.20251018034200/posts/sample-post/assets/image.jpg +2 -0
  100. data/test/tmp/migration_test_1760758920.backup.20251018034200/posts/sample-post/attributes.yml +2 -0
  101. data/test/tmp/migration_test_1760824728.backup.20251018215848/migration_test_1760824728/posts/assets-only/assets/test.txt +1 -0
  102. data/test/tmp/migration_test_1760824728.backup.20251018215848/migration_test_1760824728/posts/sample-post/assets/body.md +5 -0
  103. data/test/tmp/migration_test_1760824728.backup.20251018215848/migration_test_1760824728/posts/sample-post/assets/image.jpg +2 -0
  104. data/test/tmp/migration_test_1760824728.backup.20251018215848/migration_test_1760824728/posts/sample-post/attributes.yml +2 -0
  105. data/test/tmp/migration_test_1760824728.backup.20251018215848/posts/assets-only/assets/test.txt +1 -0
  106. data/test/tmp/migration_test_1760824728.backup.20251018215848/posts/sample-post/assets/body.md +5 -0
  107. data/test/tmp/migration_test_1760824728.backup.20251018215848/posts/sample-post/assets/image.jpg +2 -0
  108. data/test/tmp/migration_test_1760824728.backup.20251018215848/posts/sample-post/attributes.yml +2 -0
  109. data/test/tmp/migration_test_1760844153.backup.20251019032233/migration_test_1760844153/posts/assets-only/assets/test.txt +1 -0
  110. data/test/tmp/migration_test_1760844153.backup.20251019032233/migration_test_1760844153/posts/sample-post/assets/body.md +5 -0
  111. data/test/tmp/migration_test_1760844153.backup.20251019032233/migration_test_1760844153/posts/sample-post/assets/image.jpg +2 -0
  112. data/test/tmp/migration_test_1760844153.backup.20251019032233/migration_test_1760844153/posts/sample-post/attributes.yml +2 -0
  113. data/test/tmp/migration_test_1760844153.backup.20251019032233/posts/assets-only/assets/test.txt +1 -0
  114. data/test/tmp/migration_test_1760844153.backup.20251019032233/posts/sample-post/assets/body.md +5 -0
  115. data/test/tmp/migration_test_1760844153.backup.20251019032233/posts/sample-post/assets/image.jpg +2 -0
  116. data/test/tmp/migration_test_1760844153.backup.20251019032233/posts/sample-post/attributes.yml +2 -0
  117. data/test/tmp/migration_test_1760940939.backup.20251020061539/migration_test_1760940939/posts/assets-only/assets/test.txt +1 -0
  118. data/test/tmp/migration_test_1760940939.backup.20251020061539/migration_test_1760940939/posts/sample-post/assets/body.md +5 -0
  119. data/test/tmp/migration_test_1760940939.backup.20251020061539/migration_test_1760940939/posts/sample-post/assets/image.jpg +2 -0
  120. data/test/tmp/migration_test_1760940939.backup.20251020061539/migration_test_1760940939/posts/sample-post/attributes.yml +2 -0
  121. data/test/tmp/migration_test_1760940939.backup.20251020061539/posts/assets-only/assets/test.txt +1 -0
  122. data/test/tmp/migration_test_1760940939.backup.20251020061539/posts/sample-post/assets/body.md +5 -0
  123. data/test/tmp/migration_test_1760940939.backup.20251020061539/posts/sample-post/assets/image.jpg +2 -0
  124. data/test/tmp/migration_test_1760940939.backup.20251020061539/posts/sample-post/attributes.yml +2 -0
  125. data/test/tmp/migration_test_1760941048.backup.20251020061728/migration_test_1760941048/posts/assets-only/assets/test.txt +1 -0
  126. data/test/tmp/migration_test_1760941048.backup.20251020061728/migration_test_1760941048/posts/sample-post/assets/body.md +5 -0
  127. data/test/tmp/migration_test_1760941048.backup.20251020061728/migration_test_1760941048/posts/sample-post/assets/image.jpg +2 -0
  128. data/test/tmp/migration_test_1760941048.backup.20251020061728/migration_test_1760941048/posts/sample-post/attributes.yml +2 -0
  129. data/test/tmp/migration_test_1760941048.backup.20251020061728/posts/assets-only/assets/test.txt +1 -0
  130. data/test/tmp/migration_test_1760941048.backup.20251020061728/posts/sample-post/assets/body.md +5 -0
  131. data/test/tmp/migration_test_1760941048.backup.20251020061728/posts/sample-post/assets/image.jpg +2 -0
  132. data/test/tmp/migration_test_1760941048.backup.20251020061728/posts/sample-post/attributes.yml +2 -0
  133. data/test/tmp/new_structure_test_1760746452/mixed/test-json.json +5 -0
  134. data/test/tmp/new_structure_test_1760746452/mixed/test-yaml.yml +3 -0
  135. data/test/tmp/new_structure_test_1760746452/posts/metadata-only.yml +7 -0
  136. data/test/tmp/new_structure_test_1760746452/posts/nested-test/subdirectory/image.png +2 -0
  137. data/test/tmp/new_structure_test_1760746452/posts/nested-test.yml +7 -0
  138. data/test/tmp/new_structure_test_1760746452/posts/sample-post/body.md +5 -0
  139. data/test/tmp/new_structure_test_1760746452/posts/sample-post/image.jpg +2 -0
  140. data/test/tmp/new_structure_test_1760746452/posts/sample-post.yml +7 -0
  141. data/test/unit/asset_test.rb +90 -0
  142. data/test/unit/collection_test.rb +127 -0
  143. data/test/unit/migrator_test.rb +209 -0
  144. data/test/unit/node_test.rb +138 -0
  145. metadata +127 -19
  146. data/public/api/ro/pages/about/index.json +0 -60
  147. /data/public/ro/nerd/{fastest-possible-embeddings/attributes.yml → fastest-possible-embeddings.yml} +0 -0
  148. /data/public/ro/nerd/{ima/attributes.yml → ima.yml} +0 -0
  149. /data/public/ro/nerd/{index/attributes.yml → index.yml} +0 -0
  150. /data/public/ro/pages/{contact/attributes.yml → contact.yml} +0 -0
  151. /data/public/ro/pages/{cv/attributes.yml → cv.yml} +0 -0
  152. /data/public/ro/pages/{disco/attributes.yml → disco.yml} +0 -0
  153. /data/public/ro/pages/{index/attributes.yml → index.yml} +0 -0
  154. /data/public/ro/pages/{jess/attributes.yml → jess.yml} +0 -0
  155. /data/public/ro/pages/{now/attributes.yml → now.yml} +0 -0
  156. /data/public/ro/posts/{almost-died-in-an-ice-cave/attributes.yml → almost-died-in-an-ice-cave.yml} +0 -0
  157. /data/public/ro/posts/{facebook-and-global-extremism/attributes.yml → facebook-and-global-extremism.yml} +0 -0
  158. /data/public/ro/posts/{lemmings-considered-harmful/attributes.yml → lemmings-considered-harmful.yml} +0 -0
  159. /data/public/ro/posts/{lost-in-the-desert/attributes.yml → lost-in-the-desert.yml} +0 -0
  160. /data/public/ro/posts/{mission/attributes.yml → mission.yml} +0 -0
  161. /data/public/ro/posts/{return-your-laptop/attributes.yml → return-your-laptop.yml} +0 -0
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ro
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.4.0
4
+ version: 5.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ara T. Howard
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-04-23 00:00:00.000000000 Z
11
+ date: 2025-10-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: map
@@ -161,9 +161,11 @@ files:
161
161
  - Gemfile
162
162
  - Gemfile.lock
163
163
  - LICENSE
164
+ - MIGRATION.md
164
165
  - README.md
165
166
  - README.md.erb
166
167
  - Rakefile
168
+ - a.yml
167
169
  - bin/ro
168
170
  - lib/ro.rb
169
171
  - lib/ro/_lib.rb
@@ -176,6 +178,7 @@ files:
176
178
  - lib/ro/html_safe.rb
177
179
  - lib/ro/klass.rb
178
180
  - lib/ro/methods.rb
181
+ - lib/ro/migrator.rb
179
182
  - lib/ro/model.rb
180
183
  - lib/ro/node.rb
181
184
  - lib/ro/pagination.rb
@@ -184,6 +187,7 @@ files:
184
187
  - lib/ro/script.rb
185
188
  - lib/ro/script/builder.rb
186
189
  - lib/ro/script/console.rb
190
+ - lib/ro/script/migrate.rb
187
191
  - lib/ro/script/server.rb
188
192
  - lib/ro/slug.rb
189
193
  - lib/ro/template.rb
@@ -196,7 +200,6 @@ files:
196
200
  - public/api/ro/nerd/index-1.json
197
201
  - public/api/ro/nerd/index.json
198
202
  - public/api/ro/nerd/index/index.json
199
- - public/api/ro/pages/about/index.json
200
203
  - public/api/ro/pages/contact/index.json
201
204
  - public/api/ro/pages/cv/index.json
202
205
  - public/api/ro/pages/disco/index.json
@@ -213,30 +216,31 @@ files:
213
216
  - public/api/ro/posts/lost-in-the-desert/index.json
214
217
  - public/api/ro/posts/mission/index.json
215
218
  - public/api/ro/posts/return-your-laptop/index.json
219
+ - public/ro/nerd/fastest-possible-embeddings.yml
216
220
  - public/ro/nerd/fastest-possible-embeddings/assets/giraffe.jpeg
217
221
  - public/ro/nerd/fastest-possible-embeddings/assets/let-me-in.jpg
218
222
  - public/ro/nerd/fastest-possible-embeddings/assets/src/fastembed.js
219
223
  - public/ro/nerd/fastest-possible-embeddings/assets/src/fastembed.rs
220
224
  - public/ro/nerd/fastest-possible-embeddings/assets/terminal.jpg
221
- - public/ro/nerd/fastest-possible-embeddings/attributes.yml
222
225
  - public/ro/nerd/fastest-possible-embeddings/body.md
226
+ - public/ro/nerd/ima.yml
223
227
  - public/ro/nerd/ima/assets/og.jpeg
224
- - public/ro/nerd/ima/attributes.yml
225
228
  - public/ro/nerd/ima/body.md
229
+ - public/ro/nerd/index.yml
226
230
  - public/ro/nerd/index/assets/giraffe.jpeg
227
231
  - public/ro/nerd/index/assets/let-me-in.jpg
228
232
  - public/ro/nerd/index/assets/terminal.jpg
229
- - public/ro/nerd/index/attributes.yml
230
233
  - public/ro/nerd/index/body.md
231
234
  - public/ro/pages/about/assets/og.jpeg
232
235
  - public/ro/pages/about/assets/speak-english-pulp-fiction.gif
233
236
  - public/ro/pages/about/body.md
237
+ - public/ro/pages/contact.yml
234
238
  - public/ro/pages/contact/assets/giraffe.jpeg
235
- - public/ro/pages/contact/attributes.yml
236
239
  - public/ro/pages/contact/body.md
240
+ - public/ro/pages/cv.yml
237
241
  - public/ro/pages/cv/assets/ara.jpg
238
- - public/ro/pages/cv/attributes.yml
239
242
  - public/ro/pages/cv/body.md
243
+ - public/ro/pages/disco.yml
240
244
  - public/ro/pages/disco/assets/disco.jpg
241
245
  - public/ro/pages/disco/assets/disco.png
242
246
  - public/ro/pages/disco/assets/speak-english-pulp-fiction.gif
@@ -244,21 +248,21 @@ files:
244
248
  - public/ro/pages/disco/assets/src/fortune-500.md
245
249
  - public/ro/pages/disco/assets/src/greed.md
246
250
  - public/ro/pages/disco/assets/src/up-at-night.md
247
- - public/ro/pages/disco/attributes.yml
248
251
  - public/ro/pages/disco/body.md
249
252
  - public/ro/pages/disco/samples/environment.md
250
253
  - public/ro/pages/disco/samples/fortune-500.md
251
254
  - public/ro/pages/disco/samples/greed.md
252
255
  - public/ro/pages/disco/samples/up-at-night.md
253
- - public/ro/pages/index/attributes.yml
256
+ - public/ro/pages/index.yml
254
257
  - public/ro/pages/index/body.md
258
+ - public/ro/pages/jess.yml
255
259
  - public/ro/pages/jess/assets/og.jpg
256
260
  - public/ro/pages/jess/assets/speak-english-pulp-fiction.gif
257
- - public/ro/pages/jess/attributes.yml
258
261
  - public/ro/pages/jess/body.md
262
+ - public/ro/pages/now.yml
259
263
  - public/ro/pages/now/assets/speak-english-pulp-fiction.gif
260
- - public/ro/pages/now/attributes.yml
261
264
  - public/ro/pages/now/body.md
265
+ - public/ro/posts/almost-died-in-an-ice-cave.yml
262
266
  - public/ro/posts/almost-died-in-an-ice-cave/assets/image1.png
263
267
  - public/ro/posts/almost-died-in-an-ice-cave/assets/image10.png
264
268
  - public/ro/posts/almost-died-in-an-ice-cave/assets/image11.png
@@ -278,31 +282,135 @@ files:
278
282
  - public/ro/posts/almost-died-in-an-ice-cave/assets/levi-rawr.png
279
283
  - public/ro/posts/almost-died-in-an-ice-cave/assets/og.jpg
280
284
  - public/ro/posts/almost-died-in-an-ice-cave/assets/purple-heart.jpg
281
- - public/ro/posts/almost-died-in-an-ice-cave/attributes.yml
282
285
  - public/ro/posts/almost-died-in-an-ice-cave/body.md
286
+ - public/ro/posts/facebook-and-global-extremism.yml
283
287
  - public/ro/posts/facebook-and-global-extremism/assets/background.html
284
288
  - public/ro/posts/facebook-and-global-extremism/assets/background.md
285
289
  - public/ro/posts/facebook-and-global-extremism/assets/og.jpg
286
290
  - public/ro/posts/facebook-and-global-extremism/assets/prompt.txt
287
291
  - public/ro/posts/facebook-and-global-extremism/assets/results.md
288
292
  - public/ro/posts/facebook-and-global-extremism/assets/survey.txt
289
- - public/ro/posts/facebook-and-global-extremism/attributes.yml
290
293
  - public/ro/posts/facebook-and-global-extremism/body.md
294
+ - public/ro/posts/lemmings-considered-harmful.yml
291
295
  - public/ro/posts/lemmings-considered-harmful/assets/lemming.jpeg
292
- - public/ro/posts/lemmings-considered-harmful/attributes.yml
293
296
  - public/ro/posts/lemmings-considered-harmful/body.md
297
+ - public/ro/posts/lost-in-the-desert.yml
294
298
  - public/ro/posts/lost-in-the-desert/assets/og.jpg
295
- - public/ro/posts/lost-in-the-desert/attributes.yml
296
299
  - public/ro/posts/lost-in-the-desert/body.md
300
+ - public/ro/posts/mission.yml
297
301
  - public/ro/posts/mission/assets/og.jpg
298
- - public/ro/posts/mission/attributes.yml
299
302
  - public/ro/posts/mission/body.md
303
+ - public/ro/posts/return-your-laptop.yml
300
304
  - public/ro/posts/return-your-laptop/assets/og.jpg
301
305
  - public/ro/posts/return-your-laptop/assets/return-your-laptop.png
302
- - public/ro/posts/return-your-laptop/attributes.yml
303
306
  - public/ro/posts/return-your-laptop/body.md
304
307
  - ro.gemspec
305
308
  - scripts/speedtest.rb
309
+ - specs/001-simplify-asset-structure/IMPLEMENTATION_SUMMARY.md
310
+ - specs/001-simplify-asset-structure/checklists/requirements.md
311
+ - specs/001-simplify-asset-structure/contracts/collection_api.md
312
+ - specs/001-simplify-asset-structure/contracts/migrator_api.md
313
+ - specs/001-simplify-asset-structure/contracts/node_api.md
314
+ - specs/001-simplify-asset-structure/data-model.md
315
+ - specs/001-simplify-asset-structure/plan.md
316
+ - specs/001-simplify-asset-structure/quickstart.md
317
+ - specs/001-simplify-asset-structure/research.md
318
+ - specs/001-simplify-asset-structure/spec.md
319
+ - specs/001-simplify-asset-structure/tasks.md
320
+ - test/fixtures/new_structure/mixed/test-json.json
321
+ - test/fixtures/new_structure/mixed/test-yaml.yml
322
+ - test/fixtures/new_structure/posts/metadata-only.yml
323
+ - test/fixtures/new_structure/posts/nested-test.yml
324
+ - test/fixtures/new_structure/posts/nested-test/assets/subdirectory/image.png
325
+ - test/fixtures/new_structure/posts/sample-post.yml
326
+ - test/fixtures/new_structure/posts/sample-post/assets/body.md
327
+ - test/fixtures/new_structure/posts/sample-post/assets/image.jpg
328
+ - test/fixtures/old_structure/posts/assets-only/assets/test.txt
329
+ - test/fixtures/old_structure/posts/sample-post/assets/body.md
330
+ - test/fixtures/old_structure/posts/sample-post/assets/image.jpg
331
+ - test/fixtures/old_structure/posts/sample-post/attributes.yml
332
+ - test/integration/ro_integration_test.rb
333
+ - test/test_helper.rb
334
+ - test/tmp/migration_test_1760746513.backup.20251018001513/migration_test_1760746513/posts/sample-post/assets/image.jpg
335
+ - test/tmp/migration_test_1760746513.backup.20251018001513/migration_test_1760746513/posts/sample-post/attributes.yml
336
+ - test/tmp/migration_test_1760746513.backup.20251018001513/migration_test_1760746513/posts/sample-post/body.md
337
+ - test/tmp/migration_test_1760746513.backup.20251018001513/posts/sample-post/assets/image.jpg
338
+ - test/tmp/migration_test_1760746513.backup.20251018001513/posts/sample-post/attributes.yml
339
+ - test/tmp/migration_test_1760746513.backup.20251018001513/posts/sample-post/body.md
340
+ - test/tmp/migration_test_1760746556.backup.20251018001556/migration_test_1760746556/posts/sample-post/assets/image.jpg
341
+ - test/tmp/migration_test_1760746556.backup.20251018001556/migration_test_1760746556/posts/sample-post/attributes.yml
342
+ - test/tmp/migration_test_1760746556.backup.20251018001556/migration_test_1760746556/posts/sample-post/body.md
343
+ - test/tmp/migration_test_1760746556.backup.20251018001556/posts/sample-post/assets/image.jpg
344
+ - test/tmp/migration_test_1760746556.backup.20251018001556/posts/sample-post/attributes.yml
345
+ - test/tmp/migration_test_1760746556.backup.20251018001556/posts/sample-post/body.md
346
+ - test/tmp/migration_test_1760755248.backup.20251018024048/migration_test_1760755248/posts/sample-post/assets/image.jpg
347
+ - test/tmp/migration_test_1760755248.backup.20251018024048/migration_test_1760755248/posts/sample-post/attributes.yml
348
+ - test/tmp/migration_test_1760755248.backup.20251018024048/migration_test_1760755248/posts/sample-post/body.md
349
+ - test/tmp/migration_test_1760755248.backup.20251018024048/posts/sample-post/assets/image.jpg
350
+ - test/tmp/migration_test_1760755248.backup.20251018024048/posts/sample-post/attributes.yml
351
+ - test/tmp/migration_test_1760755248.backup.20251018024048/posts/sample-post/body.md
352
+ - test/tmp/migration_test_1760758803.backup.20251018034003/migration_test_1760758803/posts/sample-post.yml
353
+ - test/tmp/migration_test_1760758803.backup.20251018034003/migration_test_1760758803/posts/sample-post/body.md
354
+ - test/tmp/migration_test_1760758803.backup.20251018034003/migration_test_1760758803/posts/sample-post/image.jpg
355
+ - test/tmp/migration_test_1760758803.backup.20251018034003/posts/sample-post.yml
356
+ - test/tmp/migration_test_1760758803.backup.20251018034003/posts/sample-post/body.md
357
+ - test/tmp/migration_test_1760758803.backup.20251018034003/posts/sample-post/image.jpg
358
+ - test/tmp/migration_test_1760758869.backup.20251018034109/migration_test_1760758869/posts/sample-post/assets/body.md
359
+ - test/tmp/migration_test_1760758869.backup.20251018034109/migration_test_1760758869/posts/sample-post/assets/image.jpg
360
+ - test/tmp/migration_test_1760758869.backup.20251018034109/migration_test_1760758869/posts/sample-post/attributes.yml
361
+ - test/tmp/migration_test_1760758869.backup.20251018034109/posts/sample-post/assets/body.md
362
+ - test/tmp/migration_test_1760758869.backup.20251018034109/posts/sample-post/assets/image.jpg
363
+ - test/tmp/migration_test_1760758869.backup.20251018034109/posts/sample-post/attributes.yml
364
+ - test/tmp/migration_test_1760758920.backup.20251018034200/migration_test_1760758920/posts/sample-post/assets/body.md
365
+ - test/tmp/migration_test_1760758920.backup.20251018034200/migration_test_1760758920/posts/sample-post/assets/image.jpg
366
+ - test/tmp/migration_test_1760758920.backup.20251018034200/migration_test_1760758920/posts/sample-post/attributes.yml
367
+ - test/tmp/migration_test_1760758920.backup.20251018034200/posts/sample-post/assets/body.md
368
+ - test/tmp/migration_test_1760758920.backup.20251018034200/posts/sample-post/assets/image.jpg
369
+ - test/tmp/migration_test_1760758920.backup.20251018034200/posts/sample-post/attributes.yml
370
+ - test/tmp/migration_test_1760824728.backup.20251018215848/migration_test_1760824728/posts/assets-only/assets/test.txt
371
+ - test/tmp/migration_test_1760824728.backup.20251018215848/migration_test_1760824728/posts/sample-post/assets/body.md
372
+ - test/tmp/migration_test_1760824728.backup.20251018215848/migration_test_1760824728/posts/sample-post/assets/image.jpg
373
+ - test/tmp/migration_test_1760824728.backup.20251018215848/migration_test_1760824728/posts/sample-post/attributes.yml
374
+ - test/tmp/migration_test_1760824728.backup.20251018215848/posts/assets-only/assets/test.txt
375
+ - test/tmp/migration_test_1760824728.backup.20251018215848/posts/sample-post/assets/body.md
376
+ - test/tmp/migration_test_1760824728.backup.20251018215848/posts/sample-post/assets/image.jpg
377
+ - test/tmp/migration_test_1760824728.backup.20251018215848/posts/sample-post/attributes.yml
378
+ - test/tmp/migration_test_1760844153.backup.20251019032233/migration_test_1760844153/posts/assets-only/assets/test.txt
379
+ - test/tmp/migration_test_1760844153.backup.20251019032233/migration_test_1760844153/posts/sample-post/assets/body.md
380
+ - test/tmp/migration_test_1760844153.backup.20251019032233/migration_test_1760844153/posts/sample-post/assets/image.jpg
381
+ - test/tmp/migration_test_1760844153.backup.20251019032233/migration_test_1760844153/posts/sample-post/attributes.yml
382
+ - test/tmp/migration_test_1760844153.backup.20251019032233/posts/assets-only/assets/test.txt
383
+ - test/tmp/migration_test_1760844153.backup.20251019032233/posts/sample-post/assets/body.md
384
+ - test/tmp/migration_test_1760844153.backup.20251019032233/posts/sample-post/assets/image.jpg
385
+ - test/tmp/migration_test_1760844153.backup.20251019032233/posts/sample-post/attributes.yml
386
+ - test/tmp/migration_test_1760940939.backup.20251020061539/migration_test_1760940939/posts/assets-only/assets/test.txt
387
+ - test/tmp/migration_test_1760940939.backup.20251020061539/migration_test_1760940939/posts/sample-post/assets/body.md
388
+ - test/tmp/migration_test_1760940939.backup.20251020061539/migration_test_1760940939/posts/sample-post/assets/image.jpg
389
+ - test/tmp/migration_test_1760940939.backup.20251020061539/migration_test_1760940939/posts/sample-post/attributes.yml
390
+ - test/tmp/migration_test_1760940939.backup.20251020061539/posts/assets-only/assets/test.txt
391
+ - test/tmp/migration_test_1760940939.backup.20251020061539/posts/sample-post/assets/body.md
392
+ - test/tmp/migration_test_1760940939.backup.20251020061539/posts/sample-post/assets/image.jpg
393
+ - test/tmp/migration_test_1760940939.backup.20251020061539/posts/sample-post/attributes.yml
394
+ - test/tmp/migration_test_1760941048.backup.20251020061728/migration_test_1760941048/posts/assets-only/assets/test.txt
395
+ - test/tmp/migration_test_1760941048.backup.20251020061728/migration_test_1760941048/posts/sample-post/assets/body.md
396
+ - test/tmp/migration_test_1760941048.backup.20251020061728/migration_test_1760941048/posts/sample-post/assets/image.jpg
397
+ - test/tmp/migration_test_1760941048.backup.20251020061728/migration_test_1760941048/posts/sample-post/attributes.yml
398
+ - test/tmp/migration_test_1760941048.backup.20251020061728/posts/assets-only/assets/test.txt
399
+ - test/tmp/migration_test_1760941048.backup.20251020061728/posts/sample-post/assets/body.md
400
+ - test/tmp/migration_test_1760941048.backup.20251020061728/posts/sample-post/assets/image.jpg
401
+ - test/tmp/migration_test_1760941048.backup.20251020061728/posts/sample-post/attributes.yml
402
+ - test/tmp/new_structure_test_1760746452/mixed/test-json.json
403
+ - test/tmp/new_structure_test_1760746452/mixed/test-yaml.yml
404
+ - test/tmp/new_structure_test_1760746452/posts/metadata-only.yml
405
+ - test/tmp/new_structure_test_1760746452/posts/nested-test.yml
406
+ - test/tmp/new_structure_test_1760746452/posts/nested-test/subdirectory/image.png
407
+ - test/tmp/new_structure_test_1760746452/posts/sample-post.yml
408
+ - test/tmp/new_structure_test_1760746452/posts/sample-post/body.md
409
+ - test/tmp/new_structure_test_1760746452/posts/sample-post/image.jpg
410
+ - test/unit/asset_test.rb
411
+ - test/unit/collection_test.rb
412
+ - test/unit/migrator_test.rb
413
+ - test/unit/node_test.rb
306
414
  - tmp/gem-details.oe
307
415
  homepage: https://github.com/ahoward/ro
308
416
  licenses:
@@ -323,7 +431,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
323
431
  - !ruby/object:Gem::Version
324
432
  version: '0'
325
433
  requirements: []
326
- rubygems_version: 3.5.16
434
+ rubygems_version: 3.5.22
327
435
  signing_key:
328
436
  specification_version: 4
329
437
  summary: all your content in github, as god intended
@@ -1,60 +0,0 @@
1
- {
2
- "data": {
3
- "pages/about": {
4
- "og": {
5
- "title": "ara.t.howard",
6
- "description": "my insides are made out of outsides. i bite.",
7
- "image": {
8
- "url": "/ro/pages/about/assets/og.jpeg"
9
- }
10
- },
11
- "body": "<div class=\"ro markdown\">\n <p>this is the part i hate. writing about myself.</p>\n\n<p>i’ll start at the beginning:</p>\n\n<ul>\n <li>grew up in <a href=\"https://photos.app.goo.gl/3aa3Fkwe9EyQg7kf6\">alaska</a>, 4th * generational irish people, been <em>here and there</em> the past few years.</li>\n <li>roamed the planet racing bikes and skis. this before phones, gps, or * digital cameras.</li>\n <li>raised a family in boulder, colorado.</li>\n <li>researched <a href=\"https://independent.academia.edu/arahoward\">life on earth from space</a> for about a decade.</li>\n <li>wrote a <a href=\"https://github.com/ahoward\">ton of software</a>, some that <a href=\"https://www.linuxjournal.com/article/7922\">i am even proud of</a>.</li>\n <li>founded, built, and ran <a href=\"/dojo4\">dojo4</a> for almost exactly a decade.</li>\n <li>ranted about the dangerous of big tech, and responbility of software developers, in <a href=\"https://www.youtube.com/watch?v=sKNENzPpSrA\">kyiv 2015</a>.</li>\n <li>mentored dozens of techstars startups, worked with and for over a hundred.</li>\n <li>2020 // COVID // massive life changes. collapse. like everyone else.</li>\n <li>subsequently, a ton of * <a href=\"https://photos.app.goo.gl/ZLLWKpux5jns3JUH9\">mountains</a>.</li>\n <li>somehow managed to get lost in the <a href=\"https://photos.app.goo.gl/rnSLBr9MoWMHv1zx6\">southwest for the 42’nd time in my life</a>.</li>\n <li>started <a href=\"https://photos.app.goo.gl/wMDwwuFamRWWgZiu6\">riding my bike to * alaska</a>.</li>\n <li>met a girl in <a href=\"https://photos.app.goo.gl/MpSigk5BJwqeouiUA\">LA</a>.</li>\n <li><a href=\"/io/almost-died-in-an-ice-cave\">almost died in an ice cave</a>.</li>\n <li>been cranking on a <a href=\"/now\">new stuff</a>.</li>\n <li>and <a href=\"https://photos.app.goo.gl/ikwjrYWBXEvFbwbx7\">riding bikes with a broken leg</a>.</li>\n</ul>\n\n<p>this is <em>absolutely</em> and _always a work in progress…</p>\n\n<p>so check back soon or just <a href=\"contact\">contact</a> me if you are a-wondering <em>wtf</em> is up?</p>\n\n<blockquote>\n <p>bored: 🐼 ???</p>\n</blockquote>\n\n<p><a href=\"https://letmegooglethat.com/?q=what+does+iff+mean\">iff</a> you are so inclined, you can follow along with the madness here -&gt;</p>\n\n<ul>\n <li><a href=\"https://github.com/ahoward/drawohara.io\">https://github.com/ahoward/drawohara.io</a></li>\n <li>here <a href=\"https://bsky.app/profile/drawohara.io\">https://bsky.app/profile/drawohara.io</a></li>\n <li>or here -&gt; <a href=\"https://www.instagram.com/drawohara\">https://www.instagram.com/drawohara</a></li>\n <li>or even here (ssssshhhhhhh) -&gt; <a href=\"https://syntheticecho.com\">https://syntheticecho.com</a></li>\n</ul>\n\n</div>\n",
12
- "assets": {
13
- "assets/og.jpeg": {
14
- "url": "/ro/pages/about/assets/og.jpeg",
15
- "path": "pages/about/assets/og.jpeg",
16
- "size": 8,
17
- "img": {
18
- "format": "jpeg",
19
- "width": 855,
20
- "height": 1200
21
- },
22
- "src": null
23
- },
24
- "assets/speak-english-pulp-fiction.gif": {
25
- "url": "/ro/pages/about/assets/speak-english-pulp-fiction.gif",
26
- "path": "pages/about/assets/speak-english-pulp-fiction.gif",
27
- "size": 8,
28
- "img": {
29
- "format": "gif",
30
- "width": 640,
31
- "height": 360
32
- },
33
- "src": null
34
- }
35
- },
36
- "_meta": {
37
- "identifier": "pages/about",
38
- "type": "pages",
39
- "id": "about",
40
- "urls": [
41
- "/ro/pages/about/assets/og.jpeg",
42
- "/ro/pages/about/assets/speak-english-pulp-fiction.gif",
43
- "/ro/pages/about/body.md"
44
- ],
45
- "created_at": "2025-04-23 04:38:28 +0000",
46
- "updated_at": "2025-04-23 04:38:28 +0000",
47
- "rel": {
48
- "curr": "pages/about",
49
- "prev": null,
50
- "next": "pages/contact"
51
- }
52
- }
53
- }
54
- },
55
- "_meta": {
56
- "url": "/ro",
57
- "type": "pages",
58
- "id": "about"
59
- }
60
- }
File without changes
File without changes
File without changes
File without changes
File without changes