Class: RubyScriptProvider::Storage
- Inherits:
-
Object
- Object
- RubyScriptProvider::Storage
- Defined in:
- lib/rubyscriptprovider.rb
Overview
Wrapper for file access.
Constant Summary collapse
- YAML_EXTENSION =
'.yml'
Instance Method Summary collapse
- #choose_file ⇒ Object
- #delete(url) ⇒ Object
- #descriptions(url) ⇒ Object
- #dir_contents(url) ⇒ Object
- #dir_create(url) ⇒ Object
- #exists?(url) ⇒ Boolean
- #file_content(url) ⇒ Object
- #file_copy(source, dest, yaml = false) ⇒ Object
- #file_create(url, name) ⇒ Object
-
#get_method_names(url) ⇒ Object
try to find public methods from sexp tree.
-
#initialize(ctx) ⇒ Storage
constructor
A new instance of Storage.
- #is_dir?(url) ⇒ Boolean
- #is_readonly?(url) ⇒ Boolean
- #modified_time(url) ⇒ Object
- #rename(url, dest_url) ⇒ Object
- #write_text(url, text = "") ⇒ Object
Constructor Details
#initialize(ctx) ⇒ Storage
Returns a new instance of Storage.
254 255 256 257 |
# File 'lib/rubyscriptprovider.rb', line 254 def initialize(ctx) @ctx = ctx @sfa = create_service("com.sun.star.ucb.SimpleFileAccess") end |
Instance Method Details
#choose_file ⇒ Object
337 338 339 340 341 342 343 344 345 346 347 348 |
# File 'lib/rubyscriptprovider.rb', line 337 def choose_file scripts_dir = create_service("com.sun.star.util.PathSubstitution") .substituteVariables("$(user)/Scripts/#{LANGUAGE.downcase}", true) picker = create_service("com.sun.star.ui.dialogs.FilePicker") picker.appendFilter("All Files (*.*)", "*.*") picker.appendFilter( "#{LANGUAGE} Files (*#{RB_EXTENSION})", "*#{RB_EXTENSION}") picker.setCurrentFilter("All Files (*.*)") picker.setDisplayDirectory(scripts_dir) picker.setMultiSelectionMode(false) picker.getFiles[0] if picker.execute > 0 end |
#delete(url) ⇒ Object
279 280 281 282 |
# File 'lib/rubyscriptprovider.rb', line 279 def delete(url) @sfa.kill(url.to_s) return true end |
#descriptions(url) ⇒ Object
359 360 361 362 363 364 365 366 367 368 369 370 |
# File 'lib/rubyscriptprovider.rb', line 359 def descriptions(url) require 'yaml' ret = nil yaml_url = url.join(url.dirname, url.basename(RB_EXTENSION) + YAML_EXTENSION) if exists?(yaml_url) text = file_content(yaml_url) ret = YAML.load(text) rescue nil end ret = {} unless ret return ret end |
#dir_contents(url) ⇒ Object
284 285 286 287 |
# File 'lib/rubyscriptprovider.rb', line 284 def dir_contents(url) return @sfa.getFolderContents(url.to_s, true) if exists?(url) return [] end |
#dir_create(url) ⇒ Object
289 290 291 |
# File 'lib/rubyscriptprovider.rb', line 289 def dir_create(url) @sfa.createFolder(url.to_s) unless exists?(url) end |
#exists?(url) ⇒ Boolean
263 264 265 |
# File 'lib/rubyscriptprovider.rb', line 263 def exists?(url) return @sfa.exists(url.to_s) end |
#file_content(url) ⇒ Object
350 351 352 353 354 355 356 357 |
# File 'lib/rubyscriptprovider.rb', line 350 def file_content(url) lines = [] text_input = create_service("com.sun.star.io.TextInputStream") text_input.setInputStream(@sfa.openFileRead(url.to_s)) lines << text_input.readLine until text_input.isEOF text_input.closeInput return lines.join("\n") end |
#file_copy(source, dest, yaml = false) ⇒ Object
298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 |
# File 'lib/rubyscriptprovider.rb', line 298 def file_copy(source, dest, yaml=false) source = source.to_s dest = dest.to_s if @sfa.exists(source) source_input = @sfa.openFileRead(source) @sfa.kill(dest) if @sfa.exists(dest) @sfa.writeFile(dest, source_input) source_input.closeInput if yaml yaml_source = source[0..-File.extname(source).length-1] + YAML_EXTENSION if @sfa.exists(yaml_source) yaml_dest = dest[0..-File.extname(dest).length-1] + YAML_EXTENSION file_copy(yaml_source, yaml_dest) end end end end |
#file_create(url, name) ⇒ Object
293 294 295 296 |
# File 'lib/rubyscriptprovider.rb', line 293 def file_create(url, name) dir_create(url) write_text(url.join(name)) end |
#get_method_names(url) ⇒ Object
try to find public methods from sexp tree
373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 |
# File 'lib/rubyscriptprovider.rb', line 373 def get_method_names(url) require 'ripper' text = file_content(url) result = Ripper.sexp(text, url.to_s) method_defs = [] if result.length == 2 && result[0] == :program is_public = true result[1].each do |item| case item[0] when :def ident = find_item(item, :@ident) if ident if is_public method_defs << ident else method_defs.delete(ident) end end when :command ident = find_item(item, :@ident) case ident when "private", "protected", "public" block = find_item(item, :args_add_block) items = get_symbol_literals(block) if ident == "public" method_defs.concat(items) else items.each do |i| method_defs.delete(i) end end end when :var_ref ident = find_item(item, :@ident) is_public = ident == "public" if ident end end method_defs.uniq! end return method_defs end |
#is_dir?(url) ⇒ Boolean
267 268 269 |
# File 'lib/rubyscriptprovider.rb', line 267 def is_dir?(url) return @sfa.isFolder(url.to_s) end |
#is_readonly?(url) ⇒ Boolean
271 272 273 |
# File 'lib/rubyscriptprovider.rb', line 271 def is_readonly?(url) return @sfa.isReadOnly(url.to_s) end |
#modified_time(url) ⇒ Object
259 260 261 |
# File 'lib/rubyscriptprovider.rb', line 259 def modified_time(url) return @sfa.getDateTimeModified(url.to_s) end |
#rename(url, dest_url) ⇒ Object
275 276 277 |
# File 'lib/rubyscriptprovider.rb', line 275 def rename(url, dest_url) @sfa.move(url, dest_url) end |
#write_text(url, text = "") ⇒ Object
318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 |
# File 'lib/rubyscriptprovider.rb', line 318 def write_text(url, text="") file_url = url.to_s text_output = create_service("com.sun.star.io.TextOutputStream") if url.start_with?(DOC_PROTOCOL) pipe = create_service("com.sun.star.io.Pipe") text_output.setOutputStream(pipe) text_output.writeString(text) text_output.closeOutput @sfa.writeFile(file_url, pipe) pipe.closeInput else file_output = @sfa.openFileWrite(file_url) text_output.setOutputStream(file_output) text_output.writeString(text) text_output.flush() file_output.closeOutput end end |