capsium 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
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