redcar 0.10 → 0.11.0dev

Sign up to get free protection for your applications and to get access to all the features.
Files changed (77) hide show
  1. data/CHANGES +14 -0
  2. data/Rakefile +68 -29
  3. data/lib/redcar.rb +2 -2
  4. data/plugins/application/lib/application/dialogs/filter_list_dialog.rb +2 -1
  5. data/plugins/application_swt/spec/application_swt/gradient_spec.rb +3 -12
  6. data/plugins/core/lib/core/resource.rb +13 -5
  7. data/plugins/document_search/features/find.feature +366 -214
  8. data/plugins/document_search/features/incremental_search.feature +351 -0
  9. data/plugins/document_search/features/replace.feature +16 -16
  10. data/plugins/document_search/features/step_definitions/find_steps.rb +16 -0
  11. data/plugins/document_search/features/support/env.rb +11 -0
  12. data/plugins/document_search/lib/document_search.rb +149 -109
  13. data/plugins/document_search/lib/document_search/commands.rb +251 -202
  14. data/plugins/document_search/lib/document_search/find_speedbar.rb +138 -81
  15. data/plugins/document_search/lib/document_search/incremental_search_speedbar.rb +70 -0
  16. data/plugins/document_search/lib/document_search/query_options.rb +15 -39
  17. data/plugins/document_search/plugin.rb +1 -1
  18. data/plugins/edit_view/features/step_definitions/editing_steps.rb +6 -2
  19. data/plugins/edit_view_swt/lib/edit_view_swt.rb +2 -2
  20. data/plugins/file_parser/lib/file_parser.rb +6 -1
  21. data/plugins/html_view/features/step_definitions/web_view_steps.rb +12 -0
  22. data/plugins/html_view/features/support/env.rb +16 -0
  23. data/plugins/html_view/lib/html_view.rb +5 -1
  24. data/plugins/line_tools/lib/line_tools.rb +16 -0
  25. data/plugins/project/features/find_file.feature +28 -0
  26. data/plugins/project/features/open_and_save_files.feature +11 -0
  27. data/plugins/project/features/step_definitions/file_steps.rb +6 -1
  28. data/plugins/project/features/support/env.rb +2 -0
  29. data/plugins/project/lib/project.rb +49 -6
  30. data/plugins/project/lib/project/commands.rb +18 -6
  31. data/plugins/project/lib/project/find_file_dialog.rb +19 -8
  32. data/plugins/project/lib/project/find_recent_dialog.rb +30 -0
  33. data/plugins/project/lib/project/manager.rb +41 -10
  34. data/plugins/project/lib/project/recent.rb +64 -0
  35. data/plugins/project/spec/fixtures/myproject/vendor/bar.rb +0 -0
  36. data/plugins/project/spec/fixtures/myproject/vendor/plugins/bar.rb +0 -0
  37. data/plugins/{find-in-project → project_search}/TODO.md +3 -3
  38. data/plugins/project_search/features/support/env.rb +6 -0
  39. data/plugins/project_search/features/word_search.feature +34 -0
  40. data/plugins/project_search/lib/project_search.rb +73 -0
  41. data/plugins/project_search/lib/project_search/binary_data_detector.rb +46 -0
  42. data/plugins/project_search/lib/project_search/commands.rb +62 -0
  43. data/plugins/project_search/lib/project_search/hit.rb +17 -0
  44. data/plugins/{find-in-project/lib/find_in_project → project_search/lib/project_search}/images/collapsed.png +0 -0
  45. data/plugins/{find-in-project/lib/find_in_project → project_search/lib/project_search}/images/expanded.png +0 -0
  46. data/plugins/{find-in-project/lib/find_in_project → project_search/lib/project_search}/images/spinner.gif +0 -0
  47. data/plugins/project_search/lib/project_search/lucene_index.rb +64 -0
  48. data/plugins/project_search/lib/project_search/lucene_refresh.rb +22 -0
  49. data/plugins/project_search/lib/project_search/project.rb +14 -0
  50. data/plugins/project_search/lib/project_search/query.rb +29 -0
  51. data/plugins/{find-in-project/lib/find_in_project → project_search/lib/project_search}/stylesheets/style.css +14 -3
  52. data/plugins/project_search/lib/project_search/views/_file.html.erb +60 -0
  53. data/plugins/{find-in-project/lib/find_in_project → project_search/lib/project_search}/views/index.html.erb +12 -9
  54. data/plugins/project_search/lib/project_search/word_search.rb +105 -0
  55. data/plugins/project_search/lib/project_search/word_search_controller.rb +207 -0
  56. data/plugins/project_search/plugin.rb +8 -0
  57. data/plugins/project_search/spec/fixtures/project/binary_file.bin +0 -0
  58. data/plugins/project_search/spec/fixtures/project/foo.txt +43 -0
  59. data/plugins/project_search/spec/fixtures/project/qux.rb +3 -0
  60. data/plugins/project_search/spec/project_search/binary_data_detector_spec.rb +24 -0
  61. data/plugins/project_search/spec/project_search/word_search_spec.rb +157 -0
  62. data/plugins/project_search/spec/spec_helper.rb +27 -0
  63. data/plugins/redcar/redcar.rb +77 -71
  64. data/plugins/ruby/lib/ruby/syntax_checker.rb +1 -1
  65. data/plugins/snippets/features/snippets.feature +12 -0
  66. data/plugins/snippets/lib/snippets/tab_handler.rb +1 -1
  67. metadata +46 -25
  68. data/plugins/document_search/features/find_and_replace.feature +0 -723
  69. data/plugins/document_search/lib/document_search/find_and_replace_speedbar.rb +0 -142
  70. data/plugins/find-in-project/lib/find_in_project.rb +0 -35
  71. data/plugins/find-in-project/lib/find_in_project/commands.rb +0 -30
  72. data/plugins/find-in-project/lib/find_in_project/controllers.rb +0 -170
  73. data/plugins/find-in-project/lib/find_in_project/views/_divider.html.erb +0 -4
  74. data/plugins/find-in-project/lib/find_in_project/views/_file_heading.html.erb +0 -10
  75. data/plugins/find-in-project/lib/find_in_project/views/_file_line.html.erb +0 -6
  76. data/plugins/find-in-project/plugin.rb +0 -11
  77. data/plugins/project/lib/project/recent_directories.rb +0 -54
@@ -24,3 +24,19 @@ end
24
24
  After do
25
25
  reset_htmlview_fixtures
26
26
  end
27
+
28
+ $:.push("plugins/html_view/vendor/nokogiri/lib")
29
+ require 'nokogiri'
30
+
31
+ p Nokogiri::HTML("<h1>afso</h1>")
32
+
33
+ $:.push("plugins/html_view/vendor/capybara/lib")
34
+ require 'capybara'
35
+ require 'capybara/dsl'
36
+
37
+ $:.push("plugins/html_view/vendor/capybara-sweet/lib")
38
+ require 'capybara/driver/sweet'
39
+
40
+ Capybara.default_driver = :sweet
41
+
42
+ World(Capybara)
@@ -78,9 +78,13 @@ module Redcar
78
78
  @html_tab.title = controller.title
79
79
  func = RubyFunc.new(@html_tab.controller.browser, "rubyCall")
80
80
  func.controller = @controller
81
- controller_action("index")
81
+ refresh
82
82
  attach_controller_listeners
83
83
  end
84
+
85
+ def refresh
86
+ controller_action("index")
87
+ end
84
88
 
85
89
  def attach_controller_listeners
86
90
  @controller.add_listener(:reload_index) { controller_action("index") }
@@ -127,6 +127,14 @@ module Redcar
127
127
  if doc.selection?
128
128
  first_line_ix = doc.line_at_offset(doc.selection_range.begin)
129
129
  last_line_ix = doc.line_at_offset(doc.selection_range.end)
130
+
131
+ if doc.selection_range.begin == doc.offset_at_inner_end_of_line(first_line_ix)
132
+ first_line_ix += 1
133
+ end
134
+ if doc.selection_range.end == doc.offset_at_line(last_line_ix)
135
+ last_line_ix -= 1
136
+ end
137
+
130
138
  text = doc.get_slice(doc.offset_at_line(first_line_ix),
131
139
  doc.offset_at_line_end(last_line_ix))
132
140
  keep_selection = true
@@ -171,6 +179,14 @@ module Redcar
171
179
  if doc.selection?
172
180
  first_line_ix = doc.line_at_offset(doc.selection_range.begin)
173
181
  last_line_ix = doc.line_at_offset(doc.selection_range.end)
182
+
183
+ if doc.selection_range.begin == doc.offset_at_inner_end_of_line(first_line_ix)
184
+ first_line_ix += 1
185
+ end
186
+ if doc.selection_range.end == doc.offset_at_line(last_line_ix)
187
+ last_line_ix -= 1
188
+ end
189
+
174
190
  text = doc.get_slice(doc.offset_at_line(first_line_ix),
175
191
  doc.offset_at_line_end(last_line_ix))
176
192
  keep_selection = true
@@ -15,6 +15,12 @@ Feature: Find file
15
15
  And I wait "0.4" seconds
16
16
  Then the filter dialog should have 0 entries
17
17
 
18
+ Scenario: No matching files when typing a directory name only
19
+ When I open the find file dialog
20
+ And I set the filter to "vendor"
21
+ And I wait "0.4" seconds
22
+ Then the filter dialog should have 0 entries
23
+
18
24
  Scenario: One matching file
19
25
  When I open the find file dialog
20
26
  And I set the filter to "foo_spec"
@@ -29,6 +35,13 @@ Feature: Find file
29
35
  Then the filter dialog should have 1 entry
30
36
  And I should see "foo_spec.rb (myproject/spec)" at 0 the filter dialog
31
37
 
38
+ Scenario: One matching file when specifying a directory
39
+ When I open the find file dialog
40
+ And I set the filter to "lib_sym/foo"
41
+ And I wait "0.4" seconds
42
+ Then the filter dialog should have 1 entry
43
+ And I should see "foo_lib.rb (myproject/lib_symlink)" at 0 the filter dialog
44
+
32
45
  Scenario: Two matching files
33
46
  When I open the find file dialog
34
47
  And I set the filter to "foo"
@@ -47,6 +60,21 @@ Feature: Find file
47
60
  And I should see "foo_lib.rb (myproject/lib_symlink)" at 1 the filter dialog
48
61
  And I should see "foo_spec.rb (myproject/spec)" at 2 the filter dialog
49
62
 
63
+ Scenario: Three matching files in similar directories
64
+ When I open the find file dialog
65
+ And I set the filter to "ven/bar"
66
+ And I wait "0.4" seconds
67
+ Then the filter dialog should have 2 entries
68
+ And I should see "bar.rb (myproject/vendor)" at 0 the filter dialog
69
+ And I should see "bar.rb (vendor/plugins)" at 1 the filter dialog
70
+
71
+ Scenario: Two matching files in similar nested directories
72
+ When I open the find file dialog
73
+ And I set the filter to "v/p/bar"
74
+ And I wait "0.4" seconds
75
+ Then the filter dialog should have 1 entry
76
+ And I should see "bar.rb (vendor/plugins)" at 0 the filter dialog
77
+
50
78
  Scenario: One matching file with arbitrary letters
51
79
  When I open the find file dialog
52
80
  And I set the filter to "fsc"
@@ -71,3 +71,14 @@ Feature: Open and save files
71
71
  When I open a file
72
72
  Then the window "fixtures" should have 1 tab
73
73
 
74
+ Scenario: Choosing to open a large file
75
+ Given I will open a large file from the "open_file" dialog
76
+ And I will choose "yes" from the "message_box" dialog
77
+ When I open a file
78
+ Then there should be 1 edit tab
79
+
80
+ Scenario: Choosing not to open a large file
81
+ Given I will open a large file from the "open_file" dialog
82
+ And I will choose "no" from the "message_box" dialog
83
+ When I open a file
84
+ Then there should be 0 edit tabs
@@ -3,6 +3,11 @@ Given /^I have open a file$/ do
3
3
  Redcar::Project::FileOpenCommand.new.run
4
4
  end
5
5
 
6
+ Given /^I will open a large file from the "([^"]*)" dialog$/ do |arg1|
7
+ Given %Q|I will choose "plugins/project/spec/fixtures/winter.txt" from the "open_file" dialog|
8
+ Redcar::Project::Manager.file_size_limit = 1
9
+ end
10
+
6
11
  When /^I open a file$/ do
7
12
  Redcar::Project::FileOpenCommand.new.run
8
13
  end
@@ -48,4 +53,4 @@ end
48
53
 
49
54
  After do
50
55
  remove_test_files
51
- end
56
+ end
@@ -51,6 +51,7 @@ end
51
51
 
52
52
  Before do
53
53
  reset_project_fixtures
54
+ @original_file_size_limit = Redcar::Project::Manager.file_size_limit
54
55
  end
55
56
 
56
57
  After do
@@ -58,4 +59,5 @@ After do
58
59
  reset_project_fixtures
59
60
  delete_subproject_fixtures
60
61
  DrbShelloutHelper.kill_thread
62
+ Redcar::Project::Manager.file_size_limit = @original_file_size_limit
61
63
  end
@@ -27,8 +27,9 @@ require "project/drb_service"
27
27
  require "project/file_list"
28
28
  require "project/file_mirror"
29
29
  require "project/find_file_dialog"
30
+ require "project/find_recent_dialog"
30
31
  require "project/manager"
31
- require "project/recent_directories"
32
+ require "project/recent"
32
33
  require "project/sub_project"
33
34
 
34
35
  module Redcar
@@ -69,6 +70,7 @@ module Redcar
69
70
  end
70
71
 
71
72
  def open(win)
73
+ lock
72
74
  @window = win
73
75
  if current_project = Project.window_projects[window]
74
76
  current_project.close
@@ -80,20 +82,56 @@ module Redcar
80
82
  Redcar.plugin_manager.objects_implementing(:project_loaded).each do |i|
81
83
  i.project_loaded(self)
82
84
  end
83
- RecentDirectories.store_path(path)
85
+ Recent.store_path(path)
84
86
  Manager.storage['last_open_dir'] = path
85
87
  Project.window_projects[window] = self
86
88
  end
89
+
90
+ def lock
91
+ File.open(lock_filename, "w") do |fout|
92
+ fout.puts "#{$$}: Locked by #{$$} at #{Time.now}"
93
+ end
94
+ end
95
+
96
+ def lock_filename
97
+ File.join(config_dir, "redcar.lock")
98
+ end
99
+
100
+ def locked?
101
+ File.exist?(lock_filename)
102
+ end
103
+
104
+ def unlock
105
+ if locked?
106
+ if locked_by_this_process?
107
+ FileUtils.rm_rf(lock_filename)
108
+ else
109
+ raise "locked by another process"
110
+ end
111
+ else
112
+ raise "project not locked"
113
+ end
114
+ end
115
+
116
+ def locked_by_this_process?
117
+ return false unless locked?
118
+ locking_pid = File.read(lock_filename).split(":").first
119
+ locking_pid == $$.to_s
120
+ end
87
121
 
88
122
  def close
89
- window.treebook.remove_tree(@tree)
90
- Project.window_projects.delete(window)
91
- window.title = Window::DEFAULT_TITLE
123
+ return unless @window
124
+ this_window = window
125
+ @window = nil
126
+ this_window.treebook.remove_tree(@tree)
127
+ Project.window_projects.delete(this_window)
128
+ this_window.title = Window::DEFAULT_TITLE
92
129
  Manager.open_project_sensitivity.recompute
93
130
  Redcar.plugin_manager.objects_implementing(:project_closed).each do |i|
94
131
  i.project_closed(self)
95
132
  end
96
133
  listeners = {}
134
+ unlock
97
135
  end
98
136
 
99
137
  def attach_listeners
@@ -183,7 +221,12 @@ module Redcar
183
221
 
184
222
  def send_refresh_to_plugins
185
223
  Redcar.plugin_manager.objects_implementing(:project_refresh_task_type).each do |object|
186
- Redcar.app.task_queue.submit(object.project_refresh_task_type.new(self))
224
+ task = object.project_refresh_task_type.new(self)
225
+ if Redcar::Resource.compute_synchronously
226
+ task.execute
227
+ else
228
+ Redcar::Resource.task_queue.submit(task)
229
+ end
187
230
  end
188
231
  end
189
232
 
@@ -224,6 +224,12 @@ module Redcar
224
224
  end
225
225
  end
226
226
 
227
+ class FindRecentCommand < Command
228
+ def execute
229
+ FindRecentDialog.new.open
230
+ end
231
+ end
232
+
227
233
  class RevealInProjectCommand < ProjectCommand
228
234
  def execute
229
235
  if Project::Manager.reveal_file?(project)
@@ -296,10 +302,13 @@ module Redcar
296
302
  end
297
303
 
298
304
  class OpenDirectoryInExplorerCommand < OpenCommand
299
- LinuxApps = { 'Thunar' => '%s',
300
- 'nautilus' => '%s',
305
+ LinuxApps = {
306
+ 'Thunar' => '%s',
307
+ 'nautilus' => '%s',
301
308
  'konqueror' => '%s',
302
- 'kfm' => '%s' }
309
+ 'pcmanfm' => '%s',
310
+ 'kfm' => '%s'
311
+ }
303
312
 
304
313
  def explorer_osx
305
314
  ['open -a Finder', path]
@@ -332,9 +341,12 @@ module Redcar
332
341
  end
333
342
 
334
343
  class OpenDirectoryInCommandLineCommand < OpenCommand
335
- LinuxApps = { 'xfce4-terminal' => "--working-directory=%s",
344
+ LinuxApps = {
345
+ 'xfce4-terminal' => "--working-directory=%s",
336
346
  'gnome-terminal' => "--working-directory=%s",
337
- 'konsole' => "--workdir %s" }
347
+ 'lxterminal' => "--working-directory=%s",
348
+ 'konsole' => "--workdir %s"
349
+ }
338
350
 
339
351
  def osx_terminal_script(preferred)
340
352
  if preferred.start_with? "iTerm"
@@ -389,4 +401,4 @@ module Redcar
389
401
  end
390
402
  end
391
403
  end
392
- end
404
+ end
@@ -1,7 +1,7 @@
1
1
  require 'set'
2
2
 
3
3
  module Redcar
4
- class Project
4
+ class Project
5
5
 
6
6
  class FindFileDialog < FilterListDialog
7
7
  def self.storage
@@ -101,17 +101,28 @@ module Redcar
101
101
  end
102
102
 
103
103
  def find_files_from_list(text, file_list)
104
- re = make_regex(text.gsub(/\s/, ""))
105
- file_list.select { |fn|
106
- fn.split('/').last =~ re and not ignore_file?(fn)
107
- }.compact
104
+ re = make_regex(text)
105
+ file_list.select do |fn|
106
+ not ignore_file?(fn) and match_substring(fn) =~ re
107
+ end
108
108
  end
109
109
 
110
110
  def find_files(text, directories)
111
111
  files = project.all_files.sort.select {|fn| not ignore_file?(fn)}
112
- filter_and_rank_by(files, text.gsub(/\s/, "")) do |fn|
113
- fn.split("/").last
114
- end
112
+ filter_and_rank_by(files, text) {|fn| match_substring(fn) }
113
+ end
114
+
115
+ def match_substring(filename)
116
+ @folder_search ? filename.sub(project.path, "") : filename.split("/").last
117
+ end
118
+
119
+ def make_regex(text)
120
+ path = text.gsub(/\s/, "").split("/")
121
+ @folder_search = path.size > 1
122
+ folders = path[0...-1].map {|f| "(#{Regexp.escape(f)}).*/" }
123
+ file = path.last.each_char.map {|c| "(#{Regexp.escape(c)})[^/]*?" }.join
124
+ re_src = "#{folders.join}#{file}$"
125
+ Regexp.new(re_src, :options => Regexp::IGNORECASE)
115
126
  end
116
127
  end
117
128
  end
@@ -0,0 +1,30 @@
1
+ module Redcar
2
+ class Project
3
+
4
+ class FindRecentDialog < FilterListDialog
5
+ def update_list(filter)
6
+ recent = Project::Recent.storage['list']
7
+ recent = recent.map {|path| path.gsub(/^#{Regexp.escape(Redcar.home_dir)}\/?/, "")}
8
+ filter_and_rank_by(recent, filter)
9
+ end
10
+
11
+ def selected(path, ix)
12
+ unless path[0..0] == "/"
13
+ path = Redcar.home_dir + "/" + path
14
+ end
15
+ if File.exist?(File.expand_path(path))
16
+ if File.directory?(path)
17
+ Project::Manager.open_project_for_path(path)
18
+ close
19
+ elsif File.file?(File.expand_path(path))
20
+ Project::Manager.open_file(path)
21
+ close
22
+ else
23
+ Project::Recent.remove_path(path)
24
+ end
25
+ end
26
+ end
27
+ end
28
+
29
+ end
30
+ end
@@ -163,6 +163,7 @@ module Redcar
163
163
  # @path [String] path the path of the file to be edited
164
164
  # @param [Window] win the Window to open the File in
165
165
  def self.open_file_in_window(path, win, adapter)
166
+ return unless large_file_airbag(path)
166
167
  tab = win.new_tab(Redcar::EditTab)
167
168
  mirror = FileMirror.new(path, adapter)
168
169
  tab.edit_view.document.mirror = mirror
@@ -170,6 +171,22 @@ module Redcar
170
171
  tab.focus
171
172
  end
172
173
 
174
+ def self.file_too_large?(path)
175
+ File.size(path) > file_size_limit
176
+ end
177
+
178
+ # Prompts the user before opening the given path if it's above self.file_size_limit.
179
+ def self.large_file_airbag(path)
180
+ if file_too_large?(path)
181
+ Application::Dialog.message_box(
182
+ "This file is larger than 10MB which may crash Redcar.\n\nAre you sure you want to open it?",
183
+ :type => :warning,
184
+ :buttons => :yes_no) == :yes
185
+ else
186
+ true
187
+ end
188
+ end
189
+
173
190
  def self.find_projects_containing_path(path)
174
191
  open_projects.select {|p|
175
192
  p.contains_path?(path)
@@ -185,6 +202,7 @@ module Redcar
185
202
  window = project.window
186
203
  else
187
204
  window = windows_without_projects.first || Redcar.app.new_window
205
+ Project::Recent.store_path(path)
188
206
  end
189
207
  open_file_in_window(path, window, adapter)
190
208
  window.focus
@@ -225,15 +243,28 @@ module Redcar
225
243
  tab.focus
226
244
  end
227
245
 
246
+ PROJECT_LOCKED_MESSAGE = "Project appears to be locked by another Redcar process!\nOpen anway?"
247
+
228
248
  # Opens a new Tree with a DirMirror and DirController for the given
229
249
  # path, in a new window.
230
250
  #
231
251
  # @param [String] path the path of the directory to view
232
252
  def self.open_project_for_path(path)
233
- win = Redcar.app.focussed_window
234
- win = Redcar.app.new_window if !win or Manager.in_window(win)
235
- project = Project.new(path).tap do |p|
236
- p.open(win) if p.ready?
253
+ open_projects.each do |project|
254
+ if project.path == path
255
+ project.window.focus
256
+ return
257
+ end
258
+ end
259
+ project = Project.new(path)
260
+ should_open = true
261
+ if project.locked?
262
+ should_open = Application::Dialog.message_box(PROJECT_LOCKED_MESSAGE, :type => :warning, :buttons => :yes_no)
263
+ end
264
+ if should_open
265
+ win = Redcar.app.focussed_window
266
+ win = Redcar.app.new_window if !win or Manager.in_window(win)
267
+ project.open(win) if project.ready?
237
268
  end
238
269
  end
239
270
 
@@ -367,20 +398,18 @@ module Redcar
367
398
  item "Open", Project::FileOpenCommand
368
399
  item "Reload File", Project::FileReloadCommand
369
400
  item "Open Directory", Project::DirectoryOpenCommand
370
- #item "Open Remote...", Project::OpenRemoteCommand
371
- lazy_sub_menu "Open Recent" do
372
- Project::RecentDirectories.generate_menu(self)
373
- end
374
-
401
+ item "Open Recent...", Project::FindRecentCommand
402
+
375
403
  separator
376
404
  item "Save", Project::FileSaveCommand
377
405
  item "Save As", Project::FileSaveAsCommand
378
406
  end
379
407
  end
408
+
380
409
  sub_menu "Project", :priority => 15 do
381
410
  group(:priority => :first) do
382
411
  item "Find File", Project::FindFileCommand
383
- item "Refresh Directory", Project::RefreshDirectoryCommand
412
+ # item "Refresh Directory", Project::RefreshDirectoryCommand
384
413
  end
385
414
  item "Reveal Open File in Tree", :command => Project::ToggleRevealInProject, :type => :check, :active => Project::Manager.reveal_files?
386
415
  end
@@ -449,8 +478,10 @@ module Redcar
449
478
  end
450
479
 
451
480
  class << self
481
+ attr_accessor :file_size_limit
452
482
  attr_reader :open_project_sensitivity
453
483
  end
484
+ self.file_size_limit = 5242880
454
485
  end
455
486
  end
456
487
  end