transparent-lua 0.3 → 0.4

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,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- MGMyY2IzNDkyY2I1NTVlYzU2YTlkMjdjM2UyM2U4ZjZmM2YyMTAyMg==
4
+ MTdjMDIwNDBlMGM4MWIxMmEyYmUyOTg0Mjg4OTkwYTY1MmE1NzIwOQ==
5
5
  data.tar.gz: !binary |-
6
- NjIwMzJjYjI1ZDBhMzQwNTJiNWY2ZWYwOGMzZjdhMjI1M2JjYzIzNg==
6
+ ZTM4YWIxODAzNDVmYjkzZTY1MmM1MTc0ZDFhMTMyOWM1YWE3OWE4Ng==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- ZDAzMTgwMjA5ZWZmYTMwMjUxNTU3ZmM5YzRkNjg5YmZkMzU3ZWNhZjBkN2U4
10
- NGRkOGZmMDZlNWU4NTM5YTQ4ZTg5Y2NiMmZhMTk2ODJkNGE2NzUzZDgzMjQ1
11
- MWNmOTc0Mjg1MWM4NTcwN2UyM2MxOTBiM2RmYTJkYjdhYTIwNTU=
9
+ NzkyNGMzNGNjNjI4OGZmZTk2NmI0NDM0ZGVlNzRiNTNkNDY5MjNiODA1ODgx
10
+ ZTA5MDI1OGMxZDdmNzY4ZmE5MTBmMDQ1NTFmMzc3ZDg5NDYwYzNiZjVhOTc4
11
+ NDYwMWQ4MTYwMWQyYzU4YmFkNTNiMTRiZDI0NjM5ZWVjOTJhMzg=
12
12
  data.tar.gz: !binary |-
13
- Y2M2ZDBiNDdkMTllN2I2OGFhZDgxNTMzNGE1MWY4YzhjNzUxZDhjOWExNjJi
14
- NmExY2VkZjJjYzUwZmRkNGY2Y2UzODM5ZTI3YmZiZDFjNTFmZGYwMTZjNzI2
15
- MzA3NGVkYzMwNmE0NTYyYWYyMWFkZmVhODNkODU4M2Q3ODQ0MDc=
13
+ ZmIwMjMxMjI2YmM4OTAyNTAwMWY2MTQ5YTRlZTY5YTQyYzcxYTMyZTBiZWZk
14
+ ZWQ3ZjVlMzFmNmRlMDcxNWViYWQ3ZDNjOTVlNmNiOWI3MmYxOGI0NmY4MzFm
15
+ YjJjZDA5OWU2MmYwNDNlNDU0NDg1ZGU5NzQwMDJhOWFiMDVhZmU=
@@ -83,4 +83,27 @@ Feature: Sandbox exposition
83
83
  When I execute the script
84
84
  Then it should return "#<Sandbox Member Class>"
85
85
 
86
+ Scenario: Requiring virtual files
87
+ Given an empty sandbox
88
+ And the following code executed in the sandbox:
89
+ """
90
+ def can_require_module?(modname)
91
+ modname == 'virtual_module'
92
+ end
93
+
94
+ def require_module(modname)
95
+ <<-EOMOD
96
+ function virtual_function()
97
+ return('Virtual return value')
98
+ end
99
+ EOMOD
100
+ end
101
+ """
102
+ And the following Lua script:
103
+ """
104
+ require('virtual_module');
105
+ return(virtual_function());
106
+ """
107
+ When I execute the script
108
+ Then it should return "Virtual return value"
86
109
 
@@ -32,8 +32,10 @@ Given(/^an? sandbox with an empty member class$/) do
32
32
  end
33
33
  end
34
34
 
35
- And(/^the following (?:method definition as part of|code executed in) the sandbox: (.*)$/) do |method_definition|
36
- @sandbox_class.class_eval(method_definition)
35
+ And(/^the following (?:method definition as part of|code executed in) the sandbox: ?(.*)$/) do |*args|
36
+ inline_code, text_code = *args
37
+ code = String(text_code).empty? ? String(inline_code) : String(text_code)
38
+ @sandbox_class.class_eval(code)
37
39
  end
38
40
 
39
41
  And(/^the following method definition as part of the member class: (.*)$/) do |method_definition|
@@ -46,6 +46,33 @@ class TransparentLua
46
46
  global_metatable['__newindex'] = newindex_table(sandbox) if leak_globals
47
47
 
48
48
  state._G.__metatable = global_metatable
49
+
50
+ state.package.loaders = Lua::Table.new(state)
51
+ state.package.loaders[1] = ->(modname) do
52
+ return "\n\tno module '#{modname}' available in sandbox" unless can_require_module? modname
53
+
54
+ loader = ->(modname) do
55
+ source = require_module(modname)
56
+ state.__eval(source, "=#{modname}")
57
+ true
58
+ end
59
+
60
+ state.package.loaded[modname] = loader
61
+ loader
62
+ end
63
+ end
64
+
65
+ def can_require_module?(modname)
66
+ return false unless sandbox.respond_to? :can_require_module?
67
+
68
+ sandbox.can_require_module? modname
69
+ end
70
+
71
+ def require_module(modname)
72
+ fail NoMethodError,
73
+ "#{sandbox} must respond to #require_module because it responds to #can_require_module?" unless sandbox.respond_to? :require_module
74
+
75
+ String(sandbox.require_module(modname))
49
76
  end
50
77
 
51
78
  def getter_table(object)
@@ -1,3 +1,3 @@
1
1
  class TransparentLua
2
- VERSION = 0.3
2
+ VERSION = 0.4
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: transparent-lua
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.3'
4
+ version: '0.4'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Christian Haase
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-07-09 00:00:00.000000000 Z
11
+ date: 2015-07-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rlua