ree 1.0.42 → 1.0.44

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 74fdedebcc116bb5764720b16d3baa21c017a6a64a815a9df5c9c249dab901be
4
- data.tar.gz: d752901505d14e4964aaaf606773e84f1464a8028f87d1d4d0a7bd6bb3bf3853
3
+ metadata.gz: 8c43c3e1b979b49169f1b33067b14987b9871eea52b4925d31d952c7112dc05b
4
+ data.tar.gz: fc4d2351614b71835912930c7e971d587ae83d397277438bcfbc057dfdcf6d00
5
5
  SHA512:
6
- metadata.gz: 2f4c932846abc13daff98dca10dc79082f1837b232b09720ad24c9898dfc96ce3f245cafbe597dc42ecebae6e8da419a5977b84de932c644d09b7adf5e3799a4
7
- data.tar.gz: 1ad6fc938f287e24822b7d86dabbe6ca361e8d3ba9e0d2f6bb8f72dd1031fc8f056c97feb5946a67d2e54e289c53516220328eb4e8cafbfa244069cfd77f2900
6
+ metadata.gz: db2e4e9846094f89f07dc3ac2ea2ff2a37f1ecccb245a5708d58dcc0274aa32d31f395e05e54d26fa7243b2004715e4e86a654b2fc842405d577a254622b5380
7
+ data.tar.gz: 2d39527fb3b6abd0b355794e8b485c154b04ba74d5acba2f3f2c1a751b08243a0bc20b219670668eb2c97095779c9d60f441c9a5988861efbcaf6bbf1b2d9e7e
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ree (1.0.42)
4
+ ree (1.0.44)
5
5
  commander (~> 5.0.0)
6
6
 
7
7
  GEM
data/exe/ree CHANGED
@@ -89,7 +89,6 @@ class ReeCliRunner
89
89
  Ree::CLI::GeneratePackageSchema.run(
90
90
  package_name: options_with_defaults[:package_name],
91
91
  project_path: options_with_defaults[:project_path],
92
- include_objects: false,
93
92
  silence: false
94
93
  )
95
94
  end
@@ -118,7 +117,6 @@ class ReeCliRunner
118
117
  c.description = 'generates Package.schema.json for specific package'
119
118
  c.summary = '> ' + c.description
120
119
  c.example 'ree gen.package_json PACKAGE_NAME', ''
121
- c.option '--skip_objects', String, 'Skip generation of object schemas'
122
120
  c.option '--silence', String, 'Silence all logs'
123
121
  c.option '--project_path [ROOT_PROJECT_DIR]', String, 'Root project dir path'
124
122
  c.action do |args, options|
@@ -132,7 +130,6 @@ class ReeCliRunner
132
130
  default_options = {
133
131
  package_name: package_name,
134
132
  project_path: options_hash[:project_path] || File.expand_path(Dir.pwd),
135
- include_objects: !options_hash.has_key?(:skip_objects),
136
133
  silence: options_hash.has_key?(:silence)
137
134
  }
138
135
 
@@ -4,7 +4,7 @@ module Ree
4
4
  module CLI
5
5
  class GeneratePackageSchema
6
6
  class << self
7
- def run(package_name:, project_path:, include_objects: false, silence: false)
7
+ def run(package_name:, project_path:, silence: false)
8
8
  ENV['REE_SKIP_ENV_VARS_CHECK'] = 'true'
9
9
 
10
10
  path = Ree.locate_packages_schema(project_path)
@@ -31,21 +31,6 @@ module Ree
31
31
  package = facade.get_package(package_name)
32
32
  schema_path = Ree::PathHelper.abs_package_schema_path(package)
33
33
 
34
- if include_objects
35
- schemas_path = Ree::PathHelper.abs_package_schemas_dir(package)
36
-
37
- FileUtils.rm_rf(schemas_path)
38
- FileUtils.mkdir_p(schemas_path)
39
-
40
- package.objects.each do |object|
41
- Ree.write_object_schema(package.name, object.name)
42
-
43
- path = Ree::PathHelper.abs_object_schema_path(object)
44
-
45
- puts(" #{object.name}: #{path}") if !silence
46
- end
47
- end
48
-
49
34
  puts("output: #{schema_path}") if !silence
50
35
  puts("done") if !silence
51
36
  end
@@ -107,7 +107,7 @@ module Ree
107
107
  def project_packages(packages)
108
108
  packages.reject(&:gem?)
109
109
  end
110
-
110
+
111
111
  def non_existent_packages
112
112
  @package_names ? @package_names - packages.map(&:name) : []
113
113
  end
@@ -148,7 +148,7 @@ module Ree
148
148
 
149
149
  unless acc.include?(package.name)
150
150
  acc << package.name
151
-
151
+
152
152
  package.deps.map(&:name).each do |pack|
153
153
  next if !packages_set.include?(pack)
154
154
  recursively_find_children_packages(pack, acc)
@@ -35,9 +35,8 @@ class Ree::PackageLoader
35
35
  private
36
36
 
37
37
  def recursively_load_package(name, loaded_packages)
38
+ @loaded_packages[name] = true
38
39
  package = @packages_store.get(name)
39
- return package if @loaded_packages[name]
40
- @loaded_packages[name] = package
41
40
 
42
41
  if !package
43
42
  raise Ree::Error.new(
@@ -90,6 +89,7 @@ class Ree::PackageLoader
90
89
  end
91
90
 
92
91
  package.set_schema_loaded
93
- package
92
+
93
+ @loaded_packages[name] = package
94
94
  end
95
95
  end
@@ -127,7 +127,7 @@ class Ree::BuildPackageDsl
127
127
  name = Ree::StringUtils.underscore(list[0]).to_sym
128
128
 
129
129
  if !Ree.irb_mode? && name != name_from_path
130
- raise Ree::Error.new("Package module '#{module_name}' does not correspond to package name 'name'. Fix file name or module name.")
130
+ raise Ree::Error.new("Package module '#{module_name}' does not correspond to package name '#{name}'. Fix file name or module name.")
131
131
  end
132
132
 
133
133
  package = @packages_facade.get_package(name, false)
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Ree::DomainError < StandardError
4
+ end
@@ -113,31 +113,6 @@ class Ree::PackagesFacade
113
113
  end
114
114
  end
115
115
 
116
- # @param [Symbol] package_name
117
- # @param [Symbol] object_name
118
- # @return [String]
119
- def write_object_schema(package_name, object_name)
120
- Ree.logger.debug("write_object_schema(package_name: #{package_name}, object_name: #{object_name})")
121
- object = get_object(package_name, object_name)
122
-
123
- if !object || (object && !object&.schema_rpath)
124
- raise Ree::Error.new("Object :#{object_name} schema path not found")
125
- end
126
-
127
- schema_path = Ree::PathHelper.abs_object_schema_path(object)
128
-
129
- if !File.exist?(schema_path)
130
- only_dir_path = schema_path.split('/')[0..-2]
131
- FileUtils.mkdir_p(File.join(only_dir_path))
132
- end
133
-
134
- schema = Ree::ObjectSchemaBuilder.new.call(object)
135
- json = JSON.pretty_generate(schema)
136
- File.write(schema_path, json, mode: 'w')
137
-
138
- json
139
- end
140
-
141
116
  # @param [Symbol] package_name
142
117
  # @return nil
143
118
  def load_package_entry(package_name)
@@ -232,6 +207,13 @@ class Ree::PackagesFacade
232
207
  @packages_store
233
208
  end
234
209
 
210
+ # @param [Symbol] package_name
211
+ # @return [Bool]
212
+ def has_package?(package_name)
213
+ check_arg(package_name, :package_name, Symbol)
214
+ !!@packages_store.get(package_name)
215
+ end
216
+
235
217
  # @param [Symbol] package_name
236
218
  # @return [Ree::Package]
237
219
  def get_package(package_name, raise_if_missing = true)
data/lib/ree/link_dsl.rb CHANGED
@@ -50,29 +50,18 @@ module Ree::LinkDSL
50
50
  raise Ree::Error.new("target should be one of [:object, :class, :both]", :invalid_dsl_usage)
51
51
  end
52
52
 
53
- package_name = Ree::StringUtils.underscore(self.name.split('::').first).to_sym
54
- link_package_name = from.nil? ? package_name : from
53
+ packages = Ree.container.packages_facade
54
+ link_package_name = get_link_package_name(from, object_name)
55
55
  link_object_name = object_name
56
56
  link_as = as ? as : object_name
57
57
 
58
- _check_package_dependency_added(link_package_name, package_name)
59
-
60
58
  if import
61
- Ree::LinkImportBuilder
62
- .new(Ree.container.packages_facade)
63
- .build(
64
- self,
65
- link_package_name,
66
- link_object_name,
67
- import
68
- )
59
+ Ree::LinkImportBuilder.new(packages).build(
60
+ self, link_package_name, link_object_name, import
61
+ )
69
62
  end
70
63
 
71
- obj = Ree
72
- .container
73
- .packages_facade
74
- .load_package_object(link_package_name, link_object_name)
75
-
64
+ obj = packages.load_package_object(link_package_name, link_object_name)
76
65
  target ||= obj.target
77
66
 
78
67
  if target == :both
@@ -133,12 +122,9 @@ module Ree::LinkDSL
133
122
 
134
123
  list = path.split('/')
135
124
  package_name = File.basename(list[0], ".*").to_sym
136
- current_package_name = Ree::StringUtils.underscore(self.name.split('::').first).to_sym
137
-
138
- _check_package_dependency_added(package_name, current_package_name)
139
-
140
- Ree.container.packages_facade.load_package_entry(package_name)
141
- package = Ree.container.packages_facade.get_package(package_name)
125
+ packages = Ree.container.packages_facade
126
+ packages.load_package_entry(package_name)
127
+ package = packages.get_package(package_name)
142
128
 
143
129
  file_path = File.join(
144
130
  Ree::PathHelper.abs_package_dir(package),
@@ -153,7 +139,7 @@ module Ree::LinkDSL
153
139
  end
154
140
  end
155
141
 
156
- Ree.container.packages_facade.load_file(file_path, package.name)
142
+ packages.load_file(file_path, package.name)
157
143
 
158
144
  const_list = path.split('/').map { |_| Ree::StringUtils.camelize(_) }
159
145
  const_short = [const_list[0], const_list.last].join("::")
@@ -168,13 +154,9 @@ module Ree::LinkDSL
168
154
  end
169
155
 
170
156
  if import_proc
171
- Ree::LinkImportBuilder
172
- .new(Ree.container.packages_facade)
173
- .build_for_const(
174
- self,
175
- file_const,
176
- import_proc
177
- )
157
+ Ree::LinkImportBuilder.new(packages).build_for_const(
158
+ self, file_const, import_proc
159
+ )
178
160
  end
179
161
 
180
162
  nil
@@ -182,33 +164,24 @@ module Ree::LinkDSL
182
164
 
183
165
  def _raise_error(text, code = :invalid_dsl_usage)
184
166
  msg = <<~DOC
185
- object: :#{@object.name}
186
- path: #{Ree::PathHelper.abs_object_path(@object)}
167
+ class: :#{self}
187
168
  error: #{text}
188
169
  DOC
189
170
 
190
171
  raise Ree::Error.new(msg, code)
191
172
  end
192
173
 
193
- def _check_package_dependency_added(package_name, current_package_name)
194
- return if package_name == current_package_name
195
-
196
- facade = Ree.container.packages_facade
197
- facade.load_package_entry(package_name)
198
- facade.load_package_entry(current_package_name)
174
+ def get_link_package_name(from, object_name)
175
+ return from if from
199
176
 
200
- current_package = facade.get_package(current_package_name)
177
+ package_name = Ree::StringUtils.underscore(self.name.split('::').first).to_sym
178
+ result = Ree.container.packages_facade.has_package?(package_name) ? package_name : nil
201
179
 
202
- dep_package = current_package.deps.detect do |d|
203
- d.name == package_name
180
+ if result.nil?
181
+ raise Ree::Error.new("package is not provided for link :#{object_name}", :invalid_dsl_usage)
204
182
  end
205
183
 
206
- if dep_package.nil?
207
- raise Ree::Error.new(
208
- "Package :#{package_name} is not added as dependency for :#{current_package_name} package\npackage path: #{File.join(Ree.root_dir, current_package.entry_rpath || "")}\nclass:#{self.name}",
209
- :invalid_dsl_usage
210
- )
211
- end
184
+ result
212
185
  end
213
186
  end
214
187
  end
data/lib/ree/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Ree
4
- VERSION = "1.0.42"
4
+ VERSION = "1.0.44"
5
5
  end
data/lib/ree.rb CHANGED
@@ -11,6 +11,7 @@ module Ree
11
11
  autoload :CLI, 'ree/cli'
12
12
  autoload :Container, 'ree/container'
13
13
  autoload :Contracts, 'ree/contracts'
14
+ autoload :DomainError, 'ree/dsl/domain_error'
14
15
  autoload :Error, 'ree/error'
15
16
  autoload :ErrorDsl, 'ree/dsl/error_dsl'
16
17
  autoload :FnDSL, 'ree/fn_dsl'
@@ -26,7 +27,6 @@ module Ree
26
27
  autoload :ObjectError, 'ree/core/object_error'
27
28
  autoload :ObjectLink, 'ree/core/object_link'
28
29
  autoload :ObjectSchema, 'ree/core/object_schema'
29
- autoload :ObjectSchemaBuilder, 'ree/core/object_schema_builder'
30
30
  autoload :Package, 'ree/core/package'
31
31
  autoload :PackageDep, 'ree/core/package_dep'
32
32
  autoload :BuildPackageDsl, 'ree/dsl/build_package_dsl'
@@ -229,12 +229,6 @@ module Ree
229
229
  @root_dir || (raise Ree::Error.new(ROOT_DIR_MESSAGE, :invalid_root_dir))
230
230
  end
231
231
 
232
- def write_object_schema(package_name, object_name)
233
- check_arg(package_name, :package_name, Symbol)
234
- check_arg(object_name, :object_name, Symbol)
235
- container.packages_facade.write_object_schema(package_name, object_name)
236
- end
237
-
238
232
  def generate_schemas_for_all_packages(silence = false)
239
233
  Ree.logger.debug("generate_schemas_for_all_packages") if !silence
240
234
  facade = container.packages_facade
@@ -249,16 +243,6 @@ module Ree
249
243
 
250
244
  facade.load_entire_package(package.name)
251
245
  facade.write_package_schema(package.name)
252
-
253
- schemas_path = Ree::PathHelper.abs_package_schemas_dir(package)
254
-
255
- FileUtils.rm_rf(schemas_path)
256
- FileUtils.mkdir_p(schemas_path)
257
-
258
- package.objects.each do |object|
259
- next if !object.schema_rpath
260
- write_object_schema(package.name, object.name)
261
- end
262
246
  end
263
247
  end
264
248
  end
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.42
4
+ version: 1.0.44
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ruslan Gatiyatov
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-07-30 00:00:00.000000000 Z
11
+ date: 2024-08-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: commander
@@ -124,7 +124,6 @@ files:
124
124
  - lib/ree/core/object_error.rb
125
125
  - lib/ree/core/object_link.rb
126
126
  - lib/ree/core/object_schema.rb
127
- - lib/ree/core/object_schema_builder.rb
128
127
  - lib/ree/core/package.rb
129
128
  - lib/ree/core/package_dep.rb
130
129
  - lib/ree/core/package_env_var.rb
@@ -140,6 +139,7 @@ files:
140
139
  - lib/ree/core/packages_store.rb
141
140
  - lib/ree/core/path_helper.rb
142
141
  - lib/ree/dsl/build_package_dsl.rb
142
+ - lib/ree/dsl/domain_error.rb
143
143
  - lib/ree/dsl/error_dsl.rb
144
144
  - lib/ree/dsl/import_dsl.rb
145
145
  - lib/ree/dsl/link_import_builder.rb
@@ -1,102 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class Ree::ObjectSchemaBuilder
4
- Schema = Ree::ObjectSchema
5
-
6
- # @param [Ree::Object] object
7
- # @return [Hash]
8
- def call(object)
9
- Ree.logger.debug("generating object schema for '#{object.name}' package")
10
-
11
- if !object.loaded?
12
- raise Ree::Error.new("object `#{object.name}` from package `#{object.package_name}` is not loaded", :invalid_schema)
13
- end
14
-
15
- data = {
16
- Schema::SCHEMA_TYPE => Schema::OBJECT,
17
- Schema::SCHEMA_VERSION => Schema::SCHEMA_VERSION_NUMBER,
18
- Schema::NAME => object.name,
19
- Schema::PATH => object.rpath,
20
- Schema::MOUNT_AS => object.mount_as,
21
- Schema::CLASS => object.klass.name,
22
- Schema::FACTORY => object.factory,
23
- Schema::METHODS => map_object_methods(object),
24
- Schema::LINKS => object.links.sort_by(&:object_name).map { |link|
25
- {
26
- Schema::Links::TARGET => link.object_name,
27
- Schema::Links::PACKAGE_NAME => link.package_name,
28
- Schema::Links::AS => link.as,
29
- Schema::Links::IMPORTS => link.constants
30
- }
31
- }
32
- }
33
-
34
- data
35
- end
36
-
37
- private
38
-
39
- Arg = Ree::Contracts::CalledArgsValidator::Arg
40
-
41
- def map_object_methods(object)
42
- if !object.fn?
43
- return []
44
- end
45
-
46
- klass = object.klass
47
-
48
- method_decorator = Ree::Contracts.get_method_decorator(
49
- klass, :call, scope: :instance
50
- )
51
-
52
- begin
53
- if method_decorator.nil?
54
- parameters = klass.instance_method(:call).parameters
55
-
56
- args = parameters.inject({}) do |res, param|
57
- res[param.last] = Arg.new(
58
- param.last, param.first, nil, nil
59
- )
60
-
61
- res
62
- end
63
- else
64
- parameters = method_decorator.args.params
65
- args = method_decorator.args.get_args
66
- end
67
- rescue NameError
68
- raise Ree::Error.new("method call is not defined for #{klass}")
69
- end
70
-
71
- arg_list = parameters.map do |param|
72
- arg = args[param.last]
73
- validator = arg.validator
74
- arg_type = arg.type
75
-
76
- type = if validator
77
- validator.to_s
78
- else
79
- if arg_type == :block
80
- "Block"
81
- else
82
- "Any"
83
- end
84
- end
85
-
86
- {
87
- Schema::Methods::Args::ARG => arg.name,
88
- Schema::Methods::Args::ARG_TYPE => arg.type,
89
- Schema::Methods::Args::TYPE => type
90
- }
91
- end
92
-
93
- [
94
- {
95
- Schema::Methods::DOC => method_decorator&.doc || "",
96
- Schema::Methods::THROWS => method_decorator&.errors&.map { _1.name } || [],
97
- Schema::Methods::RETURN => method_decorator&.contract_definition&.return_contract || "Any",
98
- Schema::Methods::ARGS => arg_list
99
- }
100
- ]
101
- end
102
- end