ruber 0.0.8 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (81) hide show
  1. data/CHANGES +21 -0
  2. data/data/share/apps/ruber/ruberui.rc +3 -1
  3. data/lib/ruber/application/application.rb +22 -23
  4. data/lib/ruber/application/plugin.yaml +7 -2
  5. data/lib/ruber/{projects → application}/project_files_list.rb +0 -0
  6. data/lib/ruber/{projects → application}/project_files_widget.rb +0 -0
  7. data/lib/ruber/application/ui/project_files_rule_chooser_widget.rb +74 -0
  8. data/lib/ruber/{projects → application}/ui/project_files_rule_chooser_widget.ui +0 -0
  9. data/lib/ruber/application/ui/project_files_widget.rb +117 -0
  10. data/lib/ruber/{projects → application}/ui/project_files_widget.ui +0 -0
  11. data/lib/ruber/component_manager.rb +14 -9
  12. data/lib/ruber/editor/document.rb +35 -5
  13. data/lib/ruber/kde_sugar.rb +16 -0
  14. data/lib/ruber/main_window/choose_plugins_dlg.rb +7 -4
  15. data/lib/ruber/main_window/main_window.rb +131 -193
  16. data/lib/ruber/main_window/main_window_actions.rb +157 -58
  17. data/lib/ruber/main_window/main_window_internal.rb +145 -54
  18. data/lib/ruber/main_window/open_file_in_project_dlg.rb +4 -4
  19. data/lib/ruber/main_window/plugin.yaml +3 -6
  20. data/lib/ruber/main_window/ui/workspace_settings_widget.rb +2 -2
  21. data/lib/ruber/main_window/workspace.rb +62 -32
  22. data/lib/ruber/output_widget.rb +20 -16
  23. data/lib/ruber/pane.rb +11 -5
  24. data/lib/ruber/project.rb +27 -12
  25. data/lib/ruber/projects/ui/project_files_rule_chooser_widget.rb +2 -2
  26. data/lib/ruber/projects/ui/project_files_widget.rb +2 -2
  27. data/lib/ruber/utils.rb +37 -4
  28. data/lib/ruber/version.rb +1 -1
  29. data/lib/ruber/world/document_factory.rb +121 -0
  30. data/lib/ruber/world/document_list.rb +396 -0
  31. data/lib/ruber/world/environment.rb +470 -0
  32. data/lib/ruber/{main_window → world}/hint_solver.rb +1 -1
  33. data/lib/ruber/world/plugin.yaml +11 -0
  34. data/lib/ruber/world/project_factory.rb +131 -0
  35. data/lib/ruber/world/project_list.rb +265 -0
  36. data/lib/ruber/world/ui/workspace_settings_widget.rb +51 -0
  37. data/lib/ruber/{main_window → world}/ui/workspace_settings_widget.ui +0 -0
  38. data/lib/ruber/world/world.rb +307 -0
  39. data/plugins/auto_end/auto_end.rb +135 -9
  40. data/plugins/autosave/autosave.rb +4 -4
  41. data/plugins/find_in_files/find_in_files.rb +5 -5
  42. data/plugins/find_in_files/find_in_files_widgets.rb +1 -1
  43. data/plugins/project_browser/project_browser.rb +4 -4
  44. data/plugins/rake/rake.rb +4 -4
  45. data/plugins/rake/rake_extension.rb +1 -1
  46. data/plugins/rspec/rspec.rb +4 -4
  47. data/plugins/rspec/ruber_rspec_formatter.rb +2 -2
  48. data/plugins/ruby_development/ruby_development.rb +3 -3
  49. data/plugins/ruby_runner/ruby_runner.rb +2 -2
  50. data/plugins/state/plugin.yaml +6 -8
  51. data/plugins/state/state.rb +201 -391
  52. data/plugins/state/ui/config_widget.rb +5 -5
  53. data/plugins/state/ui/config_widget.ui +3 -3
  54. data/plugins/syntax_checker/syntax_checker.rb +4 -0
  55. data/spec/annotation_model_spec.rb +1 -1
  56. data/spec/auto_end_spec.rb +98 -47
  57. data/spec/component_manager_spec.rb +80 -21
  58. data/spec/document_factory_spec.rb +115 -0
  59. data/spec/document_list_spec.rb +560 -450
  60. data/spec/document_spec.rb +143 -55
  61. data/spec/editor_view_spec.rb +2 -2
  62. data/spec/environment_spec.rb +1900 -0
  63. data/spec/hint_solver_spec.rb +5 -5
  64. data/spec/kde_sugar_spec.rb +16 -0
  65. data/spec/output_widget_spec.rb +177 -51
  66. data/spec/pane_spec.rb +29 -5
  67. data/spec/plugin_spec.rb +1 -1
  68. data/spec/project_factory_spec.rb +104 -0
  69. data/spec/project_list_spec.rb +352 -447
  70. data/spec/project_spec.rb +34 -33
  71. data/spec/qt_sugar_spec.rb +2 -2
  72. data/spec/state_spec.rb +508 -811
  73. data/spec/utils_spec.rb +149 -98
  74. data/spec/workspace_spec.rb +120 -9
  75. data/spec/world_spec.rb +1219 -0
  76. metadata +23 -14
  77. data/lib/ruber/documents/document_list.rb +0 -412
  78. data/lib/ruber/documents/plugin.yaml +0 -4
  79. data/lib/ruber/main_window/view_manager.rb +0 -431
  80. data/lib/ruber/projects/plugin.yaml +0 -11
  81. data/lib/ruber/projects/project_list.rb +0 -314
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
- - 8
9
- version: 0.0.8
8
+ - 9
9
+ version: 0.0.9
10
10
  platform: ruby
11
11
  authors:
12
12
  - Stefano Crocco
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2011-02-07 00:00:00 +01:00
17
+ date: 2011-05-30 00:00:00 +02:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -81,6 +81,16 @@ extra_rdoc_files: []
81
81
  files:
82
82
  - lib/ruber/kde_config_option_backend.rb
83
83
  - lib/ruber/qt_sugar.rb
84
+ - lib/ruber/world/ui/workspace_settings_widget.rb
85
+ - lib/ruber/world/ui/workspace_settings_widget.ui
86
+ - lib/ruber/world/plugin.yaml
87
+ - lib/ruber/world/document_list.rb
88
+ - lib/ruber/world/hint_solver.rb
89
+ - lib/ruber/world/world.rb
90
+ - lib/ruber/world/document_factory.rb
91
+ - lib/ruber/world/environment.rb
92
+ - lib/ruber/world/project_factory.rb
93
+ - lib/ruber/world/project_list.rb
84
94
  - lib/ruber/main_window/ui/new_project_widget.rb
85
95
  - lib/ruber/main_window/ui/new_project_widget.ui
86
96
  - lib/ruber/main_window/ui/output_color_widget.rb
@@ -90,7 +100,6 @@ files:
90
100
  - lib/ruber/main_window/ui/open_file_in_project_dlg.rb
91
101
  - lib/ruber/main_window/ui/open_file_in_project_dlg.ui
92
102
  - lib/ruber/main_window/ui/workspace_settings_widget.rb
93
- - lib/ruber/main_window/ui/workspace_settings_widget.ui
94
103
  - lib/ruber/main_window/ui/main_window_settings_widget.rb
95
104
  - lib/ruber/main_window/ui/main_window_settings_widget.ui
96
105
  - lib/ruber/main_window/main_window_internal.rb
@@ -101,18 +110,20 @@ files:
101
110
  - lib/ruber/main_window/main_window_actions.rb
102
111
  - lib/ruber/main_window/output_color_widget.rb
103
112
  - lib/ruber/main_window/save_modified_files_dlg.rb
104
- - lib/ruber/main_window/hint_solver.rb
105
113
  - lib/ruber/main_window/workspace.png
106
- - lib/ruber/main_window/view_manager.rb
107
114
  - lib/ruber/main_window/open_file_in_project_dlg.rb
108
115
  - lib/ruber/main_window/choose_plugins_dlg.rb
116
+ - lib/ruber/application/ui/project_files_widget.rb
117
+ - lib/ruber/application/ui/project_files_widget.ui
118
+ - lib/ruber/application/ui/project_files_rule_chooser_widget.rb
119
+ - lib/ruber/application/ui/project_files_rule_chooser_widget.ui
109
120
  - lib/ruber/application/plugin.yaml
121
+ - lib/ruber/application/project_files_list.rb
122
+ - lib/ruber/application/project_files_widget.rb
110
123
  - lib/ruber/application/application.rb
111
124
  - lib/ruber/exception_widgets.rb
112
125
  - lib/ruber/gui_states_handler.rb
113
126
  - lib/ruber/project_backend.rb
114
- - lib/ruber/documents/plugin.yaml
115
- - lib/ruber/documents/document_list.rb
116
127
  - lib/ruber/ktexteditor_sugar.rb
117
128
  - lib/ruber/plugin_specification.rb
118
129
  - lib/ruber/output_widget.rb
@@ -134,13 +145,7 @@ files:
134
145
  - lib/ruber/filtered_output_widget.rb
135
146
  - lib/ruber/pane.rb
136
147
  - lib/ruber/projects/ui/project_files_widget.rb
137
- - lib/ruber/projects/ui/project_files_widget.ui
138
148
  - lib/ruber/projects/ui/project_files_rule_chooser_widget.rb
139
- - lib/ruber/projects/ui/project_files_rule_chooser_widget.ui
140
- - lib/ruber/projects/plugin.yaml
141
- - lib/ruber/projects/project_files_list.rb
142
- - lib/ruber/projects/project_files_widget.rb
143
- - lib/ruber/projects/project_list.rb
144
149
  - lib/ruber/settings_container.rb
145
150
  - lib/ruber/version.rb
146
151
  - lib/ruber/plugin.rb
@@ -231,15 +236,19 @@ files:
231
236
  - spec/framework.rb
232
237
  - spec/ktexteditor_wrapper_spec.rb
233
238
  - spec/hint_solver_spec.rb
239
+ - spec/environment_spec.rb
240
+ - spec/document_factory_spec.rb
234
241
  - spec/kde_config_option_backend_spec.rb
235
242
  - spec/auto_end_spec.rb
236
243
  - spec/filtered_output_widget_spec.rb
237
244
  - spec/settings_container_spec.rb
245
+ - spec/world_spec.rb
238
246
  - spec/project_files_list_spec.rb
239
247
  - spec/document_project_spec.rb
240
248
  - spec/ktexteditor_sugar_spec.rb
241
249
  - spec/plugin_spec.rb
242
250
  - spec/document_list_spec.rb
251
+ - spec/project_factory_spec.rb
243
252
  - spec/component_manager_spec.rb
244
253
  - spec/annotation_model_spec.rb
245
254
  - spec/kde_sugar_spec.rb
@@ -1,412 +0,0 @@
1
- =begin
2
- Copyright (C) 2010 by Stefano Crocco
3
- stefano.crocco@alice.it
4
-
5
- This program is free software; you can redistribute it andor modify
6
- it under the terms of the GNU General Public License as published by
7
- the Free Software Foundation; either version 2 of the License, or
8
- (at your option) any later version.
9
-
10
- This program is distributed in the hope that it will be useful,
11
- but WITHOUT ANY WARRANTY; without even the implied warranty of
12
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
- GNU General Public License for more details.
14
-
15
- You should have received a copy of the GNU General Public License
16
- along with this program; if not, write to the
17
- Free Software Foundation, Inc.,
18
- 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
19
- =end
20
-
21
- require 'forwardable'
22
- require 'pathname'
23
- require 'facets/array/only'
24
-
25
- require 'ruber/editor/document'
26
- require 'ruber/plugin_like'
27
-
28
- module Ruber
29
-
30
- =begin rdoc
31
- List of all open documents
32
-
33
- It contains convenience methods to iterate on the open documents and to create
34
- them. Whenever possible, you should use them. In particular, when you need a document
35
- associated with a given file or URL, you should always use {#document}, so that
36
- if a document for that file is already installed, no new document will be created.
37
-
38
- If, for any reason, you need to create a document using {Document.new}, please
39
- don't forget to add the document to the list using {#add_document}.
40
- =end
41
- class DocumentList < Qt::Object
42
-
43
- include PluginLike
44
-
45
- include Enumerable
46
-
47
- =begin rdoc
48
- Signal emitted when a new document is created
49
-
50
- @param [Document] doc the new document
51
- =end
52
- signals 'document_created(QObject*)'
53
-
54
- =begin rdoc
55
- Signal emitted before a document is closed
56
-
57
- @param [Document] doc the document which is being closed
58
- =end
59
- signals 'closing_document(QObject*)'
60
-
61
- slots 'close_document(QObject*)', 'load_settings()'
62
-
63
- =begin rdoc
64
- @param [ComponentManager] _manager the component manager (unused)
65
- @param [PluginSpecification] psf the plugin specification object
66
- =end
67
- def initialize _manager, psf
68
- super Ruber[:app]
69
- initialize_plugin psf
70
- @docs = []
71
- end
72
-
73
- #DOCUMENT CREATION
74
-
75
- =begin rdoc
76
- Creates a new empty document
77
-
78
- The document is automatically added to the list and the {#document_created} signal
79
- is emitted
80
- @return [Ruber::Document] the created document
81
- =end
82
- def new_document
83
- doc = Document.new Ruber[:main_window]
84
- add_document doc
85
- emit document_created(doc)
86
- doc
87
- end
88
-
89
- =begin rdoc
90
- The document for a given file or url
91
-
92
- If there's no open document associated with the given file or url, depending on
93
- the value of _create_if_needed_ a new document associated with the file or url
94
- will be created. In this case, the {#document_created} signal will be emitted.
95
-
96
- @param [String, KDE::Url] file the file name or URL associated with the document.
97
- A relative file name will be expanded with respect to the current directory. A
98
- string containing a url will be interpreted as an url, not as a filename. If you
99
- need a document with a name which looks like an url, you can create an empty
100
- @KDE::Url@, then using @path=@ to set its path
101
- @param [Boolean] create_if_needed whether or not to create a document associated
102
- with _file_ if there isn't one
103
- @return [Document,nil] the document associated with _file_. If no such document
104
- exists and _create_if_needed_ is *false*, *nil* will be returned
105
- @raise [ArgumentError] if _file_ is a local file, there's
106
- no document for it, it doesn't exist and _create_if_needed_ is *true*. Note that
107
- this won't happen if _file_ is a remote file, even if it doesn't exist
108
- =end
109
- def document file, create_if_needed = true
110
- if file.is_a? String
111
- url = KDE::Url.new file
112
- url.path = File.expand_path(file) if url.relative?
113
- else url = file
114
- end
115
- doc = document_for_url file
116
- return doc if doc or !create_if_needed
117
- if !doc and create_if_needed
118
- if url.local_file?
119
- raise ArgumentError, "File #{url.path} doesn't exist" unless File.exist?(url.path)
120
- end
121
- doc = Document.new Ruber[:main_window], url
122
- add_document doc
123
- emit document_created(doc)
124
- end
125
- doc
126
- end
127
-
128
- =begin rdoc
129
- @return [Array<Document>] a list of open documents
130
- =end
131
- def documents
132
- @docs.dup
133
- end
134
- alias :to_a :documents
135
-
136
- =begin rdoc
137
- @return [Boolean] whether the document list is empty or not
138
- =end
139
- def empty?
140
- @docs.empty?
141
- end
142
-
143
- =begin rdoc
144
- @return [Integer] the number of documents in the list
145
- =end
146
- def size
147
- @docs.size
148
- end
149
- alias :length :size
150
-
151
- =begin rdoc
152
- Adds a new document to the list
153
-
154
- If you use {#new_document} and {#document} to create documents, you don't need to
155
- call this method.
156
-
157
- *Note:* this method doesn't check whether the document has already been added to
158
- the list. If so, the results may cause errors. Please, always make sure the document
159
- isn't already in the list before calling this.
160
-
161
- @param [Document, nil] doc the document to add. If *nil*, nothing is done
162
- @return [Document, nil] _doc_
163
- =end
164
- def add_document doc
165
- if doc
166
- connect doc, SIGNAL('closing(QObject*)'), self, SLOT('close_document(QObject*)')
167
- @docs << doc
168
- end
169
- end
170
-
171
- =begin rdoc
172
- Attempts to save the given documents
173
-
174
- What happens if a document can't be saved depends on the value of _stop_on_failure_:
175
- if it's *false*, documents which can't be saved are skipped, while if it's true,
176
- this method will return as soon as one document fails to save.
177
-
178
- *Note:* by can't be saved, we mean that the user chose to save a document but,
179
- for any reason, it couldn't be saved (for example this can happen if the user
180
- doesn't have write permission on the file, or if the disk is full). If the user
181
- decides not to save the file, instead, it is considered a success.
182
-
183
- @param [Array<Document>] docs an array with the documents to save
184
- @param [Boolean] stop_on_failure what to do when a document fails to save. If *true*,
185
- return immediately; if *false*, attempt to save the remaining documents
186
- @return [Array<Document>] an array with the documents which couldn't be saved. If
187
- _stop_on_failure_ is *false*, it contains only the documents for which saving failed;
188
- if _stop_on_failure_ is *true* it also contains the documents for which saving
189
- wasn't even attempted. If all documents were saved successfully, the array will
190
- be empty
191
- =end
192
- def save_documents docs, stop_on_failure = false
193
- failed = []
194
- docs.each_with_index do |d, i|
195
- success = d.save
196
- failed << d unless success
197
- if !success and stop_on_failure
198
- failed += docs[(i+1)..-1]
199
- break
200
- end
201
- end
202
- failed
203
- end
204
-
205
- =begin rdoc
206
- Saves the settings for all open documents
207
-
208
- @return [nil]
209
- =end
210
- def save_settings
211
- @docs.each{|d| d.save_settings}
212
- nil
213
- end
214
-
215
- #CLOSING DOCUMENTS
216
-
217
- =begin rdoc
218
- Removes a document from the list
219
-
220
- The {#closing_document} signal is emitted before removing the document.
221
- @param [Document] doc the document to remove. It must have been added to the list
222
- using {#add_document} (which is automatically called by {#document} and {#new_document})
223
- @return [nil]
224
- =end
225
- def close_document doc
226
- @docs.delete doc
227
- emit closing_document(doc)
228
- nil
229
- end
230
- private :close_document
231
-
232
- =begin rdoc
233
- Closes all the documents
234
-
235
- If there are modified files and _ask_ is *true*, the user will be asked whether
236
- he wants to save them (see {MainWindow#save_documents}). If he chooses to abort
237
- closing, nothing will be done
238
-
239
- @param [Boolean] ask if *true*, in case some files are modified, the user will
240
- be asked whether to save them. If *false*, no file will be saved
241
- @return [Boolean] *true* if the documents were closed and *false* otherwise
242
- =end
243
- def close_all ask = true
244
- docs = @docs.dup
245
- if !ask or Ruber[:main_window].save_documents docs
246
- docs.each {|d| d.close false}
247
- true
248
- else false
249
- end
250
- end
251
-
252
- #DOCUMENT ACCESS
253
-
254
- =begin rdoc
255
- The document corresponding to the given key
256
-
257
- How _key_ is interpreted depends on its class:
258
- * if it's an @Integer@, the document in the corresponding position in the list will
259
- be returned
260
- * if it's a @KDE::Url@, then the document associated with that url will be returned
261
- * if it's a @String@ starting with a @/@ (that is, an absolute path) then the
262
- document associated with that file will be returned
263
- * if it's a string not startng with a @/@, then the document with that
264
- @document_name@ will be returned
265
- @param [String,Integer,KDE::Url] key the key for the document
266
- @return [Document,nil] the document corresponding to _key_ or *nil* if no document
267
- corresponds to it
268
- @raise [TypeError] if _key_ is not a @String@, @Integer@ or @KDE::Url@
269
- =end
270
- def [] key
271
- case key
272
- when String
273
- if Pathname.new(key).absolute? then @docs.find{|d| d.path == key}
274
- else @docs.find{|d| d.document_name == key}
275
- end
276
- when KDE::Url
277
- @docs.find{|d| d.url == key}
278
- when Integer then @docs[key]
279
- else raise TypeError
280
- end
281
- end
282
-
283
- =begin rdoc
284
- Calls the block for each document
285
- @yield [Document] each document in turn
286
- @return [DocumentList,Enumerator] @self@ if called with a block; an @Enumerable@
287
- otherwise
288
- =end
289
- def each_document
290
- if block_given?
291
- @docs.each{|d| yield d}
292
- self
293
- else self.to_enum
294
- end
295
- end
296
- alias_method :each, :each_document
297
-
298
- =begin rdoc
299
- The document associated with a given file
300
-
301
- @param [String] file the name of the file. If it's relative, it will be considered
302
- relative to the current directory
303
- @return [Document,nil] the document associated with _file_ or *nil* if no such
304
- document exists
305
- =end
306
- def document_for_file file
307
- file = File.expand_path file
308
- @docs.find{|d| d.path == file}
309
- end
310
-
311
- =begin rdoc
312
- The document associated with a given URL
313
-
314
- @param [KDE::Url] url the url
315
- @return [Document,nil] the document associated with _url_ or *nil* if no such
316
- document exists
317
- =end
318
- def document_for_url url
319
- @docs.find{|d| d.url == url}
320
- end
321
-
322
- =begin rdoc
323
- The document with a given name
324
-
325
- @param [String] name the name of the document
326
- @return [Document,nil] the document with @document_name@ _name_ or *nil* if no
327
- document with that name exists
328
- =end
329
- def document_with_name name
330
- @docs.find{|d| d.document_name == name}
331
- end
332
-
333
- =begin rdoc
334
- The documents which are associated with a file
335
-
336
- _which_ can be used to restrict the list of documents to only those associated
337
- with local or remote files:
338
- * if _which_ is @:local@ only documents associated with local files will be returned;
339
- * if _which_ is @:remote@ only documents associated with remoted files will be returned;
340
- * if _which_ has any other value, both documents associated with local and with
341
- remote files will be returned
342
- @param [Object] which which kind of documents should be included in the list
343
- @return [Array<Document>] a list of documents associated with files, and restricted
344
- according to the value of _which_
345
- =end
346
- def documents_with_file which = :any
347
- @docs.select do |d|
348
- if d.has_file?
349
- case which
350
- when :local then d.url.local_file?
351
- when :remote then !d.url.local_file?
352
- else true
353
- end
354
- end
355
- end
356
- end
357
-
358
- #DOCUMENT QUERIES
359
-
360
- =begin rdoc
361
- Whether there's a document associated with a given file
362
-
363
- @param [String] file the name of the file (absolute or relative to the current
364
- directory)
365
- @return [Boolean] *true* if there's a document associated with _file_ and *false*
366
- otherwise
367
- =end
368
- def document_for_file? file
369
- file = File.expand_path file
370
- @docs.any?{|d| d.path == file}
371
- end
372
-
373
- =begin rdoc
374
- Whether there's a document associated with a given URL
375
-
376
- @param [@KDE::Url@] url the url
377
- @return [Boolean] *true* if there's a document associated with _url_ and *false*
378
- otherwise
379
- =end
380
- def document_for_url? url
381
- @docs.any?{|d| d.url == url}
382
- end
383
-
384
- =begin rdoc
385
- Whether there's a document with a given name
386
-
387
- @param [String] name of the document
388
- @return [Boolean] *true* if there's a document associated with _name_ and *false*
389
- otherwise
390
- =end
391
- def document_with_name? name
392
- @docs.any?{|d| d.document_name == name}
393
- end
394
-
395
- =begin rdoc
396
- Override of {PluginLike#query_close}
397
-
398
- It first calls the {DocumentProject#query_close query_close} of each document's
399
- own project, returning *false* as soon as one of them returns *false*, then
400
- attempts to save each document
401
-
402
- @return [Boolean] *true* if it is all right to go on closing Ruber and *false*
403
- otherwise
404
- =end
405
- def query_close
406
- @docs.each{|d| return false unless d.own_project.query_close}
407
- Ruber[:main_window].save_documents
408
- end
409
-
410
- end
411
-
412
- end