ree 1.0.10 → 1.0.11

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: c1b2264b5461e4f29c6a6a09d71b4f594607777e30b7fd9ee04eb581f8ca4c27
4
- data.tar.gz: f56ccea02c51d34be30d0a53da9cb2a855265510b6167d19986b4ceb708a92f7
3
+ metadata.gz: 4ab958ee043c81bd88eb63c97ae9bb27a93e653e0488f14f46d9ec6d6b1e3e31
4
+ data.tar.gz: 7f41c692cafddc219cbb9a9ba3191b930a59b204d2a20d1ad873291dfdb335f2
5
5
  SHA512:
6
- metadata.gz: c423007aa3b01f9251f820eb432186ef18d909dbfc06c52d6c6748eddc7ab6d35e1d38c337ad5afcefea302a0b057832ec29eb50dda7dd4ba053bdc9ddee7913
7
- data.tar.gz: f3f0ed83742454c2f4ae91c7eb47be2a1cbce89ee2775ef220c5a73682bed9b051f9c79196b46990ab800783c630e5ef015fd9ab665a727ef9f8b8ef9b04b723
6
+ metadata.gz: a6a93a7e5cc610dad542897ca0f35c61650a93b13dd784a1030c7f94d794e24bae48bb3cc3a11c652737e27902418e67c35089064a0ce66547c745f557ba4166
7
+ data.tar.gz: 16b33f81947babead599ac94c95746915a05e858d3b9be38c45761b3425cdf5be868e93279378b37c6af523b6b0928a6f476f701b596b454df21430d933e087a
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ree (1.0.10)
4
+ ree (1.0.11)
5
5
  commander (~> 4.6.0)
6
6
 
7
7
  GEM
data/exe/ree CHANGED
@@ -309,6 +309,50 @@ class ReeCliRunner
309
309
  end
310
310
  end
311
311
 
312
+ command :"gen.index_project" do |c|
313
+ c.syntax = 'ree gen.index_project'
314
+ c.description = 'generate index schema of methods'
315
+ c.summary = '> ' + c.description
316
+ c.example 'ree gen.index_project --project_path=/project_dir/', ''
317
+ c.option '--project_path [ROOT_PROJECT_DIR]', String, 'Root project dir path'
318
+ c.action do |args, options|
319
+ options_hash = options.__hash__
320
+
321
+ if options_hash[:project_path]
322
+ options_hash[:project_path] = File.expand_path(options_hash[:project_path])
323
+ end
324
+
325
+ default_options = {
326
+ project_path: options_hash[:project_path] || File.expand_path(Dir.pwd)
327
+ }
328
+
329
+ puts Ree::CLI::IndexProject.run(**default_options)
330
+ end
331
+ end
332
+
333
+ command :"gen.index_file" do |c|
334
+ c.syntax = 'ree gen.index_file FILE_PATH'
335
+ c.description = 'generate index schema of methods'
336
+ c.summary = '> ' + c.description
337
+ c.example 'ree gen.index /app/bc/accounts/commands/create_account_cmd.rb --project_path=/project_dir/', ''
338
+ c.option '--project_path [ROOT_PROJECT_DIR]', String, 'Root project dir path'
339
+ c.action do |args, options|
340
+ file_path = args[0]
341
+ options_hash = options.__hash__
342
+
343
+ if options_hash[:project_path]
344
+ options_hash[:project_path] = File.expand_path(options_hash[:project_path])
345
+ end
346
+
347
+ default_options = {
348
+ file_path: file_path,
349
+ project_path: options_hash[:project_path] || File.expand_path(Dir.pwd)
350
+ }
351
+
352
+ puts Ree::CLI::IndexFile.run(**default_options)
353
+ end
354
+ end
355
+
312
356
  run!
313
357
  end
314
358
  end
@@ -0,0 +1,71 @@
1
+ require 'json'
2
+
3
+ module Ree
4
+ module CLI
5
+ class IndexFile
6
+ class << self
7
+ def run(file_path:, project_path:)
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
+
15
+ file_path = File.join(dir, file_path)
16
+
17
+ current_package_schema = self.find_package(File.dirname(file_path))
18
+
19
+ return {} unless current_package_schema
20
+
21
+ package_schema = JSON.load_file(current_package_schema)
22
+ current_package_name = package_schema["name"].to_sym
23
+
24
+ facade = Ree.container.packages_facade
25
+ Ree.load_package(current_package_name)
26
+
27
+ package = facade.get_package(current_package_name)
28
+ objects_class_names = package.objects.map(&:class_name)
29
+ file_name_const_string = Ree::StringUtils.camelize(file_path.split('/')[-1].split('.rb')[0])
30
+ const_string_with_module = "#{package.module}::#{file_name_const_string}"
31
+
32
+ return {} if objects_class_names.include?(const_string_with_module) # skip objects
33
+
34
+ klass = Object.const_get(const_string_with_module)
35
+
36
+ methods = klass
37
+ .public_instance_methods(false)
38
+ .reject { _1.match?(/original/) } # remove aliases defined by contracts
39
+ .map {
40
+ {
41
+ name: _1,
42
+ location: klass.public_instance_method(_1).source_location&.last,
43
+ }
44
+ }
45
+
46
+ hsh = {
47
+ path: file_path,
48
+ package: current_package_name,
49
+ methods: methods
50
+ }
51
+
52
+ JSON.pretty_generate({ file_name_const_string => hsh })
53
+ end
54
+
55
+ def find_package(dir)
56
+ package_schema = File.join(dir, Ree::PACKAGE_SCHEMA_FILE)
57
+
58
+ if File.exist?(package_schema)
59
+ return package_schema
60
+ end
61
+
62
+ if dir == '/'
63
+ return nil
64
+ end
65
+
66
+ find_package(File.expand_path('..', dir))
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,70 @@
1
+ module Ree
2
+ module CLI
3
+ class IndexProject
4
+ class << self
5
+ def run(project_path:)
6
+ ENV['REE_SKIP_ENV_VARS_CHECK'] = 'true'
7
+
8
+ path = Ree.locate_packages_schema(project_path)
9
+ dir = Pathname.new(path).dirname.to_s
10
+
11
+ Ree.init(dir)
12
+
13
+ index_hash = {}
14
+ index_hash[:classes] = {}
15
+
16
+ facade = Ree.container.packages_facade
17
+
18
+ facade.packages_store.packages.each do |package|
19
+ next if package.gem?
20
+ next if package.dir.nil?
21
+
22
+ facade.load_entire_package(package.name)
23
+
24
+ objects_class_names = package.objects.map(&:class_name)
25
+
26
+ files = Dir[
27
+ File.join(
28
+ Ree::PathHelper.abs_package_module_dir(package), '**/*.rb'
29
+ )
30
+ ]
31
+
32
+ files.each do |file_name|
33
+ begin
34
+ file_name_const_string = Ree::StringUtils.camelize(file_name.split('/')[-1].split('.rb')[0])
35
+ const_string_with_module = "#{package.module}::#{file_name_const_string}"
36
+
37
+ next if objects_class_names.include?(const_string_with_module) # skip objects
38
+
39
+ klass = Object.const_get(const_string_with_module)
40
+
41
+ methods = klass
42
+ .public_instance_methods(false)
43
+ .reject { _1.match?(/original/) } # remove aliases defined by contracts
44
+ .map {
45
+ {
46
+ name: _1,
47
+ location: klass.public_instance_method(_1).source_location&.last,
48
+ }
49
+ }
50
+
51
+ hsh = {
52
+ path: file_name,
53
+ package: package.name,
54
+ methods: methods
55
+ }
56
+
57
+ index_hash[:classes][file_name_const_string] ||= []
58
+ index_hash[:classes][file_name_const_string] << hsh
59
+ rescue NameError
60
+ next
61
+ end
62
+ end
63
+ end
64
+
65
+ JSON.pretty_generate(index_hash)
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
data/lib/ree/cli.rb CHANGED
@@ -9,6 +9,8 @@ module Ree
9
9
  autoload :DeleteObjectSchema, 'ree/cli/delete_object_schema'
10
10
  autoload :GeneratePackage, 'ree/cli/generate_package'
11
11
  autoload :GenerateTemplate, 'ree/cli/generate_template'
12
+ autoload :IndexProject, 'ree/cli/index_project'
13
+ autoload :IndexFile, 'ree/cli/index_file'
12
14
  autoload :SpecRunner, 'ree/cli/spec_runner'
13
15
  end
14
16
  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.10"
4
+ VERSION = "1.0.11"
5
5
  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.10
4
+ version: 1.0.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ruslan Gatiyatov
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-11-03 00:00:00.000000000 Z
11
+ date: 2022-11-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: commander
@@ -69,6 +69,8 @@ files:
69
69
  - lib/ree/cli/generate_package_schema.rb
70
70
  - lib/ree/cli/generate_packages_schema.rb
71
71
  - lib/ree/cli/generate_template.rb
72
+ - lib/ree/cli/index_file.rb
73
+ - lib/ree/cli/index_project.rb
72
74
  - lib/ree/cli/init.rb
73
75
  - lib/ree/cli/spec_runner.rb
74
76
  - lib/ree/container.rb