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
FILE_NAME_ERR =
'file and path name expected'.freeze
FILE_MISSING_ERR =
'file not found'.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, #child_index, #contains_child?, #delete_children, #dispatch, #display_value, #find_add_child, #find_child, #find_child_resolve_alias, #find_child_value, help, inherited, #initialize, #is_alias?, #is_container?, #is_function?, #msg_blank?, #msg_contains?, #msg_reload, #msg_unload, #multiline_value?, #pn, #remove_child, #render, #root?, #send_message, #set_parent, #set_value, #sql_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

.hash_for_file(file_path) ⇒ Object

Get the SHA256 hash of the file contents.



193
194
195
196
197
198
# File 'lib/gloo/objs/system/file_handle.rb', line 193

def self.hash_for_file( file_path )
  require 'digest'
  file_data = File.read( file_path )
  file_hash = Digest::SHA256.hexdigest( file_data )
  return file_hash
end

.messagesObject

Get a list of message names that this object receives.



39
40
41
42
43
44
45
# File 'lib/gloo/objs/system/file_handle.rb', line 39

def self.messages
  basic = %w[read write delete get_name get_ext get_parent get_sha256]
  checks = %w[exists? is_file? 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.



28
29
30
# File 'lib/gloo/objs/system/file_handle.rb', line 28

def self.short_typename
  return KEYWORD_SHORT
end

.typenameObject

The name of the object type.



21
22
23
# File 'lib/gloo/objs/system/file_handle.rb', line 21

def self.typename
  return KEYWORD
end

Instance Method Details

#check_file_exists?Boolean

Check to see if the file exists. Show error if not.

Returns:



204
205
206
207
208
209
210
211
212
213
214
215
216
# File 'lib/gloo/objs/system/file_handle.rb', line 204

def check_file_exists?
  if value.blank?
    @engine.log.error FILE_NAME_ERR
    return false
  end

  unless File.exist?( value )
    @engine.log.error FILE_MISSING_ERR
    return false
  end

  return true
end

#msg_deleteObject

Delete the file.



109
110
111
112
# File 'lib/gloo/objs/system/file_handle.rb', line 109

def msg_delete
  return unless value
  File.delete( value )
end

#msg_exists?Boolean

Check to see if the file exists.

Returns:



117
118
119
120
# File 'lib/gloo/objs/system/file_handle.rb', line 117

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

#msg_find_matchObject

Look for any file matching pattern.



141
142
143
144
# File 'lib/gloo/objs/system/file_handle.rb', line 141

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

#msg_get_extObject

Get the file’s extension.



161
162
163
164
165
166
167
# File 'lib/gloo/objs/system/file_handle.rb', line 161

def msg_get_ext
  if value.blank?
    @engine.heap.it.set_to ''
  else
    @engine.heap.it.set_to File.extname( value )
  end
end

#msg_get_nameObject

Get the name of the file.



149
150
151
152
153
154
155
156
# File 'lib/gloo/objs/system/file_handle.rb', line 149

def msg_get_name
  if value.blank?
    @engine.heap.it.set_to ''
  else
    file_name = File.basename( value, File.extname( value ) )
    @engine.heap.it.set_to file_name
  end
end

#msg_get_parentObject

Get the parent directory of the file.



172
173
174
175
176
177
178
# File 'lib/gloo/objs/system/file_handle.rb', line 172

def msg_get_parent
  if value.blank?
    @engine.heap.it.set_to ''
  else
    @engine.heap.it.set_to File.dirname( value )
  end
end

#msg_get_sha256Object

Get the SHA256 hash of the file contents.



183
184
185
186
187
188
# File 'lib/gloo/objs/system/file_handle.rb', line 183

def msg_get_sha256
  return unless check_file_exists?

  file_hash = FileHandle.hash_for_file( value )
  @engine.heap.it.set_to file_hash
end

#msg_is_dir?Boolean

Check to see if the file is a directory.

Returns:



133
134
135
136
# File 'lib/gloo/objs/system/file_handle.rb', line 133

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

#msg_is_file?Boolean

Check to see if the file is a file.

Returns:



125
126
127
128
# File 'lib/gloo/objs/system/file_handle.rb', line 125

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

#msg_openObject

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



50
51
52
53
54
55
56
# File 'lib/gloo/objs/system/file_handle.rb', line 50

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.



61
62
63
64
65
# File 'lib/gloo/objs/system/file_handle.rb', line 61

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

  system "less #{value}"
end

#msg_readObject

Read the contents of the file into the object.



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

def msg_read
  return unless check_file_exists?

  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.



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

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

  puts File.read( value )
end

#msg_writeObject

Write the given data out to the file.



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

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