ree 1.0.29 → 1.0.31

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: 8a9bafffedbc153f633b682e9a7ecbce4ad38a75dbbb9a7436798a3766d57735
4
- data.tar.gz: 4b2562f2fb06c0afc492cce67abf5044b160c900057b5c24e14eb76104bf9049
3
+ metadata.gz: a6d6548b0d788689ab62d295a88602cfe8e555ed00879898118a9fa6335e63d8
4
+ data.tar.gz: d36aa35b5d3e5c3b618ec5037c28590249ad8d0aefa1633a01564fe6e8806039
5
5
  SHA512:
6
- metadata.gz: ad6eddfb2656ed64223758a2b3f9a720597ba9bbca3edddbccb7ca4b284770db9fa03e3b5c81cdd5d771858bfff3e2b39566820a993eaa4f02baf3e821e3f116
7
- data.tar.gz: 14ecf3e59cdc5d0b3a78f9fcddc74ea39cc6fb7ff77bbe2a23d6a693cf4d98f47141cfb750b4d60f9a8e09c3971e070f25d70ccff11e76121187b80e603e1666
6
+ metadata.gz: 0b4eeb250100dd7dd1affcd9ba71b2659b18166686082612c4929282a70f22d5b477f9468e5610df4186a6c5c2e499fc81bcd10511905172923f77cd4fc3336d
7
+ data.tar.gz: 0b59b6a98b4ec333c22a1f857b26d83294ba09b199dadce5e5575f64cc68fdf16f1ee6dbcf57108eb04f8dc003f9880fd04be5b975725a121cc075096b69ebf9
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ree (1.0.29)
4
+ ree (1.0.31)
5
5
  commander (~> 4.6.0)
6
6
 
7
7
  GEM
@@ -1,21 +1,24 @@
1
1
  # frozen_string_literal = true
2
2
 
3
3
  class Ree::ImportDsl
4
+ def initialize
5
+ setup_removed_constants
6
+ end
7
+
4
8
  def execute(klass, proc)
5
- self.class.instance_exec(&proc)
6
- rescue Ree::ImportDsl::UnlinkConstError => e
7
- const_removed = remove_or_assign_const(klass, e.const)
9
+ class_constant = self.class.instance_exec(&proc)
8
10
 
9
- retry if const_removed
11
+ [
12
+ extract_constants(class_constant),
13
+ get_removed_constants
14
+ ]
15
+ rescue Ree::ImportDsl::UnlinkConstError => e
16
+ retry_after = remove_or_assign_const(klass, e.const)
17
+ retry if retry_after
10
18
  rescue NoMethodError => e
11
- if e.name == :&
12
- const_removed = remove_or_assign_const(klass, e.receiver)
13
-
14
- if const_removed
15
- retry
16
- else
17
- raise Ree::Error.new("'#{e.receiver}' already linked or defined in '#{klass}'", :invalid_dsl_usage)
18
- end
19
+ if e.name == :& || e.name == :as
20
+ retry_after = remove_or_assign_const(klass, e.receiver)
21
+ retry if retry_after
19
22
  else
20
23
  raise e
21
24
  end
@@ -27,6 +30,27 @@ class Ree::ImportDsl
27
30
  retry
28
31
  end
29
32
 
33
+ private def extract_constants(class_constant)
34
+ [class_constant] + class_constant.constants
35
+ end
36
+
37
+ private def setup_removed_constants
38
+ self.class.instance_variable_set(:@removed_constants, [])
39
+ end
40
+
41
+ private def get_removed_constants
42
+ self.class.instance_variable_get(:@removed_constants)
43
+ end
44
+
45
+ class RemovedConstant
46
+ attr_reader :name, :const
47
+
48
+ def initialize(name, const)
49
+ @name = name
50
+ @const = const
51
+ end
52
+ end
53
+
30
54
  class UnlinkConstError < StandardError
31
55
  attr_reader :const
32
56
 
@@ -92,11 +116,15 @@ class Ree::ImportDsl
92
116
  if constant.is_a?(Class) || constant.is_a?(Module)
93
117
  if (const.is_a?(Class) || const.is_a?(Module)) && const.name == constant.name
94
118
  klass.send(:remove_const, const_sym)
119
+ store_removed_constant(const_sym, constant)
120
+
95
121
  retry_after = true
96
122
  break
97
123
  end
98
124
  elsif const == constant
99
125
  klass.send(:remove_const, const_sym)
126
+ store_removed_constant(const_sym, constant)
127
+
100
128
  retry_after = true
101
129
  break
102
130
  end
@@ -122,6 +150,11 @@ class Ree::ImportDsl
122
150
 
123
151
  private
124
152
 
153
+ def store_removed_constant(name, constant)
154
+ return if constant.is_a?(ClassConstant)
155
+ get_removed_constants << RemovedConstant.new(name, constant.dup)
156
+ end
157
+
125
158
  def parent_constant?(klass, const_name)
126
159
  modules = klass.to_s.split("::")[0..-2]
127
160
 
@@ -11,14 +11,13 @@ class Ree::LinkImportBuilder
11
11
  # @param [Proc] proc
12
12
  # @return [ArrayOf[String]] List of names of imported constants
13
13
  def build(klass, package_name, object_name, proc)
14
- result = Ree::ImportDsl.new.execute(klass, proc)
14
+ const_list, removed_constants = Ree::ImportDsl.new.execute(klass, proc)
15
15
 
16
16
  @packages_facade.load_package_object(package_name, object_name)
17
17
 
18
18
  package = @packages_facade.get_package(package_name)
19
19
  object = package.get_object(object_name)
20
- const_list = [result] + result.constants
21
-
20
+
22
21
  const_list.each do |const_obj|
23
22
  if object.klass.const_defined?(const_obj.name)
24
23
  set_const(klass, object.klass.const_get(const_obj.name), const_obj)
@@ -29,6 +28,8 @@ class Ree::LinkImportBuilder
29
28
  end
30
29
  end
31
30
 
31
+ assign_removed_constants(klass, removed_constants)
32
+
32
33
  const_list.map(&:name)
33
34
  end
34
35
 
@@ -37,9 +38,8 @@ class Ree::LinkImportBuilder
37
38
  # @param [Proc] proc
38
39
  # @return [ArrayOf[String]] List of names of imported constants
39
40
  def build_for_const(klass, source_const, proc)
40
- result = Ree::ImportDsl.new.execute(klass, proc)
41
+ const_list, removed_constants = Ree::ImportDsl.new.execute(klass, proc)
41
42
  mod_const = Object.const_get(source_const.name.split("::").first)
42
- const_list = [result] + result.constants
43
43
 
44
44
  const_list.each do |const_obj|
45
45
  if source_const.const_defined?(const_obj.name)
@@ -50,14 +50,28 @@ class Ree::LinkImportBuilder
50
50
  raise Ree::Error.new("'#{const_obj.name}' is not found in '#{source_const}'")
51
51
  end
52
52
  end
53
+
54
+ assign_removed_constants(klass, removed_constants)
55
+ nil
53
56
  end
54
57
 
55
58
  private
56
59
 
60
+ def assign_removed_constants(klass, removed_constants)
61
+ removed_constants.each do |removed_const|
62
+ next if klass.const_defined?(removed_const.name)
63
+ klass.const_set(removed_const.name, removed_const.const)
64
+ end
65
+ end
66
+
57
67
  def set_const(target_klass, ref_class, const_obj)
58
68
  if const_obj.get_as
59
69
  target_klass.send(:remove_const, const_obj.get_as.name) rescue nil
60
70
  target_klass.const_set(const_obj.get_as.name, ref_class)
71
+
72
+ if target_klass.const_get(const_obj.name).is_a?(Ree::ImportDsl::ClassConstant)
73
+ target_klass.send(:remove_const, const_obj.name)
74
+ end
61
75
  else
62
76
  target_klass.send(:remove_const, const_obj.name) rescue nil
63
77
  target_klass.const_set(const_obj.name, ref_class)
@@ -117,40 +117,6 @@ class Ree::ObjectDsl
117
117
  @object.set_freeze(flag)
118
118
  end
119
119
 
120
- # @param [Nilor[Symbol]] code Global error code
121
- # @param [Proc] proc Error DSL proc
122
- def def_error(code = nil, &proc)
123
- check_arg(code, :code, Symbol) if code
124
-
125
- if !block_given?
126
- raise_error("def_error should accept block with error class definition")
127
- end
128
-
129
- if code && !Ree.error_types.include?(code)
130
- raise_error("Invalid error code :#{code}. Did you forget to setup it with Ree.add_error_types(*args)?")
131
- end
132
-
133
- class_name = begin
134
- Ree::ErrorBuilder
135
- .new(@packages_facade)
136
- .build(
137
- @object,
138
- code,
139
- &proc
140
- )
141
- rescue Ree::Error
142
- raise_error("invalid def_error usage. Valid examples: def_error { InvalidDomainErr } or def_error(:validation) { EmailTakenErr['email taken'] }")
143
- end
144
-
145
- @object.add_const_list([class_name])
146
-
147
- @object.errors.push(
148
- Ree::ObjectError.new(
149
- class_name
150
- )
151
- )
152
- end
153
-
154
120
  # @param [String] path Relative package file path ('accounts/entities/user')
155
121
  # @param [Proc] proc Import constants proc
156
122
  def link_file(path, import_proc = nil)
@@ -227,12 +193,14 @@ class Ree::ObjectDsl
227
193
  raise Ree::Error.new("Mount as should be one of #{MOUNT_AS.inspect}", :invalid_dsl_usage)
228
194
  end
229
195
 
230
- object_name_from_path = if File.exist?(path) && !Ree.irb_mode?
231
- File.basename(path, ".*").to_sym
232
- end
196
+ if !Ree.irb_mode?
197
+ object_name_from_path = if File.exist?(path)
198
+ File.basename(path, ".*").to_sym
199
+ end
233
200
 
234
- if !Ree.irb_mode? && object_name_from_path && object_name != object_name_from_path
235
- raise Ree::Error.new("Object name does not correspond to a file name (#{object_name}, #{object_name_from_path}.rb). Fix object name or rename object file", :invalid_dsl_usage)
201
+ if object_name_from_path && object_name != object_name_from_path
202
+ raise Ree::Error.new("Object name does not correspond to a file name (#{object_name}, #{object_name_from_path}.rb). Fix object name or rename object file", :invalid_dsl_usage)
203
+ end
236
204
  end
237
205
 
238
206
  class_name = klass.to_s
@@ -1,10 +1,3 @@
1
-
2
- Ree.add_error_types(
3
- :invalid_param,
4
- :not_found,
5
- :validation
6
- )
7
-
8
1
  # Switch Ree.logger to debug level
9
2
  # Ree.set_logger_debug
10
3
 
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.29"
4
+ VERSION = "1.0.31"
5
5
  end
data/lib/ree.rb CHANGED
@@ -13,7 +13,6 @@ module Ree
13
13
  autoload :Contracts, 'ree/contracts'
14
14
  autoload :DomainError, 'ree/dsl/domain_error'
15
15
  autoload :Error, 'ree/error'
16
- autoload :ErrorBuilder, 'ree/dsl/error_builder'
17
16
  autoload :ErrorDsl, 'ree/dsl/error_dsl'
18
17
  autoload :FnDSL, 'ree/fn_dsl'
19
18
  autoload :Gen, 'ree/gen'
@@ -262,18 +261,6 @@ module Ree
262
261
  end
263
262
  end
264
263
  end
265
-
266
- def error_types
267
- @error_types ||= []
268
- end
269
-
270
- def add_error_types(*args)
271
- args.each do |arg|
272
- check_arg(arg, :error, Symbol)
273
- end
274
-
275
- @error_types = (error_types + args).uniq
276
- end
277
264
  end
278
265
  end
279
266
 
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.29
4
+ version: 1.0.31
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-08-21 00:00:00.000000000 Z
11
+ date: 2023-08-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: commander
@@ -143,7 +143,6 @@ files:
143
143
  - lib/ree/core/path_helper.rb
144
144
  - lib/ree/dsl/build_package_dsl.rb
145
145
  - lib/ree/dsl/domain_error.rb
146
- - lib/ree/dsl/error_builder.rb
147
146
  - lib/ree/dsl/error_dsl.rb
148
147
  - lib/ree/dsl/import_dsl.rb
149
148
  - lib/ree/dsl/link_import_builder.rb
@@ -1,39 +0,0 @@
1
- # frozen_string_literal = true
2
-
3
- class Ree::ErrorBuilder
4
- def initialize(packages_facade)
5
- @packages_facade = packages_facade
6
- end
7
-
8
- def build(object, code, &proc)
9
- result = Ree::ErrorDsl.new.execute(object.klass, &proc)
10
-
11
- if result.is_a?(Ree::DomainError)
12
- object.klass.send(:remove_const, result.name) rescue nil
13
- result = Ree::ErrorDsl.new.execute(object.klass, &proc)
14
- end
15
-
16
- if !result.is_a?(Ree::ErrorDsl::ClassConstant)
17
- raise Ree::Error.new("invalid def_error usage", :invalid_dsl_usage)
18
- end
19
-
20
- object.klass.send(:remove_const, result.name) rescue nil
21
-
22
- object.klass.class_eval <<-ruby_eval, __FILE__, __LINE__ + 1
23
- class #{result.name} < Ree::DomainError
24
- attr_reader :code, :extra_code, :error_code, :package_name, :object_name
25
-
26
- def initialize(msg = nil, extra_code = nil)
27
- @code = #{code.inspect}
28
- @extra_code = extra_code
29
- @error_code = :#{Ree::StringUtils.underscore(result.name)}
30
- @package_name = :#{object.package_name}
31
- @object_name = :#{object.name}
32
- super(msg || #{result.message.inspect})
33
- end
34
- end
35
- ruby_eval
36
-
37
- result.name
38
- end
39
- end