low_type 1.2.0 → 1.3.0

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: 218e91b66e1cd32b9760929f79046c215475f4b07416589443e92cd61ff35af5
4
- data.tar.gz: bd69d269f5d4cab60a1e9b1277c93d62ab9540ae483a9c176921062150ef4430
3
+ metadata.gz: a35463e7919196f86142b2120884cc3ddb70375569d14b9a5c48d734b002b942
4
+ data.tar.gz: 93f54ee40ee59d4bc95e81a05aacdd4c20a5c0b5c546e756f72337118d9d1f52
5
5
  SHA512:
6
- metadata.gz: e03cedbb09f99af96a08cd6a3d755e775cefea140f9fa25b4a920079298b0e65fefcc27a5600890404c6988b977d6dc3540d3db5abdab37e4347aad6f322bd1e
7
- data.tar.gz: d31c9c3bd5e645043b4ad710c415858300013000862ab2ef0a6664e3e59751251c448c6a6cbaedf63147446aaa0aca1d5bac433b60952b7a7bd05a05b1342440
6
+ metadata.gz: '00039a16689c9dedae5b0dde2af61e705d5959a354a58fe9321d46ef973d698da0339658fe51cee366051a15351ac6a3164b0a6f79ef2e14361e30f8058adb7b'
7
+ data.tar.gz: bc1e1ff7f780f51c5d902616c8593e955f7130a0e17ee0557038d1f31f6b948fd7d9306c3842cac149698ecfe932be3b08a526e4f93b73c262e4d995354712e8
@@ -40,26 +40,36 @@ module Low
40
40
  eval(proxy.value, binding, proxy.file_path, proxy.start_line) # rubocop:disable Security/Eval
41
41
  end
42
42
 
43
+ def class_evaluate(proxy:, class_binding:)
44
+ # Not a security risk because the code comes from a trusted source; the file that included lowtype.
45
+ eval(proxy.value, class_binding, proxy.file_path, proxy.start_line) # rubocop:disable Security/Eval
46
+ end
47
+
43
48
  class << self
44
- def evaluate(method_proxies:)
49
+ def evaluate(method_proxies:, class_binding: nil)
45
50
  require_relative '../syntax/union_types' if LowType.config.union_type_expressions
46
51
 
47
52
  method_proxies.each_value do |method_proxy|
48
- evaluate_param_proxy_expressions(method_proxy:)
53
+ evaluate_param_proxy_expressions(method_proxy:, class_binding:)
49
54
  evaluate_return_proxy_expression(return_proxy: method_proxy.return_proxy) if method_proxy.return_proxy
50
55
  end
51
56
  end
52
57
 
53
- def evaluate_param_proxy_expressions(method_proxy:)
58
+ def evaluate_param_proxy_expressions(method_proxy:, class_binding: nil)
54
59
  begin # rubocop:disable Style/RedundantBegin
55
60
  method_proxy.tagged_params(:value).each do |param_proxy|
56
- # TODO: Evaluate in the binding of the class that included LowType if not a type managed by LowType.
57
- expression = new.instance_evaluate(proxy: param_proxy)
61
+ expression = begin
62
+ new.instance_evaluate(proxy: param_proxy)
63
+ rescue NameError
64
+ raise unless class_binding
65
+
66
+ new.class_evaluate(proxy: param_proxy, class_binding:)
67
+ end
58
68
  param_proxy.expression = cast_type_expression(expression:, method_proxy:)
59
69
  end
60
- rescue NameError
70
+ rescue NameError => e
61
71
  mp = method_proxy
62
- raise NameError, "Unknown type '#{mp.value}' for #{mp.scope} at #{mp.file_path}:#{mp.start_line}"
72
+ raise NameError, "Unknown type '#{e.name}' for #{mp.scope} at #{mp.file_path}:#{mp.start_line}"
63
73
  end
64
74
  end
65
75
 
data/lib/low_type.rb CHANGED
@@ -50,7 +50,7 @@ module LowType
50
50
 
51
51
  class_proxy.class_binding = trace.binding
52
52
 
53
- Low::Evaluator.evaluate(method_proxies: class_proxy.keyed_methods)
53
+ Low::Evaluator.evaluate(method_proxies: class_proxy.keyed_methods, class_binding: class_proxy.class_binding)
54
54
 
55
55
  klass.prepend Low::Redefiner.redefine(method_proxies: class_proxy.instance_methods, class_proxy:)
56
56
  klass.singleton_class.prepend Low::Redefiner.redefine(method_proxies: class_proxy.class_methods, class_proxy:)
data/lib/version.rb CHANGED
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Low
4
4
  module Type
5
- VERSION = '1.2.0'
5
+ VERSION = '1.3.0'
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: low_type
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - maedi