iruby 0.2.9 → 0.3
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 +4 -4
- data/CHANGES +21 -0
- data/Gemfile +1 -1
- data/README.md +8 -15
- data/lib/iruby.rb +7 -3
- data/lib/iruby/backend.rb +1 -0
- data/lib/iruby/command.rb +1 -1
- data/lib/iruby/display.rb +10 -0
- data/lib/iruby/input/README.ipynb +55 -3
- data/lib/iruby/input/autoload.rb +2 -1
- data/lib/iruby/input/checkbox.rb +21 -3
- data/lib/iruby/input/date.rb +15 -4
- data/lib/iruby/input/field.rb +3 -2
- data/lib/iruby/input/label.rb +10 -4
- data/lib/iruby/input/multiple.rb +76 -0
- data/lib/iruby/input/popup.rb +5 -2
- data/lib/iruby/input/radio.rb +14 -2
- data/lib/iruby/input/select.rb +20 -6
- data/lib/iruby/input/textarea.rb +1 -0
- data/lib/iruby/kernel.rb +1 -1
- data/lib/iruby/session/cztop.rb +66 -0
- data/lib/iruby/session/ffi_rzmq.rb +1 -1
- data/lib/iruby/version.rb +1 -1
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 535b2e6920da18e1d6610cda01d192814a5f9595
|
4
|
+
data.tar.gz: 401889f3e858262e478fa15a3c709bcd6d09bd16
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5d35b89326c32a1dcb52fc2242e366b693ffcac70b3b0ad232233010a6cd1de7c894429c724fb96a766ed35d995465c7b61e3274c7836639a8afd7a9fa56f0e9
|
7
|
+
data.tar.gz: 423d15b33c265bd943b5811fb3993f79d2da741790948f9efdd5890ca0f755f94d9fdb51ee78faf5adfa612a30d031e4014758725322f4fe22fd099c37a093c4
|
data/CHANGES
CHANGED
@@ -1,3 +1,24 @@
|
|
1
|
+
0.3 (2017-03-26)
|
2
|
+
|
3
|
+
Bug Fixes:
|
4
|
+
* Disable Jupyter keyboard manager for all popups made using IRuby.popup (@kylekyle).
|
5
|
+
* Fix Iruby/Input date values bug that set date fields to whatever the last date value was (@kylekyle).
|
6
|
+
* Fix a bug where time strings put into prompter would give an 'out of range' error (@kylekyle).
|
7
|
+
|
8
|
+
Enhancements:
|
9
|
+
* Improvements to IRuby dependency detection using `Bundler::Dependencies#specs` (@kou).
|
10
|
+
* Use less memory forcing pry to store only the last 3 commands in memory (@kylekyle).
|
11
|
+
* Use bigger z-index that is used accross all browsers (@kylekyle).
|
12
|
+
* Ability to input date values as DateTime objects in IRuby/Input (@kylekyle).
|
13
|
+
* Add option to have check boxes checked by default (@kylekyle).
|
14
|
+
* Option for multi-select in drop down menus in the prompter (@kylekyle).
|
15
|
+
* Add support for multiple widgets using `IRuby::Input::Multiple` (@kylekyle).
|
16
|
+
* Calender icon for date selector icon (@kylekyle).
|
17
|
+
* Add support for Numo/NArray (@zalt50).
|
18
|
+
* Text now only completes after a space (@zalt50).
|
19
|
+
* Remove the DONTWAIT flag when receiving a message (@cloud-oak).
|
20
|
+
* Add support for CZTop (@kou).
|
21
|
+
|
1
22
|
0.2.9 (2016-05-02)
|
2
23
|
|
3
24
|
Bug Fixes:
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -12,14 +12,14 @@ The installation instructions are divided according to environments mainly becau
|
|
12
12
|
#### Ubuntu/Debian
|
13
13
|
At first install IPython/Jupyter. I recommend an installation using virtualenv.
|
14
14
|
|
15
|
-
apt-get install python3-dev virtualenv
|
15
|
+
sudo apt-get install python3-dev python-virtualenv
|
16
16
|
virtualenv -p python3 venv
|
17
17
|
source venv/bin/activate
|
18
18
|
pip install 'ipython[notebook]'
|
19
19
|
|
20
20
|
After that, install the Ruby gem.
|
21
21
|
|
22
|
-
gem install
|
22
|
+
gem install cztop
|
23
23
|
gem install iruby
|
24
24
|
|
25
25
|
Now you can run iruby with:
|
@@ -29,17 +29,9 @@ Now you can run iruby with:
|
|
29
29
|
#### Windows
|
30
30
|
At first install IPython/Jupyter. I recommend an installation using [Enthought Canopy](https://www.enthought.com/).
|
31
31
|
|
32
|
-
Please update your PATH to include build tools or download the DevKit from http://rubyinstaller.org/downloads and follow [this instructions](http://github.com/oneclick/rubyinstaller/wiki/Development-Kit).
|
33
|
-
|
34
|
-
After that install ZeroMQ Legacy Stable Release 3.2.4 [x86 build for Windows XP SP3 and newer](http://miru.hk/archive/ZeroMQ-3.2.4~miru1.0-x86.exe).
|
35
|
-
|
36
|
-
Rename `libzmq-v100-mt-3_2_4.dll` to `libzmq.dll`.
|
37
|
-
|
38
|
-
Add the dll path to the PATH system variable.
|
39
|
-
|
40
32
|
Run two commands below:
|
41
33
|
|
42
|
-
gem install
|
34
|
+
gem install cztop
|
43
35
|
gem install iruby
|
44
36
|
|
45
37
|
Now you can run iruby with:
|
@@ -52,7 +44,7 @@ I recommend an installation using [Anaconda](https://store.continuum.io/cshop/an
|
|
52
44
|
After that, run three commands shown below.
|
53
45
|
|
54
46
|
brew install libtool autoconf automake autogen
|
55
|
-
gem install
|
47
|
+
gem install cztop
|
56
48
|
gem install iruby
|
57
49
|
|
58
50
|
#### FreeBSD
|
@@ -99,8 +91,7 @@ Since jRuby is fully compatible with Ruby version 2.2, it is possible to use iru
|
|
99
91
|
It can be helpful if you want to use java classes in your iruby notebook.
|
100
92
|
This will require the following software:
|
101
93
|
* jRuby version >= 9.0.4.0
|
102
|
-
*
|
103
|
-
* ffi-rzmq gem
|
94
|
+
* cztop gem
|
104
95
|
* this iruby gem
|
105
96
|
|
106
97
|
After installation, make sure that your `env` is set up to jruby.
|
@@ -126,7 +117,9 @@ and other scientific gems. You can find the prebuild image at [dockerhub](https:
|
|
126
117
|
* IPython/Jupyter >= 3.0.0
|
127
118
|
* Ruby >= 2.1.0
|
128
119
|
|
129
|
-
If you install IRuby with
|
120
|
+
If you install IRuby with CZTop, CZMQ >= 4.0.0 is added to the list above.
|
121
|
+
|
122
|
+
If you install IRuby with ffi-rzmq, libzmq >= 3.2 is added to the list above.
|
130
123
|
|
131
124
|
### Authors
|
132
125
|
|
data/lib/iruby.rb
CHANGED
@@ -16,11 +16,15 @@ require 'iruby/comm'
|
|
16
16
|
require 'iruby/session/mixin'
|
17
17
|
|
18
18
|
begin
|
19
|
-
require 'iruby/session/
|
19
|
+
require 'iruby/session/cztop'
|
20
20
|
rescue LoadError
|
21
21
|
begin
|
22
|
-
require 'iruby/session/
|
22
|
+
require 'iruby/session/rbczmq'
|
23
23
|
rescue LoadError
|
24
|
-
|
24
|
+
begin
|
25
|
+
require 'iruby/session/ffi_rzmq'
|
26
|
+
rescue LoadError
|
27
|
+
STDERR.puts "You should install cztop, rbczmq or ffi_rzmq before running iruby notebook. See README."
|
28
|
+
end
|
25
29
|
end
|
26
30
|
end
|
data/lib/iruby/backend.rb
CHANGED
data/lib/iruby/command.rb
CHANGED
@@ -106,7 +106,7 @@ This might not work. Run 'iruby register --force' to fix it." if @iruby_path !=
|
|
106
106
|
def check_bundler
|
107
107
|
require 'bundler'
|
108
108
|
raise %q{iruby is missing from Gemfile. This might not work.
|
109
|
-
Add `gem 'iruby'` to your Gemfile to fix it.} unless Bundler.definition.
|
109
|
+
Add `gem 'iruby'` to your Gemfile to fix it.} unless Bundler.definition.specs.any? {|s| s.name == 'iruby' }
|
110
110
|
Bundler.setup
|
111
111
|
rescue LoadError
|
112
112
|
rescue Exception => e
|
data/lib/iruby/display.rb
CHANGED
@@ -169,6 +169,16 @@ module IRuby
|
|
169
169
|
LaTeX.vector(obj.to_a)
|
170
170
|
end
|
171
171
|
|
172
|
+
type { Numo::NArray }
|
173
|
+
format 'text/latex' do |obj|
|
174
|
+
obj.ndim == 2 ?
|
175
|
+
LaTeX.matrix(obj, obj.shape[0], obj.shape[1]) :
|
176
|
+
LaTeX.vector(obj.to_a)
|
177
|
+
end
|
178
|
+
format 'text/html' do |obj|
|
179
|
+
HTML.table(obj.to_a)
|
180
|
+
end
|
181
|
+
|
172
182
|
type { NArray }
|
173
183
|
format 'text/latex' do |obj|
|
174
184
|
obj.dim == 2 ?
|
@@ -178,6 +178,55 @@
|
|
178
178
|
"end"
|
179
179
|
]
|
180
180
|
},
|
181
|
+
{
|
182
|
+
"cell_type": "markdown",
|
183
|
+
"metadata": {},
|
184
|
+
"source": [
|
185
|
+
"## Defaults\n",
|
186
|
+
"\n",
|
187
|
+
"Most inputs will accept a `default` parameter. If no default is given, the deault is `nil`. Since checkboxes can have multiple values selected, you can pass an array of values. To check everything, pass `true` as the default. "
|
188
|
+
]
|
189
|
+
},
|
190
|
+
{
|
191
|
+
"cell_type": "code",
|
192
|
+
"execution_count": null,
|
193
|
+
"metadata": {
|
194
|
+
"collapsed": false
|
195
|
+
},
|
196
|
+
"outputs": [],
|
197
|
+
"source": [
|
198
|
+
"result = IRuby.form do \n",
|
199
|
+
" checkbox :one, 'Fish', 'Cat', 'Dog', default: 'Fish'\n",
|
200
|
+
" checkbox :many, 'Fish', 'Cat', 'Dog', default: ['Cat', 'Dog']\n",
|
201
|
+
" checkbox :all, 'Fish', 'Cat', 'Dog', default: true\n",
|
202
|
+
" button :submit, label: 'All done'\n",
|
203
|
+
"end"
|
204
|
+
]
|
205
|
+
},
|
206
|
+
{
|
207
|
+
"cell_type": "markdown",
|
208
|
+
"metadata": {},
|
209
|
+
"source": [
|
210
|
+
"## Dates\n",
|
211
|
+
"\n",
|
212
|
+
"The `date` widget provides a calendar popup and returns a `Time` object. It's default should also be a `Time` object. "
|
213
|
+
]
|
214
|
+
},
|
215
|
+
{
|
216
|
+
"cell_type": "code",
|
217
|
+
"execution_count": null,
|
218
|
+
"metadata": {
|
219
|
+
"collapsed": false
|
220
|
+
},
|
221
|
+
"outputs": [],
|
222
|
+
"source": [
|
223
|
+
"result = IRuby.form do \n",
|
224
|
+
" date :birthday\n",
|
225
|
+
" date :today, default: Time.now\n",
|
226
|
+
" button\n",
|
227
|
+
"end"
|
228
|
+
]
|
229
|
+
},
|
181
230
|
{
|
182
231
|
"cell_type": "markdown",
|
183
232
|
"metadata": {},
|
@@ -256,7 +305,7 @@
|
|
256
305
|
"source": [
|
257
306
|
"## Dropdowns\n",
|
258
307
|
"\n",
|
259
|
-
"
|
308
|
+
"A `select` is a dropdown of options. Use a `multiple` to allow multiple selections. `multiple` widgets accept an additional `size` parameters that determines the number of rows. The default is 4. "
|
260
309
|
]
|
261
310
|
},
|
262
311
|
{
|
@@ -268,8 +317,11 @@
|
|
268
317
|
"outputs": [],
|
269
318
|
"source": [
|
270
319
|
"result = IRuby.form do \n",
|
271
|
-
"
|
272
|
-
" select :stooge,
|
320
|
+
" select :stooge, 'Moe', 'Larry', 'Curly'\n",
|
321
|
+
" select :stooge, 'Moe', 'Larry', 'Curly', default: 'Moe'\n",
|
322
|
+
" multiple :stooges, 'Moe', 'Larry', 'Curly', default: true, size: 3\n",
|
323
|
+
" multiple :stooges, 'Moe', 'Larry', 'Curly', default: ['Moe','Curly']\n",
|
324
|
+
" button\n",
|
273
325
|
"end"
|
274
326
|
]
|
275
327
|
},
|
data/lib/iruby/input/autoload.rb
CHANGED
data/lib/iruby/input/checkbox.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
module IRuby
|
2
2
|
module Input
|
3
3
|
class Checkbox < Label
|
4
|
-
needs :options
|
4
|
+
needs :options, :default
|
5
5
|
|
6
6
|
builder :checkbox do |*args, **params|
|
7
7
|
key = :checkbox
|
@@ -9,11 +9,24 @@ module IRuby
|
|
9
9
|
|
10
10
|
params[:key] = unique_key(key)
|
11
11
|
params[:options] = args
|
12
|
+
|
13
|
+
params[:default] = case params[:default]
|
14
|
+
when false, nil
|
15
|
+
[]
|
16
|
+
when true
|
17
|
+
[*params[:options]]
|
18
|
+
else
|
19
|
+
[*params[:default]]
|
20
|
+
end
|
21
|
+
|
12
22
|
add_field Checkbox.new(**params)
|
13
23
|
end
|
14
24
|
|
15
25
|
def widget_css
|
16
|
-
|
26
|
+
<<-CSS
|
27
|
+
.iruby-checkbox.form-control { display: inline-table; }
|
28
|
+
.iruby-checkbox .checkbox-inline { margin: 0 15px 0 0; }
|
29
|
+
CSS
|
17
30
|
end
|
18
31
|
|
19
32
|
def widget_js
|
@@ -30,6 +43,8 @@ module IRuby
|
|
30
43
|
$(parent).data('iruby-value', null);
|
31
44
|
}
|
32
45
|
});
|
46
|
+
|
47
|
+
$('.iruby-checkbox input').trigger('change');
|
33
48
|
JS
|
34
49
|
end
|
35
50
|
|
@@ -43,7 +58,10 @@ module IRuby
|
|
43
58
|
@options.each do |option|
|
44
59
|
label class: 'checkbox-inline' do
|
45
60
|
input(
|
46
|
-
name: @key,
|
61
|
+
name: @key,
|
62
|
+
value: option,
|
63
|
+
type: 'checkbox',
|
64
|
+
checked: @default.include?(option)
|
47
65
|
)
|
48
66
|
text option
|
49
67
|
end
|
data/lib/iruby/input/date.rb
CHANGED
@@ -1,26 +1,37 @@
|
|
1
1
|
module IRuby
|
2
2
|
module Input
|
3
3
|
class Date < Field
|
4
|
-
needs js_class: 'iruby-date'
|
4
|
+
needs js_class: 'iruby-date', icon: '📅'
|
5
5
|
|
6
6
|
builder :date do |key='date', **params|
|
7
|
+
params[:default] ||= false
|
7
8
|
params[:key] = unique_key key
|
9
|
+
|
10
|
+
if params[:default].is_a? Time
|
11
|
+
params[:default] = params[:default].strftime('%m/%d/%Y')
|
12
|
+
end
|
13
|
+
|
8
14
|
add_field Date.new(**params)
|
15
|
+
|
16
|
+
process params[:key] do |result,key,value|
|
17
|
+
result[key.to_sym] = Time.strptime(value,'%m/%d/%Y')
|
18
|
+
end
|
9
19
|
end
|
10
20
|
|
11
21
|
def widget_css
|
12
|
-
'#ui-datepicker-div { z-index: 2000; }'
|
22
|
+
'#ui-datepicker-div { z-index: 2000 !important; }'
|
13
23
|
end
|
14
24
|
|
15
25
|
def widget_js
|
16
26
|
<<-JS
|
17
27
|
$('.iruby-date').datepicker({
|
28
|
+
dateFormat: 'mm/dd/yy',
|
18
29
|
onClose: function(date) {
|
19
|
-
$(
|
30
|
+
$(this).data('iruby-value', date);
|
20
31
|
}
|
21
32
|
});
|
22
33
|
JS
|
23
34
|
end
|
24
35
|
end
|
25
36
|
end
|
26
|
-
end
|
37
|
+
end
|
data/lib/iruby/input/field.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
module IRuby
|
2
2
|
module Input
|
3
3
|
class Field < Label
|
4
|
-
needs :type
|
4
|
+
needs default: nil, type: 'text', js_class: 'iruby-field'
|
5
5
|
|
6
6
|
builder :input do |key='input', **params|
|
7
7
|
params[:key] = unique_key key
|
@@ -21,7 +21,8 @@ module IRuby
|
|
21
21
|
input(
|
22
22
|
type: @type,
|
23
23
|
:'data-iruby-key' => @key,
|
24
|
-
class: "form-control #{@js_class}"
|
24
|
+
class: "form-control #{@js_class}",
|
25
|
+
value: @default
|
25
26
|
)
|
26
27
|
end
|
27
28
|
end
|
data/lib/iruby/input/label.rb
CHANGED
@@ -1,13 +1,19 @@
|
|
1
1
|
module IRuby
|
2
2
|
module Input
|
3
3
|
class Label < Widget
|
4
|
-
needs label: nil
|
4
|
+
needs label: nil, icon: nil
|
5
5
|
|
6
6
|
def widget_label
|
7
|
-
|
8
|
-
|
9
|
-
|
7
|
+
div class: 'iruby-label input-group' do
|
8
|
+
span class: 'input-group-addon' do
|
9
|
+
text @label || to_label(@key)
|
10
|
+
end
|
11
|
+
|
10
12
|
yield
|
13
|
+
|
14
|
+
if @icon
|
15
|
+
span @icon, class: "input-group-addon"
|
16
|
+
end
|
11
17
|
end
|
12
18
|
end
|
13
19
|
|
@@ -0,0 +1,76 @@
|
|
1
|
+
module IRuby
|
2
|
+
module Input
|
3
|
+
class Multiple < Label
|
4
|
+
needs :options, :default, size: nil
|
5
|
+
|
6
|
+
builder :multiple do |*args, **params|
|
7
|
+
key = :multiple
|
8
|
+
key, *args = args if args.first.is_a? Symbol
|
9
|
+
|
10
|
+
params[:key] = unique_key(key)
|
11
|
+
params[:options] = args
|
12
|
+
|
13
|
+
params[:default] = case params[:default]
|
14
|
+
when false, nil
|
15
|
+
[]
|
16
|
+
when true
|
17
|
+
[*params[:options]]
|
18
|
+
else
|
19
|
+
[*params[:default]]
|
20
|
+
end
|
21
|
+
|
22
|
+
add_field Multiple.new(**params)
|
23
|
+
end
|
24
|
+
|
25
|
+
def widget_css
|
26
|
+
<<-CSS
|
27
|
+
.iruby-multiple {
|
28
|
+
display: table;
|
29
|
+
min-width: 25%;
|
30
|
+
}
|
31
|
+
.form-control.iruby-multiple-container {
|
32
|
+
display: table;
|
33
|
+
}
|
34
|
+
CSS
|
35
|
+
end
|
36
|
+
|
37
|
+
def widget_js
|
38
|
+
<<-JS
|
39
|
+
$('.iruby-multiple').change(function(){
|
40
|
+
var multiple = $(this);
|
41
|
+
multiple.data('iruby-value', []);
|
42
|
+
|
43
|
+
multiple.find(':selected').each(function(){
|
44
|
+
multiple.data('iruby-value').push($(this).val());
|
45
|
+
});
|
46
|
+
|
47
|
+
if (multiple.data('iruby-value').length == 0) {
|
48
|
+
multiple.data('iruby-value', null);
|
49
|
+
}
|
50
|
+
});
|
51
|
+
|
52
|
+
$('.iruby-multiple').trigger('change');
|
53
|
+
JS
|
54
|
+
end
|
55
|
+
|
56
|
+
def widget_html
|
57
|
+
widget_label do
|
58
|
+
div class: 'form-control iruby-multiple-container' do
|
59
|
+
params = {
|
60
|
+
size: @size,
|
61
|
+
multiple: true,
|
62
|
+
class: 'iruby-multiple',
|
63
|
+
:'data-iruby-key' => @key
|
64
|
+
}
|
65
|
+
|
66
|
+
select **params do
|
67
|
+
@options.each do |o|
|
68
|
+
option o, selected: @default.include?(o)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
data/lib/iruby/input/popup.rb
CHANGED
@@ -21,9 +21,12 @@ module IRuby
|
|
21
21
|
#{widget_join :widget_js, @form, *@buttons}
|
22
22
|
|
23
23
|
var popup = $(this);
|
24
|
+
|
24
25
|
$('#iruby-form').submit(function() {
|
25
26
|
popup.modal('hide');
|
26
|
-
})
|
27
|
+
});
|
28
|
+
|
29
|
+
Jupyter.notebook.keyboard_manager.disable();
|
27
30
|
}
|
28
31
|
});
|
29
32
|
|
@@ -35,4 +38,4 @@ module IRuby
|
|
35
38
|
end
|
36
39
|
end
|
37
40
|
end
|
38
|
-
end
|
41
|
+
end
|
data/lib/iruby/input/radio.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
module IRuby
|
2
2
|
module Input
|
3
3
|
class Radio < Label
|
4
|
-
needs :options
|
4
|
+
needs :options, :default
|
5
5
|
|
6
6
|
builder :radio do |*args, **params|
|
7
7
|
key = :radio
|
@@ -9,9 +9,17 @@ module IRuby
|
|
9
9
|
|
10
10
|
params[:key] = unique_key(key)
|
11
11
|
params[:options] = args
|
12
|
+
params[:default] ||= false
|
12
13
|
add_field Radio.new(**params)
|
13
14
|
end
|
14
15
|
|
16
|
+
def widget_css
|
17
|
+
<<-CSS
|
18
|
+
.iruby-radio.form-control { display: inline-table; }
|
19
|
+
.iruby-radio .radio-inline { margin: 0 15px 0 0; }
|
20
|
+
CSS
|
21
|
+
end
|
22
|
+
|
15
23
|
def widget_js
|
16
24
|
<<-JS
|
17
25
|
$('.iruby-radio input').change(function(){
|
@@ -20,6 +28,7 @@ module IRuby
|
|
20
28
|
$(parent).find(':checked').val()
|
21
29
|
);
|
22
30
|
});
|
31
|
+
$('.iruby-radio input').trigger('change');
|
23
32
|
JS
|
24
33
|
end
|
25
34
|
|
@@ -34,7 +43,10 @@ module IRuby
|
|
34
43
|
@options.each do |option|
|
35
44
|
label class: 'radio-inline' do
|
36
45
|
input(
|
37
|
-
name: @key,
|
46
|
+
name: @key,
|
47
|
+
value: option,
|
48
|
+
type: 'radio',
|
49
|
+
checked: @default == option
|
38
50
|
)
|
39
51
|
text option
|
40
52
|
end
|
data/lib/iruby/input/select.rb
CHANGED
@@ -1,18 +1,30 @@
|
|
1
1
|
module IRuby
|
2
2
|
module Input
|
3
3
|
class Select < Label
|
4
|
-
needs :options
|
4
|
+
needs :options, :default
|
5
5
|
|
6
6
|
builder :select do |*args, **params|
|
7
7
|
key = :select
|
8
8
|
key, *args = args if args.first.is_a? Symbol
|
9
9
|
|
10
|
-
key = unique_key(key)
|
11
|
-
|
10
|
+
params[:key] = unique_key(key)
|
11
|
+
params[:options] = args
|
12
|
+
params[:default] ||= false
|
13
|
+
|
14
|
+
unless params[:options].include? params[:default]
|
15
|
+
params[:options] = [nil, *params[:options].compact]
|
16
|
+
end
|
17
|
+
|
18
|
+
add_field Select.new(**params)
|
12
19
|
end
|
13
20
|
|
14
21
|
def widget_css
|
15
|
-
|
22
|
+
<<-CSS
|
23
|
+
.iruby-select {
|
24
|
+
min-width: 25%;
|
25
|
+
margin-left: 0 !important;
|
26
|
+
}
|
27
|
+
CSS
|
16
28
|
end
|
17
29
|
|
18
30
|
def widget_js
|
@@ -31,11 +43,13 @@ module IRuby
|
|
31
43
|
params = {
|
32
44
|
class: 'iruby-select',
|
33
45
|
:'data-iruby-key' => @key,
|
34
|
-
:'data-iruby-value' => @
|
46
|
+
:'data-iruby-value' => @default
|
35
47
|
}
|
36
48
|
|
37
49
|
select **params do
|
38
|
-
@options.each
|
50
|
+
@options.each do |o|
|
51
|
+
option o, selected: @default == o
|
52
|
+
end
|
39
53
|
end
|
40
54
|
end
|
41
55
|
end
|
data/lib/iruby/input/textarea.rb
CHANGED
data/lib/iruby/kernel.rb
CHANGED
@@ -0,0 +1,66 @@
|
|
1
|
+
require 'cztop'
|
2
|
+
|
3
|
+
module IRuby
|
4
|
+
class Session
|
5
|
+
include SessionSerialize
|
6
|
+
|
7
|
+
def initialize(config)
|
8
|
+
connection = "#{config['transport']}://#{config['ip']}:%d"
|
9
|
+
|
10
|
+
reply_socket = CZTop::Socket::ROUTER.new(connection % config['shell_port'])
|
11
|
+
pub_socket = CZTop::Socket::PUB.new(connection % config['iopub_port'])
|
12
|
+
stdin_socket = CZTop::Socket::ROUTER.new(connection % config['stdin_port'])
|
13
|
+
|
14
|
+
Thread.new do
|
15
|
+
begin
|
16
|
+
hb_socket = CZTop::Socket::REP.new(connection % config['hb_port'])
|
17
|
+
loop do
|
18
|
+
message = hb_socket.receive
|
19
|
+
hb_socket << message
|
20
|
+
end
|
21
|
+
rescue Exception => e
|
22
|
+
IRuby.logger.fatal "Kernel heartbeat died: #{e.message}\n#{e.backtrace.join("\n")}"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
@sockets = {
|
27
|
+
publish: pub_socket,
|
28
|
+
reply: reply_socket,
|
29
|
+
stdin: stdin_socket,
|
30
|
+
}
|
31
|
+
|
32
|
+
@session = SecureRandom.uuid
|
33
|
+
unless config['key'].to_s.empty? || config['signature_scheme'].to_s.empty?
|
34
|
+
raise 'Unknown signature scheme' unless config['signature_scheme'] =~ /\Ahmac-(.*)\Z/
|
35
|
+
@hmac = OpenSSL::HMAC.new(config['key'], OpenSSL::Digest.new($1))
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
# Build and send a message
|
40
|
+
def send(socket, type, content)
|
41
|
+
idents =
|
42
|
+
if socket == :reply && @last_recvd_msg
|
43
|
+
@last_recvd_msg[:idents]
|
44
|
+
else
|
45
|
+
type == :stream ? "stream.#{content[:name]}" : type
|
46
|
+
end
|
47
|
+
header = {
|
48
|
+
msg_type: type,
|
49
|
+
msg_id: SecureRandom.uuid,
|
50
|
+
username: 'kernel',
|
51
|
+
session: @session,
|
52
|
+
version: '5.0'
|
53
|
+
}
|
54
|
+
@sockets[socket] << serialize(idents, header, content)
|
55
|
+
end
|
56
|
+
|
57
|
+
# Receive a message and decode it
|
58
|
+
def recv(socket)
|
59
|
+
@last_recvd_msg = unserialize(@sockets[socket].receive)
|
60
|
+
end
|
61
|
+
|
62
|
+
def recv_input
|
63
|
+
unserialize(@sockets[:stdin].receive)[:content]["value"]
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
data/lib/iruby/version.rb
CHANGED
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.
|
4
|
+
version: '0.3'
|
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:
|
12
|
+
date: 2017-03-26 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
@@ -136,6 +136,7 @@ files:
|
|
136
136
|
- lib/iruby/input/file.rb
|
137
137
|
- lib/iruby/input/form.rb
|
138
138
|
- lib/iruby/input/label.rb
|
139
|
+
- lib/iruby/input/multiple.rb
|
139
140
|
- lib/iruby/input/popup.rb
|
140
141
|
- lib/iruby/input/radio.rb
|
141
142
|
- lib/iruby/input/select.rb
|
@@ -144,6 +145,7 @@ files:
|
|
144
145
|
- lib/iruby/kernel.rb
|
145
146
|
- lib/iruby/logger.rb
|
146
147
|
- lib/iruby/ostream.rb
|
148
|
+
- lib/iruby/session/cztop.rb
|
147
149
|
- lib/iruby/session/ffi_rzmq.rb
|
148
150
|
- lib/iruby/session/mixin.rb
|
149
151
|
- lib/iruby/session/rbczmq.rb
|
@@ -183,7 +185,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
183
185
|
version: '0'
|
184
186
|
requirements: []
|
185
187
|
rubyforge_project:
|
186
|
-
rubygems_version: 2.
|
188
|
+
rubygems_version: 2.5.2
|
187
189
|
signing_key:
|
188
190
|
specification_version: 4
|
189
191
|
summary: Ruby Kernel for Jupyter/IPython
|
@@ -191,4 +193,3 @@ test_files:
|
|
191
193
|
- test/integration_test.rb
|
192
194
|
- test/iruby/multi_logger_test.rb
|
193
195
|
- test/test_helper.rb
|
194
|
-
has_rdoc:
|