ree 1.0.42 → 1.0.44

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