smalruby-editor 0.3.1 → 0.3.2
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of smalruby-editor might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/app/assets/javascripts/views/main_menu_view.js.coffee.erb +2 -2
- data/app/assets/javascripts/views/signin_modal_view.js.coffee.erb +8 -2
- data/app/models/preference.rb +59 -46
- data/app/models/user.rb +5 -3
- data/app/views/editor/_signin_modal.html.haml +3 -4
- data/lib/smalruby_editor/version.rb +1 -1
- data/spec/acceptance/standalone/run.feature +24 -15
- data/spec/acceptance/standalone/signin.feature +30 -0
- data/spec/spec_helper.rb +4 -1
- data/spec/steps/when_steps.rb +6 -0
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bed056f57c581ef783b4e550e04625de42f2cb61
|
4
|
+
data.tar.gz: f470f1a683f4033dc14b5c510c01edb7d0872530
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e2d7e3b9e283f9e0525faca5948192231a00e71f57c306e27f922719d675445c381ab7b36aec473e492a004bafa935df65b27a30463cf404202d3d59be77373a
|
7
|
+
data.tar.gz: 73b08e6713af245f72be930878746f463160d0e85575d50a9b5539bc567a9558ab4684001e25995117ebbcd0bd33177a3dea81ddcc4017367220bd9f04ad7f69
|
@@ -127,7 +127,7 @@ Smalruby.MainMenuView = Backbone.View.extend
|
|
127
127
|
msg = "#{errorInfo.row}#{<%= bm('.common_lines') %>}"
|
128
128
|
if errorInfo.column > 0
|
129
129
|
msg += "#{<%= bm('.common_comma') %>}#{errorInfo.column}#{<%= bm('.common_letters') %>}"
|
130
|
-
window.errorMessage(msg + ": #{errorInfo.message}")
|
130
|
+
window.errorMessage(msg + ": #{_.escape(errorInfo.message)}")
|
131
131
|
$.Deferred().reject().promise()
|
132
132
|
.then ->
|
133
133
|
xmlSourceCode.save2()
|
@@ -142,7 +142,7 @@ Smalruby.MainMenuView = Backbone.View.extend
|
|
142
142
|
msg = "#{errorInfo.row}#{<%= bm('.common_lines') %>}"
|
143
143
|
if errorInfo.column > 0
|
144
144
|
msg += "#{<%= bm('.common_comma') %>}#{errorInfo.column}#{<%= bm('.common_letters') %>}"
|
145
|
-
errorMessage(msg + ": #{errorInfo.message}")
|
145
|
+
errorMessage(msg + ": #{_.escape(errorInfo.message)}")
|
146
146
|
$.Deferred().reject().promise()
|
147
147
|
.then(@unblockUI, @unblockUI)
|
148
148
|
.fail ->
|
@@ -17,8 +17,14 @@ Smalruby.SigninModalView = Backbone.View.extend
|
|
17
17
|
render: ->
|
18
18
|
@$el.find('#signin-modal-username')
|
19
19
|
.val($('#username-label').text())
|
20
|
-
|
21
|
-
|
20
|
+
modalOptions = { backdrop: 'static' }
|
21
|
+
if Smalruby.isEnabled('enabled_must_signin')
|
22
|
+
@$el.find('#signin-modal-cancel-button').hide()
|
23
|
+
modalOptions['keyboard'] = false
|
24
|
+
else
|
25
|
+
@$el.find('#signin-modal-cancel-button').show()
|
26
|
+
modalOptions['keyboard'] = true
|
27
|
+
@$el.modal(modalOptions)
|
22
28
|
@$el.modal('show')
|
23
29
|
|
24
30
|
onOk: (e) ->
|
data/app/models/preference.rb
CHANGED
@@ -3,58 +3,71 @@ require "smalruby_editor"
|
|
3
3
|
class Preference < Settingslogic
|
4
4
|
BOOLEAN_FIELD_REGEXP = /(enabled|disabled)/
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
6
|
+
class << self
|
7
|
+
def toolbox_names
|
8
|
+
%w(
|
9
|
+
default
|
10
|
+
smalrubot_v3
|
11
|
+
smalrubot_s1
|
12
|
+
)
|
13
|
+
end
|
13
14
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
15
|
+
def toolbox_preference_names
|
16
|
+
%w(
|
17
|
+
toolbox__default__enabled_hardware_blocks
|
18
|
+
toolbox__default__enabled_smalrubot_v3_blocks
|
19
|
+
toolbox__default__enabled_smalrubot_s1_blocks
|
20
|
+
)
|
21
|
+
end
|
21
22
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
23
|
+
def general_preference_names
|
24
|
+
%w(
|
25
|
+
disabled_add_character_from_beginning
|
26
|
+
disabled_new_character
|
27
|
+
enabled_readonly_ruby_mode
|
28
|
+
hardware_port
|
29
|
+
)
|
30
|
+
end
|
30
31
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
32
|
+
def admin_preference_names
|
33
|
+
%w(
|
34
|
+
enabled_must_signin
|
35
|
+
)
|
36
|
+
end
|
36
37
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
38
|
+
def whole_preference_names
|
39
|
+
["toolbox_name"] + toolbox_preference_names +
|
40
|
+
general_preference_names + admin_preference_names
|
41
|
+
end
|
41
42
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
43
|
+
def user_defaults
|
44
|
+
make_defaults(toolbox_preference_names +
|
45
|
+
general_preference_names)
|
46
|
+
.merge("toolbox_name" => "default")
|
47
|
+
end
|
48
|
+
|
49
|
+
def admin_defaults
|
50
|
+
make_defaults(admin_preference_names)
|
51
|
+
end
|
52
|
+
|
53
|
+
def make_toolbox_name_to_preference_names_hash
|
54
|
+
toolbox_preference_names.group_by { |n|
|
55
|
+
n.slice(/^toolbox__(.+?)__/, 1)
|
56
|
+
}
|
57
|
+
end
|
58
|
+
|
59
|
+
private
|
53
60
|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
61
|
+
def make_defaults(preference_names)
|
62
|
+
preference_names.map { |n|
|
63
|
+
case n
|
64
|
+
when BOOLEAN_FIELD_REGEXP
|
65
|
+
[n, false]
|
66
|
+
else
|
67
|
+
[n, ""]
|
68
|
+
end
|
69
|
+
}.to_h
|
70
|
+
end
|
58
71
|
end
|
59
72
|
|
60
73
|
def initialize(hash_or_file = self.class.source, section = nil)
|
data/app/models/user.rb
CHANGED
@@ -18,9 +18,11 @@ class User < ActiveRecord::Base
|
|
18
18
|
|
19
19
|
# set default preferences from SMALRUBY_HOME/config/config.yml
|
20
20
|
def set_default_preferences
|
21
|
-
self.preferences = Preference.
|
22
|
-
Preference.to_h
|
23
|
-
|
21
|
+
self.preferences = Preference.user_defaults
|
22
|
+
h = Preference.to_h
|
23
|
+
(Preference.whole_preference_names -
|
24
|
+
Preference.admin_preference_names).each do |name|
|
25
|
+
preferences[name] = h[name]
|
24
26
|
end
|
25
27
|
end
|
26
28
|
end
|
@@ -12,10 +12,9 @@
|
|
12
12
|
%input#signin-modal-username.input-large{name: "username", type: "text", placeholder: t('.username_placeholder')}
|
13
13
|
|
14
14
|
.modal-footer
|
15
|
-
-
|
16
|
-
%
|
17
|
-
|
18
|
-
= t('common.cancel')
|
15
|
+
%button#signin-modal-cancel-button.cancel-button{class: "btn", :"data-dismiss" => "modal", :"aria-hidden" => "true"}<
|
16
|
+
%i.icon-remove
|
17
|
+
= t('common.cancel')
|
19
18
|
%button#signin-modal-ok-button.ok-button{class: "btn btn-primary"}<
|
20
19
|
%i.icon-circle-blank
|
21
20
|
= t('common.login')
|
@@ -8,23 +8,32 @@
|
|
8
8
|
かつ プログラムの名前に "01.rb" を指定する
|
9
9
|
かつ テキストエディタに "puts Hello, World!'" を入力済みである
|
10
10
|
|
11
|
-
シナリオ: 実行前にプログラムのシンタックスエラーをチェックできる
|
12
|
-
もし "実行ボタン" をクリックする
|
11
|
+
# シナリオ: 実行前にプログラムのシンタックスエラーをチェックできる
|
12
|
+
# もし "実行ボタン" をクリックする
|
13
|
+
# かつ JavaScriptによるリクエストが終わるまで待つ
|
14
|
+
#
|
15
|
+
# ならば "メッセージ" に "エラー" を含むこと
|
16
|
+
# かつ "メッセージ" に "プログラムを実行できませんでした" を含むこと
|
17
|
+
# かつ "メッセージ" に "1行、19文字: syntax error, unexpected tSTRING_BEG, expecting keyword_do or '{' or '('" を含むこと
|
18
|
+
# かつ "メッセージ" に "1行: unterminated string meets end of file" を含むこと
|
19
|
+
|
20
|
+
シナリオ: プログラム実行時に、実行したプログラムによって発生したエラーメッセージを表示できる
|
21
|
+
もし テキストエディタに "raise '不具合'" を入力済みである
|
22
|
+
かつ "実行ボタン" をクリックする
|
13
23
|
かつ JavaScriptによるリクエストが終わるまで待つ
|
14
24
|
|
15
25
|
ならば "メッセージ" に "エラー" を含むこと
|
16
26
|
かつ "メッセージ" に "プログラムを実行できませんでした" を含むこと
|
17
|
-
かつ "メッセージ" に "1
|
18
|
-
かつ "メッセージ" に "1行: unterminated string meets end of file" を含むこと
|
19
|
-
|
20
|
-
シナリオ: 既存のファイルがある状態でプログラムを実行し、上書き保存をキャンセルする
|
21
|
-
前提 ホームディレクトリに "n = 0" という内容の "01.rb" が存在する
|
22
|
-
かつ 確認ダイアログをキャンセルするようにしておく
|
23
|
-
|
24
|
-
もし "実行ボタン" をクリックする
|
25
|
-
かつ JavaScriptによるリクエストが終わるまで待つ
|
26
|
-
かつ JavaScriptによるリクエストが終わるまで待つ
|
27
|
+
かつ "メッセージ" に "1行: in `<main>': 不具合 (RuntimeError)" を含むこと
|
27
28
|
|
28
|
-
|
29
|
-
|
30
|
-
かつ
|
29
|
+
# シナリオ: 既存のファイルがある状態でプログラムを実行し、上書き保存をキャンセルする
|
30
|
+
# 前提 ホームディレクトリに "n = 0" という内容の "01.rb" が存在する
|
31
|
+
# かつ 確認ダイアログをキャンセルするようにしておく
|
32
|
+
#
|
33
|
+
# もし "実行ボタン" をクリックする
|
34
|
+
# かつ JavaScriptによるリクエストが終わるまで待つ
|
35
|
+
# かつ JavaScriptによるリクエストが終わるまで待つ
|
36
|
+
#
|
37
|
+
# ならば 確認メッセージ "前に01.rbという名前でセーブしているけど本当にセーブしますか?\nセーブすると前に作成したプログラムは消えてしまうよ!" を表示すること
|
38
|
+
# かつ "メッセージ" に "プログラムの実行をキャンセルしました" を含むこと
|
39
|
+
# かつ ホームディレクトリの "01.rb" の内容が "n = 0" であること
|
@@ -94,3 +94,33 @@
|
|
94
94
|
もし "サブメニューボタン" をクリックする
|
95
95
|
|
96
96
|
ならば "サブメニュー" に "ログアウト" を含むこと
|
97
|
+
|
98
|
+
シナリオ: enabled_must_signinが有効な状態で、いったんログインしてからリロードするとログイン状態を維持できるのですが、その状態でログアウトしたときに表示されるログイン画面をESCキーや「やめる」ボタンでキャンセルできないこと
|
99
|
+
前提 次のRubyのスクリプトを実行する:
|
100
|
+
"""
|
101
|
+
Preference["enabled_must_signin"] = true
|
102
|
+
"""
|
103
|
+
|
104
|
+
もし "/" にアクセスする
|
105
|
+
かつ JavaScriptによる処理が終わるまで待つ
|
106
|
+
|
107
|
+
ならば "#signin-modal" が表示されていること
|
108
|
+
かつ "#signin-modal-cancel-button" が表示されていないこと
|
109
|
+
|
110
|
+
ならば "#signin-modal" が表示されていること
|
111
|
+
|
112
|
+
もし "signin-modal-username" に "1102" を指定する
|
113
|
+
かつ "signin-modal-ok-button" をクリックする
|
114
|
+
かつ JavaScriptによる処理が終わるまで待つ
|
115
|
+
|
116
|
+
ならば "#signin-modal" が表示されていないこと
|
117
|
+
|
118
|
+
もし ページをリロードする
|
119
|
+
|
120
|
+
ならば "#main-menu" に "ログイン" を含まないこと
|
121
|
+
かつ "#main-menu" に "1102" を含むこと
|
122
|
+
|
123
|
+
もし ログアウトする
|
124
|
+
|
125
|
+
ならば "#signin-modal" が表示されていること
|
126
|
+
かつ "#signin-modal-cancel-button" が表示されていないこと
|
data/spec/spec_helper.rb
CHANGED
@@ -101,7 +101,10 @@ RSpec.configure do |config|
|
|
101
101
|
config.include FeatureHelper, type: :feature
|
102
102
|
|
103
103
|
config.before(:all) do
|
104
|
-
Preference.
|
104
|
+
Preference.user_defaults.each do |key, value|
|
105
|
+
Preference[key] = value
|
106
|
+
end
|
107
|
+
Preference.admin_defaults.each do |key, value|
|
105
108
|
Preference[key] = value
|
106
109
|
end
|
107
110
|
Preference["disabled_add_character_from_beginning"] = true
|
data/spec/steps/when_steps.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: smalruby-editor
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kouji Takao
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-05-
|
11
|
+
date: 2015-05-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -483,8 +483,8 @@ files:
|
|
483
483
|
- public/422.html
|
484
484
|
- public/500.html
|
485
485
|
- public/apple-touch-icon.png
|
486
|
-
- public/assets/application-
|
487
|
-
- public/assets/application-
|
486
|
+
- public/assets/application-d994c5cb05da6b9c674f86f27d48f991.js
|
487
|
+
- public/assets/application-d994c5cb05da6b9c674f86f27d48f991.js.gz
|
488
488
|
- public/assets/application-f879948b97a781e3d996535a2a0585fa.css
|
489
489
|
- public/assets/application-f879948b97a781e3d996535a2a0585fa.css.gz
|
490
490
|
- public/assets/blockly/msg/js/en_us-d5e1938b2d57c1df954f4411b9165d10.js
|
@@ -507,7 +507,7 @@ files:
|
|
507
507
|
- public/assets/jquery-ui/ui-icons_888888_256x240-ce584ffa171c3ea9a018cf0d7bec65c8.png
|
508
508
|
- public/assets/jquery-ui/ui-icons_cd0a0a_256x240-747e96029e8dedcabc224e5f7d1f2ede.png
|
509
509
|
- public/assets/loading-e77296be32d066d3e29d3bf9803fa417.gif
|
510
|
-
- public/assets/manifest-
|
510
|
+
- public/assets/manifest-09b9c583b55684372f2cf9fa635e4e2e.json
|
511
511
|
- public/assets/msg/en_us-a98cc83805d44f5f675fe6eac2c955ec.js
|
512
512
|
- public/assets/msg/en_us-a98cc83805d44f5f675fe6eac2c955ec.js.gz
|
513
513
|
- public/assets/msg/ja-243b0a55ef1086ef2180af94c422cb5e.js
|