Class: Gloo::Objs::FileHandle

Inherits:
Core::Obj show all
Defined in:
lib/gloo/objs/system/file_handle.rb

Constant Summary collapse

KEYWORD =
'file'.freeze
KEYWORD_SHORT =
'dir'.freeze

Constants inherited from Core::Baseo

Core::Baseo::NOT_IMPLEMENTED_ERR

Instance Attribute Summary

Attributes inherited from Core::Obj

#children, #parent, #value

Attributes inherited from Core::Baseo

#name

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Core::Obj

#add_child, #add_children_on_create?, #add_default_children, can_create?, #can_receive_message?, #child_count, #contains_child?, #delete_children, #dispatch, #display_value, #find_add_child, #find_child, help, inherited, #initialize, #msg_reload, #msg_unload, #multiline_value?, #pn, #remove_child, #root?, #send_message, #set_parent, #set_value, #type_display, #value_display, #value_is_array?, #value_is_blank?, #value_string?

Methods inherited from Core::Baseo

#initialize, #type_display

Constructor Details

This class inherits a constructor from Gloo::Core::Obj

Class Method Details

.messagesObject

Get a list of message names that this object receives.



36
37
38
39
40
41
42
# File 'lib/gloo/objs/system/file_handle.rb', line 36

def self.messages
  basic = %w[read write]
  checks = %w[check_exists check_is_file check_is_dir]
  search = %w[find_match]
  show = %w[show page open]
  return super + basic + show + checks + search
end

.short_typenameObject

The short name of the object type.



25
26
27
# File 'lib/gloo/objs/system/file_handle.rb', line 25

def self.short_typename
  return KEYWORD_SHORT
end

.typenameObject

The name of the object type.



18
19
20
# File 'lib/gloo/objs/system/file_handle.rb', line 18

def self.typename
  return KEYWORD
end

Instance Method Details

#msg_check_existsObject

Check to see if the file exists.



107
108
109
110
# File 'lib/gloo/objs/system/file_handle.rb', line 107

def msg_check_exists
  result = File.exist? value
  @engine.heap.it.set_to result
end

#msg_check_is_dirObject

Check to see if the file is a directory.



123
124
125
126
# File 'lib/gloo/objs/system/file_handle.rb', line 123

def msg_check_is_dir
  result = File.directory? value
  @engine.heap.it.set_to result
end

#msg_check_is_fileObject

Check to see if the file is a file.



115
116
117
118
# File 'lib/gloo/objs/system/file_handle.rb', line 115

def msg_check_is_file
  result = File.file? value
  @engine.heap.it.set_to result
end

#msg_find_matchObject

Look for any file matching pattern.



131
132
133
134
# File 'lib/gloo/objs/system/file_handle.rb', line 131

def msg_find_match
  result = !Dir.glob( value ).empty?
  @engine.heap.it.set_to result
end

#msg_openObject

Open the file in the default application for the file type.



47
48
49
50
51
52
53
# File 'lib/gloo/objs/system/file_handle.rb', line 47

def msg_open
  return unless value && File.exist?( value )

  cmd = Gloo::Core::GlooSystem.open_for_platform
  cmd_with_param = "#{cmd} \"#{value}\""
  `#{cmd_with_param}`
end

#msg_pageObject

Show the contents of the file, paginated.



58
59
60
61
62
63
# File 'lib/gloo/objs/system/file_handle.rb', line 58

def msg_page
  return unless value && File.file?( value )

  pager = TTY::Pager.new
  pager.page( path: value )
end

#msg_readObject

Read the contents of the file into the object.



77
78
79
80
81
82
83
84
85
86
87
88
# File 'lib/gloo/objs/system/file_handle.rb', line 77

def msg_read
  return unless value && File.file?( value )

  data = File.read( value )
  if @params&.token_count&.positive?
    pn = Gloo::Core::Pn.new( @engine, @params.first )
    o = pn.resolve
    o.set_value data
  else
    @engine.heap.it.set_to data
  end
end

#msg_showObject

Show the contents of the file.



68
69
70
71
72
# File 'lib/gloo/objs/system/file_handle.rb', line 68

def msg_show
  return unless value && File.file?( value )

  puts File.read( value )
end

#msg_writeObject

Write the given data out to the file.



93
94
95
96
97
98
99
100
101
102
# File 'lib/gloo/objs/system/file_handle.rb', line 93

def msg_write
  data = ''
  return unless value

  if @params&.token_count&.positive?
    expr = Gloo::Expr::Expression.new( @engine, @params.tokens )
    data = expr.evaluate
  end
  File.write( value, data )
end