ree 1.0.47 → 1.1.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/.rspec +1 -0
- data/Gemfile.lock +2 -1
- data/exe/ree +0 -31
- data/lib/ree/cli/indexing/index_file.rb +1 -7
- data/lib/ree/cli/indexing/index_package.rb +1 -1
- data/lib/ree/cli/indexing/index_project.rb +1 -3
- data/lib/ree/cli/indexing.rb +0 -2
- data/lib/ree/cli/spec_runner.rb +1 -1
- data/lib/ree/cli.rb +0 -1
- data/lib/ree/container.rb +6 -0
- data/lib/ree/core/package.rb +3 -9
- data/lib/ree/core/package_file_structure_loader.rb +53 -0
- data/lib/ree/core/package_loader.rb +67 -61
- data/lib/ree/core/packages_detector.rb +15 -17
- data/lib/ree/core/packages_schema.rb +2 -2
- data/lib/ree/core/packages_schema_builder.rb +3 -2
- data/lib/ree/core/packages_schema_loader.rb +4 -6
- data/lib/ree/core/path_helper.rb +4 -12
- data/lib/ree/dsl/build_package_dsl.rb +1 -1
- data/lib/ree/dsl/import_dsl.rb +15 -0
- data/lib/ree/facades/packages_facade.rb +11 -119
- data/lib/ree/templates/init/ree.setup.rb +0 -3
- data/lib/ree/version.rb +1 -1
- data/lib/ree.rb +6 -34
- metadata +3 -8
- data/lib/ree/cli/generate_package_schema.rb +0 -40
- data/lib/ree/core/package_schema.rb +0 -31
- data/lib/ree/core/package_schema_builder.rb +0 -46
- data/lib/ree/core/package_schema_loader.rb +0 -172
- data/lib/ree/templates/package/Package.schema.json +0 -0
- data/lib/ree/templates/package/spec/package_schema_spec.rb +0 -14
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 2f0f2ca665d289e3603982d8fefe5397fdbfacfdc2e11221e0c1d671e088f1b2
|
|
4
|
+
data.tar.gz: 2c4c6b8bfcd5e1f88217c39e8c33f914ff4f1d706a08e32a55c281cb5e633e16
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 8dc3a61e17a907c33aa125d7f094fb7fce07b7b35e88e6b76d8973bfe37508d7205a7a687a7bb63b09fe0d639f3d0230c01a320717ee782c2a3aaf6ee94458b2
|
|
7
|
+
data.tar.gz: 7a0b94dcf8a004578a87ce3c7ee221862729c70afe3998af1ad463710a57023ea05733ba29425358c01f20c49fc7b4081e1a7e61fb82611f6839fabfad050465
|
data/.rspec
CHANGED
data/Gemfile.lock
CHANGED
data/exe/ree
CHANGED
|
@@ -85,12 +85,6 @@ class ReeCliRunner
|
|
|
85
85
|
|
|
86
86
|
Ree::CLI::GeneratePackage.run(**options_with_defaults)
|
|
87
87
|
Ree::CLI::GeneratePackagesSchema.run(options_with_defaults[:project_path])
|
|
88
|
-
|
|
89
|
-
Ree::CLI::GeneratePackageSchema.run(
|
|
90
|
-
package_name: options_with_defaults[:package_name],
|
|
91
|
-
project_path: options_with_defaults[:project_path],
|
|
92
|
-
silence: false
|
|
93
|
-
)
|
|
94
88
|
end
|
|
95
89
|
end
|
|
96
90
|
|
|
@@ -112,31 +106,6 @@ class ReeCliRunner
|
|
|
112
106
|
end
|
|
113
107
|
end
|
|
114
108
|
|
|
115
|
-
command :"gen.package_json" do |c|
|
|
116
|
-
c.syntax = 'ree gen.package_json PACKAGE_NAME'
|
|
117
|
-
c.description = 'generates Package.schema.json for specific package'
|
|
118
|
-
c.summary = '> ' + c.description
|
|
119
|
-
c.example 'ree gen.package_json PACKAGE_NAME', ''
|
|
120
|
-
c.option '--silence', String, 'Silence all logs'
|
|
121
|
-
c.option '--project_path [ROOT_PROJECT_DIR]', String, 'Root project dir path'
|
|
122
|
-
c.action do |args, options|
|
|
123
|
-
package_name = args.first || ""
|
|
124
|
-
options_hash = options.__hash__
|
|
125
|
-
|
|
126
|
-
if options_hash[:project_path]
|
|
127
|
-
options_hash[:project_path] = File.expand_path(options_hash[:project_path])
|
|
128
|
-
end
|
|
129
|
-
|
|
130
|
-
default_options = {
|
|
131
|
-
package_name: package_name,
|
|
132
|
-
project_path: options_hash[:project_path] || File.expand_path(Dir.pwd),
|
|
133
|
-
silence: options_hash.has_key?(:silence)
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
Ree::CLI::GeneratePackageSchema.run(**default_options)
|
|
137
|
-
end
|
|
138
|
-
end
|
|
139
|
-
|
|
140
109
|
command :"gen.template" do |c|
|
|
141
110
|
c.syntax = "ree gen.template TEMPLATE_NAME [options]"
|
|
142
111
|
c.description = "generates template from ROOT/.ree/templates folder with specified variables"
|
|
@@ -19,7 +19,7 @@ module Ree
|
|
|
19
19
|
|
|
20
20
|
current_package_schema = self.find_package(File.dirname(file_path))
|
|
21
21
|
|
|
22
|
-
return {} unless current_package_schema
|
|
22
|
+
return '{}' unless current_package_schema
|
|
23
23
|
|
|
24
24
|
package_schema = JSON.load_file(current_package_schema)
|
|
25
25
|
current_package_name = package_schema["name"].to_sym
|
|
@@ -65,12 +65,6 @@ module Ree
|
|
|
65
65
|
end
|
|
66
66
|
|
|
67
67
|
def find_package(dir)
|
|
68
|
-
package_schema = File.join(dir, Ree::PACKAGE_SCHEMA_FILE)
|
|
69
|
-
|
|
70
|
-
if File.exist?(package_schema)
|
|
71
|
-
return package_schema
|
|
72
|
-
end
|
|
73
|
-
|
|
74
68
|
if dir == '/'
|
|
75
69
|
return nil
|
|
76
70
|
end
|
|
@@ -23,7 +23,7 @@ module Ree
|
|
|
23
23
|
hsh[:objects] = {}
|
|
24
24
|
|
|
25
25
|
package_name = package_name.to_sym
|
|
26
|
-
facade.
|
|
26
|
+
facade.read_package_structure(package_name)
|
|
27
27
|
package = facade.get_loaded_package(package_name)
|
|
28
28
|
package_hsh = index_package_entry(package)
|
|
29
29
|
|
|
@@ -30,12 +30,10 @@ module Ree
|
|
|
30
30
|
gem_package_hsh = {}
|
|
31
31
|
gem_package_hsh[:name] = package.name
|
|
32
32
|
gem_package_hsh[:gem] = package.gem_name
|
|
33
|
-
gem_package_hsh[:schema_rpath] = package.schema_rpath
|
|
34
33
|
gem_package_hsh[:entry_rpath] = package.entry_rpath
|
|
35
34
|
gem_package_hsh[:objects] = package.objects.map {
|
|
36
35
|
{
|
|
37
36
|
name: _1.name,
|
|
38
|
-
schema_rpath: _1.schema_rpath,
|
|
39
37
|
file_rpath: _1.rpath,
|
|
40
38
|
mount_as: _1.mount_as,
|
|
41
39
|
methods: map_fn_methods(_1),
|
|
@@ -57,7 +55,7 @@ module Ree
|
|
|
57
55
|
|
|
58
56
|
next if package.dir.nil?
|
|
59
57
|
|
|
60
|
-
facade.
|
|
58
|
+
facade.read_package_structure(package.name)
|
|
61
59
|
|
|
62
60
|
package_hsh = index_package_entry(package)
|
|
63
61
|
|
data/lib/ree/cli/indexing.rb
CHANGED
|
@@ -12,13 +12,11 @@ module Ree
|
|
|
12
12
|
def index_package_entry(package)
|
|
13
13
|
package_hsh = {}
|
|
14
14
|
package_hsh[:name] = package.name
|
|
15
|
-
package_hsh[:schema_rpath] = package.schema_rpath
|
|
16
15
|
package_hsh[:entry_rpath] = package.entry_rpath
|
|
17
16
|
package_hsh[:tags] = package.tags
|
|
18
17
|
package_hsh[:objects] = package.objects.map {
|
|
19
18
|
{
|
|
20
19
|
name: _1.name,
|
|
21
|
-
schema_rpath: _1.schema_rpath,
|
|
22
20
|
file_rpath: _1.rpath,
|
|
23
21
|
mount_as: _1.mount_as,
|
|
24
22
|
methods: map_fn_methods(_1),
|
data/lib/ree/cli/spec_runner.rb
CHANGED
|
@@ -118,7 +118,7 @@ module Ree
|
|
|
118
118
|
names = packages.map(&:name)
|
|
119
119
|
|
|
120
120
|
names.select do |package_name|
|
|
121
|
-
package = container.packages_facade.
|
|
121
|
+
package = container.packages_facade.get_loaded_package(package_name)
|
|
122
122
|
package.tags.include?(@tag_name)
|
|
123
123
|
end.compact
|
|
124
124
|
end
|
data/lib/ree/cli.rb
CHANGED
|
@@ -4,7 +4,6 @@ module Ree
|
|
|
4
4
|
module CLI
|
|
5
5
|
autoload :Init, 'ree/cli/init'
|
|
6
6
|
autoload :GeneratePackagesSchema, 'ree/cli/generate_packages_schema'
|
|
7
|
-
autoload :GeneratePackageSchema, 'ree/cli/generate_package_schema'
|
|
8
7
|
autoload :GeneratePackage, 'ree/cli/generate_package'
|
|
9
8
|
autoload :GenerateTemplate, 'ree/cli/generate_template'
|
|
10
9
|
autoload :Indexing, 'ree/cli/indexing'
|
data/lib/ree/container.rb
CHANGED
|
@@ -62,6 +62,12 @@ class Ree::Container
|
|
|
62
62
|
# @param [Symbol] package_name
|
|
63
63
|
# @return [Ree::Package]
|
|
64
64
|
def load_package(package_name)
|
|
65
|
+
@packages_facade.read_package_structure(package_name)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# @param [Symbol] package_name
|
|
69
|
+
# @return [Ree::Package]
|
|
70
|
+
def load_entire_package(package_name)
|
|
65
71
|
@packages_facade.load_entire_package(package_name)
|
|
66
72
|
end
|
|
67
73
|
end
|
data/lib/ree/core/package.rb
CHANGED
|
@@ -3,13 +3,12 @@
|
|
|
3
3
|
require 'pathname'
|
|
4
4
|
|
|
5
5
|
class Ree::Package
|
|
6
|
-
attr_reader :schema_version, :name, :
|
|
6
|
+
attr_reader :schema_version, :name, :entry_rpath, :objects_store,
|
|
7
7
|
:module, :tags, :preload, :default_links, :gem_name
|
|
8
8
|
|
|
9
|
-
def initialize(schema_version, name, entry_rpath,
|
|
9
|
+
def initialize(schema_version, name, entry_rpath, gem_name = nil)
|
|
10
10
|
@schema_version = schema_version
|
|
11
11
|
@name = name
|
|
12
|
-
@schema_rpath = schema_rpath
|
|
13
12
|
@entry_rpath = entry_rpath
|
|
14
13
|
@objects_store = {}
|
|
15
14
|
@deps_store = {}
|
|
@@ -51,11 +50,6 @@ class Ree::Package
|
|
|
51
50
|
@tags = (@tags + list).map(&:to_s).uniq; self
|
|
52
51
|
end
|
|
53
52
|
|
|
54
|
-
# @param [String] val
|
|
55
|
-
def set_schema_rpath(val)
|
|
56
|
-
@schema_rpath = val; self
|
|
57
|
-
end
|
|
58
|
-
|
|
59
53
|
def reset
|
|
60
54
|
@entry_loaded = false
|
|
61
55
|
@schema_loaded = false
|
|
@@ -94,7 +88,7 @@ class Ree::Package
|
|
|
94
88
|
end
|
|
95
89
|
|
|
96
90
|
def dir
|
|
97
|
-
@dir ||= @
|
|
91
|
+
@dir ||= @entry_rpath ? Pathname.new(@entry_rpath).dirname.parent.to_s : nil
|
|
98
92
|
end
|
|
99
93
|
|
|
100
94
|
def gem?
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'pathname'
|
|
4
|
+
|
|
5
|
+
class Ree::PackageFileStructureLoader
|
|
6
|
+
PACKAGE_FOLDER = 'package'
|
|
7
|
+
|
|
8
|
+
# @param [Ree::Package] package Loaded package
|
|
9
|
+
# @return [Ree::Package]
|
|
10
|
+
def call(package)
|
|
11
|
+
return package if package.schema_loaded?
|
|
12
|
+
|
|
13
|
+
package_dir = if package && package.gem?
|
|
14
|
+
File.join(Ree.gem(package.gem_name).dir, package.dir)
|
|
15
|
+
else
|
|
16
|
+
File.join(Ree.root_dir, package.dir)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
root_dir = if package.gem?
|
|
20
|
+
Ree.gem(package.gem_name).dir
|
|
21
|
+
else
|
|
22
|
+
Ree.root_dir
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
object_store = {}
|
|
26
|
+
package.set_schema_loaded
|
|
27
|
+
|
|
28
|
+
files_dir = File.join(package_dir, PACKAGE_FOLDER)
|
|
29
|
+
Dir[File.join(files_dir, '**', '*.rb')].each do |path|
|
|
30
|
+
file_path = Pathname.new(path)
|
|
31
|
+
object_name = File.basename(path, '.rb')
|
|
32
|
+
rpath = file_path.relative_path_from(root_dir)
|
|
33
|
+
|
|
34
|
+
object = Ree::Object.new(
|
|
35
|
+
object_name.to_sym,
|
|
36
|
+
rpath,
|
|
37
|
+
rpath,
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
if object_store.has_key?(object_name)
|
|
41
|
+
raise Ree::Error.new("duplicate object name for '#{object_name}': #{rpath}", :invalid_package_file_structure)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
object_store[object_name] = true
|
|
45
|
+
|
|
46
|
+
object.set_package(package.name)
|
|
47
|
+
|
|
48
|
+
package.set_object(object)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
package
|
|
52
|
+
end
|
|
53
|
+
end
|
|
@@ -4,92 +4,98 @@ require 'set'
|
|
|
4
4
|
require 'pathname'
|
|
5
5
|
|
|
6
6
|
class Ree::PackageLoader
|
|
7
|
+
include Ree::Args
|
|
8
|
+
|
|
7
9
|
def initialize(packages_store)
|
|
8
|
-
@packages_store = packages_store
|
|
9
10
|
@loaded_paths = {}
|
|
10
11
|
@loaded_packages = {}
|
|
12
|
+
@packages_store = packages_store
|
|
11
13
|
end
|
|
12
14
|
|
|
13
|
-
def
|
|
14
|
-
|
|
15
|
-
end
|
|
15
|
+
def load_entire_package(package_name)
|
|
16
|
+
return if @loaded_packages[package_name]
|
|
16
17
|
|
|
17
|
-
|
|
18
|
-
def call(name)
|
|
19
|
-
return @loaded_packages[name] if @loaded_packages.has_key?(name)
|
|
18
|
+
package = get_loaded_package(package_name)
|
|
20
19
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
20
|
+
return unless package
|
|
21
|
+
|
|
22
|
+
package.objects.each do |package_object|
|
|
23
|
+
object_path = Ree::PathHelper.abs_object_path(package_object)
|
|
25
24
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
return if @loaded_paths[package_name][path]
|
|
29
|
-
@loaded_paths[package_name][path] = true
|
|
25
|
+
load_file(object_path, package.name)
|
|
26
|
+
end
|
|
30
27
|
|
|
31
|
-
|
|
32
|
-
|
|
28
|
+
@loaded_packages[package.name] = true
|
|
29
|
+
|
|
30
|
+
package.deps.each do |dep|
|
|
31
|
+
load_entire_package(dep.name)
|
|
32
|
+
end
|
|
33
33
|
end
|
|
34
34
|
|
|
35
|
-
|
|
35
|
+
def get_loaded_package(package_name)
|
|
36
|
+
package = get_package(package_name)
|
|
37
|
+
load_package_entry(package_name)
|
|
38
|
+
|
|
39
|
+
return package if package.schema_loaded?
|
|
36
40
|
|
|
37
|
-
|
|
38
|
-
package = @packages_store.get(name)
|
|
39
|
-
@loaded_packages[name] = package
|
|
41
|
+
read_package_structure(package_name)
|
|
40
42
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
43
|
+
package
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def get_package(package_name, raise_if_missing = true)
|
|
47
|
+
check_arg(package_name, :package_name, Symbol)
|
|
48
|
+
package = @packages_store.get(package_name)
|
|
49
|
+
|
|
50
|
+
if !package && raise_if_missing
|
|
51
|
+
raise Ree::Error.new("Package :#{package_name} is not found in Packages.schema.json. Run `ree gen.packages_json` to update schema.", :package_schema_not_found)
|
|
46
52
|
end
|
|
47
53
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
54
|
+
package
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def load_package_entry(package_name)
|
|
58
|
+
package = @packages_store.get(package_name)
|
|
59
|
+
|
|
60
|
+
if package.nil?
|
|
61
|
+
raise Ree::Error.new("package :#{package_name} not found in Packages.schema.json")
|
|
51
62
|
end
|
|
52
63
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
64
|
+
return if package.loaded?
|
|
65
|
+
|
|
66
|
+
Ree.logger.debug("load_package_entry(:#{package_name})")
|
|
67
|
+
|
|
68
|
+
load_file(
|
|
69
|
+
Ree::PathHelper.abs_package_entry_path(package),
|
|
70
|
+
package_name
|
|
57
71
|
)
|
|
72
|
+
end
|
|
58
73
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
Ree::PathHelper.abs_package_entry_path(package), name
|
|
62
|
-
)
|
|
74
|
+
def read_package_structure(package_name)
|
|
75
|
+
package = get_package(package_name)
|
|
63
76
|
|
|
64
|
-
|
|
65
|
-
load_file(path, name)
|
|
66
|
-
end
|
|
77
|
+
Ree.logger.debug("read_package_file_structure(:#{package_name})")
|
|
67
78
|
|
|
68
|
-
|
|
79
|
+
if !package.dir
|
|
80
|
+
package.set_schema_loaded
|
|
81
|
+
return package
|
|
69
82
|
end
|
|
70
83
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
if !ENV.has_key?(env_var.name)
|
|
74
|
-
msg = <<~DOC
|
|
75
|
-
package: :#{package.name}
|
|
76
|
-
path: #{File.join(Ree::PathHelper.project_root_dir(package), package.entry_rpath)}
|
|
77
|
-
error: Package :#{name} requires env var '#{env_var.name}' to be set
|
|
78
|
-
DOC
|
|
79
|
-
|
|
80
|
-
raise Ree::Error.new(msg, :env_var_not_set)
|
|
81
|
-
end
|
|
82
|
-
end
|
|
83
|
-
end
|
|
84
|
+
Ree::PackageFileStructureLoader.new.call(package)
|
|
85
|
+
end
|
|
84
86
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
87
|
+
def reset
|
|
88
|
+
@loaded_paths = {}
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def load_file(path, package_name)
|
|
92
|
+
@loaded_paths[package_name] ||= {}
|
|
93
|
+
return if @loaded_paths[package_name][path]
|
|
94
|
+
@loaded_paths[package_name][path] = true
|
|
90
95
|
|
|
91
|
-
|
|
96
|
+
Ree.logger.debug("load_file(:#{package_name}, '#{path}')")
|
|
92
97
|
|
|
93
|
-
|
|
98
|
+
Kernel.require(path)
|
|
94
99
|
end
|
|
95
100
|
end
|
|
101
|
+
|
|
@@ -4,40 +4,38 @@ require 'pathname'
|
|
|
4
4
|
|
|
5
5
|
class Ree::PackagesDetector
|
|
6
6
|
# @param [String] dir Packages root dir
|
|
7
|
-
# @return [ArrayOf[{name: String, entry_path: String,
|
|
7
|
+
# @return [ArrayOf[{name: String, entry_path: String, gem_name: Nilor[String]}]]
|
|
8
8
|
def call(dir, gem_name = nil)
|
|
9
9
|
if !Dir.exist?(dir)
|
|
10
10
|
raise Ree::Error.new("dir does not exist: #{dir}", :invalid_dir)
|
|
11
11
|
end
|
|
12
12
|
|
|
13
|
-
files = File.join(dir, "**/", Ree::PACKAGE_SCHEMA_FILE)
|
|
14
13
|
names = {}
|
|
14
|
+
packages = []
|
|
15
15
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
.relative_path_from(Pathname.new(dir))
|
|
20
|
-
.to_s
|
|
16
|
+
package_dirs = File.join(dir, "**/package")
|
|
17
|
+
Dir[package_dirs].each do |package_dir|
|
|
18
|
+
next unless File.directory?(package_dir)
|
|
21
19
|
|
|
22
|
-
|
|
23
|
-
|
|
20
|
+
dir_path = Pathname.new(package_dir)
|
|
21
|
+
name = dir_path.parent.basename.to_s
|
|
24
22
|
|
|
25
|
-
if
|
|
26
|
-
Ree.logger.error("Entry file does not exist for '#{name}' package: #{entry_path}")
|
|
27
|
-
end
|
|
23
|
+
next if names.has_key?(name)
|
|
28
24
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
25
|
+
package_rel_path = dir_path.relative_path_from(dir)
|
|
26
|
+
parent_rel_path = dir_path.parent.relative_path_from(dir)
|
|
27
|
+
|
|
28
|
+
entry_path = Ree::PathHelper.package_entry_path(package_rel_path)
|
|
32
29
|
|
|
33
30
|
names[name] = entry_path
|
|
34
31
|
|
|
35
|
-
{
|
|
32
|
+
packages << {
|
|
36
33
|
name: name.to_sym,
|
|
37
34
|
entry_path: entry_path,
|
|
38
|
-
package_schema_path: package_schema_path,
|
|
39
35
|
gem_name: gem_name
|
|
40
36
|
}
|
|
41
37
|
end
|
|
38
|
+
|
|
39
|
+
packages
|
|
42
40
|
end
|
|
43
41
|
end
|
|
@@ -11,12 +11,12 @@ module Ree::PackagesSchema
|
|
|
11
11
|
|
|
12
12
|
module Packages
|
|
13
13
|
NAME = 'name'
|
|
14
|
-
|
|
14
|
+
ENTRY_PATH = 'entry_path'
|
|
15
15
|
GEM = 'gem'
|
|
16
16
|
end
|
|
17
17
|
|
|
18
18
|
module GemPackages
|
|
19
19
|
NAME = 'name'
|
|
20
|
-
|
|
20
|
+
ENTRY_PATH = 'entry_path'
|
|
21
21
|
end
|
|
22
22
|
end
|
|
@@ -19,20 +19,21 @@ class Ree::PackagesSchemaBuilder
|
|
|
19
19
|
gem_packages += @packages_detector.call(gem.dir, gem.name)
|
|
20
20
|
end
|
|
21
21
|
|
|
22
|
+
|
|
22
23
|
result = {
|
|
23
24
|
Schema::SCHEMA_VERSION => Schema::SCHEMA_VERSION_NUMBER,
|
|
24
25
|
Schema::SCHEMA_TYPE => Schema::PACKAGES,
|
|
25
26
|
Schema::PACKAGES => packages.sort_by { _1[:name] }.map {
|
|
26
27
|
{
|
|
27
28
|
Schema::Packages::NAME => _1.fetch(:name),
|
|
28
|
-
Schema::Packages::
|
|
29
|
+
Schema::Packages::ENTRY_PATH => _1.fetch(:entry_path),
|
|
29
30
|
}
|
|
30
31
|
},
|
|
31
32
|
Schema::GEM_PACKAGES => gem_packages.sort_by { [_1.fetch(:gem_name), _1.fetch(:name)] }.map {
|
|
32
33
|
{
|
|
33
34
|
Schema::Packages::GEM => _1.fetch(:gem_name),
|
|
34
35
|
Schema::Packages::NAME => _1.fetch(:name),
|
|
35
|
-
Schema::Packages::
|
|
36
|
+
Schema::Packages::ENTRY_PATH => _1.fetch(:entry_path),
|
|
36
37
|
}
|
|
37
38
|
},
|
|
38
39
|
}
|
|
@@ -48,7 +48,7 @@ class Ree::PackagesSchemaLoader
|
|
|
48
48
|
|
|
49
49
|
data.each do |item|
|
|
50
50
|
name = item[Schema::Packages::NAME].to_s
|
|
51
|
-
|
|
51
|
+
entry_path = item[Schema::Packages::ENTRY_PATH].to_s
|
|
52
52
|
list = [name, schema]
|
|
53
53
|
|
|
54
54
|
if list.reject(&:empty?).size != list.size
|
|
@@ -56,7 +56,7 @@ class Ree::PackagesSchemaLoader
|
|
|
56
56
|
end
|
|
57
57
|
|
|
58
58
|
if names.has_key?(name)
|
|
59
|
-
raise Ree::Error.new("duplicate package name for '#{
|
|
59
|
+
raise Ree::Error.new("duplicate package name for '#{name}'", :invalid_packages_schema)
|
|
60
60
|
end
|
|
61
61
|
|
|
62
62
|
names[name] = true
|
|
@@ -64,8 +64,7 @@ class Ree::PackagesSchemaLoader
|
|
|
64
64
|
package = Ree::Package.new(
|
|
65
65
|
schema_version,
|
|
66
66
|
name.to_sym,
|
|
67
|
-
|
|
68
|
-
schema_rpath,
|
|
67
|
+
entry_path,
|
|
69
68
|
gem_name
|
|
70
69
|
)
|
|
71
70
|
|
|
@@ -83,8 +82,7 @@ class Ree::PackagesSchemaLoader
|
|
|
83
82
|
Ree::Package.new(
|
|
84
83
|
schema_version,
|
|
85
84
|
name.to_sym,
|
|
86
|
-
|
|
87
|
-
schema_rpath,
|
|
85
|
+
entry_path,
|
|
88
86
|
gem_name
|
|
89
87
|
)
|
|
90
88
|
)
|
data/lib/ree/core/path_helper.rb
CHANGED
|
@@ -55,16 +55,14 @@ class Ree::PathHelper
|
|
|
55
55
|
# @param [String] directory inside package
|
|
56
56
|
# @return [String] name of package
|
|
57
57
|
def package_name_from_dir(dir)
|
|
58
|
-
package_schema = File.join(dir, Ree::PACKAGE_SCHEMA_FILE)
|
|
59
|
-
|
|
60
|
-
if File.exist?(package_schema)
|
|
61
|
-
return package_schema.split('/')[-2]
|
|
62
|
-
end
|
|
63
|
-
|
|
64
58
|
if dir == '/'
|
|
65
59
|
return nil
|
|
66
60
|
end
|
|
67
61
|
|
|
62
|
+
if dir == 'package'
|
|
63
|
+
return File.expand_path('..', dir)
|
|
64
|
+
end
|
|
65
|
+
|
|
68
66
|
package_name_from_dir(File.expand_path('..', dir))
|
|
69
67
|
end
|
|
70
68
|
|
|
@@ -90,12 +88,6 @@ class Ree::PathHelper
|
|
|
90
88
|
)
|
|
91
89
|
end
|
|
92
90
|
|
|
93
|
-
# @param [Ree::Package] package Package schema
|
|
94
|
-
# @return [String] Absolute package schema path
|
|
95
|
-
def abs_package_schema_path(package)
|
|
96
|
-
File.join(project_root_dir(package), package.schema_rpath)
|
|
97
|
-
end
|
|
98
|
-
|
|
99
91
|
# @param [Ree::Package] package Package schema
|
|
100
92
|
# @return [String] Absolute package folder path (ex. /data/project/bc/accounts)
|
|
101
93
|
def abs_package_dir(package)
|
|
@@ -133,7 +133,7 @@ class Ree::BuildPackageDsl
|
|
|
133
133
|
package = @packages_facade.get_package(name, false)
|
|
134
134
|
|
|
135
135
|
if package.nil?
|
|
136
|
-
package = Ree::Package.new(Ree::VERSION, name, nil, nil
|
|
136
|
+
package = Ree::Package.new(Ree::VERSION, name, nil, nil)
|
|
137
137
|
@packages_facade.store_package(package)
|
|
138
138
|
end
|
|
139
139
|
|
data/lib/ree/dsl/import_dsl.rb
CHANGED
|
@@ -6,6 +6,8 @@ class Ree::ImportDsl
|
|
|
6
6
|
end
|
|
7
7
|
|
|
8
8
|
def execute(klass, proc)
|
|
9
|
+
patch_const_missing
|
|
10
|
+
|
|
9
11
|
class_constant = self.class.instance_exec(&proc)
|
|
10
12
|
|
|
11
13
|
[
|
|
@@ -28,8 +30,21 @@ class Ree::ImportDsl
|
|
|
28
30
|
.eval("#{e.name} = Ree::ImportDsl::ClassConstant.new('#{e.name}')")
|
|
29
31
|
|
|
30
32
|
retry
|
|
33
|
+
ensure
|
|
34
|
+
cancel_patch_const_missing
|
|
31
35
|
end
|
|
32
36
|
|
|
37
|
+
def patch_const_missing
|
|
38
|
+
return if @_original_const_missing
|
|
39
|
+
@_original_const_missing = Module.instance_method(:const_missing)
|
|
40
|
+
Module.define_method(:const_missing){ |const_name| raise NameError.new("class not found #{const_name.to_s}", const_name) }
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def cancel_patch_const_missing
|
|
44
|
+
Module.define_method(:const_missing, @_original_const_missing)
|
|
45
|
+
@_original_const_missing = nil
|
|
46
|
+
end
|
|
47
|
+
|
|
33
48
|
private def extract_constants(class_constant)
|
|
34
49
|
[class_constant] + class_constant.constants
|
|
35
50
|
end
|
|
@@ -27,23 +27,10 @@ class Ree::PackagesFacade
|
|
|
27
27
|
end
|
|
28
28
|
end
|
|
29
29
|
|
|
30
|
-
def perf_mode?(package)
|
|
31
|
-
package.gem? ? true : Ree.performance_mode?
|
|
32
|
-
end
|
|
33
|
-
|
|
34
30
|
# @param [Symbol] package_name
|
|
35
31
|
# @return [Ree::Package]
|
|
36
32
|
def get_loaded_package(package_name)
|
|
37
|
-
|
|
38
|
-
return package if package.schema_loaded?
|
|
39
|
-
|
|
40
|
-
if perf_mode?(package)
|
|
41
|
-
read_package_schema_json(package_name)
|
|
42
|
-
else
|
|
43
|
-
load_entire_package(package_name)
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
package
|
|
33
|
+
@package_loader.get_loaded_package(package_name)
|
|
47
34
|
end
|
|
48
35
|
|
|
49
36
|
# @param [Symbol] package_name
|
|
@@ -53,10 +40,6 @@ class Ree::PackagesFacade
|
|
|
53
40
|
package = get_loaded_package(package_name)
|
|
54
41
|
object = package.get_object(object_name)
|
|
55
42
|
|
|
56
|
-
if !object && perf_mode?(package)
|
|
57
|
-
raise Ree::Error.new("Ree object :#{object_name} for package :#{package_name} not found")
|
|
58
|
-
end
|
|
59
|
-
|
|
60
43
|
object
|
|
61
44
|
end
|
|
62
45
|
|
|
@@ -67,98 +50,26 @@ class Ree::PackagesFacade
|
|
|
67
50
|
!object.nil?
|
|
68
51
|
end
|
|
69
52
|
|
|
70
|
-
# @param [Symbol] package_name
|
|
71
|
-
# @return nil
|
|
72
|
-
def dump_package_schema(package_name)
|
|
73
|
-
Ree.logger.debug("dump_package_schema(:#{package_name})")
|
|
74
|
-
|
|
75
|
-
read_package_schema_json(package_name)
|
|
76
|
-
package = get_package(package_name)
|
|
77
|
-
|
|
78
|
-
if package.dir
|
|
79
|
-
schema_path = Ree::PathHelper.abs_package_schema_path(package)
|
|
80
|
-
|
|
81
|
-
if !File.exist?(schema_path)
|
|
82
|
-
raise Ree::Error.new("File does not exist: #{schema_path}", :invalid_path)
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
schema = Ree::PackageSchemaBuilder.new.call(package)
|
|
86
|
-
json = JSON.pretty_generate(schema)
|
|
87
|
-
File.write(schema_path, json, mode: 'w')
|
|
88
|
-
|
|
89
|
-
json
|
|
90
|
-
end
|
|
91
|
-
end
|
|
92
|
-
|
|
93
|
-
# @param [Symbol] package_name
|
|
94
|
-
# @return nil
|
|
95
|
-
def write_package_schema(package_name)
|
|
96
|
-
Ree.logger.debug("write_package_schema(:#{package_name})")
|
|
97
|
-
|
|
98
|
-
load_entire_package(package_name)
|
|
99
|
-
package = get_package(package_name)
|
|
100
|
-
|
|
101
|
-
if package.dir
|
|
102
|
-
schema_path = Ree::PathHelper.abs_package_schema_path(package)
|
|
103
|
-
|
|
104
|
-
if !File.exist?(schema_path)
|
|
105
|
-
raise Ree::Error.new("File does not exist: #{schema_path}", :invalid_path)
|
|
106
|
-
end
|
|
107
|
-
|
|
108
|
-
schema = Ree::PackageSchemaBuilder.new.call(package)
|
|
109
|
-
json = JSON.pretty_generate(schema)
|
|
110
|
-
File.write(schema_path, json, mode: 'w')
|
|
111
|
-
|
|
112
|
-
json
|
|
113
|
-
end
|
|
114
|
-
end
|
|
115
|
-
|
|
116
53
|
# @param [Symbol] package_name
|
|
117
54
|
# @return nil
|
|
118
55
|
def load_package_entry(package_name)
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
if package.nil?
|
|
122
|
-
raise Ree::Error.new("package :#{package_name} not found in Packages.schema.json")
|
|
123
|
-
end
|
|
124
|
-
|
|
125
|
-
return if package.loaded?
|
|
126
|
-
|
|
127
|
-
Ree.logger.debug("load_package_entry(:#{package_name})")
|
|
128
|
-
|
|
129
|
-
load_file(
|
|
130
|
-
Ree::PathHelper.abs_package_entry_path(package),
|
|
131
|
-
package_name
|
|
132
|
-
)
|
|
56
|
+
@package_loader.load_package_entry(package_name)
|
|
133
57
|
end
|
|
134
58
|
|
|
59
|
+
|
|
135
60
|
# @param [Symbol] package_name
|
|
136
61
|
# @param [Symbol] object_name
|
|
137
62
|
# @return [Ree::Object]
|
|
138
63
|
def load_package_object(package_name, object_name)
|
|
139
64
|
package = get_loaded_package(package_name)
|
|
140
|
-
load_package_entry(package_name)
|
|
141
|
-
|
|
142
65
|
object = get_object(package_name, object_name)
|
|
143
|
-
return object if object && object.loaded?
|
|
144
|
-
|
|
145
|
-
if !object && !perf_mode?(package)
|
|
146
|
-
Dir[
|
|
147
|
-
File.join(
|
|
148
|
-
Ree::PathHelper.abs_package_module_dir(package),
|
|
149
|
-
"**/#{object_name}.rb"
|
|
150
|
-
)
|
|
151
|
-
].each do |path|
|
|
152
|
-
load_file(path, package_name)
|
|
153
|
-
end
|
|
154
|
-
|
|
155
|
-
object = get_object(package_name, object_name)
|
|
156
|
-
end
|
|
157
66
|
|
|
158
|
-
|
|
67
|
+
unless object
|
|
159
68
|
raise Ree::Error.new("object :#{object_name} from :#{package_name} was not found")
|
|
160
69
|
end
|
|
161
70
|
|
|
71
|
+
return object if object.loaded?
|
|
72
|
+
|
|
162
73
|
Ree.logger.debug("load_package_object(:#{package_name}, :#{object_name})")
|
|
163
74
|
|
|
164
75
|
if object.rpath
|
|
@@ -171,26 +82,14 @@ class Ree::PackagesFacade
|
|
|
171
82
|
|
|
172
83
|
# @param [Symbol] package_name
|
|
173
84
|
# @return [Ree::Package]
|
|
174
|
-
def
|
|
175
|
-
@package_loader.
|
|
85
|
+
def read_package_structure(package_name)
|
|
86
|
+
@package_loader.read_package_structure(package_name)
|
|
176
87
|
end
|
|
177
88
|
|
|
178
89
|
# @param [Symbol] package_name
|
|
179
90
|
# @return [Ree::Package]
|
|
180
|
-
def
|
|
181
|
-
@
|
|
182
|
-
return @loaded_schemas[package_name] if @loaded_schemas[package_name]
|
|
183
|
-
|
|
184
|
-
Ree.logger.debug("read_package_schema_json(:#{package_name})")
|
|
185
|
-
package = get_package(package_name)
|
|
186
|
-
|
|
187
|
-
if !package.dir
|
|
188
|
-
package.set_schema_loaded
|
|
189
|
-
return package
|
|
190
|
-
end
|
|
191
|
-
|
|
192
|
-
schema_path = Ree::PathHelper.abs_package_schema_path(package)
|
|
193
|
-
@loaded_schemas[package_name] = Ree::PackageSchemaLoader.new.call(schema_path, package)
|
|
91
|
+
def load_entire_package(package_name)
|
|
92
|
+
@package_loader.load_entire_package(package_name)
|
|
194
93
|
end
|
|
195
94
|
|
|
196
95
|
# @return [Ree::PackagesStore]
|
|
@@ -217,14 +116,7 @@ class Ree::PackagesFacade
|
|
|
217
116
|
# @param [Symbol] package_name
|
|
218
117
|
# @return [Ree::Package]
|
|
219
118
|
def get_package(package_name, raise_if_missing = true)
|
|
220
|
-
|
|
221
|
-
package = @packages_store.get(package_name)
|
|
222
|
-
|
|
223
|
-
if !package && raise_if_missing
|
|
224
|
-
raise Ree::Error.new("Package :#{package_name} is not found in Packages.schema.json. Run `ree gen.packages_json` to update schema.", :package_schema_not_found)
|
|
225
|
-
end
|
|
226
|
-
|
|
227
|
-
package
|
|
119
|
+
@package_loader.get_package(package_name, raise_if_missing)
|
|
228
120
|
end
|
|
229
121
|
|
|
230
122
|
# @param [Ree::Package] package
|
data/lib/ree/version.rb
CHANGED
data/lib/ree.rb
CHANGED
|
@@ -32,10 +32,8 @@ module Ree
|
|
|
32
32
|
autoload :BuildPackageDsl, 'ree/dsl/build_package_dsl'
|
|
33
33
|
autoload :PackageDSL, 'ree/package_dsl'
|
|
34
34
|
autoload :PackageEnvVar, 'ree/core/package_env_var'
|
|
35
|
+
autoload :PackageFileStructureLoader, 'ree/core/package_file_structure_loader'
|
|
35
36
|
autoload :PackageLoader, 'ree/core/package_loader'
|
|
36
|
-
autoload :PackageSchema, 'ree/core/package_schema'
|
|
37
|
-
autoload :PackageSchemaBuilder, 'ree/core/package_schema_builder'
|
|
38
|
-
autoload :PackageSchemaLoader, 'ree/core/package_schema_loader'
|
|
39
37
|
autoload :PackagesDetector, 'ree/core/packages_detector'
|
|
40
38
|
autoload :PackagesFacade, 'ree/facades/packages_facade'
|
|
41
39
|
autoload :PackagesSchema, 'ree/core/packages_schema'
|
|
@@ -56,7 +54,6 @@ module Ree
|
|
|
56
54
|
SCHEMAS = 'schemas'
|
|
57
55
|
SCHEMA = 'schema'
|
|
58
56
|
REE_SETUP = 'ree.setup.rb'
|
|
59
|
-
PACKAGE_SCHEMA_FILE = 'Package.schema.json'
|
|
60
57
|
PACKAGES_SCHEMA_FILE = 'Packages.schema.json'
|
|
61
58
|
ROOT_DIR_MESSAGE = 'Ree.root_dir is not set. Use Ree.init(DIR) to set project dir'
|
|
62
59
|
|
|
@@ -116,19 +113,6 @@ module Ree
|
|
|
116
113
|
logger.level = Logger::DEBUG
|
|
117
114
|
end
|
|
118
115
|
|
|
119
|
-
# Ree will use schema files to load packages and registered objects
|
|
120
|
-
def set_performance_mode
|
|
121
|
-
@performance_mode = true
|
|
122
|
-
end
|
|
123
|
-
|
|
124
|
-
def set_dev_mode
|
|
125
|
-
@performance_mode = false
|
|
126
|
-
end
|
|
127
|
-
|
|
128
|
-
def performance_mode?
|
|
129
|
-
!!@performance_mode
|
|
130
|
-
end
|
|
131
|
-
|
|
132
116
|
# Define preload context for registered objects
|
|
133
117
|
def preload_for(env)
|
|
134
118
|
check_arg(env, :env, Symbol)
|
|
@@ -215,6 +199,11 @@ module Ree
|
|
|
215
199
|
container.load_package(name)
|
|
216
200
|
end
|
|
217
201
|
|
|
202
|
+
def load_entire_package(name)
|
|
203
|
+
check_arg(name, :name, Symbol)
|
|
204
|
+
container.load_entire_package(name)
|
|
205
|
+
end
|
|
206
|
+
|
|
218
207
|
def locate_packages_schema(path)
|
|
219
208
|
check_arg(path, :path, String)
|
|
220
209
|
Ree.logger.debug("locate_packages_schema: #{path}")
|
|
@@ -228,23 +217,6 @@ module Ree
|
|
|
228
217
|
def root_dir
|
|
229
218
|
@root_dir || (raise Ree::Error.new(ROOT_DIR_MESSAGE, :invalid_root_dir))
|
|
230
219
|
end
|
|
231
|
-
|
|
232
|
-
def generate_schemas_for_all_packages(silence = false)
|
|
233
|
-
Ree.logger.debug("generate_schemas_for_all_packages") if !silence
|
|
234
|
-
facade = container.packages_facade
|
|
235
|
-
|
|
236
|
-
facade.class.write_packages_schema
|
|
237
|
-
facade.load_packages_schema
|
|
238
|
-
|
|
239
|
-
facade.packages_store.packages.each do |package|
|
|
240
|
-
next if package.gem?
|
|
241
|
-
next if package.dir.nil?
|
|
242
|
-
puts("Generating Package.schema.json for :#{package.name} package") if !silence
|
|
243
|
-
|
|
244
|
-
facade.load_entire_package(package.name)
|
|
245
|
-
facade.write_package_schema(package.name)
|
|
246
|
-
end
|
|
247
|
-
end
|
|
248
220
|
end
|
|
249
221
|
end
|
|
250
222
|
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: ree
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.0
|
|
4
|
+
version: 1.1.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Ruslan Gatiyatov
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2025-01-27 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: commander
|
|
@@ -64,7 +64,6 @@ files:
|
|
|
64
64
|
- lib/ree/bean_dsl.rb
|
|
65
65
|
- lib/ree/cli.rb
|
|
66
66
|
- lib/ree/cli/generate_package.rb
|
|
67
|
-
- lib/ree/cli/generate_package_schema.rb
|
|
68
67
|
- lib/ree/cli/generate_packages_schema.rb
|
|
69
68
|
- lib/ree/cli/generate_template.rb
|
|
70
69
|
- lib/ree/cli/indexing.rb
|
|
@@ -127,10 +126,8 @@ files:
|
|
|
127
126
|
- lib/ree/core/package.rb
|
|
128
127
|
- lib/ree/core/package_dep.rb
|
|
129
128
|
- lib/ree/core/package_env_var.rb
|
|
129
|
+
- lib/ree/core/package_file_structure_loader.rb
|
|
130
130
|
- lib/ree/core/package_loader.rb
|
|
131
|
-
- lib/ree/core/package_schema.rb
|
|
132
|
-
- lib/ree/core/package_schema_builder.rb
|
|
133
|
-
- lib/ree/core/package_schema_loader.rb
|
|
134
131
|
- lib/ree/core/packages_detector.rb
|
|
135
132
|
- lib/ree/core/packages_schema.rb
|
|
136
133
|
- lib/ree/core/packages_schema_builder.rb
|
|
@@ -178,9 +175,7 @@ files:
|
|
|
178
175
|
- lib/ree/templates/package/.rspec
|
|
179
176
|
- lib/ree/templates/package/<%=package_subdir_name%>/<%=package_name%>.rb
|
|
180
177
|
- lib/ree/templates/package/<%=package_subdir_name%>/<%=package_name%>/.gitkeep
|
|
181
|
-
- lib/ree/templates/package/Package.schema.json
|
|
182
178
|
- lib/ree/templates/package/bin/console
|
|
183
|
-
- lib/ree/templates/package/spec/package_schema_spec.rb
|
|
184
179
|
- lib/ree/templates/package/spec/spec_helper.rb
|
|
185
180
|
- lib/ree/templates/template_detector.rb
|
|
186
181
|
- lib/ree/templates/template_renderer.rb
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
require 'fileutils'
|
|
2
|
-
|
|
3
|
-
module Ree
|
|
4
|
-
module CLI
|
|
5
|
-
class GeneratePackageSchema
|
|
6
|
-
class << self
|
|
7
|
-
def run(package_name:, project_path:, silence: false)
|
|
8
|
-
ENV['REE_SKIP_ENV_VARS_CHECK'] = 'true'
|
|
9
|
-
|
|
10
|
-
path = Ree.locate_packages_schema(project_path)
|
|
11
|
-
dir = Pathname.new(path).dirname.to_s
|
|
12
|
-
|
|
13
|
-
Ree.init(dir)
|
|
14
|
-
Ree.set_dev_mode
|
|
15
|
-
|
|
16
|
-
if package_name.strip.empty?
|
|
17
|
-
puts("Generating Package.schema.json for all packages") if !silence
|
|
18
|
-
Ree.generate_schemas_for_all_packages(silence)
|
|
19
|
-
return
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
puts("Generating Package.schema.json for :#{package_name} package") if !silence
|
|
23
|
-
|
|
24
|
-
package_name = package_name.to_sym
|
|
25
|
-
|
|
26
|
-
facade = Ree.container.packages_facade
|
|
27
|
-
facade.load_packages_schema
|
|
28
|
-
facade.load_entire_package(package_name)
|
|
29
|
-
facade.write_package_schema(package_name)
|
|
30
|
-
|
|
31
|
-
package = facade.get_package(package_name)
|
|
32
|
-
schema_path = Ree::PathHelper.abs_package_schema_path(package)
|
|
33
|
-
|
|
34
|
-
puts("output: #{schema_path}") if !silence
|
|
35
|
-
puts("done") if !silence
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
end
|
|
39
|
-
end
|
|
40
|
-
end
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Ree::PackageSchema
|
|
4
|
-
SCHEMA_VERSION_NUMBER = '1.1'
|
|
5
|
-
|
|
6
|
-
SCHEMA_TYPE = 'schema_type'
|
|
7
|
-
REE_VERSION = 'ree_version'
|
|
8
|
-
SCHEMA_VERSION = 'schema_version'
|
|
9
|
-
NAME = 'name'
|
|
10
|
-
PACKAGE = 'package'
|
|
11
|
-
ENTRY_PATH = 'entry_path'
|
|
12
|
-
OBJECTS = 'objects'
|
|
13
|
-
ENV_VARS = 'env_vars'
|
|
14
|
-
DEPENDS_ON = 'depends_on'
|
|
15
|
-
TAGS = 'tags'
|
|
16
|
-
|
|
17
|
-
module Objects
|
|
18
|
-
NAME = 'name'
|
|
19
|
-
SCHEMA = 'schema'
|
|
20
|
-
TAGS = 'tags'
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
module DependsOn
|
|
24
|
-
NAME = 'name'
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
module EnvVars
|
|
28
|
-
NAME = 'name'
|
|
29
|
-
DOC = 'doc'
|
|
30
|
-
end
|
|
31
|
-
end
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require 'pathname'
|
|
4
|
-
require 'json'
|
|
5
|
-
|
|
6
|
-
class Ree::PackageSchemaBuilder
|
|
7
|
-
Schema = Ree::PackageSchema
|
|
8
|
-
|
|
9
|
-
# @param [Ree::Package] package
|
|
10
|
-
# @return [Hash]
|
|
11
|
-
def call(package)
|
|
12
|
-
Ree.logger.debug("generating package schema for '#{package.name}' package")
|
|
13
|
-
|
|
14
|
-
if !package.loaded?
|
|
15
|
-
raise Ree::Error.new("package schema should be loaded", :invalid_schema)
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
data = {
|
|
19
|
-
Schema::SCHEMA_TYPE => Schema::PACKAGE,
|
|
20
|
-
Schema::SCHEMA_VERSION => Schema::SCHEMA_VERSION_NUMBER,
|
|
21
|
-
Schema::NAME => package.name,
|
|
22
|
-
Schema::ENTRY_PATH => package.entry_rpath,
|
|
23
|
-
Schema::TAGS => package.tags,
|
|
24
|
-
Schema::DEPENDS_ON => package.deps.sort_by(&:name).map { |dep|
|
|
25
|
-
{
|
|
26
|
-
Schema::DependsOn::NAME => dep.name,
|
|
27
|
-
}
|
|
28
|
-
},
|
|
29
|
-
Schema::ENV_VARS => package.env_vars.sort_by(&:name).map { |var|
|
|
30
|
-
{
|
|
31
|
-
Schema::EnvVars::NAME => var.name,
|
|
32
|
-
Schema::EnvVars::DOC => var.doc,
|
|
33
|
-
}
|
|
34
|
-
},
|
|
35
|
-
Schema::OBJECTS => package.objects.select { !_1.rpath.nil? }.sort_by(&:name).map { |object|
|
|
36
|
-
{
|
|
37
|
-
Schema::Objects::NAME => object.name,
|
|
38
|
-
Schema::Objects::SCHEMA => object.schema_rpath,
|
|
39
|
-
Schema::Objects::TAGS => object.tags
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
data
|
|
45
|
-
end
|
|
46
|
-
end
|
|
@@ -1,172 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require 'json'
|
|
4
|
-
require 'pathname'
|
|
5
|
-
|
|
6
|
-
class Ree::PackageSchemaLoader
|
|
7
|
-
# Sample Package.schema.json
|
|
8
|
-
# {
|
|
9
|
-
# "schema_type": "package",
|
|
10
|
-
# "schema_version": "1.2.3",
|
|
11
|
-
# "name": "accounts",
|
|
12
|
-
# "entry_path": "package/accounts.rb",
|
|
13
|
-
# "depends_on": [
|
|
14
|
-
# {
|
|
15
|
-
# "name": "clock",
|
|
16
|
-
# },
|
|
17
|
-
# {
|
|
18
|
-
# "name": "test_utils",
|
|
19
|
-
# }
|
|
20
|
-
# ],
|
|
21
|
-
# "env_vars": [
|
|
22
|
-
# {
|
|
23
|
-
# "name": "accounts.string_var",
|
|
24
|
-
# "doc": null
|
|
25
|
-
# },
|
|
26
|
-
# {
|
|
27
|
-
# "name": "accounts.integer_var",
|
|
28
|
-
# "doc": "integer value"
|
|
29
|
-
# }
|
|
30
|
-
# ],
|
|
31
|
-
# "objects": [
|
|
32
|
-
# {
|
|
33
|
-
# "name": "accounts_cfg",
|
|
34
|
-
# "schema": "schemas/accounts/accounts_cfg.schema.json"
|
|
35
|
-
# },
|
|
36
|
-
# {
|
|
37
|
-
# "name": "transaction",
|
|
38
|
-
# "schema": "schemas/accounts/transaction.schema.json"
|
|
39
|
-
# }
|
|
40
|
-
# ]
|
|
41
|
-
# }
|
|
42
|
-
|
|
43
|
-
Schema = Ree::PackageSchema
|
|
44
|
-
|
|
45
|
-
# @param [String] abs_schema_path Absolute path to package Package.schema.json file
|
|
46
|
-
# @param [Nilor[Ree::Package]] existing_package Loaded package
|
|
47
|
-
# @return [Ree::Package]
|
|
48
|
-
def call(abs_schema_path, existing_package = nil)
|
|
49
|
-
if !File.exist?(abs_schema_path)
|
|
50
|
-
raise Ree::Error.new("File not found: #{abs_schema_path}", :invalid_package_schema)
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
json_schema = begin
|
|
54
|
-
JSON.load_file(abs_schema_path)
|
|
55
|
-
rescue
|
|
56
|
-
raise Ree::Error.new("Invalid content: #{abs_schema_path}", :invalid_package_schema)
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
schema_type = json_schema.fetch(Schema::SCHEMA_TYPE)
|
|
60
|
-
|
|
61
|
-
if schema_type != Schema::PACKAGE
|
|
62
|
-
raise Ree::Error.new("Invalid schema type: #{abs_schema_path}", :invalid_package_schema)
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
schema_version = json_schema.fetch(Schema::SCHEMA_VERSION) { Schema::SCHEMA_VERSION_NUMBER }
|
|
66
|
-
entry_rpath = json_schema.fetch(Schema::ENTRY_PATH)
|
|
67
|
-
package_name = json_schema.fetch(Schema::NAME).to_sym
|
|
68
|
-
|
|
69
|
-
root_dir = if existing_package && existing_package.gem?
|
|
70
|
-
Ree.gem(existing_package.gem_name).dir
|
|
71
|
-
else
|
|
72
|
-
Ree.root_dir
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
schema_rpath = Pathname
|
|
76
|
-
.new(abs_schema_path)
|
|
77
|
-
.relative_path_from(Pathname.new(root_dir))
|
|
78
|
-
.to_s
|
|
79
|
-
|
|
80
|
-
object_store = {}
|
|
81
|
-
deps_store = {}
|
|
82
|
-
vars_store = {}
|
|
83
|
-
|
|
84
|
-
package = if existing_package
|
|
85
|
-
existing_package
|
|
86
|
-
.set_schema_version(schema_version)
|
|
87
|
-
.set_entry_rpath(entry_rpath)
|
|
88
|
-
.set_schema_rpath(schema_rpath)
|
|
89
|
-
else
|
|
90
|
-
Ree::Package.new(
|
|
91
|
-
schema_version,
|
|
92
|
-
package_name,
|
|
93
|
-
entry_rpath,
|
|
94
|
-
schema_rpath,
|
|
95
|
-
nil
|
|
96
|
-
)
|
|
97
|
-
end
|
|
98
|
-
|
|
99
|
-
package.set_schema_loaded
|
|
100
|
-
|
|
101
|
-
json_schema.fetch(Schema::OBJECTS).each do |item|
|
|
102
|
-
name = item[Schema::Objects::NAME].to_s
|
|
103
|
-
schema_rpath = item[Schema::Objects::SCHEMA].to_s
|
|
104
|
-
list = [name, schema_rpath]
|
|
105
|
-
tags = item[Schema::Objects::TAGS] || []
|
|
106
|
-
|
|
107
|
-
if list.reject(&:empty?).size != list.size
|
|
108
|
-
raise Ree::Error.new("invalid object data for #{item.inspect}: #{abs_schema_path}", :invalid_package_schema)
|
|
109
|
-
end
|
|
110
|
-
|
|
111
|
-
if object_store.has_key?(name)
|
|
112
|
-
raise Ree::Error.new("duplicate object name for '#{item[:name]}': #{abs_schema_path}", :invalid_package_schema)
|
|
113
|
-
end
|
|
114
|
-
|
|
115
|
-
object_store[name] = true
|
|
116
|
-
|
|
117
|
-
object = Ree::Object.new(
|
|
118
|
-
name.to_sym,
|
|
119
|
-
schema_rpath,
|
|
120
|
-
Ree::PathHelper.object_rpath(schema_rpath),
|
|
121
|
-
)
|
|
122
|
-
|
|
123
|
-
object.add_tags(tags)
|
|
124
|
-
object.set_package(package.name)
|
|
125
|
-
|
|
126
|
-
package.set_object(object)
|
|
127
|
-
end
|
|
128
|
-
|
|
129
|
-
deps = json_schema.fetch(Schema::DEPENDS_ON).map do |item|
|
|
130
|
-
name = item[Schema::DependsOn::NAME].to_sym
|
|
131
|
-
list = [name]
|
|
132
|
-
|
|
133
|
-
if list.reject(&:empty?).size != list.size
|
|
134
|
-
raise Ree::Error.new("invalid depends_on for: #{item.inspect}", :invalid_package_schema)
|
|
135
|
-
end
|
|
136
|
-
|
|
137
|
-
if deps_store.has_key?(name)
|
|
138
|
-
raise Ree::Error.new("duplicate depends_on name for '#{item[:name]}'", :invalid_package_schema)
|
|
139
|
-
end
|
|
140
|
-
|
|
141
|
-
deps_store[name] = true
|
|
142
|
-
Ree::PackageDep.new(name)
|
|
143
|
-
end
|
|
144
|
-
|
|
145
|
-
package.set_deps(deps)
|
|
146
|
-
|
|
147
|
-
env_vars = json_schema.fetch(Schema::ENV_VARS).map do |item|
|
|
148
|
-
name = item[Schema::EnvVars::NAME].to_s
|
|
149
|
-
doc = item[Schema::EnvVars::DOC]
|
|
150
|
-
list = [name]
|
|
151
|
-
|
|
152
|
-
if list.reject(&:empty?).size != list.size
|
|
153
|
-
raise Ree::Error.new("invalid env_var for: #{item.inspect}", :invalid_package_schema)
|
|
154
|
-
end
|
|
155
|
-
|
|
156
|
-
if vars_store.has_key?(name)
|
|
157
|
-
raise Ree::Error.new("duplicate env_var name for '#{item[:name]}'", :invalid_package_schema)
|
|
158
|
-
end
|
|
159
|
-
|
|
160
|
-
vars_store[name] = true
|
|
161
|
-
|
|
162
|
-
Ree::PackageEnvVar.new(name, doc)
|
|
163
|
-
end
|
|
164
|
-
|
|
165
|
-
package.set_env_vars(env_vars)
|
|
166
|
-
|
|
167
|
-
tags = json_schema.fetch(Schema::TAGS)
|
|
168
|
-
package.set_tags(tags)
|
|
169
|
-
|
|
170
|
-
package
|
|
171
|
-
end
|
|
172
|
-
end
|
|
File without changes
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
RSpec.describe "<%= Ree::StringUtils.camelize(package_name) %>" do
|
|
2
|
-
it "generates package schema" do
|
|
3
|
-
require 'fileutils'
|
|
4
|
-
|
|
5
|
-
packages_schema_path = Ree.locate_packages_schema(__dir__)
|
|
6
|
-
packages_schema_dir = Pathname.new(packages_schema_path).dirname.to_s
|
|
7
|
-
|
|
8
|
-
FileUtils.cd packages_schema_dir do
|
|
9
|
-
expect(
|
|
10
|
-
system("bundle exec ree gen.package_json <%= package_name %> --silence")
|
|
11
|
-
).to eq(true)
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
end
|