smalruby-editor 0.0.1 → 0.0.2

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.

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