scriptorium 0.0.3 → 0.6.1
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.
- checksums.yaml +4 -4
- data/README.lt3 +324 -0
- data/README.md +3155 -1
- data/assets/.DS_Store +0 -0
- data/assets/README.md +44 -0
- data/assets/back-icon.png +0 -0
- data/assets/icons/facebook.svg +1 -0
- data/assets/icons/github.svg +1 -0
- data/assets/icons/instagram.svg +1 -0
- data/assets/icons/reddit.svg +1 -0
- data/assets/icons/ui/.DS_Store +0 -0
- data/assets/icons/ui/back.png +0 -0
- data/assets/icons/ui/copy.png +0 -0
- data/assets/icons/ui/down.png +0 -0
- data/assets/icons/ui/end.png +0 -0
- data/assets/icons/ui/exit.png +0 -0
- data/assets/icons/ui/foo +10 -0
- data/assets/icons/ui/home.png +0 -0
- data/assets/icons/ui/left.png +0 -0
- data/assets/icons/ui/next.png +0 -0
- data/assets/icons/ui/right.png +0 -0
- data/assets/icons/ui/start.png +0 -0
- data/assets/icons/ui/up.png +0 -0
- data/assets/icons/x.svg +1 -0
- data/assets/icons/youtube.svg +1 -0
- data/assets/samples/placeholder.svg +9 -0
- data/assets/themes/standard/favicon.svg +6 -0
- data/bin/scriptorium +1511 -0
- data/doc/README.txt +6 -0
- data/doc/anti-amnesia/20250727-054000-scriptorium-overview.md +95 -0
- data/doc/anti-amnesia/20250727-060000-api-design-tui-planning.md +34 -0
- data/doc/anti-amnesia/20250727-061000-runeblog-tui-analysis.md +50 -0
- data/doc/anti-amnesia/20250727-123000-anti-amnesia-conventions.md +31 -0
- data/doc/anti-amnesia/20250727-154000-livetext-plugin-file-stats.md +73 -0
- data/doc/anti-amnesia/20250727-172600-cursor-rbenv-ruby-version-mystery.md +64 -0
- data/doc/anti-amnesia/20250727-172600-unified-minitest-framework.md +70 -0
- data/doc/anti-amnesia/20250727-172900-ai-cognitive-assessment-capabilities.md +40 -0
- data/doc/anti-amnesia/20250727-173000-widget-testing-achievement.md +110 -0
- data/doc/anti-amnesia/20250727-180000-post-id-num-refactoring.md +73 -0
- data/doc/anti-amnesia/20250728-124243-aaa-syntax-clarification.md +46 -0
- data/doc/anti-amnesia/20250728-124421-conversation-summary-concise.md +124 -0
- data/doc/anti-amnesia/20250729-190000-scriptorium-tui-testing-complete.md +46 -0
- data/doc/anti-amnesia/20250729-200000-scriptorium-tui-testing-edit-file-workflow.md +97 -0
- data/doc/anti-amnesia/20250729-210000-reddit-autopost-integration-complete.md +158 -0
- data/doc/anti-amnesia/20250729-211500-dependency-management-system.md +211 -0
- data/doc/anti-amnesia/20250729-213000-python-virtual-environment-setup.md +141 -0
- data/doc/anti-amnesia/20250729-214500-theme-management-commands.md +211 -0
- data/doc/anti-amnesia/20250729-215000-version-update-to-0.6.0.md +134 -0
- data/doc/anti-amnesia/20250729-220000-user-guide-complete.md +41 -0
- data/doc/anti-amnesia/20250804-190500-cognitive-loop-bug.md +45 -0
- data/doc/anti-amnesia/20250804-190700-anti-amnesia-timestamping-fix.md +30 -0
- data/doc/anti-amnesia/20250804-213700-publishing-test-fix.md +49 -0
- data/doc/anti-amnesia/20250804-214400-additional-test-fixes.md +46 -0
- data/doc/anti-amnesia/20250804-220000-asset-function-logic-clarification.md +41 -0
- data/doc/anti-amnesia/20250806-202032-asset-function-logic-clarification.md +41 -0
- data/doc/anti-amnesia/20250807-213025.md +116 -0
- data/doc/anti-amnesia/20250813-082428-syntax-highlighting-and-navigation-improvements.md +256 -0
- data/doc/banner_svg_config.md +114 -0
- data/doc/contrib.lt3 +8 -0
- data/doc/dependencies.md +281 -0
- data/doc/hacker.lt3 +5 -0
- data/doc/reddit_credentials_template.json +8 -0
- data/doc/reddit_integration.md +207 -0
- data/doc/user.lt3 +38 -0
- data/doc/user_guide_section_1.md +137 -0
- data/doc/user_guide_section_10.md +515 -0
- data/doc/user_guide_section_11.md +708 -0
- data/doc/user_guide_section_2.md +233 -0
- data/doc/user_guide_section_3.md +5 -0
- data/doc/user_guide_section_4.md +221 -0
- data/doc/user_guide_section_5.md +243 -0
- data/doc/user_guide_section_6.md +147 -0
- data/doc/user_guide_section_7.md +311 -0
- data/doc/user_guide_section_8.md +224 -0
- data/doc/user_guide_section_9.md +375 -0
- data/doc/userdoc-toc.txt +88 -0
- data/lib/rouge/lexers/livetext.rb +74 -0
- data/lib/scriptorium/api.rb +640 -0
- data/lib/scriptorium/banner_svg.rb +742 -0
- data/lib/scriptorium/contract.rb +33 -0
- data/lib/scriptorium/exceptions.rb +170 -1
- data/lib/scriptorium/helpers.rb +475 -0
- data/lib/scriptorium/post.rb +195 -0
- data/lib/scriptorium/reddit.rb +83 -0
- data/lib/scriptorium/repo.rb +624 -0
- data/lib/scriptorium/standard_files.rb +515 -0
- data/lib/scriptorium/syntax_highlighter.rb +234 -0
- data/lib/scriptorium/theme.rb +179 -0
- data/lib/scriptorium/version.rb +2 -2
- data/lib/scriptorium/view.rb +976 -0
- data/lib/scriptorium/widgets/featured_posts.rb +149 -0
- data/lib/scriptorium/widgets/links.rb +112 -0
- data/lib/scriptorium/widgets/pages.rb +133 -0
- data/lib/scriptorium/widgets/widget.rb +133 -0
- data/lib/scriptorium.rb +21 -40
- data/lib/skeleton.rb +8 -2
- data/scriptorium.gemspec +15 -4
- data/test/README.md +69 -0
- data/test/all +43 -0
- data/test/api_demo.rb +99 -0
- data/test/assets/imagenotfound.jpg +0 -0
- data/test/assets/images/.DS_Store +0 -0
- data/test/assets/images/README.md +27 -0
- data/test/assets/images/odd_aspect.png +0 -0
- data/test/assets/images/perfect.png +0 -0
- data/test/assets/images/small.png +0 -0
- data/test/assets/images/tall.png +0 -0
- data/test/assets/images/very_tall.png +0 -0
- data/test/assets/images/very_wide.png +0 -0
- data/test/assets/images/wide.png +0 -0
- data/test/assets/testbanner.jpg +0 -0
- data/test/banner_svg/simple_helpers.rb +13 -0
- data/test/banner_svg/unit.rb +768 -0
- data/test/ed_test.rb +204 -0
- data/test/integration/cursor_banner_combinations.rb +193 -0
- data/test/integration/cursor_banner_features.rb +374 -0
- data/test/integration/integration_test.rb +326 -0
- data/test/livetext_plugin_test.rb +229 -0
- data/test/manual/asset_mgmt.rb +67 -0
- data/test/manual/banner-tests/config.txt +3 -0
- data/test/manual/banner-tests/index.html +45 -0
- data/test/manual/banner-tests/test01.html +58 -0
- data/test/manual/banner-tests/test02.html +58 -0
- data/test/manual/banner-tests/test03.html +58 -0
- data/test/manual/banner-tests/test04.html +65 -0
- data/test/manual/banner-tests/test05.html +65 -0
- data/test/manual/banner-tests/test06.html +65 -0
- data/test/manual/banner-tests/test07.html +65 -0
- data/test/manual/banner-tests/test08.html +59 -0
- data/test/manual/banner-tests/test09.html +59 -0
- data/test/manual/banner-tests/test10.html +59 -0
- data/test/manual/banner-tests/test11.html +59 -0
- data/test/manual/banner-tests/test12.html +59 -0
- data/test/manual/banner-tests/test13.html +59 -0
- data/test/manual/banner-tests/test14.html +59 -0
- data/test/manual/banner-tests/test15.html +58 -0
- data/test/manual/banner-tests/test16.html +58 -0
- data/test/manual/banner-tests/test17.html +58 -0
- data/test/manual/banner-tests/test18.html +68 -0
- data/test/manual/banner-tests/test19.html +68 -0
- data/test/manual/banner-tests/test20.html +68 -0
- data/test/manual/banner-tests/test21.html +68 -0
- data/test/manual/banner-tests/test22.html +68 -0
- data/test/manual/banner-tests/test23.html +68 -0
- data/test/manual/banner-tests/test24.html +68 -0
- data/test/manual/banner-tests/test25.html +67 -0
- data/test/manual/banner_environment.rb +192 -0
- data/test/manual/deploy_symlink_demo.rb +142 -0
- data/test/manual/environment.rb +67 -0
- data/test/manual/make_banner.rb +153 -0
- data/test/manual/sample_banner_config.txt +12 -0
- data/test/manual/symlink_demo.rb +117 -0
- data/test/manual/test1.rb +47 -0
- data/test/manual/test2.rb +12 -0
- data/test/manual/test3.rb +38 -0
- data/test/manual/test4.rb +40 -0
- data/test/manual/test5.rb +24 -0
- data/test/manual/test6.rb +73 -0
- data/test/manual/test_banner_combinations.rb +120 -0
- data/test/manual/test_banner_features.rb +306 -0
- data/test/manual/test_banner_from_file.rb +150 -0
- data/test/manual/test_banner_in_header.rb +35 -0
- data/test/manual/test_code_highlighting.rb +68 -0
- data/test/manual/test_complex_header.rb +74 -0
- data/test/manual/test_empty_header.rb +32 -0
- data/test/manual/test_radial_custom.rb +58 -0
- data/test/manual/test_radial_large_radius.rb +52 -0
- data/test/manual/test_svg_debug.rb +47 -0
- data/test/manual/test_syntax_highlighting.rb +147 -0
- data/test/pages-demo/config/currentview.txt +1 -0
- data/test/pages-demo/views/demo/config/bootstrap_css.txt +5 -0
- data/test/pages-demo/views/demo/config/bootstrap_js.txt +4 -0
- data/test/pages-demo/views/demo/config/common.js +57 -0
- data/test/pages-demo/views/demo/config/footer.txt +1 -0
- data/test/pages-demo/views/demo/config/global-head.txt +8 -0
- data/test/pages-demo/views/demo/config/header.txt +1 -0
- data/test/pages-demo/views/demo/config/layout.txt +1 -0
- data/test/pages-demo/views/demo/config/left.txt +1 -0
- data/test/pages-demo/views/demo/config/main.txt +1 -0
- data/test/pages-demo/views/demo/config/right.txt +1 -0
- data/test/pages-demo/views/demo/config.txt +3 -0
- data/test/pages-demo/views/demo/output/panes/footer.html +1 -0
- data/test/pages-demo/views/demo/output/panes/header.html +1 -0
- data/test/pages-demo/views/demo/output/panes/left.html +1 -0
- data/test/pages-demo/views/demo/output/panes/main.html +1 -0
- data/test/pages-demo/views/demo/output/panes/right.html +1 -0
- data/test/rubytext/rubytext_comprehensive_test.rb +307 -0
- data/test/rubytext/rubytext_demo_test.rb +42 -0
- data/test/rubytext/rubytext_testing_guide.md +277 -0
- data/test/run_automated_tests.rb +45 -0
- data/test/scriptorium-TEST-1754622690-146/config/bootstrap_css.txt +5 -0
- data/test/scriptorium-TEST-1754622690-146/config/bootstrap_js.txt +4 -0
- data/test/scriptorium-TEST-1754622690-146/config/common.js +57 -0
- data/test/scriptorium-TEST-1754622690-146/config/currentview.txt +1 -0
- data/test/scriptorium-TEST-1754622690-146/config/global-head.txt +9 -0
- data/test/scriptorium-TEST-1754622690-146/config/last_post_num.txt +1 -0
- data/test/scriptorium-TEST-1754622690-146/config/os_helpers.rb +4 -0
- data/test/scriptorium-TEST-1754622690-146/config/widgets.txt +3 -0
- data/test/scriptorium-TEST-1754622690-146/posts/0001/meta.txt +8 -0
- data/test/scriptorium-TEST-1754622690-146/posts/0001/source.lt3 +6 -0
- data/test/scriptorium-TEST-1754622690-146/themes/standard/README.txt +1 -0
- data/test/scriptorium-TEST-1754622690-146/themes/standard/config.txt +1 -0
- data/test/scriptorium-TEST-1754622690-146/themes/standard/initial/post.lt3 +12 -0
- data/test/scriptorium-TEST-1754622690-146/themes/standard/layout/config/footer.txt +2 -0
- data/test/scriptorium-TEST-1754622690-146/themes/standard/layout/config/header.txt +4 -0
- data/test/scriptorium-TEST-1754622690-146/themes/standard/layout/config/left.txt +3 -0
- data/test/scriptorium-TEST-1754622690-146/themes/standard/layout/config/main.txt +5 -0
- data/test/scriptorium-TEST-1754622690-146/themes/standard/layout/config/right.txt +3 -0
- data/test/scriptorium-TEST-1754622690-146/themes/standard/layout/gen/text.css +1 -0
- data/test/scriptorium-TEST-1754622690-146/themes/standard/layout/layout.txt +5 -0
- data/test/scriptorium-TEST-1754622690-146/themes/standard/templates/index.lt3 +1 -0
- data/test/scriptorium-TEST-1754622690-146/themes/standard/templates/index_entry.lt3 +14 -0
- data/test/scriptorium-TEST-1754622690-146/themes/standard/templates/post.lt3 +13 -0
- data/test/scriptorium-TEST-1754622690-146/themes/standard/templates/widget.lt3 +1 -0
- data/test/scriptorium-TEST-1754622690-146/views/sample/config/bootstrap_css.txt +5 -0
- data/test/scriptorium-TEST-1754622690-146/views/sample/config/bootstrap_js.txt +4 -0
- data/test/scriptorium-TEST-1754622690-146/views/sample/config/common.js +57 -0
- data/test/scriptorium-TEST-1754622690-146/views/sample/config/deploy.txt +5 -0
- data/test/scriptorium-TEST-1754622690-146/views/sample/config/footer.txt +2 -0
- data/test/scriptorium-TEST-1754622690-146/views/sample/config/global-head.txt +9 -0
- data/test/scriptorium-TEST-1754622690-146/views/sample/config/header.txt +4 -0
- data/test/scriptorium-TEST-1754622690-146/views/sample/config/layout.txt +5 -0
- data/test/scriptorium-TEST-1754622690-146/views/sample/config/left.txt +3 -0
- data/test/scriptorium-TEST-1754622690-146/views/sample/config/main.txt +5 -0
- data/test/scriptorium-TEST-1754622690-146/views/sample/config/reddit.txt +10 -0
- data/test/scriptorium-TEST-1754622690-146/views/sample/config/right.txt +3 -0
- data/test/scriptorium-TEST-1754622690-146/views/sample/config/social.txt +7 -0
- data/test/scriptorium-TEST-1754622690-146/views/sample/config/status.txt +7 -0
- data/test/scriptorium-TEST-1754622690-146/views/sample/config.txt +3 -0
- data/test/scriptorium-TEST-1754622690-146/views/sample/layout/footer.html +3 -0
- data/test/scriptorium-TEST-1754622690-146/views/sample/layout/header.html +3 -0
- data/test/scriptorium-TEST-1754622690-146/views/sample/layout/left.html +3 -0
- data/test/scriptorium-TEST-1754622690-146/views/sample/layout/main.html +3 -0
- data/test/scriptorium-TEST-1754622690-146/views/sample/layout/right.html +3 -0
- data/test/scriptorium-TEST-1754622690-146/views/sample/output/panes/footer.html +1 -0
- data/test/scriptorium-TEST-1754622690-146/views/sample/output/panes/header.html +1 -0
- data/test/scriptorium-TEST-1754622690-146/views/sample/output/panes/left.html +1 -0
- data/test/scriptorium-TEST-1754622690-146/views/sample/output/panes/main.html +1 -0
- data/test/scriptorium-TEST-1754622690-146/views/sample/output/panes/right.html +1 -0
- data/test/staging/.DS_Store +0 -0
- data/test/syntax_highlighting_test.lt3 +124 -0
- data/test/test_helpers.rb +230 -0
- data/test/tui_editor_integration_test.rb +296 -0
- data/test/tui_integration_test.rb +637 -0
- data/test/unit/api.rb +1056 -0
- data/test/unit/asset_management.rb +245 -0
- data/test/unit/clipboard_test.rb +60 -0
- data/test/unit/contract_test.rb +91 -0
- data/test/unit/core.rb +857 -0
- data/test/unit/deploy_test.rb +187 -0
- data/test/unit/gem_asset_management.rb +189 -0
- data/test/unit/livetext_basic.rb +69 -0
- data/test/unit/livetext_compatibility.rb +89 -0
- data/test/unit/post.rb +244 -0
- data/test/unit/read_commented_file_test.rb +276 -0
- data/test/unit/reddit_test.rb +235 -0
- data/test/unit/repo.rb +548 -0
- data/test/unit/social_test.rb +369 -0
- data/test/unit/symlink_test.rb +213 -0
- data/test/unit/view.rb +431 -0
- data/test/unit/widgets.rb +669 -0
- data/test/wizard_test.rb +123 -0
- data/ui/README.md +67 -0
- data/ui/common/lib/ui_common.rb +8 -0
- data/ui/rubytext/README.md +191 -0
- data/ui/rubytext/bin/scriptorium-rubytext +402 -0
- data/ui/rubytext/lib/rubytext_ui.rb +300 -0
- data/ui/tui/bin/scriptorium +1420 -0
- data/ui/tui/test/tui_test.rb +23 -0
- data/ui/web/app/app.rb +1378 -0
- data/ui/web/app/error_helpers.rb +150 -0
- data/ui/web/app/views/advanced_config.erb +190 -0
- data/ui/web/app/views/asset_management.erb +589 -0
- data/ui/web/app/views/banner_config.erb +200 -0
- data/ui/web/app/views/configure_view.erb +401 -0
- data/ui/web/app/views/dashboard.erb +162 -0
- data/ui/web/app/views/deploy_config.erb +146 -0
- data/ui/web/app/views/edit_pages.erb +195 -0
- data/ui/web/app/views/edit_post.erb +54 -0
- data/ui/web/app/views/error_page.erb +29 -0
- data/ui/web/app/views/header_config.erb +155 -0
- data/ui/web/app/views/layout_config.erb +147 -0
- data/ui/web/app/views/navbar_config.erb +411 -0
- data/ui/web/app/views/view_dashboard.erb +138 -0
- data/ui/web/bin/scriptorium-web +153 -0
- data/ui/web/test/web_basic_test.rb +38 -0
- data/ui/web/test_navbar.txt +7 -0
- data/ui/web/tmp/web_server.log +5 -0
- data/ui/web/tmp/web_server.pid +1 -0
- metadata +359 -7
- data/lib/scriptorium/engine.rb +0 -22
- data/test/engine/unit.rb +0 -44
data/test/README.md
ADDED
@@ -0,0 +1,69 @@
|
|
1
|
+
# Scriptorium Test Suite
|
2
|
+
|
3
|
+
## Quick Start
|
4
|
+
|
5
|
+
### Run All Tests (Unit + Automated Manual Tests)
|
6
|
+
```bash
|
7
|
+
ruby test/run_automated_tests.rb
|
8
|
+
```
|
9
|
+
|
10
|
+
### Run Unit Tests Only
|
11
|
+
```bash
|
12
|
+
ruby test/all
|
13
|
+
```
|
14
|
+
|
15
|
+
### Run Individual Manual Tests
|
16
|
+
```bash
|
17
|
+
# Interactive mode (opens browser)
|
18
|
+
ruby test/manual/test1.rb
|
19
|
+
|
20
|
+
# Automated mode (no browser, just validation)
|
21
|
+
ruby test/manual/test1.rb --automated
|
22
|
+
```
|
23
|
+
|
24
|
+
## Test Types
|
25
|
+
|
26
|
+
### Unit Tests (`test/unit/`)
|
27
|
+
- **Core functionality tests** - Basic helper methods, file operations
|
28
|
+
- **Repo tests** - Repository creation, management, post handling
|
29
|
+
- **Post tests** - Individual post functionality
|
30
|
+
- **View tests** - View generation and management
|
31
|
+
- **Banner SVG tests** - SVG banner generation and validation
|
32
|
+
|
33
|
+
### Manual Tests (`test/manual/`)
|
34
|
+
- **Integration tests** - End-to-end workflows
|
35
|
+
- **Banner feature tests** - Visual verification of SVG banners
|
36
|
+
- **Widget tests** - Sidebar widgets and functionality
|
37
|
+
- **Layout tests** - Page layout and styling
|
38
|
+
|
39
|
+
## Automated Testing
|
40
|
+
|
41
|
+
All manual tests support `--automated` mode for CI/CD:
|
42
|
+
- No browser interaction required
|
43
|
+
- Validates file generation
|
44
|
+
- Returns exit codes for automation
|
45
|
+
- Use `--automated` as the **last** parameter
|
46
|
+
|
47
|
+
## Environment Setup
|
48
|
+
|
49
|
+
The test environment is automatically configured:
|
50
|
+
- PATH is set to include rbenv shims
|
51
|
+
- Test repositories are created in `test/scriptorium-TEST/`
|
52
|
+
- Webrick server starts on port 8000 for manual tests
|
53
|
+
- Cleanup happens automatically
|
54
|
+
|
55
|
+
## Examples
|
56
|
+
|
57
|
+
```bash
|
58
|
+
# Run all tests
|
59
|
+
ruby test/run_automated_tests.rb
|
60
|
+
|
61
|
+
# Run specific manual test interactively
|
62
|
+
ruby test/manual/test_banner_combinations.rb
|
63
|
+
|
64
|
+
# Run specific manual test in automated mode
|
65
|
+
ruby test/manual/test_banner_combinations.rb --automated
|
66
|
+
|
67
|
+
# Run test3 with specific view
|
68
|
+
ruby test/manual/test3.rb blog1 --automated
|
69
|
+
```
|
data/test/all
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# Set up environment
|
4
|
+
ENV['PATH'] = "#{ENV['HOME']}/.rbenv/shims:#{ENV['PATH']}"
|
5
|
+
|
6
|
+
require 'minitest/autorun'
|
7
|
+
|
8
|
+
puts "\n" + "="*60
|
9
|
+
puts "Running all Scriptorium tests..."
|
10
|
+
puts "="*60
|
11
|
+
|
12
|
+
# Initialize global to track which test files have printed their name
|
13
|
+
$printed_files = []
|
14
|
+
|
15
|
+
# Automatically find and load all test files
|
16
|
+
test_files = %w[
|
17
|
+
unit/api.rb
|
18
|
+
unit/post.rb
|
19
|
+
unit/repo.rb
|
20
|
+
unit/view.rb
|
21
|
+
unit/widgets.rb
|
22
|
+
unit/read_commented_file_test.rb
|
23
|
+
unit/asset_management.rb
|
24
|
+
unit/gem_asset_management.rb
|
25
|
+
unit/reddit_test.rb
|
26
|
+
unit/clipboard_test.rb
|
27
|
+
banner_svg/simple_helpers.rb
|
28
|
+
banner_svg/unit.rb
|
29
|
+
integration/integration_test.rb
|
30
|
+
livetext_plugin_test.rb
|
31
|
+
unit/core.rb
|
32
|
+
ed_test.rb
|
33
|
+
tui_integration_test.rb
|
34
|
+
tui_editor_integration_test.rb
|
35
|
+
]
|
36
|
+
|
37
|
+
|
38
|
+
# Load all test files
|
39
|
+
test_files.each do |file|
|
40
|
+
require_relative file
|
41
|
+
rescue => e
|
42
|
+
puts "Error loading #{file}: #{e.message}"
|
43
|
+
end
|
data/test/api_demo.rb
ADDED
@@ -0,0 +1,99 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require_relative '../lib/scriptorium'
|
4
|
+
|
5
|
+
# Demo of select_posts and search_posts methods
|
6
|
+
puts "=== Scriptorium API Demo: Post Selection and Search ===\n"
|
7
|
+
|
8
|
+
api = Scriptorium::API.new(true)
|
9
|
+
|
10
|
+
# Create some test data
|
11
|
+
api.create_view_and_use("blog", "My Blog")
|
12
|
+
api.create_view("tech", "Tech Posts")
|
13
|
+
|
14
|
+
# Create posts with different content
|
15
|
+
api.create_post("Ruby Programming Guide", "Learn Ruby basics and advanced features", tags: "ruby, programming, tutorial")
|
16
|
+
api.create_post("Python vs Ruby", "Comparing Python and Ruby for web development", tags: "python, ruby, comparison")
|
17
|
+
api.create_post("Scriptorium API Documentation", "Complete guide to the Scriptorium API", tags: "api, documentation, scriptorium")
|
18
|
+
api.create_post("Web Development Tips", "Best practices for modern web development", tags: "web, tips, development")
|
19
|
+
|
20
|
+
puts "Created 4 posts with various content\n"
|
21
|
+
|
22
|
+
# Demo select_posts with block filtering
|
23
|
+
puts "\n=== select_posts Examples ==="
|
24
|
+
|
25
|
+
# Filter posts by title containing "Ruby"
|
26
|
+
ruby_posts = api.select_posts { |post| post.title.include?("Ruby") }
|
27
|
+
puts "Posts with 'Ruby' in title: #{ruby_posts.map(&:title).join(', ')}"
|
28
|
+
|
29
|
+
# Filter posts by tags containing "api"
|
30
|
+
api_posts = api.select_posts { |post| post.tags.include?("api") }
|
31
|
+
puts "Posts tagged with 'api': #{api_posts.map(&:title).join(', ')}"
|
32
|
+
|
33
|
+
# Filter posts by title length
|
34
|
+
long_title_posts = api.select_posts { |post| post.title.length > 20 }
|
35
|
+
puts "Posts with long titles: #{long_title_posts.map(&:title).join(', ')}"
|
36
|
+
|
37
|
+
# Demo search_posts with keyword criteria
|
38
|
+
puts "\n=== search_posts Examples ==="
|
39
|
+
|
40
|
+
# Search by title with regex
|
41
|
+
ruby_title_posts = api.search_posts(title: /Ruby/)
|
42
|
+
puts "Posts with 'Ruby' in title (regex): #{ruby_title_posts.map(&:title).join(', ')}"
|
43
|
+
|
44
|
+
# Search by body content
|
45
|
+
body_posts = api.search_posts(body: "development")
|
46
|
+
puts "Posts with 'development' in body: #{body_posts.map(&:title).join(', ')}"
|
47
|
+
|
48
|
+
# Search by tags
|
49
|
+
tagged_posts = api.search_posts(tags: "programming")
|
50
|
+
puts "Posts tagged with 'programming': #{tagged_posts.map(&:title).join(', ')}"
|
51
|
+
|
52
|
+
# Multiple criteria (AND)
|
53
|
+
multi_posts = api.search_posts(title: /Ruby/, body: "basics")
|
54
|
+
puts "Posts with 'Ruby' in title AND 'basics' in body: #{multi_posts.map(&:title).join(', ')}"
|
55
|
+
|
56
|
+
# Demo with blurb (create a post with blurb)
|
57
|
+
puts "\n=== search_posts with Blurb ==="
|
58
|
+
api.create_post("Ruby Deep Dive", "Advanced Ruby concepts", blurb: "This is a comprehensive guide to Ruby programming.")
|
59
|
+
|
60
|
+
blurb_posts = api.search_posts(blurb: "comprehensive")
|
61
|
+
puts "Posts with 'comprehensive' in blurb: #{blurb_posts.map(&:title).join(', ')}"
|
62
|
+
|
63
|
+
# Demo draft management
|
64
|
+
puts "\n=== Draft Management ==="
|
65
|
+
draft_path = api.draft(title: "Temporary Draft", body: "This will be deleted")
|
66
|
+
puts "Created draft: #{draft_path}"
|
67
|
+
|
68
|
+
drafts = api.drafts
|
69
|
+
puts "Drafts before deletion: #{drafts.length}"
|
70
|
+
|
71
|
+
api.delete_draft(draft_path)
|
72
|
+
drafts = api.drafts
|
73
|
+
puts "Drafts after deletion: #{drafts.length}"
|
74
|
+
|
75
|
+
# Demo generate_view
|
76
|
+
puts "\n=== Generate View ==="
|
77
|
+
result = api.generate_view
|
78
|
+
puts "Generated view content: #{result}"
|
79
|
+
|
80
|
+
# Demo widget generation
|
81
|
+
puts "\n=== Widget Generation ==="
|
82
|
+
|
83
|
+
# Create widget directory and sample data in the current view
|
84
|
+
widget_dir = api.repo.root/:views/api.current_view.name/:widgets/"links"
|
85
|
+
FileUtils.mkdir_p(widget_dir)
|
86
|
+
File.write(widget_dir/"list.txt", "https://ruby-lang.org, Ruby Language\nhttps://github.com, GitHub")
|
87
|
+
|
88
|
+
result = api.generate_widget("links")
|
89
|
+
puts "Generated links widget: #{result}"
|
90
|
+
|
91
|
+
# Check if widget files were created
|
92
|
+
if File.exist?(widget_dir/"links-card.html")
|
93
|
+
puts "Widget card file created successfully"
|
94
|
+
else
|
95
|
+
puts "Widget card file not found"
|
96
|
+
end
|
97
|
+
|
98
|
+
puts "\n=== Demo Complete ==="
|
99
|
+
api.destroy
|
Binary file
|
Binary file
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# Test Images for BannerSVG
|
2
|
+
|
3
|
+
This directory contains test images for verifying image background functionality in BannerSVG.
|
4
|
+
|
5
|
+
## Expected Images
|
6
|
+
|
7
|
+
| Filename | Size | Aspect | Purpose |
|
8
|
+
|----------|------|--------|---------|
|
9
|
+
| `perfect.png` | 800x100 | 8:1 | Ideal case - matches default banner aspect |
|
10
|
+
| `wide.png` | 800x50 | 16:1 | Tests left/right cropping |
|
11
|
+
| `tall.png` | 100x100 | 1:1 | Tests top/bottom cropping |
|
12
|
+
| `very_tall.png` | 100x400 | 1:4 | Tests extreme vertical cropping |
|
13
|
+
| `very_wide.png` | 1600x100 | 16:1 | Tests extreme horizontal cropping |
|
14
|
+
| `small.png` | 200x25 | 8:1 | Tests scaling up of small images |
|
15
|
+
| `odd_aspect.png` | 500x123 | ~4:1 | Tests non-integer aspect ratios |
|
16
|
+
|
17
|
+
## Expected Behavior
|
18
|
+
|
19
|
+
- **Perfect match**: Image should display without cropping
|
20
|
+
- **Wide images**: Should crop left/right, center the image
|
21
|
+
- **Tall images**: Should crop top/bottom, center the image
|
22
|
+
- **Small images**: Should scale up to fill the banner
|
23
|
+
- **All images**: Should use `preserveAspectRatio="xMidYMid slice"` for cropping
|
24
|
+
|
25
|
+
## Manual Testing
|
26
|
+
|
27
|
+
Run `ruby test/manual/test_banner_features.rb` to see these images in action with different banner configurations.
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module SimpleTestHelpers
|
2
|
+
def assert_present(str, *targets)
|
3
|
+
result = true
|
4
|
+
missing = []
|
5
|
+
targets.each do |t|
|
6
|
+
if ! str.include?(t)
|
7
|
+
result = false
|
8
|
+
missing << t
|
9
|
+
end
|
10
|
+
end
|
11
|
+
assert result, "Targets missing: #{missing.join(", ").inspect}"
|
12
|
+
end
|
13
|
+
end
|