ree 1.0.21 → 1.0.23

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: ca13d5ef496d85f47eadd745809ae723ecc4753c465aaa3f4ac6765a9d59d613
4
- data.tar.gz: f8aca8861e7fa1cddc8bd254abf4cff4967376284c6df859357daa361bfe1f15
3
+ metadata.gz: 60b602bd07b9adc8ba5cbcee420750e3b2d5266056c888ad750115cbb393c4ea
4
+ data.tar.gz: 1431632c86f3dacee9ad1f4fee6550e3a56b06dca780d0d3c6c46245c812b407
5
5
  SHA512:
6
- metadata.gz: 50493c271f9a3abea47885f3c83308b3e2149891f1f0f0b0dccd4f43a0608b7a8df3f5e43131c109902f19c959e7ff68ea3cd8a669fd0ed48c34c4c5b132dc40
7
- data.tar.gz: e95bc7ba3124029e388ddb34fa4de0d6cf5b1e775df18095ad48ebab1891a4a27944f5bc8ad87265615da5a7e036ac7971ac0f6e6092fc980ed97a0381372a40
6
+ metadata.gz: 58c730e7c3930abe99115bdaffa4175b886c29dd67ef7575b196f6284782f192722dfd706e5e6174808b1cdb0ab0126a216cfa1ccfa6d99fe0a287289e63d708
7
+ data.tar.gz: 67ebd3b56bed90000f00033e7a7cd9f2a5959df2dd4acc58f168e5830c49bf989b3ba74fdf77902d3e0ceec921de7180a55185e5665f33294316e8d0074f51ca
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ree (1.0.21)
4
+ ree (1.0.23)
5
5
  commander (~> 4.6.0)
6
6
 
7
7
  GEM
data/lib/ree/bean_dsl.rb CHANGED
@@ -16,6 +16,7 @@ module Ree::BeanDSL
16
16
  )
17
17
 
18
18
  dsl.instance_exec(&proc) if block_given?
19
+ dsl.tags(["object"])
19
20
  dsl.object.set_as_compiled(false)
20
21
 
21
22
  Ree.container.compile(dsl.package, name)
@@ -22,6 +22,16 @@ module Ree
22
22
  if File.exist?(abs_schema_path)
23
23
  FileUtils.rm(abs_schema_path)
24
24
 
25
+ facade = Ree.container.packages_facade
26
+ package_name = Ree::PathHelper.package_name_from_dir(File.dirname(object_path))
27
+ if package_name
28
+ package_name = package_name.to_sym
29
+ facade.load_package_entry(package_name)
30
+ package = facade.get_package(package_name)
31
+ package.remove_object(object_name)
32
+ facade.dump_package_schema(package_name)
33
+ end
34
+
25
35
  puts(" #{schema_path}: is deleted") if !silence
26
36
  end
27
37
 
@@ -14,16 +14,25 @@ module Ree
14
14
 
15
15
  facade = Ree.container.packages_facade
16
16
 
17
+ hsh = {}
18
+ hsh[:package_schema] = {}
19
+ hsh[:classes] = {}
20
+ hsh[:objects] = {}
21
+
17
22
  package_name = package_name.to_sym
23
+ facade.load_entire_package(package_name)
18
24
  package = facade.get_loaded_package(package_name)
19
- package_hsh = map_package_entry(package)
25
+ package_hsh = index_package_entry(package)
26
+
27
+ hsh[:package_schema] = package_hsh
28
+ hsh = index_public_methods_for_package_classes(package, dir, hsh)
20
29
 
21
- JSON.pretty_generate(package_hsh)
30
+ JSON.pretty_generate(hsh)
22
31
  end
23
32
 
24
33
  private
25
34
 
26
- def map_package_entry(package)
35
+ def index_package_entry(package)
27
36
  package_hsh = {}
28
37
  package_hsh[:name] = package.name
29
38
  package_hsh[:schema_rpath] = package.schema_rpath
@@ -110,6 +119,10 @@ module Ree
110
119
  }
111
120
  ]
112
121
  end
122
+
123
+ def index_public_methods_for_package_classes(package, dir, index_hash)
124
+ Ree::CLI::IndexProject.send(:index_public_methods_for_package_classes, package, index_hash)
125
+ end
113
126
  end
114
127
  end
115
128
  end
@@ -10,16 +10,15 @@ module Ree
10
10
 
11
11
  Ree.init(dir)
12
12
 
13
- @index_hash = {}
13
+ index_hash = {}
14
14
  # completion/etc data
15
- @index_hash[:classes] = {}
16
- @index_hash[:objects] = {}
15
+ index_hash[:classes] = {}
16
+ index_hash[:objects] = {}
17
17
 
18
18
  # schema data
19
- @index_hash[:gem_paths] = {}
20
- @index_hash[:packages_schema] = {}
21
- @index_hash[:packages_schema][:packages] = []
22
- @index_hash[:packages_schema][:gem_packages] = []
19
+ index_hash[:packages_schema] = {}
20
+ index_hash[:packages_schema][:packages] = []
21
+ index_hash[:packages_schema][:gem_packages] = []
23
22
 
24
23
  facade = Ree.container.packages_facade
25
24
 
@@ -48,7 +47,7 @@ module Ree
48
47
  }
49
48
  }
50
49
 
51
- @index_hash[:packages_schema][:gem_packages] << gem_package_hsh
50
+ index_hash[:packages_schema][:gem_packages] << gem_package_hsh
52
51
 
53
52
  next
54
53
  end
@@ -57,68 +56,84 @@ module Ree
57
56
 
58
57
  facade.load_entire_package(package.name)
59
58
 
60
- package_hsh = Ree::CLI::IndexPackage.send(:map_package_entry, package)
59
+ package_hsh = Ree::CLI::IndexPackage.send(:index_package_entry, package)
61
60
 
62
- @index_hash[:packages_schema][:packages] << package_hsh
61
+ index_hash[:packages_schema][:packages] << package_hsh
63
62
 
64
- objects_class_names = package.objects.map(&:class_name)
63
+ index_hash = index_public_methods_for_package_classes(package, index_hash)
64
+ end
65
65
 
66
- files = Dir[
67
- File.join(
68
- Ree::PathHelper.abs_package_module_dir(package), '**/*.rb'
69
- )
70
- ]
66
+ if facade.get_package(:ree_errors, false)
67
+ index_hash = index_exceptions(facade.get_package(:ree_errors), index_hash)
68
+ end
71
69
 
72
- files.each do |file_name|
73
- begin
74
- const_string_from_file_name = Ree::StringUtils.camelize(file_name.split('/')[-1].split('.rb')[0])
75
- const_string_with_module = "#{package.module}::#{const_string_from_file_name}"
76
- klass = Object.const_get(const_string_with_module)
70
+ JSON.pretty_generate(index_hash)
71
+ end
77
72
 
78
- if klass.include?(ReeEnum::DSL)
79
- index_enum(klass, file_name, package.name, dir, const_string_from_file_name)
73
+ private
80
74
 
81
- next
82
- end
75
+ def index_public_methods_for_package_classes(package, index_hash)
76
+ package.objects.each do |obj|
77
+ klass = obj.klass
78
+ klass_name = demodulize(klass.to_s)
79
+ obj_name = obj.name.to_s
80
+ rpath = obj.rpath
81
+
82
+ if obj.tags.include?("enum")
83
+ hsh = index_class(klass, rpath, package.name)
84
+ index_hash[:classes][klass_name] ||= []
85
+ index_hash[:classes][klass_name] << hsh
86
+ index_hash[:objects][obj_name] ||= []
87
+ index_hash[:objects][obj_name] << hsh
88
+ elsif obj.tags.include?("dao")
89
+ hsh = index_dao(klass, rpath, package.name)
90
+ index_hash[:objects][obj_name] ||= []
91
+ index_hash[:objects][obj_name] << hsh
92
+ elsif obj.tags.include?("object")
93
+ hsh = index_class(klass, rpath, package.name)
94
+ index_hash[:objects][obj_name] ||= []
95
+ index_hash[:objects][obj_name] << hsh
96
+ end
97
+ end
83
98
 
84
- if klass.include?(ReeDao::DSL)
85
- index_dao(klass, file_name, package.name, dir, const_string_from_file_name)
86
- next
87
- end
99
+ recursively_index_module(package.module, index_hash, package)
88
100
 
89
- if klass.include?(ReeMapper::DSL)
90
- # TODO
91
- next
92
- end
101
+ index_hash
102
+ end
93
103
 
94
- if !objects_class_names.include?(const_string_with_module)
95
- index_class(klass, file_name, package.name, dir, const_string_from_file_name)
104
+ def recursively_index_module(mod, index_hsh, package)
105
+ return if !mod.is_a?(Module)
96
106
 
97
- next
98
- end
99
- rescue NameError
100
- next
101
- end
102
- end
103
- end
107
+ mod.constants.each do |const_name|
108
+ const = mod.const_get(const_name)
104
109
 
105
- if facade.get_package(:ree_errors, false)
106
- index_exceptions(facade.get_package(:ree_errors))
107
- end
108
-
110
+ recursively_index_module(const, index_hsh, package)
109
111
 
110
- JSON.pretty_generate(@index_hash)
111
- end
112
+ next if !const.is_a?(Class)
113
+ next if package.objects.any? { |o| o.klass == const }
114
+ next if index_hsh[:classes].has_key?(demodulize(const.name))
112
115
 
113
- private
116
+ const_abs_path = mod.const_source_location(const.name).first
117
+ next if !const_abs_path
114
118
 
115
- def index_class(klass, file_name, package_name, root_dir, hash_key)
119
+ rpath = Pathname.new(const_abs_path).relative_path_from(Ree.root_dir).to_s
120
+ hsh = index_class(const, rpath, package.name)
121
+ class_name = demodulize(const.name)
122
+
123
+ index_hsh[:classes][class_name] ||= []
124
+ index_hsh[:classes][class_name] << hsh
125
+ end
126
+ end
127
+
128
+ def index_class(klass, rpath, package_name)
116
129
  all_methods = klass.public_instance_methods(false)
117
130
  orig_methods = all_methods.grep(/original/)
131
+
118
132
  methods = (all_methods - orig_methods) # remove aliases defined by contracts
119
133
  .map { |m|
120
134
  orig_method_name = orig_methods.find { |om| om.match(/original_#{Regexp.escape(m.name)}_[0-9a-fA-F]+/) }
121
135
  orig_method = orig_method_name ? klass.public_instance_method(orig_method_name) : nil
136
+
122
137
  {
123
138
  name: m,
124
139
  parameters: orig_method&.parameters&.map { |param| { name: param.last, required: param.first } },
@@ -126,22 +141,14 @@ module Ree
126
141
  }
127
142
  }
128
143
 
129
- rpath_from_root_file_path = Pathname.new(file_name).relative_path_from(Pathname.new(root_dir)).to_s
130
- hsh = {
131
- path: rpath_from_root_file_path,
144
+ {
145
+ path: rpath,
132
146
  package: package_name,
133
147
  methods: methods
134
148
  }
135
-
136
- @index_hash[:classes][hash_key] ||= []
137
- @index_hash[:classes][hash_key] << hsh
138
149
  end
139
150
 
140
- def index_enum(klass, file_name, package_name, root_dir, hash_key)
141
- index_class(klass, file_name, package_name, root_dir, hash_key)
142
- end
143
-
144
- def index_dao(klass, file_name, package_name, root_dir, hash_key)
151
+ def index_dao(klass, rpath, package_name)
145
152
  filters = klass
146
153
  .instance_variable_get(:@filters)
147
154
  .map {
@@ -152,22 +159,16 @@ module Ree
152
159
  }
153
160
  }
154
161
 
155
- obj_name_key = Ree::StringUtils.underscore(hash_key)
156
- rpath_from_root_file_path = Pathname.new(file_name).relative_path_from(Pathname.new(root_dir)).to_s
157
-
158
- hsh = {
159
- path: rpath_from_root_file_path,
162
+ {
163
+ path: rpath,
160
164
  package: package_name,
161
165
  methods: filters
162
166
  }
163
-
164
- @index_hash[:objects][obj_name_key] ||= []
165
- @index_hash[:objects][obj_name_key] << hsh
166
167
  end
167
168
 
168
- def index_exceptions(errors_package)
169
+ def index_exceptions(errors_package, index_hash)
169
170
  errors_package.objects.each do |obj|
170
- const_name = obj.class_name.split("::")[-1]
171
+ const_name = demodulize(obj.class_name)
171
172
  file_name = File.join(
172
173
  Ree::PathHelper.abs_package_module_dir(errors_package),
173
174
  obj.name.to_s + ".rb"
@@ -179,9 +180,15 @@ module Ree
179
180
  methods: []
180
181
  }
181
182
 
182
- @index_hash[:classes][const_name] ||= []
183
- @index_hash[:classes][const_name] << hsh
183
+ index_hash[:classes][const_name] ||= []
184
+ index_hash[:classes][const_name] << hsh
184
185
  end
186
+
187
+ index_hash
188
+ end
189
+
190
+ def demodulize(str)
191
+ str.split("::").last
185
192
  end
186
193
  end
187
194
  end
data/lib/ree/cli.rb CHANGED
@@ -9,9 +9,9 @@ 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'
14
- autoload :IndexPackage, 'ree/cli/index_package'
12
+ autoload :IndexProject, 'ree/cli/indexing/index_project'
13
+ autoload :IndexFile, 'ree/cli/indexing/index_file'
14
+ autoload :IndexPackage, 'ree/cli/indexing/index_package'
15
15
  autoload :SpecRunner, 'ree/cli/spec_runner'
16
16
  end
17
17
  end
@@ -5,7 +5,7 @@ class Ree::Object
5
5
  :package_name, :factory, :after_init,
6
6
  :class_name, :links, :mount_as, :freeze,
7
7
  :errors, :linked_const_list, :compiled_frozen,
8
- :singleton
8
+ :singleton, :tags
9
9
 
10
10
  # @param [Symbol] name Object name
11
11
  # @param [String] schema_rpath Object schema path relative to project root dir
@@ -22,6 +22,7 @@ class Ree::Object
22
22
  @singleton = false
23
23
  @compiled_frozen = @freeze
24
24
  @linked_const_list = []
25
+ @tags = []
25
26
  end
26
27
 
27
28
  def reset
@@ -129,4 +130,9 @@ class Ree::Object
129
130
  def set_after_init(val)
130
131
  @after_init = val; self
131
132
  end
133
+
134
+ def add_tags(list)
135
+ @tags += list
136
+ @tags.uniq!
137
+ end
132
138
  end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal = true
2
2
 
3
3
  module Ree::ObjectSchema
4
- SCHEMA_VERSION_NUMBER = '1.0'
4
+ SCHEMA_VERSION_NUMBER = '1.1'
5
5
 
6
6
  SCHEMA_TYPE = 'schema_type'
7
7
  REE_VERSION = 'ree_version'
@@ -40,6 +40,7 @@ module Ree::ObjectSchema
40
40
 
41
41
  module Args
42
42
  ARG = 'arg'
43
+ ARG_TYPE = 'arg_type'
43
44
  TYPE = 'type'
44
45
  end
45
46
  end
@@ -85,6 +85,7 @@ class Ree::ObjectSchemaBuilder
85
85
 
86
86
  {
87
87
  Schema::Methods::Args::ARG => arg.name,
88
+ Schema::Methods::Args::ARG_TYPE => arg.type,
88
89
  Schema::Methods::Args::TYPE => type
89
90
  }
90
91
  end
@@ -165,6 +165,16 @@ class Ree::Package
165
165
  @objects_store[object.name] = object
166
166
  end
167
167
 
168
+ # @param [Symbol] name
169
+ # @return [nil]
170
+ def remove_object(name)
171
+ if @objects_store[name]
172
+ @objects_store.delete(name)
173
+ end
174
+
175
+ nil
176
+ end
177
+
168
178
  # @param [Symbol] name
169
179
  # @return [Nilor[Ree::Object]]
170
180
  def get_object(name)
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal = true
2
2
 
3
3
  module Ree::PackageSchema
4
- SCHEMA_VERSION_NUMBER = '1.0'
4
+ SCHEMA_VERSION_NUMBER = '1.1'
5
5
 
6
6
  SCHEMA_TYPE = 'schema_type'
7
7
  REE_VERSION = 'ree_version'
@@ -17,6 +17,7 @@ module Ree::PackageSchema
17
17
  module Objects
18
18
  NAME = 'name'
19
19
  SCHEMA = 'schema'
20
+ TAGS = 'tags'
20
21
  end
21
22
 
22
23
  module DependsOn
@@ -36,6 +36,7 @@ class Ree::PackageSchemaBuilder
36
36
  {
37
37
  Schema::Objects::NAME => object.name,
38
38
  Schema::Objects::SCHEMA => object.schema_rpath,
39
+ Schema::Objects::TAGS => object.tags
39
40
  }
40
41
  }
41
42
  }
@@ -102,6 +102,7 @@ class Ree::PackageSchemaLoader
102
102
  name = item[Schema::Objects::NAME].to_s
103
103
  schema_rpath = item[Schema::Objects::SCHEMA].to_s
104
104
  list = [name, schema_rpath]
105
+ tags = item[Schema::Objects::TAGS] || []
105
106
 
106
107
  if list.reject(&:empty?).size != list.size
107
108
  raise Ree::Error.new("invalid object data for #{item.inspect}: #{abs_schema_path}", :invalid_package_schema)
@@ -119,6 +120,7 @@ class Ree::PackageSchemaLoader
119
120
  Ree::PathHelper.object_rpath(schema_rpath),
120
121
  )
121
122
 
123
+ object.add_tags(tags)
122
124
  object.set_package(package.name)
123
125
 
124
126
  package.set_object(object)
@@ -52,6 +52,22 @@ class Ree::PathHelper
52
52
  File.join(dir, "#{Ree::PACKAGE}/#{name}.rb")
53
53
  end
54
54
 
55
+ # @param [String] directory inside package
56
+ # @return [String] name of package
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
+ if dir == '/'
65
+ return nil
66
+ end
67
+
68
+ package_name_from_dir(File.expand_path('..', dir))
69
+ end
70
+
55
71
  # @param [Ree::Package] package Package schema
56
72
  # @return [String] Absolute package entry path (ex. /data/project/bc/accounts/package/accounts.rb)
57
73
  def abs_package_entry_path(package)
@@ -37,6 +37,10 @@ class Ree::ObjectDsl
37
37
  end
38
38
  end
39
39
 
40
+ def tags(list)
41
+ @object.add_tags(list)
42
+ end
43
+
40
44
  # @param [Symbol] object_name
41
45
  # @param [Nilor[Symbol]] as
42
46
  # @param [Nilor[Symbol]] from
data/lib/ree/fn_dsl.rb CHANGED
@@ -16,6 +16,7 @@ module Ree::FnDSL
16
16
  )
17
17
 
18
18
  dsl.instance_exec(&proc) if block_given?
19
+ dsl.tags(["fn"])
19
20
  dsl.object.set_as_compiled(false)
20
21
 
21
22
  Ree.container.compile(dsl.package, name)
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.21"
4
+ VERSION = "1.0.23"
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.21
4
+ version: 1.0.23
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ruslan Gatiyatov
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-01-30 00:00:00.000000000 Z
11
+ date: 2023-02-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: commander
@@ -69,9 +69,9 @@ 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_package.rb
74
- - lib/ree/cli/index_project.rb
72
+ - lib/ree/cli/indexing/index_file.rb
73
+ - lib/ree/cli/indexing/index_package.rb
74
+ - lib/ree/cli/indexing/index_project.rb
75
75
  - lib/ree/cli/init.rb
76
76
  - lib/ree/cli/spec_runner.rb
77
77
  - lib/ree/container.rb