smalruby-editor 0.0.1 → 0.0.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 04a3b9b6a1c33d83c3d8cf22ea3d005197cafddd
4
- data.tar.gz: f106c0645cf21b7421fc22f9a3d194a7790c9b1d
3
+ metadata.gz: 360c42f513b37db6a8f84589dba9fd3c5c7e0d6e
4
+ data.tar.gz: 93b6d05ffa2ccf9a84e9063b2c4fabc5296ee695
5
5
  SHA512:
6
- metadata.gz: 274105e6a270aff53e6102e4b97d83e971922da06748b3a3526c86bc8abeba9f283cfd135331d8058d704d99c3bc8d873d38ffd0da91ff361b146eb48004b8b1
7
- data.tar.gz: 39fb4f0982470bbe4a6f6012a09df6860a7474d0bb8ddf71ec2828137c0084a94f96404023e9849ac7fdba7b194991c86641278c0142da7601d4787f83be8c11
6
+ metadata.gz: c7abc3976abf11abd20e49524f8a0505f806a7652fa387603cc73f270a2c7facf698941a56a9f87cac11fb795be6bedf9e19486f4642f56834c5840e2166a469
7
+ data.tar.gz: 56c0bdcd66fa1dba319f9abb89bea2101a42c99f8215bc760e6a4d6e6a19f89e7e72ba1caa04043d6af0cf79121ef322595921fff41ea44a7bc01efec5c0a424
data/Gemfile CHANGED
@@ -34,6 +34,10 @@ gem 'font-awesome-rails'
34
34
 
35
35
  gem 'jquery-fileupload-rails', github: 'demiazz/jquery-fileupload-rails'
36
36
 
37
+ gem 'shared-mime-info'
38
+
39
+ gem 'launchy'
40
+
37
41
  group :doc do
38
42
  # bundle exec rake doc:rails generates the API under doc/api.
39
43
  gem 'sdoc', require: false
data/Gemfile.lock CHANGED
@@ -39,6 +39,7 @@ GEM
39
39
  multi_json (~> 1.3)
40
40
  thread_safe (~> 0.1)
41
41
  tzinfo (~> 0.3.37)
42
+ addressable (2.3.5)
42
43
  arel (4.0.1)
43
44
  ast (1.1.0)
44
45
  atomic (1.1.14)
@@ -95,6 +96,8 @@ GEM
95
96
  multi_json (~> 1.0)
96
97
  rspec (~> 2.0)
97
98
  kgio (2.8.1)
99
+ launchy (2.4.1)
100
+ addressable (~> 2.3)
98
101
  mail (2.5.4)
99
102
  mime-types (~> 1.16)
100
103
  treetop (~> 1.4.8)
@@ -178,6 +181,7 @@ GEM
178
181
  multi_json (~> 1.0)
179
182
  rubyzip (~> 1.0.0)
180
183
  websocket (~> 1.0.4)
184
+ shared-mime-info (0.2.5)
181
185
  shoulda-matchers (2.4.0)
182
186
  activesupport (>= 3.0.0)
183
187
  simplecov (0.8.2)
@@ -241,6 +245,7 @@ DEPENDENCIES
241
245
  jquery-fileupload-rails!
242
246
  jquery-rails
243
247
  json_spec
248
+ launchy
244
249
  mysql2
245
250
  poltergeist
246
251
  rails (= 4.0.1)
@@ -250,6 +255,7 @@ DEPENDENCIES
250
255
  sass-rails (~> 4.0.0)
251
256
  sdoc
252
257
  selenium-webdriver
258
+ shared-mime-info
253
259
  shoulda-matchers
254
260
  sqlite3
255
261
  turbolinks
@@ -47,6 +47,14 @@ $ ->
47
47
  data.submit()
48
48
  done: (e, data) ->
49
49
  file = data.result
50
- $('#filename').val(file.name)
51
- session.getDocument().setValue(file.source)
50
+ if file.error
51
+ msg = $('<div class="alert alert-error" style="display: none">')
52
+ .append('<button type="button" class="close" data-dismiss="alert">×</button>')
53
+ .append('<h4><i class="icon-exclamation-sign"></i>エラー</h4>')
54
+ .append(file.name + 'は' + file.error)
55
+ $('#messages').append(msg)
56
+ msg.fadeIn('slow').delay(5000).fadeOut('slow')
57
+ else
58
+ $('#filename').val(file.name)
59
+ session.getDocument().setValue(file.source)
52
60
  )
@@ -2,6 +2,12 @@
2
2
  // They will automatically be included in application.css.
3
3
  // You can use Sass (SCSS) here: http://sass-lang.com/
4
4
 
5
+ #messages {
6
+ position: absolute;
7
+ right: 20px;
8
+ z-index: 9999;
9
+ }
10
+
5
11
  #text-editor {
6
12
  position: absolute;
7
13
  left: 0;
@@ -1,3 +1,4 @@
1
+ # -*- coding: utf-8 -*-
1
2
  require 'nkf'
2
3
 
3
4
  class EditorController < ApplicationController
@@ -11,12 +12,18 @@ class EditorController < ApplicationController
11
12
 
12
13
  def load_file
13
14
  f = params['load_file']
15
+ mime_type = MIME.check(f.path)
16
+ content_type = mime_type.try(:content_type) || f.content_type
14
17
  res = {
15
18
  name: f.original_filename,
16
- type: f.content_type,
19
+ type: content_type,
17
20
  size: f.size,
18
- source: NKF.nkf('-w', f.read),
19
21
  }
22
+ if /\Atext\/plain/ =~ content_type
23
+ res[:source] = NKF.nkf('-w', f.read)
24
+ else
25
+ res[:error] = 'Rubyのプログラムではありません'
26
+ end
20
27
  render json: res, content_type: request.format
21
28
  end
22
29
  end
@@ -13,4 +13,8 @@
13
13
  </div>
14
14
  </div>
15
15
 
16
+ <div id="messages">
17
+ </div>
18
+
16
19
  <div id="text-editor"></div>
20
+
data/bin/smalruby-editor CHANGED
@@ -1,8 +1,11 @@
1
1
  #!/usr/bin/env ruby
2
2
  # -*- coding: utf-8 -*-
3
3
 
4
+ require 'pathname'
5
+
4
6
  ENV['RAILS_ENV'] = 'standalone'
5
- ENV['SECRET_KEY_BASE'] = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
7
+ ENV['SECRET_KEY_BASE'] ||= 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
8
+ ENV['SMALRUBY_EDITOR_HOME'] ||= Pathname('~/.smalruby-editor').expand_path.to_s
6
9
 
7
10
  APP_PATH = File.expand_path('../../config/application', __FILE__)
8
11
  require_relative '../config/boot'
@@ -11,45 +14,11 @@ lib = File.expand_path('../../lib', __FILE__)
11
14
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
12
15
  require 'smalruby_editor'
13
16
 
14
- home_dir = Pathname('~/.smalruby-editor').expand_path
15
- ENV['SMALRUBY_EDITOR_HOME'] = home_dir.to_s
16
- log_dir, db_dir, config_dir, tmp_dir = *%w(log db config tmp).map { |s|
17
- home_dir.join(s)
18
- }.tap { |dir|
19
- FileUtils.mkdir_p(dir)
20
- }
21
-
22
- database_yml_path = config_dir.join('database.yml')
23
- db_path = db_dir.join("#{ENV['RAILS_ENV']}.sqlite3").to_s
24
- if !File.exist?(database_yml_path)
25
- File.open(database_yml_path, 'w') do |f|
26
- f.write(<<-EOS)
27
- standalone:
28
- adapter: sqlite3
29
- database: #{db_path}
30
- pool: 5
31
- timeout: 5000
32
- EOS
33
- end
34
- end
35
-
36
- #Create required tmp directories if not found
37
- %w(cache pids sessions sockets).each do |dir_to_make|
38
- FileUtils.mkdir_p(tmp_dir.join(dir_to_make))
39
- end
40
-
41
17
  Dir.chdir(File.expand_path('../../', APP_PATH))
42
18
  require 'rails/commands/server'
43
19
 
44
20
  module Rails
45
21
  class Server < ::Rack::Server
46
- def initialize(tmp_dir)
47
- super()
48
- set_environment
49
-
50
- @tmp_dir = tmp_dir
51
- end
52
-
53
22
  def start
54
23
  url = "#{options[:SSLEnable] ? 'https' : 'http'}://#{options[:Host]}:#{options[:Port]}"
55
24
  puts "=> Booting #{ActiveSupport::Inflector.demodulize(server)}"
@@ -58,6 +27,24 @@ module Rails
58
27
  trap(:INT) { exit }
59
28
  puts "=> Ctrl-C to shutdown server" unless options[:daemonize]
60
29
 
30
+ unless options[:daemonize]
31
+ wrapped_app # touch the app so the logger is set up
32
+
33
+ console = ActiveSupport::Logger.new($stdout)
34
+ console.formatter = Rails.logger.formatter
35
+ console.level = Rails.logger.level
36
+
37
+ Rails.logger.extend(ActiveSupport::Logger.broadcast(console))
38
+ end
39
+
40
+ uri = "http://localhost:#{options[:Port]}"
41
+ launchy = Launchy.open(uri) do |exception|
42
+ puts "Attempted to open #{uri} and failed because #{exception}"
43
+ end
44
+ if launchy.respond_to?(:join)
45
+ launchy.join
46
+ end
47
+
61
48
  super
62
49
  ensure
63
50
  # The '-h' option calls exit before @options is set.
@@ -67,19 +54,19 @@ module Rails
67
54
 
68
55
  def default_options
69
56
  super.merge({
70
- Port: 3000,
57
+ Port: 8087,
71
58
  DoNotReverseLookup: true,
72
59
  environment: (ENV['RAILS_ENV'] || ENV['RACK_ENV'] || "development").dup,
73
60
  daemonize: false,
74
61
  debugger: false,
75
- pid: @tmp_dir.join("pids/server.pid").to_s,
62
+ pid: Pathname(ENV['SMALRUBY_EDITOR_HOME']).join("tmp/pids/server.pid").to_s,
76
63
  config: File.expand_path("config.ru")
77
64
  })
78
65
  end
79
66
  end
80
67
  end
81
68
 
82
- Rails::Server.new(tmp_dir).tap do |server|
69
+ Rails::Server.new.tap do |server|
83
70
  require APP_PATH
84
71
  Dir.chdir(Rails.application.root)
85
72
  server.start
@@ -4,7 +4,9 @@ SmalrubyEditor::Application.configure do
4
4
  if !ENV['SMALRUBY_EDITOR_HOME']
5
5
  fail 'you must set SMALRUBY_EDITOR_HOME environment variable.'
6
6
  end
7
- home_dir = Pathname(ENV['SMALRUBY_EDITOR_HOME']).expand_path
7
+
8
+ home_dir = SmalrubyEditor.create_home_directory
9
+
8
10
  config.paths.add 'config/database', with: home_dir.join('config/database.yml')
9
11
  config.paths.add 'log', with: home_dir.join("log/#{Rails.env}.log")
10
12
  config.paths.add 'tmp', with: home_dir.join('tmp')
@@ -1,4 +1,32 @@
1
1
  require 'smalruby_editor/version'
2
2
 
3
3
  module SmalrubyEditor
4
+ def create_home_directory(home_dir = nil)
5
+ if home_dir.blank?
6
+ home_dir = Pathname(ENV['SMALRUBY_EDITOR_HOME'] || '~/.smalruby-editor').expand_path
7
+ end
8
+
9
+ %w(log db config tmp/cache tmp/pids tmp/sessions tmp/sockets).map { |s|
10
+ home_dir.join(s)
11
+ }.each do |dir|
12
+ FileUtils.mkdir_p(dir)
13
+ end
14
+
15
+ database_yml_path = home_dir.join('config', 'database.yml')
16
+ db_path = home_dir.join('db', 'standalone.sqlite3')
17
+ if !File.exist?(database_yml_path)
18
+ File.open(database_yml_path, 'w') do |f|
19
+ f.write(<<-EOS)
20
+ standalone:
21
+ adapter: sqlite3
22
+ database: #{db_path}
23
+ pool: 5
24
+ timeout: 5000
25
+ EOS
26
+ end
27
+ end
28
+
29
+ home_dir
30
+ end
31
+ module_function :create_home_directory
4
32
  end
@@ -1,3 +1,3 @@
1
1
  module SmalrubyEditor
2
- VERSION = '0.0.1'
2
+ VERSION = '0.0.2'
3
3
  end
@@ -40,6 +40,7 @@ Gem::Specification.new do |spec|
40
40
  ['flatstrap-sass'],
41
41
  ['font-awesome-rails'],
42
42
  ['jquery-fileupload-rails'],
43
+ ['launchy'],
43
44
  ]
44
45
  runtime_dependencies.each do |args|
45
46
  spec.add_runtime_dependency *args
@@ -42,7 +42,7 @@
42
42
  かつ JavaScriptによるリクエストが終わるまで待つ
43
43
 
44
44
  ならば "テキストエディタ" に "files/01.rb" を読み込む
45
- かつ "プログラム名の入力欄" "01.rb" が入力される
45
+ かつ "プログラム名の入力欄" "01.rb" である
46
46
 
47
47
  シナリオ: プログラムを入力済み状態でプログラムを読み込む
48
48
  前提 "エディタ" 画面を表示する
@@ -55,4 +55,14 @@
55
55
  かつ JavaScriptによるリクエストが終わるまで待つ
56
56
 
57
57
  ならば "テキストエディタ" に "files/01.rb" を読み込む
58
- かつ "プログラム名の入力欄" "01.rb" が入力される
58
+ かつ "プログラム名の入力欄" "01.rb" である
59
+
60
+ シナリオ: ロードボタンを押して画像を読み込もうとする
61
+ 前提 "エディタ" 画面を表示する
62
+
63
+ もし "files/favicon.ico" をアップロードする
64
+ かつ JavaScriptによるリクエストが終わるまで待つ
65
+
66
+ ならば "テキストエディタ" のプログラムは "" である
67
+ かつ "プログラム名の入力欄" は "" である
68
+ かつ "メッセージ" に "favicon.icoはRubyのプログラムではありません" を含む
@@ -30,23 +30,44 @@ describe EditorController do
30
30
  end
31
31
 
32
32
  describe "プログラムを読み込む (POST 'load_file')" do
33
- let(:load_file) { fixture_file_upload('files/01.rb') }
34
-
35
33
  before do
36
34
  post 'load_file', load_file: load_file
37
35
  end
38
36
 
39
- it { expect(response).to be_success }
40
-
41
- it 'アップロードされたプログラムの情報をJSON形式でダウンロードできる' do
42
- load_file.rewind
43
- file = {
44
- name: load_file.original_filename,
45
- type: load_file.content_type,
46
- size: load_file.size,
47
- source: NKF.nkf('-w', load_file.read),
48
- }
49
- expect(response.body).to be_json_eql(file.to_json)
37
+ describe '正常系' do
38
+ let(:load_file) { fixture_file_upload('files/01.rb', 'text/plain') }
39
+
40
+ it { expect(response).to be_success }
41
+
42
+ it 'アップロードされたプログラムの情報をJSON形式でダウンロードできる' do
43
+ load_file.rewind
44
+ file = {
45
+ name: load_file.original_filename,
46
+ type: load_file.content_type,
47
+ size: load_file.size,
48
+ source: load_file.read.force_encoding('utf-8'),
49
+ }
50
+ expect(response.body).to be_json_eql(file.to_json)
51
+ end
52
+ end
53
+
54
+ describe '異常系' do
55
+ context '画像をアップロードした場合' do
56
+ let(:load_file) { fixture_file_upload('files/favicon.ico',
57
+ 'application/octet-stream') }
58
+
59
+ it { expect(response).to be_success }
60
+
61
+ it 'エラーを返す' do
62
+ file = {
63
+ name: load_file.original_filename,
64
+ error: 'Rubyのプログラムではありません',
65
+ }
66
+ file.each do |path, value|
67
+ expect(response.body).to include_json(value.to_json).at_path(path.to_s)
68
+ end
69
+ end
70
+ end
50
71
  end
51
72
  end
52
73
  end
Binary file
@@ -0,0 +1,64 @@
1
+ # -*- coding: utf-8 -*-
2
+ require_relative '../spec_helper'
3
+ require 'smalruby_editor'
4
+
5
+ describe SmalrubyEditor do
6
+ describe '.create_home_directory' do
7
+ before(:all) do
8
+ @home_dir = Pathname(Dir.tmpdir).join('.smalruby-editor')
9
+ end
10
+
11
+ shared_examples 'ホームディレクトリを作成する', create_home_directory: true do
12
+ after(:all) do
13
+ FileUtils.rm_rf(@home_dir)
14
+ end
15
+
16
+ it 'ホームディレクトリを作成する' do
17
+ expect(@home_dir).to be_directory
18
+ end
19
+
20
+ describe 'ホームディレクトリ' do
21
+ %w(config db log tmp tmp/cache tmp/pids tmp/sessions tmp/sockets).each do |dir|
22
+ it "#{dir}ディレクトリを作成する" do
23
+ expect(@home_dir.join(dir)).to be_directory
24
+ end
25
+ end
26
+
27
+ describe 'configディレクトリ' do
28
+ let(:path) { @home_dir.join('config', 'database.yml') }
29
+
30
+ it 'database.ymlを作成する' do
31
+ expect(path).to be_exist
32
+ end
33
+
34
+ it 'database.ymlの内容が正しい' do
35
+ expect(path.read).to eq(<<-EOS.strip_heredoc)
36
+ standalone:
37
+ adapter: sqlite3
38
+ database: #{@home_dir.join('db', 'standalone.sqlite3')}
39
+ pool: 5
40
+ timeout: 5000
41
+ EOS
42
+ end
43
+ end
44
+ end
45
+ end
46
+
47
+ it '戻り値は作成したホームディレクトリである' do
48
+ expect(SmalrubyEditor.create_home_directory(@home_dir)).to eq(@home_dir)
49
+ end
50
+
51
+ context '引数を指定した場合', create_home_directory: true do
52
+ before(:all) do
53
+ SmalrubyEditor.create_home_directory(@home_dir)
54
+ end
55
+ end
56
+
57
+ describe '引数を指定しない場合は環境変数SMALRUBY_EDITOR_HOMEに従う', create_home_directory: true do
58
+ before(:all) do
59
+ ENV['SMALRUBY_EDITOR_HOME'] = @home_dir.to_s
60
+ SmalrubyEditor.create_home_directory
61
+ end
62
+ end
63
+ end
64
+ end
@@ -1,106 +1,123 @@
1
- # encoding: utf-8
2
-
3
- name_info = {
4
- 'トップページ' => {
5
- path: '/',
6
- },
7
- 'エディタ' => {
8
- path: '/',
9
- },
10
-
11
- 'Rubyタブ' => {
12
- id: 'ruby-tab',
13
- selector: '#ruby-tab',
14
- },
15
- 'テキストエディタ' => {
16
- id: 'text-editor',
17
- selector: '#text-editor',
18
- },
19
- 'プログラム名の入力欄' => {
20
- id: 'filename',
21
- selector: '#filename',
22
- },
23
- 'セーブボタン' => {
24
- id: 'save-button',
25
- selector: '#save-button',
26
- },
27
- }
28
-
29
- step ':name にアクセスする' do |name|
30
- visit name_info[name][:path]
31
- end
32
-
33
- step ':name が表示されていること' do |name|
34
- expect(page).to have_selector(name_info[name][:selector])
35
- end
36
-
37
- step ':name 画面を表示する' do |name|
38
- visit name_info[name][:path]
39
- end
40
-
41
- step ':text_editor にプログラムを入力済みである:' do |text_editor, source|
42
- page.execute_script(<<-JS)
43
- ace.edit('#{name_info[text_editor][:id]}')
44
- .getSession()
45
- .getDocument()
46
- .setValue('#{source}')
47
- JS
48
- end
49
-
50
- step 'プログラムの名前に :filename を指定する' do |filename|
51
- fill_in('filename', with: filename)
52
- end
53
-
54
- step ':name をクリックする' do |name|
55
- click_button(name_info[name][:id])
56
- end
57
-
58
- step ':filename をダウンロードする' do |filename|
59
- expect(page.response_headers['Content-Disposition'])
60
- .to eq("attachment; filename=\"#{filename}\"")
61
- expect(page.response_headers['Content-Type'])
62
- .to eq('text/plain; charset=utf-8')
63
- end
64
-
65
- step 'ダウンロードしたファイルの内容が正しい:' do |source|
66
- # TODO
67
- end
68
-
69
- step 'ダウンロードしない' do
70
- # TODO
71
- end
72
-
73
- step ':name にフォーカスが移る' do |name|
74
- # 現在のPhantomJSでは$(':focus')は動作しない
75
- # https://github.com/netzpirat/guard-jasmine/issues/48
76
- expect(page.evaluate_script(<<-JS)).to be_true
77
- $('#filename').get(0) == document.activeElement
78
- JS
79
- end
80
-
81
- step ':filename をアップロードする' do |filename|
82
- page.execute_script("$('#load-file').show()")
83
- attach_file('load-file', Pathname(fixture_path).join(filename))
84
- end
85
-
86
- step ':text_editor に :filename を読み込む' do |text_editor, filename|
87
- expect(page.evaluate_script(<<-JS)).to eq(Pathname(fixture_path).join(filename).read)
88
- ace.edit('#{name_info[text_editor][:id]}')
89
- .getSession()
90
- .getDocument()
91
- .getValue()
92
- JS
93
- end
94
-
95
- step ':name に :value が入力される' do |name, value|
96
- expect(page.evaluate_script(<<-JS)).to eq(value)
97
- $('#{name_info[name][:selector]}').val()
98
- JS
99
- end
100
-
101
- step 'JavaScriptによるリクエストが終わるまで待つ' do
102
- start_time = Time.now
103
- page.evaluate_script('jQuery.isReady&&jQuery.active==0').class.should_not eql(String) until page.evaluate_script('jQuery.isReady&&jQuery.active==0') or (start_time + 5.seconds) < Time.now do
104
- sleep 1
105
- end
106
- end
1
+ # encoding: utf-8
2
+
3
+ name_info = {
4
+ 'トップページ' => {
5
+ path: '/',
6
+ },
7
+ 'エディタ' => {
8
+ path: '/',
9
+ },
10
+
11
+ 'Rubyタブ' => {
12
+ id: 'ruby-tab',
13
+ selector: '#ruby-tab',
14
+ },
15
+ 'テキストエディタ' => {
16
+ id: 'text-editor',
17
+ selector: '#text-editor',
18
+ },
19
+ 'プログラム名の入力欄' => {
20
+ id: 'filename',
21
+ selector: '#filename',
22
+ },
23
+ 'セーブボタン' => {
24
+ id: 'save-button',
25
+ selector: '#save-button',
26
+ },
27
+ 'メッセージ' => {
28
+ id: 'messages',
29
+ selector: '#messages',
30
+ },
31
+ }
32
+
33
+ step ':name にアクセスする' do |name|
34
+ visit name_info[name][:path]
35
+ end
36
+
37
+ step ':name が表示されていること' do |name|
38
+ expect(page).to have_selector(name_info[name][:selector])
39
+ end
40
+
41
+ step ':name 画面を表示する' do |name|
42
+ visit name_info[name][:path]
43
+ end
44
+
45
+ step ':text_editor にプログラムを入力済みである:' do |text_editor, source|
46
+ page.execute_script(<<-JS)
47
+ ace.edit('#{name_info[text_editor][:id]}')
48
+ .getSession()
49
+ .getDocument()
50
+ .setValue('#{source}')
51
+ JS
52
+ end
53
+
54
+ step 'プログラムの名前に :filename を指定する' do |filename|
55
+ fill_in('filename', with: filename)
56
+ end
57
+
58
+ step ':name をクリックする' do |name|
59
+ click_button(name_info[name][:id])
60
+ end
61
+
62
+ step ':filename をダウンロードする' do |filename|
63
+ expect(page.response_headers['Content-Disposition'])
64
+ .to eq("attachment; filename=\"#{filename}\"")
65
+ expect(page.response_headers['Content-Type'])
66
+ .to eq('text/plain; charset=utf-8')
67
+ end
68
+
69
+ step 'ダウンロードしたファイルの内容が正しい:' do |source|
70
+ # TODO
71
+ end
72
+
73
+ step 'ダウンロードしない' do
74
+ # TODO
75
+ end
76
+
77
+ step ':name にフォーカスが移る' do |name|
78
+ # 現在のPhantomJSでは$(':focus')は動作しない
79
+ # https://github.com/netzpirat/guard-jasmine/issues/48
80
+ expect(page.evaluate_script(<<-JS)).to be_true
81
+ $('#filename').get(0) == document.activeElement
82
+ JS
83
+ end
84
+
85
+ step ':filename をアップロードする' do |filename|
86
+ page.execute_script("$('#load-file').show()")
87
+ attach_file('load-file', Pathname(fixture_path).join(filename))
88
+ end
89
+
90
+ step ':text_editor に :filename を読み込む' do |text_editor, filename|
91
+ expect(page.evaluate_script(<<-JS)).to eq(Pathname(fixture_path).join(filename).read)
92
+ ace.edit('#{name_info[text_editor][:id]}')
93
+ .getSession()
94
+ .getDocument()
95
+ .getValue()
96
+ JS
97
+ end
98
+
99
+ step 'JavaScriptによるリクエストが終わるまで待つ' do
100
+ start_time = Time.now
101
+ page.evaluate_script('jQuery.isReady&&jQuery.active==0').class.should_not eql(String) until page.evaluate_script('jQuery.isReady&&jQuery.active==0') or (start_time + 5.seconds) < Time.now do
102
+ sleep 1
103
+ end
104
+ end
105
+
106
+ step ':text_editor のプログラムは :value である' do |text_editor, value|
107
+ expect(page.evaluate_script(<<-JS)).to eq(value)
108
+ ace.edit('#{name_info[text_editor][:id]}')
109
+ .getSession()
110
+ .getDocument()
111
+ .getValue()
112
+ JS
113
+ end
114
+
115
+ step ':name は :value である' do |name, value|
116
+ expect(page.evaluate_script(<<-JS)).to eq(value)
117
+ $('#{name_info[name][:selector]}').val()
118
+ JS
119
+ end
120
+
121
+ step ':name に :message を含む' do |name, message|
122
+ expect(page.find(name_info[name][:selector])).to have_content(message)
123
+ end
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.0.1
4
+ version: 0.0.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: 2013-11-28 00:00:00.000000000 Z
11
+ date: 2013-12-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -178,6 +178,20 @@ dependencies:
178
178
  - - '>='
179
179
  - !ruby/object:Gem::Version
180
180
  version: '0'
181
+ - !ruby/object:Gem::Dependency
182
+ name: launchy
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - '>='
186
+ - !ruby/object:Gem::Version
187
+ version: '0'
188
+ type: :runtime
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - '>='
193
+ - !ruby/object:Gem::Version
194
+ version: '0'
181
195
  - !ruby/object:Gem::Dependency
182
196
  name: bundler
183
197
  requirement: !ruby/object:Gem::Requirement
@@ -288,15 +302,17 @@ files:
288
302
  - spec/acceptance/editor.feature
289
303
  - spec/controllers/editor_controller_spec.rb
290
304
  - spec/fixtures/files/01.rb
305
+ - spec/fixtures/files/favicon.ico
291
306
  - spec/helpers/editor_helper_spec.rb
307
+ - spec/lib/smalruby_editor_spec.rb
292
308
  - spec/spec_helper.rb
293
309
  - spec/steps/editor_steps.rb
294
310
  - vendor/assets/javascripts/.keep
295
311
  - vendor/assets/stylesheets/.keep
296
- - public/assets/application-deadcb20ebf21fdba3bf726d1c538603.css
297
- - public/assets/application-deadcb20ebf21fdba3bf726d1c538603.css.gz
298
- - public/assets/application-f65f86fb796f63a8dff6fe75592695da.js
299
- - public/assets/application-f65f86fb796f63a8dff6fe75592695da.js.gz
312
+ - public/assets/application-1cd3f5170c998a23c96c9c853c2519a0.js
313
+ - public/assets/application-1cd3f5170c998a23c96c9c853c2519a0.js.gz
314
+ - public/assets/application-7dfa749c08d706f7273aa6f60cfafefa.css
315
+ - public/assets/application-7dfa749c08d706f7273aa6f60cfafefa.css.gz
300
316
  - public/assets/favicon-c7ae857bb9d06de8742ae2d337157e83.ico
301
317
  - public/assets/loading-e8e6dd7833131c92a6c3b9c8ccc6a6ac.gif
302
318
  - public/assets/manifest-321187c7a24ba9122c18505055065b0f.json
@@ -362,6 +378,8 @@ test_files:
362
378
  - spec/acceptance/editor.feature
363
379
  - spec/controllers/editor_controller_spec.rb
364
380
  - spec/fixtures/files/01.rb
381
+ - spec/fixtures/files/favicon.ico
365
382
  - spec/helpers/editor_helper_spec.rb
383
+ - spec/lib/smalruby_editor_spec.rb
366
384
  - spec/spec_helper.rb
367
385
  - spec/steps/editor_steps.rb