ruby.py 0.2.3 → 0.2.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (5) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +26 -6
  3. data/lib/ruby.py.rb +20 -9
  4. data/ruby.py.gemspec +2 -2
  5. metadata +6 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: dd15c1a595e3536950e59ad1342c75af9f65d094667a046c6280929a821cf9c8
4
- data.tar.gz: 97861ceaef80e441243f3acb556d86db19a4459d7077675361cbf444623909c5
3
+ metadata.gz: 9ce46083cff4ac53b8419633a9f0c7fb0a523037db836a4775e7745ca579ece8
4
+ data.tar.gz: 20fcffbfc2b6506733b5941e6b95f0717f9554e9eea7604713d79a47573d89b9
5
5
  SHA512:
6
- metadata.gz: f5fb6aa68bf57633cc6df7dbc39e5d830038544476df9f84bd6909392b6c39c52d857ed2661f51db050ed590b3469b53e590d1b4f87a49c6ea0eab45ebd5cd3a
7
- data.tar.gz: b3fdb0556653d1aaf7351b14f9d5c5f69880f5afaf9961d1cb3951a8420676689bf251be60c508258e29bb53031d432d33cd44c77c6cef5bc63056a2cae72d71
6
+ metadata.gz: 98d4cae7fe3344d147f9451c96469e1778348e70a1069d3ea1f2f063f21789e3715b4abb3b911f8e113b630dc838666d1fbf8797aa3e57b09c17e0e1973bf598
7
+ data.tar.gz: b05a1d7e0435d12b2906a2ea853ea319d886efd28e7a19f72a3f10604c8b7f93d8378267ca0ab4a2e2915b6c093ec732d36d8277b1ed1e49e4689b486c09a3b0
data/README.md CHANGED
@@ -1,6 +1,7 @@
1
1
  # Ruby.py
2
2
 
3
- Ruby wrapper for Python modules.
3
+ Ruby wrapper for Python modules (based on the (PyCall
4
+ gem)[https://rubygems.org/gems/pycall]).
4
5
 
5
6
  ## Installation
6
7
 
@@ -59,16 +60,35 @@ mul = tf.multiply(a, b)
59
60
  result = sess.run(add, feed_dict: { a => 2, b => 3 })
60
61
  ```
61
62
 
63
+ ## Support
64
+
65
+ Open an issue via [GitLab](https://gitlab.com/fjc/ruby.py) or email
66
+ [ruby.py@fjc-group.com](mailto:ruby.py@fjc-group.com).
67
+
68
+ ## Contributing
69
+
70
+ [gitlab.com:fjc/ruby.py](https://gitlab.com/fjc/ruby.py)
71
+
62
72
  ## Development
63
73
 
64
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
74
+ After checking out the repo, run `bin/setup` to install
75
+ dependencies. Then, run `rake spec` to run the tests. You can also run
76
+ `bin/console` for an interactive prompt that will allow you to experiment.
65
77
 
66
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
78
+ To test with an arbitrary version of pycall set the environment variable
79
+ `RUBYPY_PYCALL` to specify the version and re-bundle. E.g.
67
80
 
68
- ## Contributing
81
+ $ export RUBYPY_PYCALL="1.1.0.rc1"
82
+ $ bundle install
83
+ $ bundle exec rake spec
69
84
 
70
- https://gitlab.com/fjc/ruby.py
85
+ To install this gem onto your local machine, run `bundle exec rake
86
+ install`. To release a new version, update the version number in
87
+ `ruby.py.gemspec`, and then run `bundle exec rake release`, which will
88
+ create a git tag for the version, push git commits and tags, and push the
89
+ `.gem` file to [rubygems.org](https://rubygems.org).
71
90
 
72
91
  ## License
73
92
 
74
- The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
93
+ The gem is available as open source under the terms of the [MIT
94
+ License](https://opensource.org/licenses/MIT).
@@ -1,18 +1,30 @@
1
+ # rubocop:disable Performance/TimesMap
1
2
  # rubocop:disable Metrics/AbcSize
2
- # rubocop:disable Security/Eval
3
- # rubocop:disable Style/EvalWithLocation
4
3
 
5
4
  require 'pycall/import'
6
5
 
7
- # Ruby wrapper for Python modules.
6
+ # Ruby wrapper for Python modules (based on the PyCall gem).
8
7
  module RubyPy
8
+ # Import a _python.module_ as a _RubyPy::Python::Module_ using the
9
+ # _PyCall_ gem. Methods called on the Ruby module will be sent to
10
+ # the Python module.
9
11
  def self.import(pym)
12
+ # very simple filter to mitigate the risk of code injection attacks
10
13
  raise ArgumentError unless pym =~ /\A[-_.A-Za-z0-9]+\Z/
11
14
 
12
- mod = pym.split('.').map { |s| s.split('_').map(&:capitalize).join }
13
- mod.size.times { |i| eval "module #{mod[0..i].join('::')}; end" }
15
+ # convert a python.module.name to a [RubyPy::]Python::Module::Name
16
+ mod = pym.split('.').map do |segment|
17
+ segment.split('_').map(&:capitalize).join
18
+ end
14
19
 
15
- eval <<-EVAL
20
+ # create the [RubyPy::]Python::Module::Name hierarchy
21
+ create_module_hierarchy = \
22
+ mod.size.times.map { |i| "module #{mod[0..i].join('::')};end" }.join(';')
23
+ instance_eval(create_module_hierarchy, __FILE__, __LINE__)
24
+
25
+ # import the python module into an anonymous module and delegate to it
26
+ instance_eval("#{<<-"BEGIN"}\n#{<<-"NIGEB"}", __FILE__, __LINE__)
27
+ BEGIN
16
28
  module #{mod.join('::')}
17
29
  unless @pycall
18
30
  @pycall = Module.new do
@@ -34,10 +46,9 @@ module RubyPy
34
46
 
35
47
  self
36
48
  end
37
- EVAL
49
+ NIGEB
38
50
  end
39
51
  end
40
52
 
41
- # rubocop:enable Style/EvalWithLocation
42
- # rubocop:enable Security/Eval
43
53
  # rubocop:enable Metrics/AbcSize
54
+ # rubocop:enable Performance/TimesMap
@@ -3,7 +3,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
3
 
4
4
  Gem::Specification.new do |spec|
5
5
  spec.name = 'ruby.py'
6
- spec.version = '0.2.3'
6
+ spec.version = '0.2.4'
7
7
  spec.authors = ['Frank J. Cameron']
8
8
  spec.email = ['fjc@fastmail.net']
9
9
 
@@ -29,5 +29,5 @@ Gem::Specification.new do |spec|
29
29
  spec.add_development_dependency 'rspec', '~> 3.0'
30
30
  spec.add_development_dependency 'rubocop', '~> 0.57.2'
31
31
 
32
- spec.add_dependency 'pycall', '~> 1.0'
32
+ spec.add_dependency 'pycall', (ENV['RUBYPY_PYCALL'] || '~> 1.0')
33
33
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby.py
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 0.2.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Frank J. Cameron
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-07-07 00:00:00.000000000 Z
11
+ date: 2018-07-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -84,16 +84,16 @@ dependencies:
84
84
  name: pycall
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - "~>"
87
+ - - '='
88
88
  - !ruby/object:Gem::Version
89
- version: '1.0'
89
+ version: 1.1.0.rc1
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - "~>"
94
+ - - '='
95
95
  - !ruby/object:Gem::Version
96
- version: '1.0'
96
+ version: 1.1.0.rc1
97
97
  description: ''
98
98
  email:
99
99
  - fjc@fastmail.net