capsium 0.1.2 → 0.2.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.
Files changed (55) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.rubocop.yml +34 -7
  4. data/CHANGELOG.md +58 -0
  5. data/Gemfile +6 -0
  6. data/LICENSE +21 -0
  7. data/README.adoc +177 -135
  8. data/Rakefile +8 -1
  9. data/bin/console +1 -1
  10. data/capsium.gemspec +11 -19
  11. data/exe/capsium +1 -1
  12. data/lib/capsium/cli/convert.rb +18 -0
  13. data/lib/capsium/cli/package.rb +86 -0
  14. data/lib/capsium/cli/reactor.rb +25 -0
  15. data/lib/capsium/cli.rb +3 -96
  16. data/lib/capsium/converters/jekyll.rb +5 -7
  17. data/lib/capsium/converters.rb +7 -0
  18. data/lib/capsium/package/dataset.rb +67 -34
  19. data/lib/capsium/package/manifest.rb +33 -22
  20. data/lib/capsium/package/manifest_config.rb +52 -7
  21. data/lib/capsium/package/metadata.rb +4 -8
  22. data/lib/capsium/package/metadata_config.rb +97 -9
  23. data/lib/capsium/package/routes.rb +39 -41
  24. data/lib/capsium/package/routes_config.rb +120 -44
  25. data/lib/capsium/package/security.rb +123 -0
  26. data/lib/capsium/package/security_config.rb +60 -0
  27. data/lib/capsium/package/storage.rb +20 -45
  28. data/lib/capsium/package/storage_config.rb +100 -3
  29. data/lib/capsium/package/validator.rb +149 -0
  30. data/lib/capsium/package.rb +68 -66
  31. data/lib/capsium/packager.rb +42 -6
  32. data/lib/capsium/reactor/introspection.rb +88 -0
  33. data/lib/capsium/reactor.rb +89 -41
  34. data/lib/capsium/version.rb +1 -1
  35. data/lib/capsium.rb +7 -9
  36. data/sig/capsium/package/dataset.rbs +28 -0
  37. data/sig/capsium/package/manifest.rbs +34 -0
  38. data/sig/capsium/package/manifest_config.rbs +38 -0
  39. data/sig/capsium/package/metadata.rbs +26 -0
  40. data/sig/capsium/package/metadata_config.rbs +49 -0
  41. data/sig/capsium/package/routes.rbs +37 -0
  42. data/sig/capsium/package/routes_config.rbs +74 -0
  43. data/sig/capsium/package/security.rbs +65 -0
  44. data/sig/capsium/package/security_config.rbs +57 -0
  45. data/sig/capsium/package/storage.rbs +28 -0
  46. data/sig/capsium/package/storage_config.rbs +61 -0
  47. data/sig/capsium/package/validator.rbs +29 -0
  48. data/sig/capsium/package.rbs +53 -0
  49. data/sig/capsium/packager.rbs +23 -0
  50. data/sig/capsium/reactor/introspection.rbs +31 -0
  51. data/sig/capsium/reactor.rbs +30 -0
  52. data/sig/capsium.rbs +3 -1
  53. metadata +52 -183
  54. data/lib/capsium/package/dataset_config.rb +0 -28
  55. data/lib/capsium/protector.rb +0 -103
@@ -0,0 +1,57 @@
1
+ module Capsium
2
+ class Package
3
+ # The "integrityChecks" object of security.json: SHA-256 checksums
4
+ # keyed by package-relative path.
5
+ class IntegrityChecks
6
+ ALGORITHMS: Array[String]
7
+
8
+ attr_accessor checksum_algorithm: String
9
+ attr_accessor checksums: Hash[String, String]
10
+
11
+ def initialize: (?checksum_algorithm: String? checksum_algorithm,
12
+ ?checksums: Hash[String, String] checksums) -> void
13
+
14
+ def to_json: (*untyped args) -> String
15
+ def to_hash: () -> Hash[String, untyped]
16
+ end
17
+
18
+ # The "digitalSignatures" object of security.json (parsed only;
19
+ # signing is a later phase).
20
+ class DigitalSignatures
21
+ attr_accessor public_key: String?
22
+ attr_accessor signature_file: String?
23
+
24
+ def initialize: (?public_key: String? public_key,
25
+ ?signature_file: String? signature_file) -> void
26
+
27
+ def to_json: (*untyped args) -> String
28
+ def to_hash: () -> Hash[String, untyped]
29
+ end
30
+
31
+ # The "security" object of security.json.
32
+ class SecurityData
33
+ attr_accessor integrity_checks: IntegrityChecks?
34
+ attr_accessor digital_signatures: DigitalSignatures?
35
+
36
+ def initialize: (?integrity_checks: IntegrityChecks? integrity_checks,
37
+ ?digital_signatures: DigitalSignatures? digital_signatures) -> void
38
+
39
+ def to_json: (*untyped args) -> String
40
+ def to_hash: () -> Hash[String, untyped]
41
+ end
42
+
43
+ # Canonical security.json model (generated at pack time).
44
+ class SecurityConfig
45
+ attr_accessor security: SecurityData?
46
+
47
+ def initialize: (?security: SecurityData? security) -> void
48
+
49
+ def self.from_json: (String json) -> instance
50
+
51
+ def checksums: () -> Hash[String, String]
52
+
53
+ def to_json: (*untyped args) -> String
54
+ def to_hash: () -> Hash[String, untyped]
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,28 @@
1
+ module Capsium
2
+ class Package
3
+ # Loads and writes storage.json and instantiates its datasets
4
+ # (ARCHITECTURE.md section 5).
5
+ class Storage
6
+ attr_reader path: String
7
+ attr_reader config: StorageConfig
8
+ attr_reader datasets: Array[Dataset]
9
+
10
+ def initialize: (String path) -> void
11
+
12
+ def data_sets: () -> Hash[String, DatasetConfig]
13
+
14
+ def load_datasets: () -> Array[Dataset]
15
+
16
+ def dataset: (String name) -> Dataset?
17
+
18
+ def dataset_names: () -> Array[String]
19
+
20
+ def empty?: () -> bool
21
+
22
+ def save_to_file: (?String output_path) -> void
23
+
24
+ def to_json: (*untyped args) -> String
25
+ def to_hash: () -> Hash[String, untyped]
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,61 @@
1
+ module Capsium
2
+ class Package
3
+ # A single dataset entry (ARCHITECTURE.md section 5): schema-backed
4
+ # file (via "source") or SQLite ("databaseFile" + "table").
5
+ class DatasetConfig
6
+ FORMATS: Hash[String, String]
7
+ SCHEMA_TYPES: Array[String]
8
+
9
+ attr_accessor source: String?
10
+ attr_accessor schema_file: String?
11
+ attr_accessor schema_type: String?
12
+ attr_accessor database_file: String?
13
+ attr_accessor table: String?
14
+
15
+ def initialize: (?source: String? source, ?schema_file: String? schema_file,
16
+ ?schema_type: String? schema_type,
17
+ ?database_file: String? database_file,
18
+ ?table: String? table) -> void
19
+
20
+ def format: () -> String
21
+
22
+ def sqlite?: () -> bool
23
+
24
+ def backing_file: () -> String
25
+
26
+ def to_dataset: (String name, String package_path) -> Dataset
27
+
28
+ def to_json: (*untyped args) -> String
29
+ def to_hash: () -> Hash[String, untyped]
30
+ end
31
+
32
+ # The "storage" object holding the dataSets map.
33
+ class StorageData
34
+ attr_accessor data_sets: Hash[String, DatasetConfig]
35
+
36
+ def initialize: (?data_sets: Hash[String, DatasetConfig] data_sets) -> void
37
+
38
+ def data_sets_from_json: (StorageData model, untyped value) -> void
39
+
40
+ def data_sets_to_json: (StorageData model, Hash[String, untyped] doc) -> void
41
+
42
+ def to_json: (*untyped args) -> String
43
+ def to_hash: () -> Hash[String, untyped]
44
+ end
45
+
46
+ # Canonical storage.json model. The legacy array form is normalized
47
+ # on read; writers emit only the canonical form.
48
+ class StorageConfig
49
+ attr_accessor storage: StorageData?
50
+
51
+ def initialize: (?storage: StorageData? storage) -> void
52
+
53
+ def self.from_json: (String json) -> instance
54
+
55
+ def data_sets: () -> Hash[String, DatasetConfig]
56
+
57
+ def to_json: (*untyped args) -> String
58
+ def to_hash: () -> Hash[String, untyped]
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,29 @@
1
+ module Capsium
2
+ class Package
3
+ # Validates a package directory or .cap file against the canonical
4
+ # schemas (ARCHITECTURE.md sections 2-6) and reports one result per
5
+ # check. Used by `capsium package validate`.
6
+ class Validator
7
+ EXTERNAL_REFERENCE_PATTERN: Regexp
8
+ TEXT_CONTENT_MIME: Regexp
9
+
10
+ # One named validation check with its problems; ok when messages
11
+ # is empty.
12
+ class CheckResult
13
+ attr_reader name: String
14
+ attr_reader ok: bool
15
+ attr_reader messages: Array[String]
16
+
17
+ def initialize: (name: String name, ok: bool ok, messages: Array[String] messages) -> void
18
+
19
+ def ok?: () -> bool
20
+ end
21
+
22
+ def initialize: (String package_path) -> void
23
+
24
+ def run: () -> Array[CheckResult]
25
+
26
+ def valid?: () -> bool
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,53 @@
1
+ module Capsium
2
+ # A Capsium package loaded from a directory or a .cap file
3
+ # (ARCHITECTURE.md section 1).
4
+ class Package
5
+ MANIFEST_FILE: String
6
+ METADATA_FILE: String
7
+ STORAGE_FILE: String
8
+ ROUTES_FILE: String
9
+ SECURITY_FILE: String
10
+ CONTENT_DIR: String
11
+ DATA_DIR: String
12
+
13
+ attr_reader name: String
14
+ attr_reader path: String
15
+ attr_reader manifest: Manifest
16
+ attr_reader metadata: Metadata
17
+ attr_reader routes: Routes
18
+ attr_reader storage: Storage
19
+ attr_reader security: Security
20
+ attr_reader load_type: Symbol
21
+
22
+ def initialize: (String | Pathname path, ?load_type: Symbol? load_type) -> void
23
+
24
+ def prepare_package: (Pathname path) -> (String | Pathname)
25
+
26
+ def solidify: () -> void
27
+
28
+ def decompress_cap_file: (String | Pathname file_path) -> String
29
+
30
+ def load_package: () -> void
31
+
32
+ # Removes the temporary extraction directory of a .cap-loaded
33
+ # package; a no-op for directory loads.
34
+ def cleanup: () -> void
35
+
36
+ def datasets: () -> Array[Dataset]
37
+
38
+ # The .cap file this package was loaded from, or nil when loaded
39
+ # from a directory.
40
+ def cap_file_path: () -> String?
41
+
42
+ def content_files: () -> Array[String]
43
+
44
+ def determine_load_type: (String | Pathname path) -> Symbol
45
+
46
+ # Verifies the package against security.json (ARCHITECTURE.md
47
+ # section 6). Returns a list of typed errors; empty when no
48
+ # security.json is present or all checksums match.
49
+ def verify_integrity: () -> Array[Security::ChecksumMismatch | Security::MissingFile | Security::UncheckedFile]
50
+
51
+ def verify_integrity!: () -> void
52
+ end
53
+ end
@@ -0,0 +1,23 @@
1
+ module Capsium
2
+ # Packs a package directory into a .cap file (generating
3
+ # security.json) and unpacks .cap files with zip-slip protection.
4
+ class Packager
5
+ class FileAlreadyExistsError < StandardError
6
+ end
7
+
8
+ # Raised when a .cap archive contains an entry whose name would be
9
+ # written outside the destination directory (zip-slip).
10
+ class UnsafeEntryError < Capsium::Error
11
+ end
12
+
13
+ DRIVE_LETTER_PATTERN: Regexp
14
+
15
+ def pack: (Package package, ?Hash[Symbol, untyped] options) -> String
16
+
17
+ def unpack: (String cap_file_path, String destination) -> void
18
+
19
+ def compress_package: (Package package, String cap_file) -> void
20
+
21
+ def relative_path_current: (String absolute_path) -> String
22
+ end
23
+ end
@@ -0,0 +1,31 @@
1
+ module Capsium
2
+ class Reactor
3
+ # Monitoring HTTP API reports for the package this reactor serves
4
+ # (ARCHITECTURE.md section 7).
5
+ class Introspection
6
+ METADATA_PATH: String
7
+ ROUTES_PATH: String
8
+ CONTENT_HASHES_PATH: String
9
+ CONTENT_VALIDITY_PATH: String
10
+ PATHS: Array[String]
11
+
12
+ attr_reader package: Package
13
+
14
+ def initialize: (Package package) -> void
15
+
16
+ def endpoint?: (String path) -> bool
17
+
18
+ # The report body for an introspection endpoint, or nil when the
19
+ # path is not an introspection endpoint.
20
+ def report_for: (String path) -> Hash[Symbol, untyped]?
21
+
22
+ def metadata_report: () -> Hash[Symbol, untyped]
23
+
24
+ def routes_report: () -> Hash[Symbol, untyped]
25
+
26
+ def content_hashes_report: () -> Hash[Symbol, untyped]
27
+
28
+ def content_validity_report: () -> Hash[Symbol, untyped]
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,30 @@
1
+ module Capsium
2
+ # Rack-free WEBrick reactor: serves the package routes plus the
3
+ # Monitoring HTTP API (ARCHITECTURE.md section 7) and reloads the
4
+ # package on filesystem changes.
5
+ class Reactor
6
+ DEFAULT_PORT: Integer
7
+ DEFAULT_CACHE_CONTROL: String
8
+
9
+ attr_reader package: Package
10
+ attr_reader package_path: String
11
+ attr_reader routes: Package::Routes
12
+ attr_reader port: Integer
13
+ attr_reader cache_control: String?
14
+ attr_reader server: untyped
15
+ attr_reader server_thread: Thread?
16
+ attr_reader introspection: Introspection
17
+
18
+ def initialize: (package: Package | String package, ?port: Integer port,
19
+ ?cache_control: String? cache_control,
20
+ ?do_not_listen: bool do_not_listen) -> void
21
+
22
+ def serve: () -> untyped
23
+
24
+ def handle_request: (untyped request, untyped response) -> untyped
25
+
26
+ def mount_routes: () -> void
27
+
28
+ def restart_server: () -> Thread
29
+ end
30
+ end
data/sig/capsium.rbs CHANGED
@@ -1,4 +1,6 @@
1
1
  module Capsium
2
+ class Error < StandardError
3
+ end
4
+
2
5
  VERSION: String
3
- # See the writing guide of rbs: https://github.com/ruby/rbs#guides
4
6
  end
metadata CHANGED
@@ -1,29 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: capsium
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
- autorequire:
9
8
  bindir: exe
10
9
  cert_chain: []
11
- date: 2024-06-12 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: cssminify
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: '0'
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ">="
25
- - !ruby/object:Gem::Version
26
- version: '0'
27
12
  - !ruby/object:Gem::Dependency
28
13
  name: csv
29
14
  requirement: !ruby/object:Gem::Requirement
@@ -39,7 +24,7 @@ dependencies:
39
24
  - !ruby/object:Gem::Version
40
25
  version: '0'
41
26
  - !ruby/object:Gem::Dependency
42
- name: htmlcompressor
27
+ name: json
43
28
  requirement: !ruby/object:Gem::Requirement
44
29
  requirements:
45
30
  - - ">="
@@ -53,7 +38,7 @@ dependencies:
53
38
  - !ruby/object:Gem::Version
54
39
  version: '0'
55
40
  - !ruby/object:Gem::Dependency
56
- name: html-proofer
41
+ name: json-schema
57
42
  requirement: !ruby/object:Gem::Requirement
58
43
  requirements:
59
44
  - - ">="
@@ -67,7 +52,7 @@ dependencies:
67
52
  - !ruby/object:Gem::Version
68
53
  version: '0'
69
54
  - !ruby/object:Gem::Dependency
70
- name: jekyll
55
+ name: listen
71
56
  requirement: !ruby/object:Gem::Requirement
72
57
  requirements:
73
58
  - - ">="
@@ -81,47 +66,25 @@ dependencies:
81
66
  - !ruby/object:Gem::Version
82
67
  version: '0'
83
68
  - !ruby/object:Gem::Dependency
84
- name: json
69
+ name: lutaml-model
85
70
  requirement: !ruby/object:Gem::Requirement
86
71
  requirements:
87
72
  - - ">="
88
73
  - !ruby/object:Gem::Version
89
- version: '0'
90
- type: :runtime
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - ">="
95
- - !ruby/object:Gem::Version
96
- version: '0'
97
- - !ruby/object:Gem::Dependency
98
- name: json-schema
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - ">="
74
+ version: '0.8'
75
+ - - "<"
102
76
  - !ruby/object:Gem::Version
103
- version: '0'
77
+ version: '1.0'
104
78
  type: :runtime
105
79
  prerelease: false
106
80
  version_requirements: !ruby/object:Gem::Requirement
107
81
  requirements:
108
82
  - - ">="
109
83
  - !ruby/object:Gem::Version
110
- version: '0'
111
- - !ruby/object:Gem::Dependency
112
- name: listen
113
- requirement: !ruby/object:Gem::Requirement
114
- requirements:
115
- - - ">="
116
- - !ruby/object:Gem::Version
117
- version: '0'
118
- type: :runtime
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- requirements:
122
- - - ">="
84
+ version: '0.8'
85
+ - - "<"
123
86
  - !ruby/object:Gem::Version
124
- version: '0'
87
+ version: '1.0'
125
88
  - !ruby/object:Gem::Dependency
126
89
  name: marcel
127
90
  requirement: !ruby/object:Gem::Requirement
@@ -140,44 +103,22 @@ dependencies:
140
103
  name: rubyzip
141
104
  requirement: !ruby/object:Gem::Requirement
142
105
  requirements:
143
- - - "~>"
144
- - !ruby/object:Gem::Version
145
- version: 2.3.2
146
- type: :runtime
147
- prerelease: false
148
- version_requirements: !ruby/object:Gem::Requirement
149
- requirements:
150
- - - "~>"
106
+ - - ">="
151
107
  - !ruby/object:Gem::Version
152
108
  version: 2.3.2
153
- - !ruby/object:Gem::Dependency
154
- name: scss_lint
155
- requirement: !ruby/object:Gem::Requirement
156
- requirements:
157
- - - ">="
109
+ - - "<"
158
110
  - !ruby/object:Gem::Version
159
- version: '0'
111
+ version: '4.0'
160
112
  type: :runtime
161
113
  prerelease: false
162
114
  version_requirements: !ruby/object:Gem::Requirement
163
115
  requirements:
164
116
  - - ">="
165
117
  - !ruby/object:Gem::Version
166
- version: '0'
167
- - !ruby/object:Gem::Dependency
168
- name: shale
169
- requirement: !ruby/object:Gem::Requirement
170
- requirements:
171
- - - ">="
172
- - !ruby/object:Gem::Version
173
- version: '0'
174
- type: :runtime
175
- prerelease: false
176
- version_requirements: !ruby/object:Gem::Requirement
177
- requirements:
178
- - - ">="
118
+ version: 2.3.2
119
+ - - "<"
179
120
  - !ruby/object:Gem::Version
180
- version: '0'
121
+ version: '4.0'
181
122
  - !ruby/object:Gem::Dependency
182
123
  name: sqlite3
183
124
  requirement: !ruby/object:Gem::Requirement
@@ -206,20 +147,6 @@ dependencies:
206
147
  - - ">="
207
148
  - !ruby/object:Gem::Version
208
149
  version: '0'
209
- - !ruby/object:Gem::Dependency
210
- name: uglifier
211
- requirement: !ruby/object:Gem::Requirement
212
- requirements:
213
- - - ">="
214
- - !ruby/object:Gem::Version
215
- version: '0'
216
- type: :runtime
217
- prerelease: false
218
- version_requirements: !ruby/object:Gem::Requirement
219
- requirements:
220
- - - ">="
221
- - !ruby/object:Gem::Version
222
- version: '0'
223
150
  - !ruby/object:Gem::Dependency
224
151
  name: webrick
225
152
  requirement: !ruby/object:Gem::Requirement
@@ -248,91 +175,10 @@ dependencies:
248
175
  - - ">="
249
176
  - !ruby/object:Gem::Version
250
177
  version: '0'
251
- - !ruby/object:Gem::Dependency
252
- name: pry
253
- requirement: !ruby/object:Gem::Requirement
254
- requirements:
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
- - - ">="
263
- - !ruby/object:Gem::Version
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'
272
- type: :development
273
- prerelease: false
274
- version_requirements: !ruby/object:Gem::Requirement
275
- requirements:
276
- - - ">="
277
- - !ruby/object:Gem::Version
278
- version: '0'
279
- - !ruby/object:Gem::Dependency
280
- name: rake
281
- requirement: !ruby/object:Gem::Requirement
282
- requirements:
283
- - - "~>"
284
- - !ruby/object:Gem::Version
285
- version: '13.0'
286
- type: :development
287
- prerelease: false
288
- version_requirements: !ruby/object:Gem::Requirement
289
- requirements:
290
- - - "~>"
291
- - !ruby/object:Gem::Version
292
- version: '13.0'
293
- - !ruby/object:Gem::Dependency
294
- name: rspec
295
- requirement: !ruby/object:Gem::Requirement
296
- requirements:
297
- - - "~>"
298
- - !ruby/object:Gem::Version
299
- version: '3.11'
300
- type: :development
301
- prerelease: false
302
- version_requirements: !ruby/object:Gem::Requirement
303
- requirements:
304
- - - "~>"
305
- - !ruby/object:Gem::Version
306
- version: '3.11'
307
- - !ruby/object:Gem::Dependency
308
- name: rubocop
309
- requirement: !ruby/object:Gem::Requirement
310
- requirements:
311
- - - "~>"
312
- - !ruby/object:Gem::Version
313
- version: '1.58'
314
- type: :development
315
- prerelease: false
316
- version_requirements: !ruby/object:Gem::Requirement
317
- requirements:
318
- - - "~>"
319
- - !ruby/object:Gem::Version
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'
335
- description: Capsium
178
+ description: 'Capsium facilitates the creation, management and deployment of content
179
+ packages with ease. This gem provides a structured way to handle content, data,
180
+ and metadata for various applications: it packages them into .cap files and serves
181
+ them over HTTP.'
336
182
  email:
337
183
  - open.source@ribose.com
338
184
  executables:
@@ -345,8 +191,10 @@ files:
345
191
  - ".gitignore"
346
192
  - ".rspec"
347
193
  - ".rubocop.yml"
194
+ - CHANGELOG.md
348
195
  - CODE_OF_CONDUCT.md
349
196
  - Gemfile
197
+ - LICENSE
350
198
  - README.adoc
351
199
  - Rakefile
352
200
  - bin/console
@@ -355,24 +203,46 @@ files:
355
203
  - exe/capsium
356
204
  - lib/capsium.rb
357
205
  - lib/capsium/cli.rb
206
+ - lib/capsium/cli/convert.rb
207
+ - lib/capsium/cli/package.rb
208
+ - lib/capsium/cli/reactor.rb
209
+ - lib/capsium/converters.rb
358
210
  - lib/capsium/converters/jekyll.rb
359
211
  - lib/capsium/package.rb
360
212
  - lib/capsium/package/dataset.rb
361
- - lib/capsium/package/dataset_config.rb
362
213
  - lib/capsium/package/manifest.rb
363
214
  - lib/capsium/package/manifest_config.rb
364
215
  - lib/capsium/package/metadata.rb
365
216
  - lib/capsium/package/metadata_config.rb
366
217
  - lib/capsium/package/routes.rb
367
218
  - lib/capsium/package/routes_config.rb
219
+ - lib/capsium/package/security.rb
220
+ - lib/capsium/package/security_config.rb
368
221
  - lib/capsium/package/storage.rb
369
222
  - lib/capsium/package/storage_config.rb
223
+ - lib/capsium/package/validator.rb
370
224
  - lib/capsium/packager.rb
371
- - lib/capsium/protector.rb
372
225
  - lib/capsium/reactor.rb
226
+ - lib/capsium/reactor/introspection.rb
373
227
  - lib/capsium/thor_ext.rb
374
228
  - lib/capsium/version.rb
375
229
  - sig/capsium.rbs
230
+ - sig/capsium/package.rbs
231
+ - sig/capsium/package/dataset.rbs
232
+ - sig/capsium/package/manifest.rbs
233
+ - sig/capsium/package/manifest_config.rbs
234
+ - sig/capsium/package/metadata.rbs
235
+ - sig/capsium/package/metadata_config.rbs
236
+ - sig/capsium/package/routes.rbs
237
+ - sig/capsium/package/routes_config.rbs
238
+ - sig/capsium/package/security.rbs
239
+ - sig/capsium/package/security_config.rbs
240
+ - sig/capsium/package/storage.rbs
241
+ - sig/capsium/package/storage_config.rbs
242
+ - sig/capsium/package/validator.rbs
243
+ - sig/capsium/packager.rbs
244
+ - sig/capsium/reactor.rbs
245
+ - sig/capsium/reactor/introspection.rbs
376
246
  homepage: https://github.com/capsiums/capsium
377
247
  licenses:
378
248
  - MIT
@@ -380,7 +250,7 @@ metadata:
380
250
  homepage_uri: https://github.com/capsiums/capsium
381
251
  source_code_uri: https://github.com/capsiums/capsium
382
252
  changelog_uri: https://github.com/capsiums/capsium/releases
383
- post_install_message:
253
+ rubygems_mfa_required: 'true'
384
254
  rdoc_options: []
385
255
  require_paths:
386
256
  - lib
@@ -388,15 +258,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
388
258
  requirements:
389
259
  - - ">="
390
260
  - !ruby/object:Gem::Version
391
- version: 2.7.0
261
+ version: 3.2.0
392
262
  required_rubygems_version: !ruby/object:Gem::Requirement
393
263
  requirements:
394
264
  - - ">="
395
265
  - !ruby/object:Gem::Version
396
266
  version: '0'
397
267
  requirements: []
398
- rubygems_version: 3.5.11
399
- signing_key:
268
+ rubygems_version: 4.0.16
400
269
  specification_version: 4
401
- summary: Capsium
270
+ summary: Packager and reactor for Capsium packages (.cap)
402
271
  test_files: []