iruby 0.7.3 → 0.7.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ea24babb0bbbb88c3a3bacfbb2ca4438903d9cffa1e6609976e066cfa3e72ff5
4
- data.tar.gz: 428513fab78f77f82632f3d66cbd2dc6a81344ea781c213164af038530ecf90e
3
+ metadata.gz: 8e37561d8cd48b57f5ad431cfdf984306e638a262113f2cb741cf3a7d7a8e2e1
4
+ data.tar.gz: b1cd1da09bd9a6158749225e0097f92442ec5d600ab6f40a6189b50d0f2a4bb6
5
5
  SHA512:
6
- metadata.gz: 1d451a1d683ef25e3f1beeb235db1a2c082199b1a3196b3fa3c1468c505f2d7406931cdc03f678ee0b792f8b7fdf7ffe75979e9f5c2e1470c83a9c8cc1f7fc05
7
- data.tar.gz: 2ff9d61912037029eb3b6c087d129cee9b4473f825b51a492e165ee40e0370c46bc2b41159f8f8510f0e083c1c2bb200c46b6fa1ea18c5d11f4e12bf5c61416b
6
+ metadata.gz: 6f70bdf2fa9da79a2e072f8a27ae729f5656a02a1d34a14bdd01287a16bfe257732875fc7a76db3f498cfd25cf49f4a9aa5ce2c82040ec90082bfca5e5d2f4e2
7
+ data.tar.gz: 789fe4b197775ef1245e96db8ac039a0df166898652c689ce2f66a7eb25db99a5f4806bccb7b76cc52cbdc7c4e6a3749eebda903b586b170842c9630f50af082
@@ -0,0 +1,124 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - master
7
+ pull_request:
8
+ types:
9
+ - opened
10
+ - synchronize
11
+ - reopened
12
+
13
+ jobs:
14
+ ubuntu:
15
+ name: Ubuntu
16
+ runs-on: ${{ matrix.os }}
17
+
18
+ strategy:
19
+ fail-fast: false
20
+ matrix:
21
+ os:
22
+ - ubuntu-latest
23
+ ruby:
24
+ - "3.0"
25
+ - "2.7"
26
+ - "2.6"
27
+ - "2.5"
28
+ - "2.4"
29
+ - "2.3"
30
+ - debug
31
+
32
+ steps:
33
+ - uses: actions/checkout@v2
34
+ with:
35
+ fetch-depth: 1
36
+
37
+ - uses: ruby/setup-ruby@v1
38
+ with:
39
+ ruby-version: ${{ matrix.ruby }}
40
+
41
+ - run: rake build
42
+
43
+ - name: Install irb for old Ruby
44
+ if: |
45
+ matrix.ruby == '2.5' ||
46
+ matrix.ruby == '2.4' ||
47
+ matrix.ruby == '2.3'
48
+ run: |
49
+ cat <<GEMFILE > Gemfile.irb
50
+ source 'https://rubygems.org'
51
+ gem 'irb'
52
+ GEMFILE
53
+ BUNDLE_GEMFILE=Gemfile.irb bundle install --jobs 4 --retry 3
54
+
55
+ - run: gem install pkg/*.gem
56
+
57
+ - run: ruby -r iruby -e "p IRuby::SessionAdapter.select_adapter_class"
58
+ env:
59
+ IRUBY_SESSION_ADAPTER: ffi-rzmq
60
+
61
+ - name: Install requirements on ubuntu
62
+ run: |
63
+ sudo apt update
64
+ sudo apt install -y --no-install-recommends \
65
+ libczmq-dev \
66
+ python3 \
67
+ python3-pip \
68
+ python3-setuptools
69
+ sudo pip3 install wheel
70
+ sudo pip3 install -r ci/requirements.txt
71
+
72
+ - run: bundle install --jobs 4 --retry 3
73
+
74
+ - name: Run tests
75
+ env:
76
+ PYTHON: python3
77
+ ADAPTERS: cztop ffi-rzmq
78
+ run: |
79
+ for adapter in $ADAPTERS; do
80
+ export IRUBY_TEST_SESSION_ADAPTER_NAME=$adapter
81
+ bundle exec rake test TESTOPTS=-v
82
+ done
83
+
84
+ windows:
85
+ name: Windows
86
+ runs-on: windows-latest
87
+
88
+ steps:
89
+ - uses: actions/checkout@v2
90
+ with:
91
+ fetch-depth: 1
92
+
93
+ - uses: ruby/setup-ruby@v1
94
+ with:
95
+ ruby-version: "3.0"
96
+
97
+ - run: rake build
98
+
99
+ - run: gem install pkg/*.gem
100
+
101
+ - run: ruby -r iruby -e "p IRuby::SessionAdapter.select_adapter_class"
102
+ env:
103
+ IRUBY_SESSION_ADAPTER: ffi-rzmq
104
+
105
+ macos:
106
+ name: macOS
107
+ runs-on: macos-latest
108
+
109
+ steps:
110
+ - uses: actions/checkout@v2
111
+ with:
112
+ fetch-depth: 1
113
+
114
+ - uses: ruby/setup-ruby@v1
115
+ with:
116
+ ruby-version: "3.0"
117
+
118
+ - run: rake build
119
+
120
+ - run: gem install pkg/*.gem
121
+
122
+ - run: ruby -r iruby -e "p IRuby::SessionAdapter.select_adapter_class"
123
+ env:
124
+ IRUBY_SESSION_ADAPTER: ffi-rzmq
data/CHANGES.md CHANGED
@@ -1,3 +1,11 @@
1
+ # 0.7.4 (2021-08-16)
2
+
3
+ ## Enhancements
4
+
5
+ * Install zeromq library automatically https://github.com/SciRuby/iruby/pull/307, https://github.com/SciRuby/iruby/pull/308 (@mrkn, @kou)
6
+ * Remove pyzmq session adapter (@mrkn)
7
+ * Make cztop session adapter deprecated (@mrkn)
8
+
1
9
  # 0.7.3 (2021-07-08)
2
10
 
3
11
  ## Bug Fixes
data/README.md CHANGED
@@ -21,67 +21,53 @@ https://mybinder.org/v2/gh/RubyData/binder/master?filepath=../lab
21
21
  ### Requirements
22
22
 
23
23
  * [Jupyter](https://jupyter.org)
24
- * One of the following is required
25
- * [ffi-rzmq](https://github.com/chuckremes/ffi-rzmq) and [libzmq](https://github.com/zeromq/libzmq)
26
- * [CZTop](https://gitlab.com/paddor/cztop) and [CZMQ](https://github.com/zeromq/czmq)
27
24
 
28
- If both ffi-rzmq and cztop are installed, ffi-rzmq is used. If you prefer cztop, set the following environment variable.
25
+ The following requirements are automatically installed.
29
26
 
30
- ```sh
31
- export IRUBY_SESSION_ADAPTER="cztop"
32
- ```
27
+ * [ffi-rzmq](https://github.com/chuckremes/ffi-rzmq)
28
+ * [libzmq](https://github.com/zeromq/libzmq)
29
+
30
+ The following dependencies are optional.
33
31
 
34
32
  * [Pry][Pry], if you want to use [Pry][Pry] instead of IRB for the code execution backend
35
- * If you want to install the development version of IRuby from the source code, try [specific_install](https://github.com/rdp/specific_install).
36
33
 
37
- ```
38
- gem specific_install https://github.com/SciRuby/iruby
39
- ```
40
34
 
41
- ### Ubuntu
35
+ ### Installing Jupyter Notebook and/or JupyterLab
42
36
 
43
- Install Jupyter.
37
+ See the official document to know how to install Jupyter Notebook and/or JupyterLab.
38
+
39
+ * https://jupyter.readthedocs.io/en/latest/install/notebook-classic.html
40
+ * https://jupyter.readthedocs.io/en/latest/install.html
41
+
42
+ ### Ubuntu
44
43
 
45
44
  #### Ubuntu 17+
46
45
 
47
46
  ```shell
48
47
  sudo apt install libtool libffi-dev ruby ruby-dev make
49
- sudo apt install libzmq3-dev libczmq-dev
50
48
 
51
- gem install ffi-rzmq
52
- gem install iruby --pre
49
+ gem install --user-install iruby
53
50
  iruby register --force
54
51
  ```
55
52
 
56
53
  #### Ubuntu 16
57
54
 
58
- CZTop requires CZMQ >= 4.0.0 and ZMQ >= 4.2.0. The official packages for Ubuntu 16.04 don't satisfy these version requrements, so you need to install from source.
55
+ The latest IRuby requires Ruby >= 2.4 while Ubuntu's official Ruby package is version 2.3.
56
+ So you need to install Ruby >= 2.4 by yourself before preparing IRuby.
57
+ We recommend to use rbenv.
59
58
 
60
59
  ```shell
61
60
  sudo apt install libtool libffi-dev ruby ruby-dev make
62
- sudo apt install git libzmq-dev autoconf pkg-config
63
- git clone https://github.com/zeromq/czmq
64
- cd czmq
65
- ./autogen.sh && ./configure && sudo make && sudo make install
66
-
67
- gem install cztop
68
- gem install iruby --pre
61
+ gem install --user-install iruby
69
62
  iruby register --force
70
63
  ```
71
64
 
72
65
  ### Windows
73
66
 
74
- Install git and Jupyter.
75
67
  [DevKit](https://rubyinstaller.org/add-ons/devkit.html) is necessary for building RubyGems with native C-based extensions.
76
68
 
77
- Install ZeroMQ.
78
- ```shell
79
- pacman -S mingw64/mingw-w64-x86_64-zeromq
80
- ```
81
-
82
69
  ```shell
83
- gem install ffi-rzmq
84
- gem install iruby --pre
70
+ gem install iruby
85
71
  iruby register --force
86
72
  ```
87
73
 
@@ -93,17 +79,7 @@ Install Jupyter.
93
79
  #### Homebrew
94
80
 
95
81
  ```shell
96
- brew install automake gmp libtool wget
97
- brew install zeromq --HEAD
98
- brew install czmq --HEAD
99
- ```
100
-
101
- ```shell
102
- # export LIBZMQ_PATH=$(brew --prefix zeromq)/lib
103
- # export LIBCZMQ_PATH=$(brew --prefix czmq)/lib
104
- # gem install cztop
105
- gem install ffi-rzmq
106
- gem install iruby --pre
82
+ gem install iruby
107
83
  iruby register --force
108
84
  ```
109
85
 
@@ -113,8 +89,8 @@ If you are using macports, run the following commands.
113
89
 
114
90
  ```shell
115
91
  port install libtool autoconf automake autogen
116
- gem install ffi-rzmq
117
92
  gem install iruby
93
+ iruby register --force
118
94
  ```
119
95
 
120
96
  ### Docker
@@ -123,7 +99,7 @@ Try [RubyData Docker Stacks](https://github.com/RubyData/docker-stacks).
123
99
  Running jupyter notebook:
124
100
 
125
101
  ```shell
126
- docker run -p 8888:8888 rubydata/datascience-notebook
102
+ docker run --rm -it -p 8888:8888 rubydata/datascience-notebook
127
103
  ```
128
104
 
129
105
  ### Installation for JRuby
@@ -131,7 +107,6 @@ docker run -p 8888:8888 rubydata/datascience-notebook
131
107
  You can use Java classes in your IRuby notebook.
132
108
 
133
109
  * JRuby version >= 9.0.4.0
134
- * cztop gem
135
110
  * iruby gem
136
111
 
137
112
  After installation, make sure that your `env` is set up to use jruby.
@@ -148,6 +123,29 @@ If you have already used IRuby with a different version, you need to generate a
148
123
  $ iruby register --force
149
124
  ```
150
125
 
126
+ ### Install the development version of IRuby
127
+
128
+ **Be careful to use the development version because it is usually unstable.**
129
+
130
+ If you want to install the development version of IRuby from the source code, try [specific_install](https://github.com/rdp/specific_install).
131
+
132
+ ```
133
+ gem specific_install https://github.com/SciRuby/iruby
134
+ ```
135
+
136
+ ### Note for using with CZTop and CZMQ
137
+
138
+ [CZTop](https://gitlab.com/paddor/cztop) adapter has been deprecated since IRuby version 0.7.4.
139
+ It will be removed after several versions.
140
+
141
+ If you want to use IRuby with CZTop, you need to install it and [CZMQ](https://github.com/zeromq/czmq).
142
+
143
+ If both ffi-rzmq and cztop are installed, ffi-rzmq is used. If you prefer cztop, set the following environment variable.
144
+
145
+ ```sh
146
+ export IRUBY_SESSION_ADAPTER="cztop"
147
+ ```
148
+
151
149
  ## Backends
152
150
 
153
151
  There are two backends: PlainBackend and PryBackend.
data/ext/Rakefile ADDED
@@ -0,0 +1,19 @@
1
+ task default: :all
2
+
3
+ task all: [:ensure_zeromq]
4
+
5
+ task :ensure_zeromq do
6
+ begin
7
+ require 'ffi-rzmq'
8
+ rescue LoadError
9
+ require 'native-package-installer'
10
+ unless NativePackageInstaller.install(arch_linux: 'zeromq',
11
+ debian: 'libzmq3-dev',
12
+ freebsd: 'libzmq4',
13
+ homebrew: 'zmq',
14
+ macports: 'zmq',
15
+ redhat: 'zeromq-devel')
16
+ raise 'Failed to install ZeroMQ'
17
+ end
18
+ end
19
+ end
data/iruby.gemspec CHANGED
@@ -14,6 +14,7 @@ Gem::Specification.new do |s|
14
14
  s.executables = s.files.grep(%r{^bin/}) { |f| File.basename(f) }
15
15
  s.test_files = s.files.grep(%r{^test/})
16
16
  s.require_paths = %w[lib]
17
+ s.extensions = %w[ext/Rakefile]
17
18
 
18
19
  s.required_ruby_version = '>= 2.3.0'
19
20
 
@@ -22,9 +23,12 @@ Gem::Specification.new do |s|
22
23
  s.add_dependency 'irb'
23
24
  s.add_dependency 'mime-types', '>= 3.3.1'
24
25
  s.add_dependency 'multi_json', '~> 1.11'
26
+ s.add_dependency 'native-package-installer'
25
27
 
26
28
  s.add_development_dependency 'pycall', '>= 1.2.1'
27
29
  s.add_development_dependency 'rake'
28
30
  s.add_development_dependency 'test-unit'
29
31
  s.add_development_dependency 'test-unit-rr'
32
+
33
+ s.metadata['msys2_mingw_dependencies'] = 'zeromq'
30
34
  end
@@ -23,7 +23,7 @@ module IRuby
23
23
  idents, msg_list = frames[0..i-1], frames[i+1..-1]
24
24
 
25
25
  minlen = 5
26
- raise 'malformed message, must have at least #{minlen} elements' unless msg_list.length >= minlen
26
+ raise "malformed message, must have at least #{minlen} elements" unless msg_list.length >= minlen
27
27
  s, header, parent_header, metadata, content, buffers = *msg_list
28
28
  raise 'Invalid signature' unless s == sign(msg_list[1..-1])
29
29
  {
@@ -40,14 +40,12 @@ module IRuby
40
40
 
41
41
  require_relative 'session_adapter/ffirzmq_adapter'
42
42
  require_relative 'session_adapter/cztop_adapter'
43
- require_relative 'session_adapter/pyzmq_adapter'
44
43
  require_relative 'session_adapter/test_adapter'
45
44
 
46
45
  def self.select_adapter_class(name=nil)
47
46
  classes = {
48
47
  'ffi-rzmq' => SessionAdapter::FfirzmqAdapter,
49
48
  'cztop' => SessionAdapter::CztopAdapter,
50
- # 'pyzmq' => SessionAdapter::PyzmqAdapter
51
49
  'test' => SessionAdapter::TestAdapter,
52
50
  }
53
51
  if (name ||= ENV.fetch('IRUBY_SESSION_ADAPTER', nil))
@@ -61,6 +59,9 @@ module IRuby
61
59
  "Session adapter `#{name}` is unavailable"
62
60
  end
63
61
  end
62
+ if name == 'cztop'
63
+ warn "WARNING: cztop was deprecated and will be removed; Use ffi-rzmq, instead."
64
+ end
64
65
  return cls
65
66
  end
66
67
  classes.each_value do |cls|
data/lib/iruby/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module IRuby
2
- VERSION = '0.7.3'
2
+ VERSION = '0.7.4'
3
3
  end
@@ -14,7 +14,6 @@ module IRubyTest
14
14
  assert_rr do
15
15
  stub(IRuby::SessionAdapter::CztopAdapter).available? { true }
16
16
  stub(IRuby::SessionAdapter::FfirzmqAdapter).available? { false }
17
- stub(IRuby::SessionAdapter::PyzmqAdapter).available? { false }
18
17
 
19
18
  cls = IRuby::SessionAdapter.select_adapter_class
20
19
  assert_equal IRuby::SessionAdapter::CztopAdapter, cls
@@ -25,25 +24,12 @@ module IRubyTest
25
24
  assert_rr do
26
25
  stub(IRuby::SessionAdapter::FfirzmqAdapter).available? { true }
27
26
  stub(IRuby::SessionAdapter::CztopAdapter).available? { false }
28
- stub(IRuby::SessionAdapter::PyzmqAdapter).available? { false }
29
27
 
30
28
  cls = IRuby::SessionAdapter.select_adapter_class
31
29
  assert_equal IRuby::SessionAdapter::FfirzmqAdapter, cls
32
30
  end
33
31
  end
34
32
 
35
- def test_select_adapter_class_with_pyzmq
36
- omit("pyzmq adapter is disabled")
37
- assert_rr do
38
- stub(IRuby::SessionAdapter::PyzmqAdapter).available? { true }
39
- stub(IRuby::SessionAdapter::FfirzmqAdapter).available? { false }
40
- stub(IRuby::SessionAdapter::CztopAdapter).available? { false }
41
-
42
- cls = IRuby::SessionAdapter.select_adapter_class
43
- assert_equal IRuby::SessionAdapter::PyzmqAdapter, cls
44
- end
45
- end
46
-
47
33
  def test_select_adapter_class_with_env
48
34
  with_env('IRUBY_SESSION_ADAPTER' => 'cztop') do
49
35
  assert_rr do
@@ -72,20 +58,6 @@ module IRubyTest
72
58
  end
73
59
  end
74
60
  end
75
-
76
- with_env('IRUBY_SESSION_ADAPTER' => 'pyzmq') do
77
- # pyzmq adapter is disabled
78
- #
79
- # IRuby::SessionAdapter::PyzmqAdapter.stub :available?, true do
80
- # assert_equal IRuby::SessionAdapter::PyzmqAdapter, IRuby::SessionAdapter.select_adapter_class
81
- # end
82
- #
83
- # IRuby::SessionAdapter::PyzmqAdapter.stub :available?, false do
84
- # assert_raises IRuby::SessionAdapterNotFound do
85
- # IRuby::SessionAdapter.select_adapter_class
86
- # end
87
- # end
88
- end
89
61
  end
90
62
  end
91
63
  end
@@ -22,9 +22,6 @@ module IRubyTest
22
22
  IRuby::SessionAdapter::CztopAdapter
23
23
  when 'ffi-rzmq'
24
24
  IRuby::SessionAdapter::FfirzmqAdapter
25
- when 'pyzmq'
26
- omit("pyzmq adapter is disabled")
27
- # IRuby::SessionAdapter::PyzmqAdapter
28
25
  else
29
26
  flunk "Unknown session adapter: #{adapter_name.inspect}"
30
27
  end
@@ -37,7 +34,6 @@ module IRubyTest
37
34
  assert_rr do
38
35
  stub(IRuby::SessionAdapter::CztopAdapter).available? { false }
39
36
  stub(IRuby::SessionAdapter::FfirzmqAdapter).available? { false }
40
- stub(IRuby::SessionAdapter::PyzmqAdapter).available? { false }
41
37
  stub(IRuby::SessionAdapter::TestAdapter).available? { false }
42
38
  assert_raises IRuby::SessionAdapterNotFound do
43
39
  IRuby::Session.new(@session_config)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: iruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.3
4
+ version: 0.7.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Mendler
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2021-07-08 00:00:00.000000000 Z
12
+ date: 2021-08-17 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: data_uri
@@ -81,6 +81,20 @@ dependencies:
81
81
  - - "~>"
82
82
  - !ruby/object:Gem::Version
83
83
  version: '1.11'
84
+ - !ruby/object:Gem::Dependency
85
+ name: native-package-installer
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: '0'
91
+ type: :runtime
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - ">="
96
+ - !ruby/object:Gem::Version
97
+ version: '0'
84
98
  - !ruby/object:Gem::Dependency
85
99
  name: pycall
86
100
  requirement: !ruby/object:Gem::Requirement
@@ -142,10 +156,11 @@ email:
142
156
  - mail@daniel-mendler.de
143
157
  executables:
144
158
  - iruby
145
- extensions: []
159
+ extensions:
160
+ - ext/Rakefile
146
161
  extra_rdoc_files: []
147
162
  files:
148
- - ".github/workflows/ubuntu.yml"
163
+ - ".github/workflows/ci.yml"
149
164
  - ".gitignore"
150
165
  - CHANGES.md
151
166
  - Gemfile
@@ -158,6 +173,7 @@ files:
158
173
  - ci/requirements.txt
159
174
  - docker/setup.sh
160
175
  - docker/test.sh
176
+ - ext/Rakefile
161
177
  - iruby.gemspec
162
178
  - lib/iruby.rb
163
179
  - lib/iruby/assets/kernel.css
@@ -200,7 +216,6 @@ files:
200
216
  - lib/iruby/session_adapter.rb
201
217
  - lib/iruby/session_adapter/cztop_adapter.rb
202
218
  - lib/iruby/session_adapter/ffirzmq_adapter.rb
203
- - lib/iruby/session_adapter/pyzmq_adapter.rb
204
219
  - lib/iruby/session_adapter/test_adapter.rb
205
220
  - lib/iruby/utils.rb
206
221
  - lib/iruby/version.rb
@@ -229,7 +244,8 @@ files:
229
244
  homepage: https://github.com/SciRuby/iruby
230
245
  licenses:
231
246
  - MIT
232
- metadata: {}
247
+ metadata:
248
+ msys2_mingw_dependencies: zeromq
233
249
  post_install_message:
234
250
  rdoc_options: []
235
251
  require_paths:
@@ -245,7 +261,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
245
261
  - !ruby/object:Gem::Version
246
262
  version: '0'
247
263
  requirements: []
248
- rubygems_version: 3.2.21
264
+ rubygems_version: 3.2.23
249
265
  signing_key:
250
266
  specification_version: 4
251
267
  summary: Ruby Kernel for Jupyter
@@ -1,69 +0,0 @@
1
- name: CI
2
-
3
- on:
4
- push:
5
- branches:
6
- - master
7
- pull_request:
8
- types:
9
- - opened
10
- - synchronize
11
- - reopened
12
-
13
- jobs:
14
- test:
15
- name: Test
16
- runs-on: ${{ matrix.os }}
17
-
18
- strategy:
19
- fail-fast: false
20
- matrix:
21
- os:
22
- - ubuntu-20.04
23
- - ubuntu-latest
24
- ruby:
25
- - 3.0
26
- - 2.7
27
- - 2.6
28
- - 2.5
29
- - 2.4
30
- - 2.3
31
- - debug
32
-
33
- steps:
34
- - uses: actions/checkout@v2
35
- with:
36
- fetch-depth: 1
37
-
38
- - uses: ruby/setup-ruby@v1
39
- with:
40
- ruby-version: ${{ matrix.ruby }}
41
-
42
- - name: Install requirements on ubuntu
43
- run: |
44
- sudo apt update
45
- sudo apt install -y --no-install-recommends \
46
- libczmq-dev \
47
- python3 \
48
- python3-pip \
49
- python3-setuptools
50
- sudo pip3 install wheel
51
- sudo pip3 install -r ci/requirements.txt
52
-
53
- - run: gem install bundler
54
-
55
- - run: bundle install --jobs 4 --retry 3
56
-
57
- - name: Run tests
58
- env:
59
- PYTHON: python3
60
- ADAPTERS: cztop ffi-rzmq pyzmq
61
- run: |
62
- for adapter in $ADAPTERS; do
63
- export IRUBY_TEST_SESSION_ADAPTER_NAME=$adapter
64
- bundle exec rake test TESTOPTS=-v
65
- done
66
-
67
- - run: rake build
68
-
69
- - run: gem install pkg/*.gem
@@ -1,77 +0,0 @@
1
- module IRuby
2
- module SessionAdapter
3
- class PyzmqAdapter < BaseAdapter
4
-
5
- class << self
6
- def load_requirements
7
- require 'pycall'
8
- import_pyzmq
9
- end
10
-
11
- def import_pyzmq
12
- @zmq = PyCall.import_module('zmq')
13
- rescue PyCall::PyError => error
14
- raise LoadError, error.message
15
- end
16
-
17
- attr_reader :zmq
18
- end
19
-
20
- def make_router_socket(protocol, host, port)
21
- make_socket(:ROUTER, protocol, host, port)
22
- end
23
-
24
- def make_pub_socket(protocol, host, port)
25
- make_socket(:PUB, protocol, host, port)
26
- end
27
-
28
- def heartbeat_loop(sock)
29
- PyCall.sys.path.append(File.expand_path('../pyzmq', __FILE__))
30
- heartbeat = PyCall.import_module('iruby.heartbeat')
31
- @heartbeat_thread = heartbeat.Heartbeat.new(sock)
32
- @heartbeat_thread.start
33
- end
34
-
35
- private
36
-
37
- def socket_type(type_symbol)
38
- case type_symbol
39
- when :ROUTER, :PUB, :REP
40
- zmq[type_symbol]
41
- else
42
- raise ArgumentError, "Unknown ZMQ socket type: #{type_symbol}"
43
- end
44
- end
45
-
46
- def make_socket(type_symbol, protocol, host, port)
47
- type = socket_type(type_symbol)
48
- sock = zmq_context.socket(type)
49
- bind_socket(sock, protocol, host, port)
50
- sock
51
- end
52
-
53
- def bind_socket(sock, protocol, host, port)
54
- iface = "#{protocol}://#{host}"
55
- case protocol
56
- when 'tcp'
57
- if port <= 0
58
- port = sock.bind_to_random_port(iface)
59
- else
60
- sock.bind("#{iface}:#{port}")
61
- end
62
- else
63
- raise ArgumentError, "Unsupported protocol: #{protocol}"
64
- end
65
- [sock, port]
66
- end
67
-
68
- def zmq_context
69
- zmq.Context.instance
70
- end
71
-
72
- def zmq
73
- self.class.zmq
74
- end
75
- end
76
- end
77
- end