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.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.rubocop.yml +34 -7
- data/CHANGELOG.md +58 -0
- data/Gemfile +6 -0
- data/LICENSE +21 -0
- data/README.adoc +177 -135
- data/Rakefile +8 -1
- data/bin/console +1 -1
- data/capsium.gemspec +11 -19
- data/exe/capsium +1 -1
- data/lib/capsium/cli/convert.rb +18 -0
- data/lib/capsium/cli/package.rb +86 -0
- data/lib/capsium/cli/reactor.rb +25 -0
- data/lib/capsium/cli.rb +3 -96
- data/lib/capsium/converters/jekyll.rb +5 -7
- data/lib/capsium/converters.rb +7 -0
- data/lib/capsium/package/dataset.rb +67 -34
- data/lib/capsium/package/manifest.rb +33 -22
- data/lib/capsium/package/manifest_config.rb +52 -7
- data/lib/capsium/package/metadata.rb +4 -8
- data/lib/capsium/package/metadata_config.rb +97 -9
- data/lib/capsium/package/routes.rb +39 -41
- data/lib/capsium/package/routes_config.rb +120 -44
- data/lib/capsium/package/security.rb +123 -0
- data/lib/capsium/package/security_config.rb +60 -0
- data/lib/capsium/package/storage.rb +20 -45
- data/lib/capsium/package/storage_config.rb +100 -3
- data/lib/capsium/package/validator.rb +149 -0
- data/lib/capsium/package.rb +68 -66
- data/lib/capsium/packager.rb +42 -6
- data/lib/capsium/reactor/introspection.rb +88 -0
- data/lib/capsium/reactor.rb +89 -41
- data/lib/capsium/version.rb +1 -1
- data/lib/capsium.rb +7 -9
- data/sig/capsium/package/dataset.rbs +28 -0
- data/sig/capsium/package/manifest.rbs +34 -0
- data/sig/capsium/package/manifest_config.rbs +38 -0
- data/sig/capsium/package/metadata.rbs +26 -0
- data/sig/capsium/package/metadata_config.rbs +49 -0
- data/sig/capsium/package/routes.rbs +37 -0
- data/sig/capsium/package/routes_config.rbs +74 -0
- data/sig/capsium/package/security.rbs +65 -0
- data/sig/capsium/package/security_config.rbs +57 -0
- data/sig/capsium/package/storage.rbs +28 -0
- data/sig/capsium/package/storage_config.rbs +61 -0
- data/sig/capsium/package/validator.rbs +29 -0
- data/sig/capsium/package.rbs +53 -0
- data/sig/capsium/packager.rbs +23 -0
- data/sig/capsium/reactor/introspection.rbs +31 -0
- data/sig/capsium/reactor.rbs +30 -0
- data/sig/capsium.rbs +3 -1
- metadata +52 -183
- data/lib/capsium/package/dataset_config.rb +0 -28
- 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
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.
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
-
|
|
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
|
-
-
|
|
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
|
-
-
|
|
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:
|
|
167
|
-
-
|
|
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
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
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
|
-
|
|
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.
|
|
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:
|
|
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: []
|