rubypython 0.3.2 → 0.5.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.
Files changed (51) hide show
  1. data/.autotest +3 -0
  2. data/.gemtest +0 -0
  3. data/.gitignore +13 -0
  4. data/.hgignore +14 -0
  5. data/.hgtags +7 -0
  6. data/.rspec +1 -1
  7. data/Contributors.rdoc +9 -0
  8. data/History.rdoc +148 -0
  9. data/{License.txt → License.rdoc} +7 -1
  10. data/Manifest.txt +15 -10
  11. data/PostInstall.txt +11 -4
  12. data/README.rdoc +272 -0
  13. data/Rakefile +107 -22
  14. data/autotest/discover.rb +1 -0
  15. data/lib/rubypython.rb +214 -120
  16. data/lib/rubypython/blankobject.rb +16 -14
  17. data/lib/rubypython/conversion.rb +242 -173
  18. data/lib/rubypython/legacy.rb +30 -31
  19. data/lib/rubypython/macros.rb +43 -34
  20. data/lib/rubypython/operators.rb +103 -101
  21. data/lib/rubypython/options.rb +41 -44
  22. data/lib/rubypython/pygenerator.rb +61 -0
  23. data/lib/rubypython/pymainclass.rb +46 -29
  24. data/lib/rubypython/pyobject.rb +193 -177
  25. data/lib/rubypython/python.rb +189 -176
  26. data/lib/rubypython/pythonerror.rb +54 -63
  27. data/lib/rubypython/pythonexec.rb +123 -0
  28. data/lib/rubypython/rubypyproxy.rb +213 -137
  29. data/lib/rubypython/type.rb +20 -0
  30. data/spec/basic_spec.rb +50 -0
  31. data/spec/callback_spec.rb +7 -17
  32. data/spec/conversion_spec.rb +7 -21
  33. data/spec/legacy_spec.rb +1 -16
  34. data/spec/pymainclass_spec.rb +6 -15
  35. data/spec/pyobject_spec.rb +39 -64
  36. data/spec/python_helpers/basics.py +20 -0
  37. data/spec/python_helpers/objects.py +24 -20
  38. data/spec/pythonerror_spec.rb +5 -17
  39. data/spec/refcnt_spec.rb +4 -10
  40. data/spec/rubypyclass_spec.rb +1 -11
  41. data/spec/rubypyproxy_spec.rb +45 -54
  42. data/spec/rubypython_spec.rb +45 -57
  43. data/spec/spec_helper.rb +49 -33
  44. metadata +87 -63
  45. data.tar.gz.sig +0 -0
  46. data/History.markdown +0 -97
  47. data/README.markdown +0 -105
  48. data/lib/rubypython/core_ext/string.rb +0 -7
  49. data/lib/rubypython/version.rb +0 -9
  50. data/spec/python_helpers/objects.pyc +0 -0
  51. metadata.gz.sig +0 -0
@@ -1,95 +1,83 @@
1
1
  require File.dirname(__FILE__) + '/spec_helper.rb'
2
2
 
3
3
  describe RubyPython do
4
-
5
- before do
6
- RubyPython.start
7
- end
8
-
9
- after do
10
- RubyPython.start
11
- end
12
-
13
4
  describe "#import" do
14
- it "handles multiple imports" do
5
+ it "should handle multiple imports" do
15
6
  lambda do
16
7
  RubyPython.import 'cPickle'
17
8
  RubyPython.import 'urllib'
18
9
  end.should_not raise_exception
19
10
  end
20
11
 
21
- it "propagates Python errors" do
12
+ it "should propagate Python errors" do
22
13
  lambda do
23
14
  RubyPython.import 'nonExistentModule'
24
15
  end.should raise_exception(RubyPython::PythonError)
25
16
  end
26
17
 
27
- it "returns a RubyPyModule" do
18
+ it "should return a RubyPyModule" do
28
19
  RubyPython.import('urllib2').should be_a(RubyPython::RubyPyModule)
29
20
  end
30
21
  end
31
-
32
22
  end
33
23
 
34
- describe RubyPython, "#session" do
24
+ describe RubyPython, :self_start => true do
35
25
 
36
- it "starts interpreter" do
37
- RubyPython.session do
38
- cPickle = RubyPython.import "cPickle"
39
- cPickle.loads("(dp1\nS'a'\nS'n'\ns(I1\nS'2'\ntp2\nI4\ns.").rubify.should == {"a"=>"n", [1, "2"]=>4}
26
+ describe "#session" do
27
+ it "should start interpreter" do
28
+ RubyPython.session do
29
+ cPickle = RubyPython.import "cPickle"
30
+ cPickle.loads("(dp1\nS'a'\nS'n'\ns(I1\nS'2'\ntp2\nI4\ns.").rubify.should == {"a"=>"n", [1, "2"]=>4}
31
+ end
40
32
  end
41
- end
42
33
 
43
- it "stops the interpreter" do
44
- RubyPython.session do
45
- cPickle = RubyPython.import "cPickle"
46
- end
34
+ it "should stop the interpreter" do
35
+ RubyPython.session do
36
+ cPickle = RubyPython.import "cPickle"
37
+ end
47
38
 
48
- RubyPython.stop.should be_false
39
+ RubyPython.stop.should be_false
40
+ end
49
41
  end
50
- end
51
42
 
52
- describe RubyPython, "#run" do
43
+ describe "#run" do
44
+ it "should start interpreter" do
45
+ RubyPython.run do
46
+ cPickle = import "cPickle"
47
+ cPickle.loads("(dp1\nS'a'\nS'n'\ns(I1\nS'2'\ntp2\nI4\ns.").rubify.should == {"a"=>"n", [1, "2"]=>4}
48
+ end
49
+ end
50
+
51
+ it "should stop the interpreter" do
52
+ RubyPython.run do
53
+ cPickle = import "cPickle"
54
+ end
53
55
 
54
- it "starts interpreter" do
55
- RubyPython.run do
56
- cPickle = import "cPickle"
57
- cPickle.loads("(dp1\nS'a'\nS'n'\ns(I1\nS'2'\ntp2\nI4\ns.").rubify.should == {"a"=>"n", [1, "2"]=>4}
56
+ RubyPython.stop.should be_false
58
57
  end
59
58
  end
60
59
 
61
- it "stops the interpreter" do
62
- RubyPython.run do
63
- cPickle = import "cPickle"
60
+ describe '#reload_library', :slow => true do
61
+ it 'leaves RubyPython in a stable state' do
62
+ lambda do
63
+ RubyPython.instance_eval { reload_library }
64
+ RubyPython.run {}
65
+ end.should_not raise_exception
64
66
  end
65
-
66
- RubyPython.stop.should be_false
67
67
  end
68
68
 
69
- end
69
+ describe '.configure', :slow => true do
70
+ it 'allows python executable to be specified', :unless => `which python2.6`.empty? do
71
+ RubyPython.configure :python_exe => 'python2.6'
72
+ RubyPython.run do
73
+ sys = RubyPython.import 'sys'
74
+ sys.version.rubify.to_f.should == 2.6
75
+ end
76
+ end
70
77
 
71
- describe RubyPython, '#reload_library', :slow => true do
72
- it 'leaves RubyPython in a stable state' do
73
- lambda do
78
+ after(:all) do
79
+ RubyPython.clear_options
74
80
  RubyPython.instance_eval { reload_library }
75
- RubyPython.run {}
76
- end.should_not raise_exception
77
- end
78
-
79
- end
80
-
81
- describe RubyPython, '.configure', :slow => true do
82
- it 'allows python executable to be specified', :unless => `which python2.6`.empty? do
83
- RubyPython.configure :python_exe => 'python2.6'
84
- RubyPython.run do
85
- sys = RubyPython.import 'sys'
86
- sys.version.rubify.to_f.should == 2.6
87
81
  end
88
-
89
- end
90
-
91
- after(:all) do
92
- RubyPython.clear_options
93
- RubyPython.instance_eval { reload_library }
94
82
  end
95
83
  end
data/spec/spec_helper.rb CHANGED
@@ -1,49 +1,65 @@
1
1
  begin
2
2
  require 'rspec'
3
- require 'ffi'
4
3
  rescue LoadError
5
4
  require 'rubygems' unless ENV['NO_RUBYGEMS']
6
- gem 'rspec'
7
5
  require 'rspec'
8
- require 'ffi'
9
6
  end
10
7
 
11
- $:.unshift(File.dirname(__FILE__) + '/../lib')
8
+ dir = File.dirname(__FILE__)
9
+
10
+ $:.unshift(File.join(dir, '..', 'lib'))
12
11
  require 'rubypython'
13
12
 
14
13
  module TestConstants
15
- #REDEFINE THESE SO THEY ARE VISIBILE
16
- AString = "STRING"
17
- AnInt = 1
18
- AChar = 'a'
19
- AFloat = 1.0
20
- AnArray = [AnInt, AChar, AFloat, AString]
21
- ASym = :sym
22
- AHash = {
23
- AnInt => AnInt,
24
- AChar.to_sym => AChar,
25
- ASym => AFloat,
26
- AString => AString
27
- }
28
- AConvertedHash = Hash[*AHash.map do |k, v|
29
- key = k.is_a?(Symbol)? k.to_s : k
30
- [key,v]
31
- end.flatten]
32
-
33
- AProc = Proc.new { |a1, a2| a1 + a2 }
34
-
35
- def self.a_method(a1, a2)
36
- a1 + a2
37
- end
38
-
39
- AMethod = method(:a_method)
40
-
14
+ AString = "STRING"
15
+ AStringWithNULLs = "STRING\0WITH\0NULLS"
16
+ AnInt = 1
17
+ AChar = 'a'
18
+ AFloat = 1.0
19
+ AnArray = [AnInt, AChar, AFloat, AString]
20
+ ASym = :sym
21
+ AHash = {
22
+ AnInt => AnInt,
23
+ AChar.to_sym => AChar,
24
+ ASym => AFloat,
25
+ AString => AString
26
+ }
27
+ AConvertedHash = Hash[*AHash.map do |k, v|
28
+ key = k.is_a?(Symbol) ? k.to_s : k
29
+ [key, v]
30
+ end.flatten]
31
+ AProc = Proc.new { |a1, a2| a1 + a2 }
32
+ def self.a_method(a1, a2)
33
+ a1 + a2
34
+ end
35
+ AMethod = method(:a_method)
41
36
  end
42
37
 
43
38
  def run_python_command(cmd)
44
- IO.popen("python -c '#{cmd}'") { |f| f.gets.chomp}
39
+ %x(python -c '#{cmd}').chomp
45
40
  end
46
41
 
47
- class RubyPython::RubyPyProxy
48
- [:should, :should_not, :class].each { |m| reveal(m) }
42
+ RSpec.configure do |config|
43
+ if RUBY_VERSION < '1.9.2'
44
+ config.filter_run_excluding :ruby_version => '1.9'
45
+ end
46
+
47
+ config.before(:all) do
48
+ class RubyPython::RubyPyProxy
49
+ [:should, :should_not, :class].each { |m| reveal(m) }
50
+ end
51
+ end
52
+
53
+ config.before(:all, :self_start => nil) do
54
+ RubyPython.start
55
+
56
+ @sys = RubyPython.import 'sys'
57
+ @sys.path.append File.join(dir, 'python_helpers')
58
+ @objects = RubyPython.import 'objects'
59
+ @basics = RubyPython.import 'basics'
60
+ end
61
+
62
+ config.after(:all) do
63
+ RubyPython.stop
64
+ end
49
65
  end
metadata CHANGED
@@ -1,42 +1,23 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubypython
3
3
  version: !ruby/object:Gem::Version
4
- hash: 23
4
+ hash: 11
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 3
9
- - 2
10
- version: 0.3.2
8
+ - 5
9
+ - 0
10
+ version: 0.5.0
11
11
  platform: ruby
12
12
  authors:
13
+ - Steeve Morin
14
+ - Austin Ziegler
13
15
  - Zach Raines
14
16
  autorequire:
15
17
  bindir: bin
16
- cert_chain:
17
- - |
18
- -----BEGIN CERTIFICATE-----
19
- MIIDSDCCAjCgAwIBAgIBADANBgkqhkiG9w0BAQUFADBKMRwwGgYDVQQDDBNyYWlu
20
- ZXN6bV9ydWJ5cHl0aG9uMRUwEwYKCZImiZPyLGQBGRYFZ21haWwxEzARBgoJkiaJ
21
- k/IsZAEZFgNjb20wHhcNMTAwODA4MDI0NTMwWhcNMTEwODA4MDI0NTMwWjBKMRww
22
- GgYDVQQDDBNyYWluZXN6bV9ydWJ5cHl0aG9uMRUwEwYKCZImiZPyLGQBGRYFZ21h
23
- aWwxEzARBgoJkiaJk/IsZAEZFgNjb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
24
- ggEKAoIBAQDPSmmxYqWWN53XrD4btZ08twipRz5priTFtwmKL01WfhHa66OhDoV2
25
- OPtW0RoWegZ5gti/gJ67P6IVl1yBekfV581yHsZqV7VqcOkDbT93F3HuTLH12d1C
26
- w/OhHoGZUURedNeSMjKmMSlCCD4rzCfXTeAEU6E3rXh3u2AD7kQfeYcZA/u0YgrD
27
- lS3c2oX3GvJHjd4hV5hIGgOGXDxcgH5S1iO6588SBxLN+xdYC82w09e5r09tBvo3
28
- BXZlsErwuWRI8Ha7y6thbrB28GS5jI378ew4kSUS/1T9Sz4EcPmhyhyCeXvvsdCm
29
- 4BvNPMBl/yP2fhcubMD/Q0t9Ia9chVc3AgMBAAGjOTA3MAkGA1UdEwQCMAAwHQYD
30
- VR0OBBYEFNLncU/Kj1RRsjb5blAhik0hgvKCMAsGA1UdDwQEAwIEsDANBgkqhkiG
31
- 9w0BAQUFAAOCAQEAj8z1kRS/1sHU2yRZothKrgsOLoDxF1+uYq909rS2d6FqOJbt
32
- V08JaOil/eMlTjPk7nBUU9OZlNmb8oD0Wt2Lgv9GFMJJm0mch767Nk3h1t9qiJJC
33
- v4Ida7e6+ArAcHExQx/lul2jJCWezgIVxz9T9unOfvylOyXwAHV4EEK47EeU1TZV
34
- T4cMl2JyytBtjCPydVJGfirxlM7aTMOZ6FvUbCiFvHaymAgoOVZmm7NpE6GsMT7g
35
- 1b1UcQqvLqyp9gdB3jVeb7JnTLY+WlHWt2rFVbeqv7KtJlp7+4uWMKkzTbW/ujdG
36
- cguJMiQCSOlUPZxCWWMkjfZbXvtS5VdzJevSqQ==
37
- -----END CERTIFICATE-----
18
+ cert_chain: []
38
19
 
39
- date: 2011-02-02 00:00:00 -05:00
20
+ date: 2011-03-17 00:00:00 -04:00
40
21
  default_executable:
41
22
  dependencies:
42
23
  - !ruby/object:Gem::Dependency
@@ -45,14 +26,14 @@ dependencies:
45
26
  requirement: &id001 !ruby/object:Gem::Requirement
46
27
  none: false
47
28
  requirements:
48
- - - ">="
29
+ - - ~>
49
30
  - !ruby/object:Gem::Version
50
- hash: 1
31
+ hash: 25
51
32
  segments:
33
+ - 1
52
34
  - 0
53
- - 6
54
- - 3
55
- version: 0.6.3
35
+ - 7
36
+ version: 1.0.7
56
37
  type: :runtime
57
38
  version_requirements: *id001
58
39
  - !ruby/object:Gem::Dependency
@@ -78,7 +59,7 @@ dependencies:
78
59
  requirement: &id003 !ruby/object:Gem::Requirement
79
60
  none: false
80
61
  requirements:
81
- - - ">="
62
+ - - ~>
82
63
  - !ruby/object:Gem::Version
83
64
  hash: 3
84
65
  segments:
@@ -87,73 +68,116 @@ dependencies:
87
68
  version: "2.0"
88
69
  type: :development
89
70
  version_requirements: *id003
90
- description: A bridge between ruby and python
71
+ - !ruby/object:Gem::Dependency
72
+ name: tilt
73
+ prerelease: false
74
+ requirement: &id004 !ruby/object:Gem::Requirement
75
+ none: false
76
+ requirements:
77
+ - - ~>
78
+ - !ruby/object:Gem::Version
79
+ hash: 15
80
+ segments:
81
+ - 1
82
+ - 0
83
+ version: "1.0"
84
+ type: :development
85
+ version_requirements: *id004
86
+ - !ruby/object:Gem::Dependency
87
+ name: hoe
88
+ prerelease: false
89
+ requirement: &id005 !ruby/object:Gem::Requirement
90
+ none: false
91
+ requirements:
92
+ - - ">="
93
+ - !ruby/object:Gem::Version
94
+ hash: 41
95
+ segments:
96
+ - 2
97
+ - 9
98
+ - 1
99
+ version: 2.9.1
100
+ type: :development
101
+ version_requirements: *id005
102
+ description: |-
103
+ RubyPython is a bridge between the Ruby and Python interpreters. It embeds a
104
+ running Python interpreter in the Ruby application's process using FFI and
105
+ provides a means for wrapping, converting, and calling Python objects and
106
+ methods.
107
+
108
+ RubyPython uses FFI to marshal the data between the Ruby and Python VMs and
109
+ make Python calls. You can:
110
+
111
+ * Inherit from Python classes.
112
+ * Configure callbacks from Python.
113
+ * Run Python generators (on Ruby 1.9.2 or later).
91
114
  email:
115
+ - swiuzzz+rubypython@gmail.com
116
+ - austin@rubyforge.org
92
117
  - raineszm+rubypython@gmail.com
93
118
  executables: []
94
119
 
95
120
  extensions: []
96
121
 
97
122
  extra_rdoc_files:
98
- - License.txt
99
123
  - Manifest.txt
100
124
  - PostInstall.txt
101
- - History.markdown
125
+ - Contributors.rdoc
126
+ - History.rdoc
127
+ - License.rdoc
128
+ - README.rdoc
102
129
  files:
103
- - History.markdown
104
- - License.txt
130
+ - .autotest
131
+ - .gitignore
132
+ - .hgignore
133
+ - .hgtags
134
+ - .rspec
135
+ - Contributors.rdoc
136
+ - History.rdoc
137
+ - License.rdoc
105
138
  - Manifest.txt
106
139
  - PostInstall.txt
107
- - README.markdown
140
+ - README.rdoc
108
141
  - Rakefile
109
- - .rspec
142
+ - autotest/discover.rb
110
143
  - lib/rubypython.rb
111
144
  - lib/rubypython/blankobject.rb
112
145
  - lib/rubypython/conversion.rb
113
- - lib/rubypython/core_ext/string.rb
114
146
  - lib/rubypython/legacy.rb
115
147
  - lib/rubypython/macros.rb
116
148
  - lib/rubypython/operators.rb
117
149
  - lib/rubypython/options.rb
150
+ - lib/rubypython/pygenerator.rb
118
151
  - lib/rubypython/pymainclass.rb
119
152
  - lib/rubypython/pyobject.rb
120
153
  - lib/rubypython/python.rb
121
154
  - lib/rubypython/pythonerror.rb
155
+ - lib/rubypython/pythonexec.rb
122
156
  - lib/rubypython/rubypyproxy.rb
123
- - lib/rubypython/version.rb
157
+ - lib/rubypython/type.rb
158
+ - spec/basic_spec.rb
124
159
  - spec/callback_spec.rb
125
160
  - spec/conversion_spec.rb
126
161
  - spec/legacy_spec.rb
127
162
  - spec/pymainclass_spec.rb
128
163
  - spec/pyobject_spec.rb
164
+ - spec/python_helpers/basics.py
129
165
  - spec/python_helpers/objects.py
130
- - spec/python_helpers/objects.pyc
131
166
  - spec/pythonerror_spec.rb
132
167
  - spec/refcnt_spec.rb
133
168
  - spec/rubypyclass_spec.rb
134
169
  - spec/rubypyproxy_spec.rb
135
170
  - spec/rubypython_spec.rb
136
171
  - spec/spec_helper.rb
137
- has_rdoc: yard
138
- homepage: http://bitbucket.org/raineszm/rubypython/
172
+ - .gemtest
173
+ has_rdoc: true
174
+ homepage:
139
175
  licenses: []
140
176
 
141
- post_install_message: |+
142
- A number of things have changed with version 0.3.0. If you are upgrading from a previous version of RubyPython, you should check the docs for instructions on how to get your code working with the new version of RubyPython.
143
-
144
- For more information on RubyPython, see http://raineszm.bitbucket.org/rubypython/index.html
145
-
146
- If you find a bug, or have any suggestions, email me at: raineszm+rubypython@gmail.com
147
-
148
- If you would like to help develop RubyPython, also send me an email.
149
-
150
-
177
+ post_install_message:
151
178
  rdoc_options:
152
- - --markup
153
- - markdown
154
- - --title
155
- - RubyPython Documentation
156
- - --quiet
179
+ - --main
180
+ - README.rdoc
157
181
  require_paths:
158
182
  - lib
159
183
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -175,11 +199,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
175
199
  - 0
176
200
  version: "0"
177
201
  requirements:
178
- - Python, ~>2.4
202
+ - Python, ~> 2.4
179
203
  rubyforge_project: rubypython
180
- rubygems_version: 1.4.2
204
+ rubygems_version: 1.5.2
181
205
  signing_key:
182
206
  specification_version: 3
183
- summary: A bridge between ruby and python
207
+ summary: RubyPython is a bridge between the Ruby and Python interpreters
184
208
  test_files: []
185
209