smalruby-editor 0.0.8-x86-mingw32

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.

Files changed (110) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +25 -0
  3. data/.rspec +4 -0
  4. data/.rubocop.yml +19 -0
  5. data/.ruby-version +1 -0
  6. data/.simplecov +7 -0
  7. data/.travis.yml +23 -0
  8. data/LEGAL +13 -0
  9. data/LICENSE +22 -0
  10. data/Procfile +1 -0
  11. data/README.rdoc +46 -0
  12. data/Rakefile +9 -0
  13. data/app/assets/images/.keep +0 -0
  14. data/app/assets/images/favicon.ico +0 -0
  15. data/app/assets/javascripts/application.js +21 -0
  16. data/app/assets/javascripts/editor.js.coffee.erb +139 -0
  17. data/app/assets/stylesheets/application.css +19 -0
  18. data/app/assets/stylesheets/editor.css.scss +19 -0
  19. data/app/assets/stylesheets/flatstrap-custom.css.scss +2 -0
  20. data/app/controllers/application_controller.rb +5 -0
  21. data/app/controllers/concerns/.keep +0 -0
  22. data/app/controllers/editor_controller.rb +5 -0
  23. data/app/controllers/source_codes_controller.rb +106 -0
  24. data/app/helpers/application_helper.rb +2 -0
  25. data/app/helpers/editor_helper.rb +2 -0
  26. data/app/mailers/.keep +0 -0
  27. data/app/models/.keep +0 -0
  28. data/app/models/concerns/.keep +0 -0
  29. data/app/models/source_code.rb +49 -0
  30. data/app/views/editor/index.html.erb +23 -0
  31. data/app/views/layouts/application.html.erb +15 -0
  32. data/bin/bundle +3 -0
  33. data/bin/rails +4 -0
  34. data/bin/rake +4 -0
  35. data/bin/smalruby-editor +80 -0
  36. data/config/application.rb +16 -0
  37. data/config/boot.rb +17 -0
  38. data/config/database.yml.mysql2 +48 -0
  39. data/config/database.yml.sqlite3 +31 -0
  40. data/config/database.yml.travis +5 -0
  41. data/config/environment.rb +5 -0
  42. data/config/environments/development.rb +30 -0
  43. data/config/environments/production.rb +86 -0
  44. data/config/environments/standalone.rb +16 -0
  45. data/config/environments/test.rb +46 -0
  46. data/config/initializers/backtrace_silencers.rb +9 -0
  47. data/config/initializers/filter_parameter_logging.rb +4 -0
  48. data/config/initializers/inflections.rb +16 -0
  49. data/config/initializers/mime_types.rb +5 -0
  50. data/config/initializers/secret_token.rb +17 -0
  51. data/config/initializers/session_store.rb +4 -0
  52. data/config/initializers/wrap_parameters.rb +15 -0
  53. data/config/locales/en.yml +23 -0
  54. data/config/routes.rb +68 -0
  55. data/config/unicorn.rb +23 -0
  56. data/config.ru +4 -0
  57. data/db/migrate/20131216121603_create_source_codes.rb +9 -0
  58. data/db/migrate/20131219045113_add_filename_to_source_code.rb +5 -0
  59. data/db/schema.rb +23 -0
  60. data/db/seeds.rb +7 -0
  61. data/lib/assets/.keep +0 -0
  62. data/lib/smalruby_editor/version.rb +3 -0
  63. data/lib/smalruby_editor.rb +46 -0
  64. data/lib/tasks/.keep +0 -0
  65. data/lib/tasks/gem.rake +10 -0
  66. data/lib/tasks/rspec.rake +16 -0
  67. data/lib/tasks/rubocop.rake +3 -0
  68. data/log/.keep +0 -0
  69. data/public/404.html +58 -0
  70. data/public/422.html +58 -0
  71. data/public/500.html +57 -0
  72. data/public/assets/application-759ce4d1ac1e0e3991e6d350c8f98fc5.js +5267 -0
  73. data/public/assets/application-759ce4d1ac1e0e3991e6d350c8f98fc5.js.gz +0 -0
  74. data/public/assets/application-f51ea0e777d97f12a8ce84308f31eb57.css +4791 -0
  75. data/public/assets/application-f51ea0e777d97f12a8ce84308f31eb57.css.gz +0 -0
  76. data/public/assets/favicon-c7ae857bb9d06de8742ae2d337157e83.ico +0 -0
  77. data/public/assets/loading-e8e6dd7833131c92a6c3b9c8ccc6a6ac.gif +0 -0
  78. data/public/assets/manifest-f86249f9779f8f4d7c8fc148e4361b4f.json +1 -0
  79. data/public/assets/progressbar-82023a146fba2a0f6d925629ed2b09c5.gif +0 -0
  80. data/public/favicon.ico +0 -0
  81. data/public/fonts/FontAwesome.otf +0 -0
  82. data/public/fonts/fontawesome-webfont.eot +0 -0
  83. data/public/fonts/fontawesome-webfont.ttf +0 -0
  84. data/public/fonts/fontawesome-webfont.woff +0 -0
  85. data/public/robots.txt +5 -0
  86. data/smalruby-editor.gemspec +81 -0
  87. data/spec/acceptance/readme.md +3 -0
  88. data/spec/acceptance/standalone/save.feature +32 -0
  89. data/spec/acceptance/text_editor/base.feature +24 -0
  90. data/spec/acceptance/text_editor/check.feature +25 -0
  91. data/spec/acceptance/text_editor/load.feature +81 -0
  92. data/spec/acceptance/text_editor/save.feature +34 -0
  93. data/spec/controllers/editor_controller_spec.rb +12 -0
  94. data/spec/controllers/source_codes_controller_spec.rb +469 -0
  95. data/spec/fixtures/files/01.rb +57 -0
  96. data/spec/fixtures/files/favicon.ico +0 -0
  97. data/spec/helpers/editor_helper_spec.rb +14 -0
  98. data/spec/lib/smalruby_editor_spec.rb +66 -0
  99. data/spec/models/source_code_spec.rb +55 -0
  100. data/spec/spec_helper.rb +156 -0
  101. data/spec/steps/ace_steps.rb +59 -0
  102. data/spec/steps/global_variable.rb +39 -0
  103. data/spec/steps/text_editor_steps.rb +183 -0
  104. data/spec/support/assets.rb +18 -0
  105. data/spec/support/capybara.rb +17 -0
  106. data/spec/support/env.rb +15 -0
  107. data/spec/turnip_helper.rb +2 -0
  108. data/vendor/assets/javascripts/.keep +0 -0
  109. data/vendor/assets/stylesheets/.keep +0 -0
  110. metadata +407 -0
@@ -0,0 +1,156 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'rubygems'
3
+ require 'spork'
4
+ # uncomment the following line to use spork with the debugger
5
+ # require 'spork/ext/ruby-debug'
6
+
7
+ Spork.prefork do
8
+ # Loading more in this block will cause your tests to run faster. However,
9
+ # if you change any configuration or code from libraries loaded here, you'll
10
+ # need to restart spork for it take effect.
11
+
12
+ ENV['RAILS_ENV'] ||= 'test'
13
+ require File.expand_path('../../config/environment', __FILE__)
14
+ require 'rspec/rails'
15
+ require 'rspec/autorun'
16
+ require 'capybara/dsl'
17
+ require 'capybara/rspec'
18
+ require 'capybara/poltergeist'
19
+ require 'turnip'
20
+ require 'turnip/capybara'
21
+ require 'simplecov' if ENV['COVERAGE'] || ENV['COVERALLS']
22
+
23
+ # Requires supporting ruby files with custom matchers and macros, etc,
24
+ # in spec/support/ and its subdirectories.
25
+ Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f }
26
+
27
+ # Checks for pending migrations before tests are run.
28
+ # If you are not using ActiveRecord, you can remove this line.
29
+ ActiveRecord::Migration.check_pending! if defined?(ActiveRecord::Migration)
30
+
31
+ RSpec.configure do |config|
32
+ # ## Mock Framework
33
+ #
34
+ # If you prefer to use mocha, flexmock or RR, uncomment the
35
+ # appropriate line:
36
+ #
37
+ # config.mock_with :mocha
38
+ # config.mock_with :flexmock
39
+ # config.mock_with :rr
40
+
41
+ # Remove this line if you're not using ActiveRecord or
42
+ # ActiveRecord fixtures
43
+ config.fixture_path = "#{::Rails.root}/spec/fixtures"
44
+
45
+ # If you're not using ActiveRecord, or you'd prefer not to run each of your
46
+ # examples within a transaction, remove the following line or assign false
47
+ # instead of true.
48
+ config.use_transactional_fixtures = false
49
+
50
+ # If true, the base class of anonymous controllers will be inferred
51
+ # automatically. This will be the default behavior in future versions of
52
+ # rspec-rails.
53
+ config.infer_base_class_for_anonymous_controllers = false
54
+
55
+ # Run specs in random order to surface order dependencies. If you find an
56
+ # order dependency and want to debug it, you can fix the order by providing
57
+ # the seed, which is printed after each run.
58
+ # --seed 1234
59
+ config.order = 'random'
60
+
61
+ twb = (ENV['TARGET_WEB_BROWZER'] || ENV['TWB']).try(:downcase)
62
+ case twb
63
+ when 'firefox', 'ie', 'chrome'
64
+ Capybara.register_driver :selenium do |app|
65
+ opts = { browser: twb.to_sym }
66
+
67
+ dir = downloads_dir.to_s
68
+ dir.gsub!(File::SEPARATOR, File::ALT_SEPARATOR) if windows?
69
+ case twb
70
+ when 'firefox'
71
+ opts[:profile] = profile = Selenium::WebDriver::Firefox::Profile.new
72
+ profile['browser.download.folderList'] = 2 # custom location
73
+ profile['browser.download.dir'] = dir
74
+ profile['browser.helperApps.neverAsk.saveToDisk'] = 'text/plain'
75
+ when 'ie'
76
+ opts[:introduce_flakiness_by_ignoring_security_domains] = true
77
+ when 'chrome'
78
+ FileUtils.mkdir_p(dir)
79
+ opts[:prefs] = {
80
+ download: {
81
+ prompt_for_download: false,
82
+ default_directory: dir,
83
+ directory_upgrade: true,
84
+ }
85
+ }
86
+
87
+ opts[:switches] =
88
+ %w(
89
+ --ignore-certificate-errors
90
+ --disable-popup-blocking
91
+ --disable-translate
92
+ )
93
+ end
94
+
95
+ Capybara::Selenium::Driver.new(app, opts)
96
+ end
97
+ Capybara.javascript_driver = :selenium
98
+ else
99
+ Capybara.javascript_driver = :poltergeist
100
+ end
101
+
102
+ config.include JsonSpec::Helpers
103
+
104
+ config.after(javascript: true) do
105
+ page.execute_script('window.onbeforeunload = null')
106
+ FileUtils.rm_rf(downloads_dir) if selenium?
107
+ end
108
+
109
+ config.before(:all, javascript: true, standalone: true) do
110
+ expire_assets_cache
111
+ end
112
+
113
+ config.after(:all, javascript: true, standalone: true) do
114
+ expire_assets_cache
115
+ end
116
+
117
+ config.before(javascript: true, standalone: true) do
118
+ page.driver.restart
119
+
120
+ @_rails_env = Rails.env
121
+ Rails.env = ENV['RAILS_ENV'] = 'standalone'
122
+ @_home = ENV['HOME']
123
+ @_tmpdir = ENV['HOME'] = Dir.mktmpdir('smalruby-')
124
+ end
125
+
126
+ config.after(javascript: true, standalone: true) do
127
+ FileUtils.remove_entry_secure(@_tmpdir)
128
+ ENV['HOME'] = @_home
129
+ Rails.env = ENV['RAILS_ENV'] = @_rails_env
130
+
131
+ page.driver.restart
132
+ end
133
+
134
+ config.before :suite do
135
+ DatabaseRewinder.clean_all
136
+ end
137
+
138
+ config.after :each do
139
+ DatabaseRewinder.clean
140
+ end
141
+ end
142
+ end
143
+
144
+ Spork.each_run do
145
+ # This code will be run each time you run your specs.
146
+
147
+ # http://penguinlab.jp/blog/post/2256# より
148
+ if Spork.using_spork?
149
+ # app 下のファイル / locale / routes をリロード
150
+ # railties-3.2.3/lib/rails/application/finisher.rb あたりを参考に
151
+ Rails.application.reloaders.each { |reloader| reloader.execute_if_updated }
152
+
153
+ # machinist gem を利用してる場合、blueprints を再度読み直す
154
+ # load "#{File.dirname(__FILE__)}/support/blueprints.rb"
155
+ end
156
+ end
@@ -0,0 +1,59 @@
1
+ # encoding: utf-8
2
+
3
+ text_editor = 'テキストエディタ'
4
+
5
+ step 'テキストエディタにフォーカスがあること' do
6
+ expect(page.evaluate_script(<<-JS)).to be_true
7
+ ace.edit('#{NAME_INFO[text_editor][:id]}').isFocused()
8
+ JS
9
+ end
10
+
11
+ step 'テキストエディタの :row 行目の :column 文字目にカーソルがあること' do |row, column|
12
+ get_cursor_position_js =
13
+ "ace.edit('#{NAME_INFO[text_editor][:id]}').getCursorPosition()"
14
+ expect(page.evaluate_script("#{get_cursor_position_js}.row")).to eq(row.to_i)
15
+ expect(page.evaluate_script("#{get_cursor_position_js}.column"))
16
+ .to eq(column.to_i)
17
+ end
18
+
19
+ step 'テキストエディタに :program を入力済みである' do |program|
20
+ send 'テキストエディタにプログラムを入力済みである:', program
21
+ end
22
+
23
+ step 'テキストエディタにプログラムを入力済みである:' do |program|
24
+ page.execute_script(<<-JS)
25
+ ace.edit('#{NAME_INFO[text_editor][:id]}')
26
+ .getSession()
27
+ .getDocument()
28
+ .setValue('#{program.gsub(/'/, "\\\\'")}')
29
+ JS
30
+ end
31
+
32
+ step 'テキストエディタに :filename を読み込むこと' do |filename|
33
+ js = <<-JS
34
+ ace.edit('#{NAME_INFO[text_editor][:id]}')
35
+ .getSession()
36
+ .getDocument()
37
+ .getValue()
38
+ JS
39
+ path = Pathname(fixture_path).join(filename)
40
+ expect(page.evaluate_script(js)).to eq(path.read)
41
+ end
42
+
43
+ step 'テキストエディタのプログラムは以下であること:' do |program|
44
+ expect(page.evaluate_script(<<-JS)).to eq(program)
45
+ ace.edit('#{NAME_INFO[text_editor][:id]}')
46
+ .getSession()
47
+ .getDocument()
48
+ .getValue()
49
+ JS
50
+ end
51
+
52
+ step 'テキストエディタのプログラムは :program であること' do |program|
53
+ expect(page.evaluate_script(<<-JS)).to eq(program)
54
+ ace.edit('#{NAME_INFO[text_editor][:id]}')
55
+ .getSession()
56
+ .getDocument()
57
+ .getValue()
58
+ JS
59
+ end
@@ -0,0 +1,39 @@
1
+ # -*- coding: 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: 'check-button',
25
+ selector: '#check-button',
26
+ },
27
+ 'セーブボタン' => {
28
+ id: 'save-button',
29
+ selector: '#save-button',
30
+ },
31
+ 'ロードボタン' => {
32
+ id: 'load-button',
33
+ selector: '#load-button',
34
+ },
35
+ 'メッセージ' => {
36
+ id: 'messages',
37
+ selector: '#messages',
38
+ },
39
+ }
@@ -0,0 +1,183 @@
1
+ # encoding: utf-8
2
+
3
+ step ':name にアクセスする' do |name|
4
+ visit NAME_INFO[name][:path]
5
+
6
+ if poltergeist?
7
+ page.execute_script(<<-JS)
8
+ if (window.confirmMsg == undefined) {
9
+ window.confirmMsg = null;
10
+ window.confirm = function(msg) {
11
+ window.confirmMsg = msg;
12
+ return true;
13
+ }
14
+ }
15
+ JS
16
+ end
17
+ end
18
+
19
+ step ':name が表示されていること' do |name|
20
+ expect(page).to have_selector(NAME_INFO[name][:selector])
21
+ end
22
+
23
+ step ':name 画面を表示する' do |name|
24
+ send ':name にアクセスする', name
25
+ end
26
+
27
+ step 'プログラムの名前に :filename を指定する' do |filename|
28
+ fill_in('filename', with: filename)
29
+ end
30
+
31
+ step ':name をクリックする' do |name|
32
+ click_on(NAME_INFO[name][:id])
33
+ end
34
+
35
+ step 'ダウンロードが完了するまで待つ' do
36
+ start_time = Time.now
37
+ if poltergeist?
38
+ until page.response_headers['Content-Disposition'] ||
39
+ (start_time + 5.seconds) < Time.now
40
+ sleep(1)
41
+ end
42
+ elsif selenium?
43
+ sleep(1) until downloads_dir.exist? || (start_time + 5.seconds) < Time.now
44
+ end
45
+ end
46
+
47
+ step ':filename をダウンロードすること' do |filename|
48
+ step 'ダウンロードが完了するまで待つ'
49
+ if poltergeist?
50
+ expect(page.response_headers['Content-Disposition'])
51
+ .to eq("attachment; filename=\"#{filename}\"")
52
+ expect(page.response_headers['Content-Type'])
53
+ .to eq('text/plain; charset=utf-8')
54
+ elsif selenium?
55
+ expect(downloads_dir.join(filename)).to be_exist
56
+ end
57
+ end
58
+
59
+ step 'ダウンロードしないこと' do
60
+ if poltergeist?
61
+ expect(page.response_headers['Content-Disposition']).to be_nil
62
+ elsif selenium?
63
+ expect(downloads_dir).not_to be_exist
64
+ end
65
+ end
66
+
67
+ step ':name にフォーカスを移す' do |name|
68
+ page.execute_script(<<-JS)
69
+ $('#{NAME_INFO[name][:selector]}').focus()
70
+ JS
71
+ end
72
+
73
+ step ':name にフォーカスがあること' do |name|
74
+ # HACK: 現在のPhantomJSでは$(':focus')は動作しない
75
+ # https://github.com/netzpirat/guard-jasmine/issues/48
76
+ expect(page.evaluate_script(<<-JS)).to be_true
77
+ $('#{NAME_INFO[name][:selector]}').get(0) == document.activeElement
78
+ JS
79
+ end
80
+
81
+ step ':filename をロードする' do |filename|
82
+ step '"ロードボタン" にフォーカスを移す'
83
+
84
+ # HACK: input#load-file[type="file"]は非表示要素であるため、.show()し
85
+ # ないと見つけられずattach_fileが失敗する
86
+ page.execute_script("$('#load-file').show()")
87
+
88
+ path = Pathname(fixture_path).join(filename).to_s
89
+ path.gsub!(File::SEPARATOR, File::ALT_SEPARATOR) if windows?
90
+ attach_file('load-file', path)
91
+ end
92
+
93
+ step 'JavaScriptによるリクエストが終わるまで待つ' do
94
+ start_time = Time.now
95
+ until page.evaluate_script('jQuery.isReady && jQuery.active == 0') ||
96
+ (start_time + 5.seconds) < Time.now
97
+ sleep 1
98
+ end
99
+ end
100
+ step ':name は :value であること' do |name, value|
101
+ expect(page.evaluate_script(<<-JS)).to eq(value)
102
+ $('#{NAME_INFO[name][:selector]}').val()
103
+ JS
104
+ end
105
+
106
+ step ':name に :message を含むこと' do |name, message|
107
+ expect(page.find(NAME_INFO[name][:selector])).to have_content(message)
108
+ end
109
+
110
+ step ':name に :message を含まないこと' do |name, message|
111
+ expect(page.find(NAME_INFO[name][:selector])).to have_no_content(message)
112
+ end
113
+
114
+ step 'ページをリロードする' do
115
+ begin
116
+ step '"エディタ" 画面を表示する'
117
+ rescue Capybara::Poltergeist::TimeoutError => e
118
+ Rails.logger.debug("#{e.class.name}: #{e.message}")
119
+ end
120
+ end
121
+
122
+ step '警告ダイアログの :name ボタンをクリックする' do |name|
123
+ case name
124
+ when 'dismiss'
125
+ page.driver.browser.switch_to.alert.dismiss if selenium?
126
+ else
127
+ page.driver.browser.switch_to.alert.accept if selenium?
128
+ end
129
+ end
130
+
131
+ step '確認メッセージ :message を表示すること' do |message|
132
+ message.gsub!('\n', "\n")
133
+ if poltergeist?
134
+ actual = page.evaluate_script('window.confirmMsg')
135
+ page.execute_script('window.confirmMsg = null')
136
+ expect(actual).to eq(message)
137
+ elsif selenium?
138
+ expect(page.driver.browser.switch_to.alert.text).to eq(message)
139
+ page.driver.browser.switch_to.alert.dismiss
140
+ end
141
+ end
142
+
143
+ step '確認メッセージを表示しないこと' do
144
+ if poltergeist?
145
+ actual = page.evaluate_script('window.confirmMsg')
146
+ page.execute_script('window.confirmMsg = null')
147
+ expect(actual).to be_nil
148
+ elsif selenium?
149
+ expect {
150
+ page.driver.browser.switch_to.alert
151
+ }.to raise_exception(Selenium::WebDriver::Error::NoAlertPresentError)
152
+ end
153
+ end
154
+
155
+ step '実際にはファイルをロードしないようにしておく' do
156
+ if selenium?
157
+ page.execute_script("$('#load-button').off('click')")
158
+ page.execute_script(<<-JS)
159
+ $('#load-button').click(function(e) {
160
+ e.preventDefault();
161
+ if (changed) {
162
+ confirm('まだセーブしていないのでロードするとプログラムが消えてしまうよ!それでもロードしますか?');
163
+ }
164
+ })
165
+ JS
166
+ end
167
+ end
168
+
169
+ step 'ホームディレクトリに :program という内容の :filename が存在する' do |program, filename|
170
+ File.open(Pathname("~/#{filename}").expand_path, 'w') do |f|
171
+ f.write(program)
172
+ end
173
+ end
174
+
175
+ step 'ホームディレクトリに :filename が存在すること' do |filename|
176
+ path = Pathname("~/#{filename}").expand_path
177
+ expect(path).to be_exist
178
+ end
179
+
180
+ step 'ホームディレクトリの :filename の内容が :program であること' do |filename, program|
181
+ path = Pathname("~/#{filename}").expand_path
182
+ expect(path.read).to eq(program)
183
+ end
@@ -0,0 +1,18 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ # assetsのキャッシュを削除する
4
+ #
5
+ # ただし、このメソッドを呼び出した後で page.driver.restart を実行しなけ
6
+ # ればブラウザ側のキャッシュが有効になったままとなる。
7
+ def expire_assets_cache
8
+ env = Rails.application.assets
9
+ if Rails.application.config.cache_classes
10
+ env.instance_variable_set('@assets', {})
11
+ env.instance_variable_set('@digests', {})
12
+ env = env.instance_variable_get('@environment')
13
+ end
14
+ env.send(:expire_index!)
15
+ Dir.glob(Rails.root.join('tmp/cache/assets/test/sprockets/*')) { |f|
16
+ FileUtils.remove_entry_secure(f)
17
+ }
18
+ end
@@ -0,0 +1,17 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ def poltergeist?
4
+ /\Apoltergeist/ =~ Capybara.javascript_driver.to_s
5
+ end
6
+
7
+ def selenium?
8
+ /\Aselenium/ =~ Capybara.javascript_driver.to_s
9
+ end
10
+
11
+ def windows?
12
+ /windows|mingw|cygwin/i =~ RbConfig::CONFIG['arch']
13
+ end
14
+
15
+ def downloads_dir
16
+ Pathname(Rails.root).join('tmp/downloads')
17
+ end
@@ -0,0 +1,15 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ require 'tmpdir'
4
+
5
+ # Rails.envをstandaloneにする
6
+ shared_context 'set standalone rails env', set_standalone_rails_env: true do
7
+ before do
8
+ @_rails_env = Rails.env
9
+ Rails.env = ENV['RAILS_ENV'] = 'standalone'
10
+ end
11
+
12
+ after do
13
+ Rails.env = ENV['RAILS_ENV'] = @_rails_env
14
+ end
15
+ end
@@ -0,0 +1,2 @@
1
+ load 'spec/steps/global_variable.rb', true
2
+ Dir.glob('spec/steps{,/**}/*_steps.rb') { |f| load f, true }
File without changes
File without changes