scarpe 0.4.0 → 0.5.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.
- checksums.yaml +4 -4
- data/.cursor/rules/commit-style-preferences.mdc +72 -0
- data/.cursor/rules/component_context.mdc +82 -0
- data/.cursor/rules/debug-failed-tests.mdc +100 -0
- data/.cursor/rules/display_service_context.mdc +80 -0
- data/.cursor/rules/event_handling_context.mdc +100 -0
- data/.cursor/rules/git-pager-handling.mdc +64 -0
- data/.cursor/rules/lacci-context.mdc +52 -0
- data/.cursor/rules/scarpe_design_context.mdc +46 -0
- data/.cursor/rules/shoes_compatibility_context.mdc +75 -0
- data/.cursor/rules/timeout_context.mdc +78 -0
- data/.cursor/rules/update_lacci_and_wv.mdc +8 -0
- data/.cursor/rules/what_is_scarpe.mdc +22 -0
- data/.cursor/rules/writing-new-rules.mdc +73 -0
- data/CHANGELOG.md +10 -1
- data/CLAUDE.md +223 -0
- data/Gemfile +0 -1
- data/Gemfile.lock +78 -58
- data/README.md +4 -7
- data/Rakefile +17 -25
- data/docs/SCARPE_FEATURES.md +38 -0
- data/docs/_config.yml +13 -0
- data/docs/calzini_components_and_updates.md +78 -0
- data/docs/display_service_separation.md +39 -0
- data/docs/documentation.md +43 -0
- data/docs/event_loops.md +66 -0
- data/docs/image.png +0 -0
- data/docs/index.md +118 -0
- data/docs/lacci.md +121 -0
- data/docs/scarpe_shoes_incompatibilities.md +71 -0
- data/docs/shoes_and_display_events.md +55 -0
- data/docs/shoes_implementations.md +79 -0
- data/docs/static/manual.md +5 -0
- data/docs/static/scarpe-logo.png +0 -0
- data/docs/timeouts_and_handlers.md +66 -0
- data/docs/web_archaeology.md +76 -0
- data/examples/background_with_image.rb +14 -5
- data/examples/bloopsaphone/working/feepogram.rb +1 -1
- data/examples/bloopsaphone/working/le_dance_des_rubis.rb +135 -0
- data/examples/bloopsaphone/working/pixel_dreams_in_ruby.rb +131 -0
- data/examples/bloopsaphone/working/type_rebellion.rb +157 -0
- data/examples/border.rb +1 -1
- data/examples/internal_link_navigation.rb +19 -0
- data/examples/page_navigation_single_app.rb +42 -0
- data/examples/shoes_subclass_app.rb +25 -0
- data/examples/url_routing_example.rb +67 -0
- data/lacci/Gemfile +0 -2
- data/lacci/Gemfile.lock +4 -32
- data/lacci/lacci.gemspec +1 -1
- data/lacci/lib/lacci/version.rb +1 -1
- data/lacci/lib/scarpe/niente/app.rb +12 -1
- data/lacci/lib/scarpe/niente/shoes_spec.rb +4 -5
- data/lacci/lib/scarpe/niente.rb +1 -0
- data/lacci/lib/shoes/app.rb +166 -61
- data/lacci/lib/shoes/constants.rb +1 -0
- data/lacci/lib/shoes/drawable.rb +35 -19
- data/lacci/lib/shoes/drawables/arc.rb +2 -2
- data/lacci/lib/shoes/drawables/arrow.rb +2 -2
- data/lacci/lib/shoes/drawables/border.rb +1 -1
- data/lacci/lib/shoes/drawables/button.rb +1 -1
- data/lacci/lib/shoes/drawables/edit_line.rb +1 -1
- data/lacci/lib/shoes/drawables/flow.rb +1 -1
- data/lacci/lib/shoes/drawables/line.rb +2 -2
- data/lacci/lib/shoes/drawables/link.rb +11 -1
- data/lacci/lib/shoes/drawables/oval.rb +2 -2
- data/lacci/lib/shoes/drawables/rect.rb +2 -2
- data/lacci/lib/shoes/drawables/shape.rb +2 -2
- data/lacci/lib/shoes/drawables/slot.rb +5 -3
- data/lacci/lib/shoes/drawables/stack.rb +1 -1
- data/lacci/lib/shoes/drawables/star.rb +1 -1
- data/lacci/lib/shoes/drawables/widget.rb +1 -1
- data/lacci/lib/shoes.rb +94 -17
- data/lacci/test/test_margin_helper.rb +1 -1
- data/lacci/test/test_niente_test_infra.rb +14 -0
- data/lacci/test/test_shoes_errors.rb +15 -13
- data/lib/scarpe/assets.rb +2 -1
- data/lib/scarpe/shoes_spec.rb +2 -1
- data/lib/scarpe/version.rb +1 -1
- data/lib/scarpe/wv/edit_line.rb +2 -2
- data/lib/scarpe/wv.rb +8 -1
- data/scarpe-components/Gemfile +0 -2
- data/scarpe-components/Gemfile.lock +4 -34
- data/scarpe-components/lib/scarpe/components/calzini/misc.rb +10 -2
- data/scarpe-components/lib/scarpe/components/calzini/para.rb +6 -1
- data/scarpe-components/lib/scarpe/components/calzini/slots.rb +2 -0
- data/scarpe-components/lib/scarpe/components/port_helpers.rb +30 -0
- data/scarpe-components/lib/scarpe/components/version.rb +1 -1
- data/scarpe-components/scarpe-components.gemspec +1 -1
- data/scarpe-components/test/test_port_helpers.rb +12 -0
- metadata +60 -22
- data/.rubocop.yml +0 -94
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Share timeout and handler context when working with timing-related code
|
|
3
|
+
globs:
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
# Timeout and Handler Context
|
|
7
|
+
|
|
8
|
+
<rule>
|
|
9
|
+
name: timeout_context
|
|
10
|
+
description: Share relevant timeout and handler documentation when working with timing-related code
|
|
11
|
+
filters:
|
|
12
|
+
- type: file
|
|
13
|
+
pattern: **/*timeout*.rb
|
|
14
|
+
- type: file
|
|
15
|
+
pattern: **/*timeout*.md
|
|
16
|
+
- type: file
|
|
17
|
+
pattern: **/*handler*.rb
|
|
18
|
+
- type: file
|
|
19
|
+
pattern: **/*handler*.md
|
|
20
|
+
- type: file
|
|
21
|
+
pattern: **/*timer*.rb
|
|
22
|
+
- type: file
|
|
23
|
+
pattern: **/*timer*.md
|
|
24
|
+
|
|
25
|
+
actions:
|
|
26
|
+
- type: suggest
|
|
27
|
+
message: |
|
|
28
|
+
# Timeout and Handler Context
|
|
29
|
+
|
|
30
|
+
When working with Scarpe's timeout and handler system, consider:
|
|
31
|
+
|
|
32
|
+
1. Timeout Implementation
|
|
33
|
+
- [timeouts_and_handlers.md](mdc:docs/timeouts_and_handlers.md) - Core timeout documentation
|
|
34
|
+
- [event_loops.md](mdc:docs/event_loops.md) - Event loop integration
|
|
35
|
+
|
|
36
|
+
2. Key Concepts:
|
|
37
|
+
```ruby
|
|
38
|
+
def after(milliseconds, &block)
|
|
39
|
+
register_timeout(Time.now + (milliseconds / 1000.0), block)
|
|
40
|
+
end
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
3. Cooperative Nature:
|
|
44
|
+
- Timeouts don't interrupt execution
|
|
45
|
+
- Processed when event loop is ready
|
|
46
|
+
- Timing is approximate, not exact
|
|
47
|
+
|
|
48
|
+
4. Handler Registration:
|
|
49
|
+
- Handlers registered with specific events
|
|
50
|
+
- Multiple handlers per event possible
|
|
51
|
+
- Order of execution preserved
|
|
52
|
+
|
|
53
|
+
5. Best Practices:
|
|
54
|
+
- Keep handlers non-blocking
|
|
55
|
+
- Use appropriate timing granularity
|
|
56
|
+
- Consider event loop implications
|
|
57
|
+
- Handle errors appropriately
|
|
58
|
+
|
|
59
|
+
6. Additional Resources:
|
|
60
|
+
- Wiki: https://github.com/scarpe-team/scarpe/wiki/ScarpeDesign.md#timeouts-and-handlers
|
|
61
|
+
- Related sections:
|
|
62
|
+
* Event Loops
|
|
63
|
+
* Display Service Separation
|
|
64
|
+
* Shoes and Display Events
|
|
65
|
+
|
|
66
|
+
examples:
|
|
67
|
+
- description: "Working with timeouts"
|
|
68
|
+
input: |
|
|
69
|
+
When implementing timeouts:
|
|
70
|
+
1. Consider cooperative nature
|
|
71
|
+
2. Use appropriate timing
|
|
72
|
+
3. Keep handlers non-blocking
|
|
73
|
+
4. Handle errors properly
|
|
74
|
+
|
|
75
|
+
metadata:
|
|
76
|
+
priority: high
|
|
77
|
+
version: 1.0
|
|
78
|
+
</rule>
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
description:
|
|
3
|
+
globs: lacci/**/*,lib/scarpe/wv/**/*,lib/scarpe/wv/*.rb
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
Ensure, that you recognize that a webview (WV) drawable and lacci drawable must BOTH be updated when adding new user DSL/features.
|
|
7
|
+
|
|
8
|
+
You also need to update calzini under scarpe-components
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
---
|
|
2
|
+
description:
|
|
3
|
+
globs:
|
|
4
|
+
alwaysApply: true
|
|
5
|
+
---
|
|
6
|
+
Scarpe is a modern attempt at an implementation of Why The Lucky Stiff's Shoes.rb.
|
|
7
|
+
|
|
8
|
+
It is not complete.
|
|
9
|
+
|
|
10
|
+
It is built on Webview.
|
|
11
|
+
|
|
12
|
+
Our primary goal is to as many shoes apps from `examples/legacy/not_checked` working as possible. So, you can check them for bits of DSL that aren't yet up to scratch. They used to work.
|
|
13
|
+
|
|
14
|
+
`docs/static/manual-en.txt` is our "bible". It is nearly a perfect representation of how Shoes _should_ work. It's what we want to do. With every fibre of your being I want you to help me get the not checked examples working and anything from this manual.
|
|
15
|
+
|
|
16
|
+
It is 3,500 lines long though.
|
|
17
|
+
|
|
18
|
+
To run an example to see if it's working (I'll have to check) run something like:
|
|
19
|
+
|
|
20
|
+
`SCARPE_BOOTSTRAP_THEME=sketchy bundle exec ./exe/scarpe examples/page_navigation_single_app.rb --debug
|
|
21
|
+
`
|
|
22
|
+
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
---
|
|
2
|
+
description:
|
|
3
|
+
globs:
|
|
4
|
+
alwaysApply: true
|
|
5
|
+
---
|
|
6
|
+
# Writing New Rules
|
|
7
|
+
|
|
8
|
+
<rule>
|
|
9
|
+
name: writing_new_rules
|
|
10
|
+
description: Guidelines for creating and formatting new rules in the rules directory
|
|
11
|
+
filters:
|
|
12
|
+
- type: event
|
|
13
|
+
pattern: "new_rule_creation"
|
|
14
|
+
|
|
15
|
+
actions:
|
|
16
|
+
- type: suggest
|
|
17
|
+
message: |
|
|
18
|
+
# Rule Creation Process
|
|
19
|
+
|
|
20
|
+
1. Always create new rules with .mc extension first:
|
|
21
|
+
- Create file as `.cursor/rules/rule-name.mc`
|
|
22
|
+
- Only convert to .mdc after content is approved
|
|
23
|
+
|
|
24
|
+
2. Required File Structure:
|
|
25
|
+
```
|
|
26
|
+
---
|
|
27
|
+
description: Brief description of the rule's purpose
|
|
28
|
+
globs: "pattern to match files this rule applies to"
|
|
29
|
+
---
|
|
30
|
+
# Rule Title
|
|
31
|
+
|
|
32
|
+
<rule>
|
|
33
|
+
name: rule_name
|
|
34
|
+
description: Detailed description
|
|
35
|
+
filters:
|
|
36
|
+
- type: event
|
|
37
|
+
pattern: "relevant_event"
|
|
38
|
+
|
|
39
|
+
actions:
|
|
40
|
+
- type: suggest
|
|
41
|
+
message: |
|
|
42
|
+
# Action Title
|
|
43
|
+
Action content...
|
|
44
|
+
|
|
45
|
+
examples:
|
|
46
|
+
- description: "Example scenario"
|
|
47
|
+
input: |
|
|
48
|
+
Example input...
|
|
49
|
+
|
|
50
|
+
metadata:
|
|
51
|
+
priority: level
|
|
52
|
+
version: 1.0
|
|
53
|
+
</rule>
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
3. After approval, rename to .mdc:
|
|
57
|
+
```bash
|
|
58
|
+
mv .cursor/rules/rule-name.mc .cursor/rules/rule-name.mdc
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
examples:
|
|
62
|
+
- description: "Creating a new rule"
|
|
63
|
+
input: |
|
|
64
|
+
# First create with .mc extension
|
|
65
|
+
touch .cursor/rules/new-feature.mc
|
|
66
|
+
|
|
67
|
+
# After approval, rename to .mdc
|
|
68
|
+
mv .cursor/rules/new-feature.mc .cursor/rules/new-feature.mdc
|
|
69
|
+
|
|
70
|
+
metadata:
|
|
71
|
+
priority: high
|
|
72
|
+
version: 1.0
|
|
73
|
+
</rule>
|
data/CHANGELOG.md
CHANGED
|
@@ -4,12 +4,21 @@ Here we write upgrading notes for brands. It's a team effort to make them as
|
|
|
4
4
|
straightforward as possible.
|
|
5
5
|
|
|
6
6
|
### Enhancements
|
|
7
|
+
- Added CLAUDE.md for agentic coding assistance
|
|
8
|
+
- Removed bloops as a required dependency - sound is now opt-in (install bloops gem separately if needed)
|
|
9
|
+
- Added base64 gem dependency for Ruby 3.4+ compatibility
|
|
7
10
|
|
|
8
11
|
### Bugs Fixed
|
|
9
|
-
-
|
|
12
|
+
- #569 link(click: "/path") now triggers internal navigation via visit(); paths like "/foo" also fall back to page(:foo) if no URL route matches
|
|
13
|
+
- Support for `class MyApp < Shoes` inheritance pattern with URL routing
|
|
14
|
+
- Fixed background() with remote URLs (now properly wrapped in CSS url())
|
|
10
15
|
|
|
11
16
|
### Incompatibilities
|
|
12
17
|
|
|
18
|
+
## [0.4.0] - 2024-05-06 - Strangers
|
|
19
|
+
|
|
20
|
+
Core Scarpe has been relatively stable for awhile. A lot of this release is bugfixes and refactors.
|
|
21
|
+
|
|
13
22
|
## [0.3.1] - 2023-??-?? - Up
|
|
14
23
|
|
|
15
24
|
Lots of bug fixes. We're also still implementing major Shoes3 features.
|
data/CLAUDE.md
ADDED
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
# Scarpe - AI Assistant Context
|
|
2
|
+
|
|
3
|
+
> *In loving memory of Noah Gibbs, who believed in this project and whose thoughtful documentation lives on in every design decision.*
|
|
4
|
+
|
|
5
|
+
## What is Scarpe?
|
|
6
|
+
|
|
7
|
+
**Scarpe** (Italian for "shoes") is a modern reimplementation of [Why The Lucky Stiff's Shoes](https://github.com/shoes/shoes-deprecated) - a beloved Ruby GUI toolkit that made desktop app creation accessible to absolute beginners.
|
|
8
|
+
|
|
9
|
+
```ruby
|
|
10
|
+
# This is all it takes to create a window with a button
|
|
11
|
+
Shoes.app { button("Click me!") { alert("Good job.") } }
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
Scarpe preserves _why's elegant DSL while building on modern technology (Webview). It is **not yet complete**, but actively maintained.
|
|
15
|
+
|
|
16
|
+
## The Mission
|
|
17
|
+
|
|
18
|
+
Our primary goal is **backwards compatibility with classic Shoes apps**. We want old Shoes programs to just work.
|
|
19
|
+
|
|
20
|
+
### The Bible
|
|
21
|
+
|
|
22
|
+
`docs/static/manual.md` (3,500+ lines) is our authoritative reference for how Shoes _should_ work. Every implementation decision should align with this manual.
|
|
23
|
+
|
|
24
|
+
### The Proving Ground
|
|
25
|
+
|
|
26
|
+
`examples/legacy/not_checked/` contains Shoes apps that **used to work** in classic Shoes. Getting these examples running is our north star.
|
|
27
|
+
|
|
28
|
+
## Architecture Overview
|
|
29
|
+
|
|
30
|
+
Scarpe has a layered architecture:
|
|
31
|
+
|
|
32
|
+
### Lacci (The Compatibility Layer)
|
|
33
|
+
**Location:** `lacci/`
|
|
34
|
+
|
|
35
|
+
Lacci (Italian for "laces") translates Shoes commands into display-agnostic operations:
|
|
36
|
+
- Implements the Shoes4 drawing model (stacks, flows, slots)
|
|
37
|
+
- Handles margin calculations, fonts, layout
|
|
38
|
+
- Uses **Niente** (null display service) for testing
|
|
39
|
+
|
|
40
|
+
See: `docs/lacci.md`
|
|
41
|
+
|
|
42
|
+
### Display Service (The Renderer)
|
|
43
|
+
**Location:** `lib/scarpe/`
|
|
44
|
+
|
|
45
|
+
The display service runs as a **separate process** from the main application:
|
|
46
|
+
- Clear separation between app logic and display logic
|
|
47
|
+
- Different display implementations can be swapped
|
|
48
|
+
- Communication via well-defined message protocol
|
|
49
|
+
- Supports local and relay-based services
|
|
50
|
+
|
|
51
|
+
See: `docs/display_service_separation.md`
|
|
52
|
+
|
|
53
|
+
### Calzini (The Components)
|
|
54
|
+
Components follow a lifecycle pattern with state management and event handling.
|
|
55
|
+
|
|
56
|
+
See: `docs/calzini_components_and_updates.md`
|
|
57
|
+
|
|
58
|
+
## Key Documentation
|
|
59
|
+
|
|
60
|
+
All in `docs/`:
|
|
61
|
+
|
|
62
|
+
| Document | Purpose |
|
|
63
|
+
|----------|---------|
|
|
64
|
+
| `static/manual.md` | **THE BIBLE** - How Shoes should work |
|
|
65
|
+
| `lacci.md` | Compatibility layer documentation |
|
|
66
|
+
| `display_service_separation.md` | Architecture decisions |
|
|
67
|
+
| `shoes_and_display_events.md` | Event handling details |
|
|
68
|
+
| `event_loops.md` | Event loop architecture |
|
|
69
|
+
| `timeouts_and_handlers.md` | Timing and callbacks |
|
|
70
|
+
| `calzini_components_and_updates.md` | Component system |
|
|
71
|
+
| `scarpe_shoes_incompatibilities.md` | Known differences from Shoes |
|
|
72
|
+
| `shoes_implementations.md` | History of Shoes implementations |
|
|
73
|
+
| `SCARPE_FEATURES.md` | New features beyond original Shoes |
|
|
74
|
+
| `yard/catscradle.md` | Fiber-based testing approach |
|
|
75
|
+
|
|
76
|
+
## Running Scarpe
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
# Install dependencies (Linux only - Mac works out of the box)
|
|
80
|
+
sudo apt install libgtk-3-dev libwebkit2gtk-4.0-dev # Ubuntu/Debian
|
|
81
|
+
|
|
82
|
+
# Install gems
|
|
83
|
+
bundle install
|
|
84
|
+
|
|
85
|
+
# Run an example
|
|
86
|
+
./exe/scarpe examples/button.rb --dev --debug
|
|
87
|
+
|
|
88
|
+
# With a theme
|
|
89
|
+
SCARPE_BOOTSTRAP_THEME=sketchy bundle exec ./exe/scarpe examples/button.rb --debug
|
|
90
|
+
|
|
91
|
+
# Optional: For sound support (bloopsaphone examples)
|
|
92
|
+
# gem install bloops # requires portaudio: brew install portaudio (Mac)
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
## Testing
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
# Run all tests
|
|
99
|
+
bundle exec rake ci_test
|
|
100
|
+
|
|
101
|
+
# Run component tests
|
|
102
|
+
bundle exec rake lacci_test # Lacci tests
|
|
103
|
+
bundle exec rake component_test # Scarpe-components tests
|
|
104
|
+
bundle exec rake test # Scarpe tests
|
|
105
|
+
|
|
106
|
+
# Check HTML output
|
|
107
|
+
bundle exec rake test:check_html_fixtures
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### Testing Philosophy
|
|
111
|
+
|
|
112
|
+
- Test new features with **Niente** (null display) first
|
|
113
|
+
- Use **Fiber-based testing** for complex event interactions (see CatsCradle)
|
|
114
|
+
- Keep handlers non-blocking
|
|
115
|
+
- Maintain backward compatibility
|
|
116
|
+
|
|
117
|
+
## Development Workflow
|
|
118
|
+
|
|
119
|
+
### When Debugging Failed Tests
|
|
120
|
+
|
|
121
|
+
1. Add strategic `puts` statements to understand the issue
|
|
122
|
+
2. Run the test and analyze output
|
|
123
|
+
3. Implement the fix
|
|
124
|
+
4. Verify the fix
|
|
125
|
+
5. **Remove all debugging statements before committing**
|
|
126
|
+
|
|
127
|
+
### Commit Style
|
|
128
|
+
|
|
129
|
+
```
|
|
130
|
+
Add request validation to UserWidget
|
|
131
|
+
|
|
132
|
+
Prevents invalid requests from reaching the database layer.
|
|
133
|
+
Adds type checking and parameter validation before processing.
|
|
134
|
+
|
|
135
|
+
Impact: Improved error handling and reduced DB load.
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
- First line: Clear statement of WHAT (50 chars ideal)
|
|
139
|
+
- Empty line after header
|
|
140
|
+
- Body: WHY needed, HOW it works, technical implications
|
|
141
|
+
|
|
142
|
+
## Code Patterns
|
|
143
|
+
|
|
144
|
+
### Display Service Singleton
|
|
145
|
+
```ruby
|
|
146
|
+
class DisplayService < Shoes::DisplayService
|
|
147
|
+
class << self
|
|
148
|
+
attr_accessor :instance
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
def initialize
|
|
152
|
+
if DisplayService.instance
|
|
153
|
+
raise Shoes::Errors::SingletonError, "This is meant to be a singleton!"
|
|
154
|
+
end
|
|
155
|
+
DisplayService.instance = self
|
|
156
|
+
end
|
|
157
|
+
end
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
### Event Dispatch
|
|
161
|
+
```ruby
|
|
162
|
+
def dispatch_event(event_name, event_target, *args, **kwargs)
|
|
163
|
+
handlers = [
|
|
164
|
+
same_name_handlers[:any],
|
|
165
|
+
same_name_handlers[event_target],
|
|
166
|
+
any_name_handlers[:any],
|
|
167
|
+
any_name_handlers[event_target],
|
|
168
|
+
].compact.inject([], &:+)
|
|
169
|
+
handlers.each { |h| h[:handler].call(*args, **kwargs) }
|
|
170
|
+
end
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
## Core Values
|
|
174
|
+
|
|
175
|
+
From the README:
|
|
176
|
+
- **Resiliency** - Tested and trustworthy
|
|
177
|
+
- **User Experience** - Beautiful, easy DSL
|
|
178
|
+
- **Whimsy** - We're here to have fun! Chunky Bacon. 🥓
|
|
179
|
+
- **Empathy** - Help one another
|
|
180
|
+
|
|
181
|
+
## Adding New Features
|
|
182
|
+
|
|
183
|
+
New features beyond original Shoes require approval and must:
|
|
184
|
+
1. Not conflict with backwards compatibility
|
|
185
|
+
2. Be documented in `docs/SCARPE_FEATURES.md`
|
|
186
|
+
3. Follow existing patterns
|
|
187
|
+
|
|
188
|
+
Example: Page navigation (`page(:home)`, `visit(:another_page)`)
|
|
189
|
+
|
|
190
|
+
## Project Structure
|
|
191
|
+
|
|
192
|
+
```
|
|
193
|
+
scarpe/
|
|
194
|
+
├── lacci/ # Shoes4 compatibility layer
|
|
195
|
+
├── lib/scarpe/ # Display service implementations
|
|
196
|
+
├── scarpe-components/ # Shared components
|
|
197
|
+
├── examples/ # Example apps
|
|
198
|
+
│ └── legacy/not_checked/ # Apps to fix!
|
|
199
|
+
├── docs/ # Design documentation
|
|
200
|
+
│ └── static/manual.md # THE BIBLE
|
|
201
|
+
├── test/ # Test suite
|
|
202
|
+
└── exe/scarpe # Main executable
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
## Environment Variables
|
|
206
|
+
|
|
207
|
+
| Variable | Purpose |
|
|
208
|
+
|----------|---------|
|
|
209
|
+
| `SCARPE_DISPLAY_SERVICE` | Choose display service (wv_local, wv_relay, etc.) |
|
|
210
|
+
| `SCARPE_TEST_CONTROL` | Path to test control script |
|
|
211
|
+
| `SCARPE_LOG_CONFIG` | YAML file for component log levels |
|
|
212
|
+
| `SCARPE_BOOTSTRAP_THEME` | UI theme (e.g., "sketchy") |
|
|
213
|
+
|
|
214
|
+
## Links
|
|
215
|
+
|
|
216
|
+
- [GitHub Repository](https://github.com/scarpe-team/scarpe)
|
|
217
|
+
- [Wiki](https://github.com/scarpe-team/scarpe/wiki)
|
|
218
|
+
- [Discord](https://discord.gg/Ca5EHSsGYp)
|
|
219
|
+
- [Nobody Knows Shoes - _why's Manual](https://github.com/whymirror/why-archive/raw/master/shoes/nobody-knows-shoes.pdf)
|
|
220
|
+
|
|
221
|
+
---
|
|
222
|
+
|
|
223
|
+
*Scarpe Diem: Seize the Shoes*
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
|
@@ -1,101 +1,122 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
scarpe (0.
|
|
5
|
-
|
|
6
|
-
fastimage
|
|
7
|
-
lacci
|
|
4
|
+
scarpe (0.4.0)
|
|
5
|
+
base64
|
|
6
|
+
fastimage (~> 2.2.7)
|
|
7
|
+
lacci (~> 0.4.0)
|
|
8
8
|
logging (~> 2.3.1)
|
|
9
|
-
nokogiri
|
|
10
|
-
scarpe-components
|
|
11
|
-
sqlite3
|
|
12
|
-
webrick
|
|
9
|
+
nokogiri (~> 1.15.2)
|
|
10
|
+
scarpe-components (~> 0.4.0)
|
|
11
|
+
sqlite3 (~> 1.6.3)
|
|
12
|
+
webrick (~> 1.7.0)
|
|
13
13
|
webview_ruby (~> 0.1.1)
|
|
14
14
|
|
|
15
15
|
PATH
|
|
16
16
|
remote: lacci
|
|
17
17
|
specs:
|
|
18
|
-
lacci (0.
|
|
19
|
-
scarpe-components
|
|
18
|
+
lacci (0.4.0)
|
|
19
|
+
scarpe-components (~> 0.4.0)
|
|
20
20
|
|
|
21
21
|
PATH
|
|
22
22
|
remote: scarpe-components
|
|
23
23
|
specs:
|
|
24
|
-
scarpe-components (0.
|
|
24
|
+
scarpe-components (0.4.0)
|
|
25
25
|
|
|
26
26
|
GEM
|
|
27
27
|
remote: https://rubygems.org/
|
|
28
28
|
specs:
|
|
29
29
|
ansi (1.5.0)
|
|
30
|
-
ast (2.4.
|
|
31
|
-
|
|
32
|
-
builder (3.
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
30
|
+
ast (2.4.3)
|
|
31
|
+
base64 (0.3.0)
|
|
32
|
+
builder (3.3.0)
|
|
33
|
+
date (3.5.1)
|
|
34
|
+
debug (1.11.1)
|
|
35
|
+
irb (~> 1.10)
|
|
36
|
+
reline (>= 0.3.8)
|
|
37
|
+
diff-lcs (1.6.2)
|
|
38
|
+
erb (6.0.1)
|
|
37
39
|
fastimage (2.2.7)
|
|
38
|
-
ffi (1.
|
|
39
|
-
ffi
|
|
40
|
-
|
|
40
|
+
ffi (1.17.2-arm64-darwin)
|
|
41
|
+
ffi (1.17.2-x86_64-darwin)
|
|
42
|
+
ffi (1.17.2-x86_64-linux-gnu)
|
|
43
|
+
ffi-compiler (1.3.2)
|
|
44
|
+
ffi (>= 1.15.5)
|
|
41
45
|
rake
|
|
42
|
-
htmlbeautifier (1.4.
|
|
43
|
-
io-console (0.
|
|
44
|
-
irb (1.
|
|
45
|
-
|
|
46
|
-
|
|
46
|
+
htmlbeautifier (1.4.3)
|
|
47
|
+
io-console (0.8.2)
|
|
48
|
+
irb (1.16.0)
|
|
49
|
+
pp (>= 0.6.0)
|
|
50
|
+
rdoc (>= 4.0.0)
|
|
51
|
+
reline (>= 0.4.2)
|
|
52
|
+
json (2.18.0)
|
|
53
|
+
language_server-protocol (3.17.0.5)
|
|
54
|
+
lint_roller (1.1.0)
|
|
47
55
|
little-plugger (1.1.4)
|
|
48
56
|
logging (2.3.1)
|
|
49
57
|
little-plugger (~> 1.1)
|
|
50
58
|
multi_json (~> 1.14)
|
|
51
|
-
|
|
52
|
-
minitest
|
|
59
|
+
mini_portile2 (2.8.9)
|
|
60
|
+
minitest (5.27.0)
|
|
61
|
+
minitest-reporters (1.7.1)
|
|
53
62
|
ansi
|
|
54
63
|
builder
|
|
55
64
|
minitest (>= 5.0)
|
|
56
65
|
ruby-progressbar
|
|
57
|
-
multi_json (1.
|
|
58
|
-
nokogiri (1.15.
|
|
59
|
-
|
|
60
|
-
nokogiri (1.15.2-x86_64-darwin)
|
|
66
|
+
multi_json (1.18.0)
|
|
67
|
+
nokogiri (1.15.7)
|
|
68
|
+
mini_portile2 (~> 2.8.2)
|
|
61
69
|
racc (~> 1.4)
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
parallel (1.22.1)
|
|
65
|
-
parser (3.2.1.0)
|
|
70
|
+
parallel (1.27.0)
|
|
71
|
+
parser (3.3.10.0)
|
|
66
72
|
ast (~> 2.4.1)
|
|
67
|
-
|
|
73
|
+
racc
|
|
74
|
+
pp (0.6.3)
|
|
75
|
+
prettyprint
|
|
76
|
+
prettyprint (0.2.0)
|
|
77
|
+
prism (1.7.0)
|
|
78
|
+
psych (5.3.1)
|
|
79
|
+
date
|
|
80
|
+
stringio
|
|
81
|
+
racc (1.8.1)
|
|
68
82
|
rainbow (3.1.1)
|
|
69
|
-
rake (13.
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
83
|
+
rake (13.3.1)
|
|
84
|
+
rdoc (7.0.2)
|
|
85
|
+
erb
|
|
86
|
+
psych (>= 4.0.0)
|
|
87
|
+
tsort
|
|
88
|
+
redcarpet (3.6.1)
|
|
89
|
+
regexp_parser (2.11.3)
|
|
90
|
+
reline (0.6.3)
|
|
73
91
|
io-console (~> 0.5)
|
|
74
|
-
|
|
75
|
-
rubocop (1.46.0)
|
|
92
|
+
rubocop (1.82.0)
|
|
76
93
|
json (~> 2.3)
|
|
94
|
+
language_server-protocol (~> 3.17.0.2)
|
|
95
|
+
lint_roller (~> 1.1.0)
|
|
77
96
|
parallel (~> 1.10)
|
|
78
|
-
parser (>= 3.
|
|
97
|
+
parser (>= 3.3.0.2)
|
|
79
98
|
rainbow (>= 2.2.2, < 4.0)
|
|
80
|
-
regexp_parser (>=
|
|
81
|
-
|
|
82
|
-
rubocop-ast (>= 1.26.0, < 2.0)
|
|
99
|
+
regexp_parser (>= 2.9.3, < 3.0)
|
|
100
|
+
rubocop-ast (>= 1.48.0, < 2.0)
|
|
83
101
|
ruby-progressbar (~> 1.7)
|
|
84
|
-
unicode-display_width (>= 2.4.0, <
|
|
85
|
-
rubocop-ast (1.
|
|
86
|
-
parser (>= 3.
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
sqlite3 (1.6.
|
|
90
|
-
|
|
91
|
-
|
|
102
|
+
unicode-display_width (>= 2.4.0, < 4.0)
|
|
103
|
+
rubocop-ast (1.48.0)
|
|
104
|
+
parser (>= 3.3.7.2)
|
|
105
|
+
prism (~> 1.4)
|
|
106
|
+
ruby-progressbar (1.13.0)
|
|
107
|
+
sqlite3 (1.6.9)
|
|
108
|
+
mini_portile2 (~> 2.8.0)
|
|
109
|
+
stringio (3.2.0)
|
|
110
|
+
tsort (0.2.0)
|
|
111
|
+
unicode-display_width (3.2.0)
|
|
112
|
+
unicode-emoji (~> 4.1)
|
|
113
|
+
unicode-emoji (4.2.0)
|
|
92
114
|
webrick (1.7.0)
|
|
93
115
|
webview_ruby (0.1.2)
|
|
94
116
|
ffi
|
|
95
117
|
ffi-compiler
|
|
96
118
|
rake
|
|
97
|
-
yard (0.9.
|
|
98
|
-
webrick (~> 1.7.0)
|
|
119
|
+
yard (0.9.38)
|
|
99
120
|
|
|
100
121
|
PLATFORMS
|
|
101
122
|
arm64-darwin-21
|
|
@@ -108,7 +129,6 @@ PLATFORMS
|
|
|
108
129
|
x86_64-linux
|
|
109
130
|
|
|
110
131
|
DEPENDENCIES
|
|
111
|
-
bloops (~> 0.5)
|
|
112
132
|
debug
|
|
113
133
|
diff-lcs
|
|
114
134
|
htmlbeautifier
|
data/README.md
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
[](https://github.com/Shopify/ruby-style-guide)
|
|
6
6
|
[](https://discord.gg/Ca5EHSsGYp)
|
|
7
7
|
|
|
8
|
-
<img src="
|
|
8
|
+
<img src="docs/static/scarpe-logo.png">
|
|
9
9
|
|
|
10
10
|
"Scarpe" means shoes in Italian. "Scarpe" also means [Shoes](https://github.com/shoes/shoes-deprecated) in modern Ruby and Webview!
|
|
11
11
|
|
|
@@ -64,14 +64,11 @@ Scarpe requires [Ruby 3.2](https://www.ruby-lang.org/en/downloads/) or higher! Y
|
|
|
64
64
|
This repo is where most of the action is happening right now, and to have the full Scarpe experience _today_ this is probably what you want to do.
|
|
65
65
|
|
|
66
66
|
```
|
|
67
|
-
# dependencies - Mac version
|
|
68
|
-
brew install portaudio pkg-config # for sound!
|
|
69
|
-
# dependencies - Mac M1 version
|
|
70
|
-
brew install portaudio && bundle config build.bloops --with-portaudio-dir=$(brew --prefix portaudio)
|
|
71
67
|
# dependencies - Ubuntu Linux version
|
|
72
|
-
sudo apt install libgtk-3-dev libwebkit2gtk-4.0-dev
|
|
68
|
+
sudo apt install libgtk-3-dev libwebkit2gtk-4.0-dev
|
|
73
69
|
|
|
74
|
-
for any other Linux or Windows please see the webview docs for your
|
|
70
|
+
# for any other Linux or Windows please see the webview docs for your platform:
|
|
71
|
+
# https://github.com/webview/webview#prerequisites
|
|
75
72
|
|
|
76
73
|
# get it
|
|
77
74
|
git clone http://github.com/scarpe-team/scarpe
|