capsium 0.1.1 → 0.1.2

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 (37) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/rake.yml +1 -4
  3. data/.github/workflows/release.yml +1 -2
  4. data/.rubocop.yml +10 -6
  5. data/Gemfile +0 -6
  6. data/capsium.gemspec +9 -8
  7. data/lib/capsium/cli.rb +29 -10
  8. data/lib/capsium/converters/jekyll.rb +63 -30
  9. data/lib/capsium/package/dataset.rb +35 -48
  10. data/lib/capsium/package/dataset_config.rb +28 -0
  11. data/lib/capsium/package/manifest.rb +21 -41
  12. data/lib/capsium/package/manifest_config.rb +19 -0
  13. data/lib/capsium/package/metadata.rb +13 -27
  14. data/lib/capsium/package/metadata_config.rb +17 -0
  15. data/lib/capsium/package/routes.rb +39 -97
  16. data/lib/capsium/package/routes_config.rb +74 -0
  17. data/lib/capsium/package/storage.rb +47 -22
  18. data/lib/capsium/package/storage_config.rb +9 -0
  19. data/lib/capsium/package.rb +18 -6
  20. data/lib/capsium/packager.rb +25 -63
  21. data/lib/capsium/protector.rb +15 -7
  22. data/lib/capsium/reactor.rb +52 -28
  23. data/lib/capsium/version.rb +1 -1
  24. metadata +73 -25
  25. data/images/005df7415a331c466ad2d9a42efdd212b6f42fe50b5fd3b3174c86c706f58244.png +0 -0
  26. data/images/0374025b3af99b8a473282c8cbbf9fcd29573cf41e586982f328f86c0690f43d.png +0 -0
  27. data/images/0bb4da785be40ef58e219470ebccb979325928b75453dc46bac23c6ee8a7a7cb.png +0 -0
  28. data/images/6aa294dccc81af594aacbe804e7ddffdc17eacc28357338108aea5d021d831ff.png +0 -0
  29. data/images/72dd3fbf3f4b475e27a0e7fb8137c475c32c41f8d222bcf62d6a9ccf102d9532.png +0 -0
  30. data/images/8772b6961d169738d7b0fa0b669b06fc2f40632d4c62586c7634fc17b93182a3.png +0 -0
  31. data/images/a998d842405933d45723606ff3f70162ec95b4ef30db25464a366184fd08fb9b.png +0 -0
  32. data/images/aa8980547e8c003d33273ab4d80e62da7f317bd7581b293c06d67f5331f24f31.png +0 -0
  33. data/images/bb78a872b539e0e9b2d80dee58acbb688f3f2727b324a5bf8bf417a69d94a166.png +0 -0
  34. data/images/c48fc83b17725d85fbb64d971196ebfccd8c5c757fe6aa5845303f6e315879b6.png +0 -0
  35. data/images/f08ef07308d08119ac2124bb7428c8bef17ef1ca70045696604d6e83015a9b91.png +0 -0
  36. data/images/f7514206111b695647eae9adfcf498ba3e0ff83ecfe25f3fc3ed8e9f04c5c726-1.png +0 -0
  37. data/images/f7514206111b695647eae9adfcf498ba3e0ff83ecfe25f3fc3ed8e9f04c5c726.png +0 -0
@@ -1,6 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # lib/capsium/reactor.rb
4
3
  require "webrick"
5
4
  require "json"
6
5
  require "listen"
@@ -9,14 +8,16 @@ require "capsium/package"
9
8
  module Capsium
10
9
  class Reactor
11
10
  DEFAULT_PORT = 8864
12
- attr_accessor :package, :package_path, :routes, :port, :server, :server_thread
13
11
 
14
- def initialize(package, port = DEFAULT_PORT)
15
- @package = package
16
- @package_path = package.path
12
+ attr_accessor :package, :package_path, :routes, :port, :server,
13
+ :server_thread
14
+
15
+ def initialize(package:, port: DEFAULT_PORT, do_not_listen: false)
16
+ @package = package.is_a?(String) ? Package.new(package) : package
17
+ @package_path = @package.path
17
18
  @port = port
18
- @server = WEBrick::HTTPServer.new(Port: @port)
19
- load_routes
19
+ setup_server(do_not_listen)
20
+ @routes = @package.routes
20
21
  mount_routes
21
22
  end
22
23
 
@@ -25,45 +26,65 @@ module Capsium
25
26
  start_listener
26
27
  end
27
28
 
29
+ def handle_request(request, response)
30
+ route = @routes.resolve(request.path)
31
+ if route
32
+ target = route.target
33
+ content_path = target.fs_path(@package.manifest)
34
+ if File.exist?(content_path)
35
+ response.status = 200
36
+ response["Content-Type"] = target.mime(@package.manifest)
37
+ response.body = File.read(content_path)
38
+ else
39
+ response.status = 404
40
+ response["Content-Type"] = "text/plain"
41
+ response.body = "Not Found"
42
+ end
43
+ else
44
+ response.status = 404
45
+ response["Content-Type"] = "text/plain"
46
+ response.body = "Not Found"
47
+ end
48
+ end
49
+
28
50
  private
29
51
 
30
- def load_routes
31
- @routes = @package.routes.data.routes
52
+ def setup_server(do_not_listen)
53
+ server_options = { Port: @port }
54
+ server_options[:DoNotListen] = true if do_not_listen
55
+ @server = WEBrick::HTTPServer.new(server_options)
32
56
  end
33
57
 
34
58
  def mount_routes
35
- @routes.each do |route|
59
+ @routes.config.routes.each do |route|
36
60
  path = route.path
37
- target = route.target
38
- content_path = target.fs_path(@package.manifest)
39
- puts "mounting route: #{path} => #{content_path}"
40
- @server.mount_proc(path.to_s) do |_req, res|
41
- res.body = File.read(content_path)
42
- res.content_type = target.mime(@package.manifest)
61
+ @server.mount_proc(path.to_s) do |req, res|
62
+ handle_request(req, res)
43
63
  end
44
64
  end
45
65
  end
46
66
 
47
67
  def start_server
48
- @server_thread = Thread.new do
49
- trap("INT") do
50
- puts "\nShutting down server..."
51
- @server.shutdown
52
- exit
53
- end
54
-
68
+ Thread.new do
69
+ trap("INT") { shutdown_server }
55
70
  puts "Starting server on http://localhost:#{@port}"
56
71
  @server.start
57
72
  end
58
73
  end
59
74
 
75
+ def shutdown_server
76
+ puts "\nShutting down server..."
77
+ @server.shutdown
78
+ exit
79
+ end
80
+
60
81
  def restart_server
61
82
  @server.shutdown
62
- # @server_thread.kill
83
+ @server_thread&.join
63
84
  load_package
64
- @server = WEBrick::HTTPServer.new(Port: @port)
85
+ setup_server(false)
65
86
  mount_routes
66
- start_server
87
+ @server_thread = start_server
67
88
  end
68
89
 
69
90
  def start_listener
@@ -74,9 +95,12 @@ module Capsium
74
95
 
75
96
  listener.start
76
97
  puts "Listening for changes in #{@package_path}..."
77
-
78
- # Wait for the server thread to finish
79
98
  @server_thread.join
80
99
  end
100
+
101
+ def load_package
102
+ @package = Package.new(@package_path)
103
+ @routes = @package.routes
104
+ end
81
105
  end
82
106
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Capsium
4
- VERSION = "0.1.1"
4
+ VERSION = "0.1.2"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: capsium
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-06-05 00:00:00.000000000 Z
11
+ date: 2024-06-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cssminify
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: jekyll
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: json
71
85
  requirement: !ruby/object:Gem::Requirement
@@ -80,6 +94,20 @@ dependencies:
80
94
  - - ">="
81
95
  - !ruby/object:Gem::Version
82
96
  version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: json-schema
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
83
111
  - !ruby/object:Gem::Dependency
84
112
  name: listen
85
113
  requirement: !ruby/object:Gem::Requirement
@@ -224,16 +252,30 @@ dependencies:
224
252
  name: pry
225
253
  requirement: !ruby/object:Gem::Requirement
226
254
  requirements:
227
- - - "~>"
255
+ - - ">="
256
+ - !ruby/object:Gem::Version
257
+ version: '0'
258
+ type: :development
259
+ prerelease: false
260
+ version_requirements: !ruby/object:Gem::Requirement
261
+ requirements:
262
+ - - ">="
228
263
  - !ruby/object:Gem::Version
229
- version: 0.12.2
264
+ version: '0'
265
+ - !ruby/object:Gem::Dependency
266
+ name: rack-test
267
+ requirement: !ruby/object:Gem::Requirement
268
+ requirements:
269
+ - - ">="
270
+ - !ruby/object:Gem::Version
271
+ version: '0'
230
272
  type: :development
231
273
  prerelease: false
232
274
  version_requirements: !ruby/object:Gem::Requirement
233
275
  requirements:
234
- - - "~>"
276
+ - - ">="
235
277
  - !ruby/object:Gem::Version
236
- version: 0.12.2
278
+ version: '0'
237
279
  - !ruby/object:Gem::Dependency
238
280
  name: rake
239
281
  requirement: !ruby/object:Gem::Requirement
@@ -276,9 +318,23 @@ dependencies:
276
318
  - - "~>"
277
319
  - !ruby/object:Gem::Version
278
320
  version: '1.58'
321
+ - !ruby/object:Gem::Dependency
322
+ name: rubocop-performance
323
+ requirement: !ruby/object:Gem::Requirement
324
+ requirements:
325
+ - - ">="
326
+ - !ruby/object:Gem::Version
327
+ version: '0'
328
+ type: :development
329
+ prerelease: false
330
+ version_requirements: !ruby/object:Gem::Requirement
331
+ requirements:
332
+ - - ">="
333
+ - !ruby/object:Gem::Version
334
+ version: '0'
279
335
  description: Capsium
280
336
  email:
281
- - open.source@ribose.com'
337
+ - open.source@ribose.com
282
338
  executables:
283
339
  - capsium
284
340
  extensions: []
@@ -297,41 +353,33 @@ files:
297
353
  - bin/setup
298
354
  - capsium.gemspec
299
355
  - exe/capsium
300
- - images/005df7415a331c466ad2d9a42efdd212b6f42fe50b5fd3b3174c86c706f58244.png
301
- - images/0374025b3af99b8a473282c8cbbf9fcd29573cf41e586982f328f86c0690f43d.png
302
- - images/0bb4da785be40ef58e219470ebccb979325928b75453dc46bac23c6ee8a7a7cb.png
303
- - images/6aa294dccc81af594aacbe804e7ddffdc17eacc28357338108aea5d021d831ff.png
304
- - images/72dd3fbf3f4b475e27a0e7fb8137c475c32c41f8d222bcf62d6a9ccf102d9532.png
305
- - images/8772b6961d169738d7b0fa0b669b06fc2f40632d4c62586c7634fc17b93182a3.png
306
- - images/a998d842405933d45723606ff3f70162ec95b4ef30db25464a366184fd08fb9b.png
307
- - images/aa8980547e8c003d33273ab4d80e62da7f317bd7581b293c06d67f5331f24f31.png
308
- - images/bb78a872b539e0e9b2d80dee58acbb688f3f2727b324a5bf8bf417a69d94a166.png
309
- - images/c48fc83b17725d85fbb64d971196ebfccd8c5c757fe6aa5845303f6e315879b6.png
310
- - images/f08ef07308d08119ac2124bb7428c8bef17ef1ca70045696604d6e83015a9b91.png
311
- - images/f7514206111b695647eae9adfcf498ba3e0ff83ecfe25f3fc3ed8e9f04c5c726-1.png
312
- - images/f7514206111b695647eae9adfcf498ba3e0ff83ecfe25f3fc3ed8e9f04c5c726.png
313
356
  - lib/capsium.rb
314
357
  - lib/capsium/cli.rb
315
358
  - lib/capsium/converters/jekyll.rb
316
359
  - lib/capsium/package.rb
317
360
  - lib/capsium/package/dataset.rb
361
+ - lib/capsium/package/dataset_config.rb
318
362
  - lib/capsium/package/manifest.rb
363
+ - lib/capsium/package/manifest_config.rb
319
364
  - lib/capsium/package/metadata.rb
365
+ - lib/capsium/package/metadata_config.rb
320
366
  - lib/capsium/package/routes.rb
367
+ - lib/capsium/package/routes_config.rb
321
368
  - lib/capsium/package/storage.rb
369
+ - lib/capsium/package/storage_config.rb
322
370
  - lib/capsium/packager.rb
323
371
  - lib/capsium/protector.rb
324
372
  - lib/capsium/reactor.rb
325
373
  - lib/capsium/thor_ext.rb
326
374
  - lib/capsium/version.rb
327
375
  - sig/capsium.rbs
328
- homepage: https://github.com/metanorma/capsium
376
+ homepage: https://github.com/capsiums/capsium
329
377
  licenses:
330
378
  - MIT
331
379
  metadata:
332
- homepage_uri: https://github.com/metanorma/capsium
333
- source_code_uri: https://github.com/metanorma/capsium
334
- changelog_uri: https://github.com/metanorma/capsium/releases
380
+ homepage_uri: https://github.com/capsiums/capsium
381
+ source_code_uri: https://github.com/capsiums/capsium
382
+ changelog_uri: https://github.com/capsiums/capsium/releases
335
383
  post_install_message:
336
384
  rdoc_options: []
337
385
  require_paths:
@@ -347,7 +395,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
347
395
  - !ruby/object:Gem::Version
348
396
  version: '0'
349
397
  requirements: []
350
- rubygems_version: 3.4.10
398
+ rubygems_version: 3.5.11
351
399
  signing_key:
352
400
  specification_version: 4
353
401
  summary: Capsium