vita 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 86ecbe16917de241d894f019175d823a4e06606cee81f5d20534210e159ac814
4
- data.tar.gz: f497eab7e3b8e2cd4828a9a39f16e792653f2583c4fa4e3b21b6fc6cdb75e806
3
+ metadata.gz: 1718643c6633bbe89990a662fd29739153a7233dd21352d8784b7af27a74383a
4
+ data.tar.gz: 89cf60afa27e2b06d8d43251c9ebe64f81a2f7b19ac8c3ecc154acd95af77943
5
5
  SHA512:
6
- metadata.gz: 73a39e21fdfe22f0b143b387e8ed06edc534ed8cd46e519f70a395b7307bc354304780111d05ee9753986393521d6f6202eeb687c99c83d770bebd623a79ffe7
7
- data.tar.gz: 5fea8bdbc8437cb18639f6f4bc5f88205ecac87621a75e57245097c95ff8000c41eabd65424ee6660c4cebb59b50a021781b2c9dfd6993d29d077dc9c1a0b4ab
6
+ metadata.gz: 18f962183bc9bf35ca240b8820ca882770b6edc3b82d0a183f3adf6553044c207ec3705dc2f6098e2113618ac9258c0d6e39c8356fd4d383989cf8cb0aed3303
7
+ data.tar.gz: e129b89cc3194e9eca15fdb1e14a786150df89a53c278fef0f250e0449d520e09f2dad7a2913158bc532736fad5d8f4b24d0bfd24dcd85d6986a7e9e46280cdd
data/README.md CHANGED
@@ -33,6 +33,8 @@ __ _(_) |_ __ _
33
33
  Starting Vita at http://localhost:9000
34
34
  ```
35
35
 
36
+ Your web browser refreshes as you make changes to your files.
37
+
36
38
  To publish:
37
39
 
38
40
  ```
data/lib/vita/garden.rb CHANGED
@@ -15,7 +15,11 @@ module Vita
15
15
  raise Vita::Error.new("Directory not found at #{root}")
16
16
  end
17
17
 
18
- Dir[File.join(root, "*.*")].map { |filename| Note.new(filename) }
18
+ Dir[note_filename_pattern(root)].map { |filename| Note.new(filename) }
19
+ end
20
+
21
+ def self.note_filename_pattern(root)
22
+ File.join(root, "*.*")
19
23
  end
20
24
 
21
25
  def initialize(root, notes)
@@ -56,6 +60,10 @@ module Vita
56
60
  links.filter { |link| link.to_note == note }
57
61
  end
58
62
 
63
+ def note_filename_pattern
64
+ self.class.note_filename_pattern(root)
65
+ end
66
+
59
67
  private
60
68
 
61
69
  def notes=(notes)
data/lib/vita/server.rb CHANGED
@@ -1,7 +1,10 @@
1
1
  require "sinatra"
2
+ require "sinatra/streaming"
2
3
 
3
4
  module Vita
4
5
  class Server < Sinatra::Base
6
+ helpers Sinatra::Streaming
7
+
5
8
  def self.await_startup
6
9
  sleep 0.1 until settings.running?
7
10
  end
@@ -25,6 +28,14 @@ module Vita
25
28
  end
26
29
  end
27
30
 
31
+ get "/events", provides: "text/event-stream" do
32
+ stream do |out|
33
+ Watcher.new(garden).watch do
34
+ out << "event: change\ndata: {}\n\n"
35
+ end
36
+ end
37
+ end
38
+
28
39
  get "/:path.html" do |path|
29
40
  note = garden.note_at_path("#{path}.html")
30
41
 
data/lib/vita/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Vita
2
- VERSION = "0.2.0"
2
+ VERSION = "0.3.0"
3
3
  end
@@ -0,0 +1,13 @@
1
+ require "filewatcher"
2
+
3
+ module Vita
4
+ class Watcher
5
+ def initialize(garden)
6
+ @garden = garden
7
+ end
8
+
9
+ def watch(&)
10
+ Filewatcher.new(@garden.note_filename_pattern).watch(&)
11
+ end
12
+ end
13
+ end
data/lib/vita.rb CHANGED
@@ -9,6 +9,7 @@ require "vita/note"
9
9
  require "vita/renderer"
10
10
  require "vita/rendering_context"
11
11
  require "vita/version"
12
+ require "vita/watcher"
12
13
 
13
14
  module Vita
14
15
  BASE_DIRECTORY = File.expand_path("..", __dir__)
@@ -16,6 +16,7 @@
16
16
  <script defer src="https://unpkg.com/htmx.org@1.9.10"></script>
17
17
  </head>
18
18
  <body>
19
+ <div hx-trigger="sse:change" hx-get="/<%= h note.path %>" hx-target="body">
19
20
  <nav class="navbar bg-body-tertiary mb-3">
20
21
  <div class="container">
21
22
  <a class="navbar-brand" href="/">
@@ -70,10 +71,14 @@
70
71
  </div>
71
72
  </div>
72
73
  </div>
74
+ </div>
73
75
  <script defer>
74
76
  if (location.protocol !== "file:") {
75
77
  document.body.setAttribute('hx-boost', true);
76
78
  }
79
+ if (location.port === "9000") {
80
+ document.body.setAttribute('hx-sse', 'connect:/events');
81
+ }
77
82
  </script>
78
83
  </body>
79
84
  </html>
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vita
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alec Cursley
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-02-26 00:00:00.000000000 Z
11
+ date: 2024-03-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: redcarpet
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '4.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: sinatra-contrib
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '4.0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '4.0'
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: rackup
71
85
  requirement: !ruby/object:Gem::Requirement
@@ -94,6 +108,20 @@ dependencies:
94
108
  - - "~>"
95
109
  - !ruby/object:Gem::Version
96
110
  version: '6.4'
111
+ - !ruby/object:Gem::Dependency
112
+ name: filewatcher
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '2.1'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '2.1'
97
125
  - !ruby/object:Gem::Dependency
98
126
  name: rake
99
127
  requirement: !ruby/object:Gem::Requirement
@@ -170,14 +198,14 @@ dependencies:
170
198
  requirements:
171
199
  - - "~>"
172
200
  - !ruby/object:Gem::Version
173
- version: 1.34.0
201
+ version: 1.35.1
174
202
  type: :development
175
203
  prerelease: false
176
204
  version_requirements: !ruby/object:Gem::Requirement
177
205
  requirements:
178
206
  - - "~>"
179
207
  - !ruby/object:Gem::Version
180
- version: 1.34.0
208
+ version: 1.35.1
181
209
  description:
182
210
  email:
183
211
  - alec@cursley.net
@@ -210,6 +238,7 @@ files:
210
238
  - lib/vita/rendering_context.rb
211
239
  - lib/vita/server.rb
212
240
  - lib/vita/version.rb
241
+ - lib/vita/watcher.rb
213
242
  - templates/note.html.erb
214
243
  homepage: https://github.com/cursley/vita
215
244
  licenses: