php_process 0.0.11 → 0.0.12

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.11
1
+ 0.0.12
@@ -287,7 +287,17 @@ class Php_process
287
287
  end
288
288
 
289
289
  @responses[id] = Queue.new
290
- @stdin.write("send:#{id}:#{str}\n")
290
+
291
+ begin
292
+ @stdin.write("send:#{id}:#{str}\n")
293
+ rescue Errno::EPIPE => e
294
+ #Wait for fatal error and then throw it.
295
+ Thread.pass
296
+ check_alive
297
+
298
+ #Or just throw the normal error.
299
+ raise e
300
+ end
291
301
 
292
302
  #Then return result.
293
303
  return read_result(id)
@@ -296,7 +306,20 @@ class Php_process
296
306
  #Searches for a result for a ID and returns it. Runs 'check_alive' to see if the process should be interrupted.
297
307
  def read_result(id)
298
308
  $stderr.print "Waiting for answer to ID: #{id}\n" if @debug
299
- resp = @responses[id].pop
309
+ check_alive
310
+
311
+ begin
312
+ resp = @responses[id].pop
313
+ rescue Exception => e
314
+ if e.class.name == "fatal"
315
+ #Wait for fatal error to be registered through thread and then throw it.
316
+ Thread.pass
317
+ check_alive
318
+ end
319
+
320
+ raise e
321
+ end
322
+
300
323
  @responses.delete(id)
301
324
  raise "#{resp["msg"]}\n\n#{resp["bt"]}" if resp.is_a?(Hash) and resp["type"] == "error"
302
325
  $stderr.print "Found answer #{id} - returning it.\n" if @debug
@@ -305,7 +328,7 @@ class Php_process
305
328
 
306
329
  #Checks if something is wrong. Maybe stdout got closed or a fatal error appeared on stderr?
307
330
  def check_alive
308
- raise "stdout closed." if @stdout and @stdout.closed?
331
+ raise "stdout closed." if !@stdout or @stdout.closed?
309
332
  raise @fatal if @fatal
310
333
  end
311
334
 
@@ -329,7 +329,38 @@ class php_process{
329
329
  "created_functions" => count($this->created_functions)
330
330
  ));
331
331
  }
332
+
333
+ //Makes errors being thrown as exceptions instead.
334
+ function error_handler($errno, $errmsg, $filename, $linenum, $vars, $args = null){
335
+ $errortypes = array (
336
+ E_ERROR => 'Error',
337
+ E_WARNING => 'Warning',
338
+ E_PARSE => 'Parsing Error',
339
+ E_NOTICE => 'Notice',
340
+ E_CORE_ERROR => 'Core Error',
341
+ E_CORE_WARNING => 'Core Warning',
342
+ E_COMPILE_ERROR => 'Compile Error',
343
+ E_COMPILE_WARNING => 'Compile Warning',
344
+ E_USER_ERROR => 'User Error',
345
+ E_USER_WARNING => 'User Warning',
346
+ E_USER_NOTICE => 'User Notice',
347
+ E_STRICT => 'Runtime Notice'
348
+ );
349
+
350
+ if ($errno == E_STRICT or $errno == E_NOTICE){
351
+ return null;
352
+ }
353
+
354
+ throw new exception("Error " . $errortypes[$errno] . ": " . $errmsg . " in \"" . $filename . ":" . $linenum);
355
+ }
332
356
  }
333
357
 
358
+ //Spawn the main object.
334
359
  $php_process = new php_process();
360
+
361
+ //Set error-level and make warnings and errors being thrown as exceptions.
362
+ set_error_handler(array($php_process, "error_handler"));
363
+ error_reporting(E_ALL ^ E_NOTICE ^ E_STRIC);
364
+
365
+ //Start listening for instructions from host process.
335
366
  $php_process->start_listening();
@@ -4,14 +4,14 @@
4
4
  # -*- encoding: utf-8 -*-
5
5
 
6
6
  Gem::Specification.new do |s|
7
- s.name = %q{php_process}
8
- s.version = "0.0.11"
7
+ s.name = "php_process"
8
+ s.version = "0.0.12"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Kasper Johansen"]
12
- s.date = %q{2012-10-17}
13
- s.description = %q{Spawns a PHP process and proxies calls to it, making it possible to proxy objects and more.}
14
- s.email = %q{k@spernj.org}
12
+ s.date = "2013-02-20"
13
+ s.description = "Spawns a PHP process and proxies calls to it, making it possible to proxy objects and more."
14
+ s.email = "k@spernj.org"
15
15
  s.extra_rdoc_files = [
16
16
  "LICENSE.txt",
17
17
  "README.rdoc"
@@ -29,13 +29,14 @@ Gem::Specification.new do |s|
29
29
  "lib/php_script.php",
30
30
  "php_process.gemspec",
31
31
  "spec/php_process_spec.rb",
32
- "spec/spec_helper.rb"
32
+ "spec/spec_helper.rb",
33
+ "spec/strip_error_spec.rb"
33
34
  ]
34
- s.homepage = %q{http://github.com/kaspernj/php_process}
35
+ s.homepage = "http://github.com/kaspernj/php_process"
35
36
  s.licenses = ["MIT"]
36
37
  s.require_paths = ["lib"]
37
- s.rubygems_version = %q{1.6.2}
38
- s.summary = %q{Ruby-to-PHP bridge}
38
+ s.rubygems_version = "1.8.25"
39
+ s.summary = "Ruby-to-PHP bridge"
39
40
 
40
41
  if s.respond_to? :specification_version then
41
42
  s.specification_version = 3
@@ -8,185 +8,222 @@ describe "PhpProcess" do
8
8
 
9
9
 
10
10
  #Spawn PHP-process.
11
- $php = Php_process.new(:debug => false, :debug_stderr => true)
12
-
13
-
14
- #It should be able to handle constants very fast by using cache.
15
- $php.func("define", "TEST_CONSTANT", 5)
16
- raise "Expected 'TEST_CONSTANT'-constant to exist but it didnt." if !$php.func("defined", "TEST_CONSTANT")
17
-
18
- Timeout.timeout(1) do
19
- 0.upto(10000) do
20
- const = $php.constant_val("TEST_CONSTANT")
21
- raise "Expected const to be 5 but it wasnt: #{const}." if const != 5
11
+ Php_process.new(:debug => false, :debug_stderr => true) do |php|
12
+ #It should be able to handle constants very fast by using cache.
13
+ php.func("define", "TEST_CONSTANT", 5)
14
+ raise "Expected 'TEST_CONSTANT'-constant to exist but it didnt." if !php.func("defined", "TEST_CONSTANT")
15
+
16
+ Timeout.timeout(1) do
17
+ 0.upto(10000) do
18
+ const = php.constant_val("TEST_CONSTANT")
19
+ raise "Expected const to be 5 but it wasnt: #{const}." if const != 5
20
+ end
22
21
  end
22
+
23
+
24
+ #Test function calls without arguments.
25
+ pid = php.func("getmypid")
26
+ raise "Invalid PID: #{pid}" if pid.to_i <= 0
27
+
28
+
29
+ #Test encoding.
30
+ test_str = "æøå"
31
+ php.func("file_put_contents", "/tmp/php_process_test_encoding", test_str)
32
+ test_str_read = File.read("/tmp/php_process_test_encoding")
33
+ raise "Expected the two strings to be the same, but they werent: '#{test_str}', '#{test_str_read}'." if test_str != test_str_read
34
+
35
+
36
+ #Test function calls with arguments.
37
+ res = php.func("explode", ";", "1;2;4;5")
38
+ raise "Expected length of result to be 4 but it wasnt: #{res.length}" if res.length != 4
39
+
40
+
41
+ #Test eval.
42
+ resp = php.eval("return array(1 => 2)")
43
+ raise "Expected hash: '#{resp.class.name}'." if !resp.is_a?(Hash)
44
+ raise "Expected key 1 to be 2: #{resp}." if resp[1] != 2
45
+
46
+
47
+ #Test spawn object and set instance variables.
48
+ proxy_obj = php.new("stdClass")
49
+ proxy_obj.__set_var("testvar", 5)
50
+ val = proxy_obj.__get_var("testvar")
51
+ raise "Expected val to be 5 but it wasnt: #{val}" if val != 5
52
+ proxy_obj = nil
53
+
54
+
55
+ #Test spawn require and method-calling on objects.
56
+ php.func("require_once", "knj/http.php")
57
+ http = php.new("knj_httpbrowser")
58
+ http.connect("www.partyworm.dk")
59
+ resp = http.get("/?show=frontpage")
60
+ raise "Expected length of HTML to be longer than 200: #{resp.to_s.length}" if resp.to_s.length < 200
61
+ http = nil
62
+
63
+
64
+ #Test Table-Writer.
65
+ php.func("require_once", "knj/table_writer.php")
66
+ php.func("require_once", "knj/csv.php")
67
+ tw = php.new("knj_table_writer", {
68
+ "filepath" => "/tmp/php_process_test.csv",
69
+ "format" => "csv",
70
+ "expl" => ";",
71
+ "surr" => '"',
72
+ "encoding" => "utf8"
73
+ })
74
+
75
+
76
+
77
+ #Check garbage collection, cache and stuff.
78
+ cache_info1 = php.object_cache_info
79
+ GC.start
80
+ php.flush_unset_ids(true)
81
+ cache_info2 = php.object_cache_info
82
+ raise "Cache count should be below #{cache_info1["count"]} but it wasnt: #{cache_info2}." if cache_info2["count"] >= cache_info1["count"]
23
83
  end
24
-
25
-
26
- #Test function calls without arguments.
27
- pid = $php.func("getmypid")
28
- raise "Invalid PID: #{pid}" if pid.to_i <= 0
29
-
30
-
31
- #Test encoding.
32
- test_str = "æøå"
33
- $php.func("file_put_contents", "/tmp/php_process_test_encoding", test_str)
34
- test_str_read = File.read("/tmp/php_process_test_encoding")
35
- raise "Expected the two strings to be the same, but they werent: '#{test_str}', '#{test_str_read}'." if test_str != test_str_read
36
-
37
-
38
- #Test function calls with arguments.
39
- res = $php.func("explode", ";", "1;2;4;5")
40
- raise "Expected length of result to be 4 but it wasnt: #{res.length}" if res.length != 4
41
-
42
-
43
- #Test eval.
44
- resp = $php.eval("return array(1 => 2)")
45
- raise "Expected hash: '#{resp.class.name}'." if !resp.is_a?(Hash)
46
- raise "Expected key 1 to be 2: #{resp}." if resp[1] != 2
47
-
48
-
49
- #Test spawn object and set instance variables.
50
- proxy_obj = $php.new("stdClass")
51
- proxy_obj.__set_var("testvar", 5)
52
- val = proxy_obj.__get_var("testvar")
53
- raise "Expected val to be 5 but it wasnt: #{val}" if val != 5
54
- proxy_obj = nil
55
-
56
-
57
- #Test spawn require and method-calling on objects.
58
- $php.func("require_once", "knj/http.php")
59
- http = $php.new("knj_httpbrowser")
60
- http.connect("www.partyworm.dk")
61
- resp = http.get("/?show=frontpage")
62
- raise "Expected length of HTML to be longer than 200: #{resp.to_s.length}" if resp.to_s.length < 200
63
- http = nil
64
-
65
-
66
- #Test Table-Writer.
67
- $php.func("require_once", "knj/table_writer.php")
68
- $php.func("require_once", "knj/csv.php")
69
- tw = $php.new("knj_table_writer", {
70
- "filepath" => "/tmp/php_process_test.csv",
71
- "format" => "csv",
72
- "expl" => ";",
73
- "surr" => '"',
74
- "encoding" => "utf8"
75
- })
76
-
77
-
78
- #Should be able to write 1000 rows in less than 5 sec.
79
- Timeout.timeout(5) do
80
- 0.upto(1000) do |i|
81
- #tw.write_row(["test#{i}", i, "test#{i}", i.to_f])
84
+ end
85
+
86
+ it "should be able to create functions and call them" do
87
+ Php_process.new(:debug => false, :debug_stderr => true) do |php|
88
+ #Test ability to create functions and do callbacks.
89
+ $callback_from_php = "test"
90
+ func = php.create_func do |arg|
91
+ $callback_from_php = arg
82
92
  end
93
+
94
+ #Send argument 'kasper' which will be what "$callback_from_php" will be changed to.
95
+ func.call("kasper")
96
+ sleep 0.1
97
+ raise "Expected callback from PHP to change variable but it didnt: '#{$callback_from_php}'." if $callback_from_php != "kasper"
83
98
  end
84
-
85
- tw.close
86
- tw = nil
87
-
99
+ end
100
+
101
+ it "should be able to show windows" do
102
+ Php_process.new(:debug => false, :debug_stderr => true) do |php|
103
+ #Try to play a little with GTK2-extension.
104
+ gtk_exists = true
105
+
106
+ begin
107
+ php.func("dl", "php_gtk2.so")
108
+ rescue
109
+ puts "Skipping Gtk-tests since PHP-GTK2 is not installed."
110
+ gtk_exists = false
111
+ end
112
+
113
+ if gtk_exists
114
+ win = php.new("GtkWindow")
115
+ win.set_title("Test")
88
116
 
89
- #Test PHPExcel.
90
- $php.func("require_once", "PHPExcel.php")
91
- tw = $php.new("knj_table_writer", {
92
- "filepath" => "/tmp/php_process_test.xlsx",
93
- "format" => "excel2007"
94
- })
95
-
96
-
97
- #Should be able to write 1000 rows in less than 5 sec.
98
- Timeout.timeout(5) do
99
- 0.upto(1000) do |i|
100
- #tw.write_row(["test#{i}", i, "test#{i}", i.to_f])
117
+ button = php.new("GtkButton")
118
+ button.set_label("Weee!")
119
+
120
+ win.add(button)
121
+ win.show_all
122
+ #php.static("Gtk", "main")
101
123
  end
102
124
  end
103
-
104
- tw.close
105
- tw = nil
106
-
107
-
108
- #Try some really advanced object-stuff.
109
- pe = $php.new("PHPExcel")
110
- pe.getProperties.setCreator("kaspernj")
111
- pe.setActiveSheetIndex(0)
112
-
113
- sheet = pe.getActiveSheet
114
-
115
- const_border_thick = $php.constant_val("PHPExcel_Style_Border::BORDER_THICK")
116
-
117
- sheet.getStyle("A1:C1").getBorders.getTop.setBorderStyle(const_border_thick)
118
- sheet.getStyle("A1:A5").getBorders.getLeft.setBorderStyle(const_border_thick)
119
- sheet.getStyle("A5:C5").getBorders.getBottom.setBorderStyle(const_border_thick)
120
- sheet.getStyle("C1:C5").getBorders.getRight.setBorderStyle(const_border_thick)
121
-
122
- sheet.setCellValue("A1", "Kasper Johansen - æøå")
123
- sheet.getStyle("A1").getFont.setBold(true)
124
-
125
- writer = $php.new("PHPExcel_Writer_Excel2007", pe)
126
- writer.save("/tmp/test_excel.xlsx")
127
-
128
- pe = nil
129
- sheet = nil
130
- writer = nil
131
-
132
-
133
- #Try to play a little with GTK2-extension.
134
- $php.func("dl", "php_gtk2.so")
135
- win = $php.new("GtkWindow")
136
- win.set_title("Test")
137
-
138
- button = $php.new("GtkButton")
139
- button.set_label("Weee!")
140
-
141
- win.add(button)
142
- win.show_all
143
- #$php.static("Gtk", "main")
144
-
145
-
146
- #Test ability to create functions and do callbacks.
147
- $callback_from_php = "test"
148
- func = $php.create_func do |arg|
149
- $callback_from_php = arg
150
- end
151
-
152
- #Send argument 'kasper' which will be what "$callback_from_php" will be changed to.
153
- func.call("kasper")
154
- sleep 0.1
155
- raise "Expected callback from PHP to change variable but it didnt: '#{$callback_from_php}'." if $callback_from_php != "kasper"
156
-
157
-
158
- #Check garbage collection, cache and stuff.
159
- cache_info1 = $php.object_cache_info
160
- GC.start
161
- $php.flush_unset_ids(true)
162
- cache_info2 = $php.object_cache_info
163
- raise "Cache count should be below #{cache_info1["count"]} but it wasnt: #{cache_info2}." if cache_info2["count"] >= cache_info1["count"]
164
-
165
-
166
- #Test thread-safety and more.
167
- ts = []
168
- 1.upto(25) do |tcount|
169
- ts << Thread.new do
170
- str = $php.func("substr", "Kasper Johansen", 0, 100)
171
-
172
- 0.upto(250) do
173
- kasper_str = $php.func("substr", str, 0, 6)
174
- johansen_str = $php.func("substr", str, 7, 15)
175
-
176
- raise "Expected 'Kasper' but got '#{kasper_str}'." if kasper_str != "Kasper"
177
- raise "Expected 'Johansen' but got '#{johansen_str}'." if johansen_str != "Johansen"
125
+ end
126
+
127
+ it "should survive a lot of threadded calls in a row" do
128
+ Php_process.new(:debug => false, :debug_stderr => true) do |php|
129
+ #Test thread-safety and more.
130
+ ts = []
131
+ 1.upto(25) do |tcount|
132
+ ts << Thread.new do
133
+ str = php.func("substr", "Kasper Johansen", 0, 100)
178
134
 
179
- STDOUT.print "."
135
+ 0.upto(250) do
136
+ kasper_str = php.func("substr", str, 0, 6)
137
+ johansen_str = php.func("substr", str, 7, 15)
138
+
139
+ raise "Expected 'Kasper' but got '#{kasper_str}'." if kasper_str != "Kasper"
140
+ raise "Expected 'Johansen' but got '#{johansen_str}'." if johansen_str != "Johansen"
141
+
142
+ #STDOUT.print "."
143
+ end
180
144
  end
181
145
  end
146
+
147
+ ts.each do |t|
148
+ t.join
149
+ end
182
150
  end
183
-
184
- ts.each do |t|
185
- t.join
151
+ end
152
+
153
+ it "should be able to load advanced libraries and do stuff with them (PHPExcel)" do
154
+ Php_process.new(:debug => false, :debug_stderr => true) do |php|
155
+ #Test PHPExcel.
156
+ php.func("require_once", "PHPExcel.php")
157
+ php.func("require_once", "knj/table_writer.php")
158
+
159
+ tw = php.new("knj_table_writer", {
160
+ "filepath" => "/tmp/php_process_test.xlsx",
161
+ "format" => "excel2007"
162
+ })
163
+
164
+ #Should be able to write 1000 rows in less than 5 sec.
165
+ Timeout.timeout(1.25) do
166
+ 0.upto(250) do |i|
167
+ tw.write_row(["test#{i}", i, "test#{i}", i.to_f])
168
+ end
169
+ end
170
+
171
+ tw.close
172
+ tw = nil
173
+
174
+ tw = php.new("knj_table_writer", {
175
+ "filepath" => "/tmp/php_process_test.xlsx",
176
+ "format" => "excel2007"
177
+ })
178
+
179
+ #Should be able to write 1000 rows in less than 5 sec.
180
+ Timeout.timeout(1.25) do
181
+ 0.upto(250) do |i|
182
+ tw.write_row(["test#{i}", i, "test#{i}", i.to_f])
183
+ end
184
+ end
185
+
186
+ tw.close
187
+ tw = nil
188
+
189
+ #Try some really advanced object-stuff.
190
+ pe = php.new("PHPExcel")
191
+ pe.getProperties.setCreator("kaspernj")
192
+ pe.setActiveSheetIndex(0)
193
+
194
+ sheet = pe.getActiveSheet
195
+
196
+ const_border_thick = php.constant_val("PHPExcel_Style_Border::BORDER_THICK")
197
+
198
+ sheet.getStyle("A1:C1").getBorders.getTop.setBorderStyle(const_border_thick)
199
+ sheet.getStyle("A1:A5").getBorders.getLeft.setBorderStyle(const_border_thick)
200
+ sheet.getStyle("A5:C5").getBorders.getBottom.setBorderStyle(const_border_thick)
201
+ sheet.getStyle("C1:C5").getBorders.getRight.setBorderStyle(const_border_thick)
202
+
203
+ sheet.setCellValue("A1", "Kasper Johansen - æøå")
204
+ sheet.getStyle("A1").getFont.setBold(true)
205
+
206
+ writer = php.new("PHPExcel_Writer_Excel2007", pe)
207
+ writer.save("/tmp/test_excel.xlsx")
208
+
209
+ pe = nil
210
+ sheet = nil
211
+ writer = nil
212
+ end
213
+ end
214
+
215
+ it "should catch calls to functions that does not exist" do
216
+ Php_process.new do |php|
217
+ success = false
218
+
219
+ begin
220
+ php.func("func_that_does_not_exist", "kasper")
221
+ success = true
222
+ rescue
223
+ #ignore - expected.
224
+ end
225
+
226
+ raise "Didnt expected call to go through without error." if success
186
227
  end
187
-
188
-
189
- #Destroy the object.
190
- $php.destroy
191
228
  end
192
229
  end
@@ -0,0 +1,11 @@
1
+ # coding: utf-8
2
+
3
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
4
+
5
+ describe "PhpProcess" do
6
+ it "should not do the strip error" do
7
+ php = Php_process.new(:debug => false)
8
+ php.func("require_once", "PHPExcel.php")
9
+ php.static("PHPExcel_IOFactory", "load", "#{File.dirname(__FILE__)}/../examples/example_phpexcel.xlsx")
10
+ end
11
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: php_process
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.11
4
+ version: 0.0.12
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,12 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-10-17 00:00:00.000000000 +02:00
13
- default_executable:
12
+ date: 2013-02-20 00:00:00.000000000 Z
14
13
  dependencies:
15
14
  - !ruby/object:Gem::Dependency
16
15
  name: php-serialize4ruby
17
- requirement: &15324340 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
18
17
  none: false
19
18
  requirements:
20
19
  - - ! '>='
@@ -22,10 +21,15 @@ dependencies:
22
21
  version: '0'
23
22
  type: :runtime
24
23
  prerelease: false
25
- version_requirements: *15324340
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
26
30
  - !ruby/object:Gem::Dependency
27
31
  name: wref
28
- requirement: &15323460 !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
29
33
  none: false
30
34
  requirements:
31
35
  - - ! '>='
@@ -33,10 +37,15 @@ dependencies:
33
37
  version: '0'
34
38
  type: :runtime
35
39
  prerelease: false
36
- version_requirements: *15323460
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
37
46
  - !ruby/object:Gem::Dependency
38
47
  name: tsafe
39
- requirement: &15322720 !ruby/object:Gem::Requirement
48
+ requirement: !ruby/object:Gem::Requirement
40
49
  none: false
41
50
  requirements:
42
51
  - - ! '>='
@@ -44,10 +53,15 @@ dependencies:
44
53
  version: '0'
45
54
  type: :runtime
46
55
  prerelease: false
47
- version_requirements: *15322720
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
48
62
  - !ruby/object:Gem::Dependency
49
63
  name: rspec
50
- requirement: &15322080 !ruby/object:Gem::Requirement
64
+ requirement: !ruby/object:Gem::Requirement
51
65
  none: false
52
66
  requirements:
53
67
  - - ~>
@@ -55,10 +69,15 @@ dependencies:
55
69
  version: 2.8.0
56
70
  type: :development
57
71
  prerelease: false
58
- version_requirements: *15322080
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: 2.8.0
59
78
  - !ruby/object:Gem::Dependency
60
79
  name: rdoc
61
- requirement: &15321440 !ruby/object:Gem::Requirement
80
+ requirement: !ruby/object:Gem::Requirement
62
81
  none: false
63
82
  requirements:
64
83
  - - ~>
@@ -66,10 +85,15 @@ dependencies:
66
85
  version: '3.12'
67
86
  type: :development
68
87
  prerelease: false
69
- version_requirements: *15321440
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ~>
92
+ - !ruby/object:Gem::Version
93
+ version: '3.12'
70
94
  - !ruby/object:Gem::Dependency
71
95
  name: bundler
72
- requirement: &15320700 !ruby/object:Gem::Requirement
96
+ requirement: !ruby/object:Gem::Requirement
73
97
  none: false
74
98
  requirements:
75
99
  - - ! '>='
@@ -77,10 +101,15 @@ dependencies:
77
101
  version: 1.0.0
78
102
  type: :development
79
103
  prerelease: false
80
- version_requirements: *15320700
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: 1.0.0
81
110
  - !ruby/object:Gem::Dependency
82
111
  name: jeweler
83
- requirement: &15320000 !ruby/object:Gem::Requirement
112
+ requirement: !ruby/object:Gem::Requirement
84
113
  none: false
85
114
  requirements:
86
115
  - - ~>
@@ -88,7 +117,12 @@ dependencies:
88
117
  version: 1.8.3
89
118
  type: :development
90
119
  prerelease: false
91
- version_requirements: *15320000
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ~>
124
+ - !ruby/object:Gem::Version
125
+ version: 1.8.3
92
126
  description: Spawns a PHP process and proxies calls to it, making it possible to proxy
93
127
  objects and more.
94
128
  email: k@spernj.org
@@ -111,7 +145,7 @@ files:
111
145
  - php_process.gemspec
112
146
  - spec/php_process_spec.rb
113
147
  - spec/spec_helper.rb
114
- has_rdoc: true
148
+ - spec/strip_error_spec.rb
115
149
  homepage: http://github.com/kaspernj/php_process
116
150
  licenses:
117
151
  - MIT
@@ -127,7 +161,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
127
161
  version: '0'
128
162
  segments:
129
163
  - 0
130
- hash: -3803288112951647499
164
+ hash: 4319029056344573155
131
165
  required_rubygems_version: !ruby/object:Gem::Requirement
132
166
  none: false
133
167
  requirements:
@@ -136,7 +170,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
136
170
  version: '0'
137
171
  requirements: []
138
172
  rubyforge_project:
139
- rubygems_version: 1.6.2
173
+ rubygems_version: 1.8.25
140
174
  signing_key:
141
175
  specification_version: 3
142
176
  summary: Ruby-to-PHP bridge