iruby 0.7.3 → 0.7.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,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