evalhook 0.5.8 → 0.6.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.
data/CHANGELOG CHANGED
@@ -1,3 +1,5 @@
1
+ 0.6.0 Added dispose methods to allow freeing resources used by evalhook code
2
+
1
3
  0.5.8 Fixed issue #9 (block variables shadowing methods)
2
4
 
3
5
  0.5.7 Fixed methods with multiple lines (for new versions of ruby)
data/Rakefile CHANGED
@@ -6,7 +6,7 @@ require 'rake/testtask'
6
6
 
7
7
  spec = Gem::Specification.new do |s|
8
8
  s.name = 'evalhook'
9
- s.version = '0.5.8'
9
+ s.version = '0.6.0'
10
10
  s.author = 'Dario Seminara'
11
11
  s.email = 'robertodarioseminara@gmail.com'
12
12
  s.platform = Gem::Platform::RUBY
@@ -38,6 +38,21 @@ module EvalHook
38
38
  end
39
39
  end
40
40
 
41
+ class Packet
42
+ def initialize(partialruby_packet, global_variable_name)
43
+ @partialruby_packet = partialruby_packet
44
+ @global_variable_name = global_variable_name
45
+ end
46
+
47
+ def run(*args)
48
+ @partialruby_packet.run(*args)
49
+ end
50
+
51
+ def dispose
52
+ eval("#{@global_variable_name} = nil") if @global_variable_name
53
+ end
54
+ end
55
+
41
56
  class HookHandler
42
57
 
43
58
  include RedirectHelper
@@ -52,8 +67,12 @@ module EvalHook
52
67
  def partialruby_context
53
68
  unless @partialruby_context
54
69
  @partialruby_context = PartialRuby::Context.new
70
+
55
71
  @partialruby_context.pre_process do |tree|
56
- EvalHook::TreeProcessor.new(self).process(tree)
72
+ @global_variable_name = "$hook_handler_" + rand(10000000000).to_s
73
+ eval("#{@global_variable_name} = self")
74
+
75
+ EvalHook::TreeProcessor.new(self, @global_variable_name).process(tree)
57
76
  end
58
77
  end
59
78
  @partialruby_context
@@ -259,8 +278,24 @@ module EvalHook
259
278
  # 10.times do
260
279
  # pack.run
261
280
  # end
281
+ #
282
+ # pack.dispose
283
+ #
262
284
  def packet(code)
263
- partialruby_context.packet(code)
285
+ @global_variable_name = nil
286
+ partialruby_packet = partialruby_context.packet(code)
287
+
288
+ @all_packets ||= []
289
+ newpacket = EvalHook::Packet.new(partialruby_packet, @global_variable_name)
290
+ @all_packets << newpacket
291
+ newpacket
292
+ end
293
+
294
+ # Disposes all code packets created on this context
295
+ def dispose
296
+ if @all_packets
297
+ @all_packets.each(&:dispose)
298
+ end
264
299
  end
265
300
 
266
301
  if ($evalmimic_defined)
@@ -23,8 +23,9 @@ require "sexp_processor"
23
23
 
24
24
  module EvalHook
25
25
  class TreeProcessor < SexpProcessor
26
- def initialize(hook_handler)
26
+ def initialize(hook_handler, global_variable_name)
27
27
  super()
28
+ @hh_ref_global_name = global_variable_name
28
29
  @hook_handler = hook_handler
29
30
  @def_scope = Array.new
30
31
  self.require_empty = false
@@ -43,14 +44,6 @@ module EvalHook
43
44
  end
44
45
 
45
46
  def hook_handler_reference
46
- # create a global_variable name
47
- unless @hh_ref_global_name
48
- global_variable_name = "$hook_handler_" + rand(10000000000).to_s
49
- eval("#{global_variable_name} = @hook_handler")
50
-
51
- @hh_ref_global_name = global_variable_name.to_sym
52
- end
53
-
54
47
  s(:gvar, @hh_ref_global_name)
55
48
  end
56
49
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: evalhook
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.8
4
+ version: 0.6.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-01-22 00:00:00.000000000 Z
12
+ date: 2014-05-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: partialruby
16
- requirement: &80979140 !ruby/object:Gem::Requirement
16
+ requirement: &82974890 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0.3'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *80979140
24
+ version_requirements: *82974890
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: sexp_processor
27
- requirement: &80978710 !ruby/object:Gem::Requirement
27
+ requirement: &82973900 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,7 +32,7 @@ dependencies:
32
32
  version: '4.0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *80978710
35
+ version_requirements: *82973900
36
36
  description:
37
37
  email: robertodarioseminara@gmail.com
38
38
  executables: []