Module: SMB::ClientHelper

Included in:
Client
Defined in:
lib/smb/client/client_helper.rb,
lib/smb/client/ls_item.rb

Overview

Helper methods to get simpler access to smbclient’s capabilities

Defined Under Namespace

Classes: LsItem

Instance Method Summary collapse

Instance Method Details

#del(path, raise = true) ⇒ Boolean Also known as: rm

Delete a remote file

Parameters:

  • path (String)

    The remote file to be deleted

  • raise (Boolean) (defaults to: true)

    raise raise Error or just return false

Returns:

  • (Boolean)

    true on success



96
97
98
99
100
101
102
103
# File 'lib/smb/client/client_helper.rb', line 96

def del(path, raise = true)
  path = '"' + path + '"' if path.include? ' '
  exec 'del ' + path
  true
rescue Client::RuntimeError => e
  raise e if raise
  false
end

#exist?(mask) ⇒ Boolean

Returns ‘true` if mask exist on server

Parameters:

  • mask (String)

    Mask to search for

Returns:

  • (Boolean)

    TrueClass if mask exist



149
150
151
152
# File 'lib/smb/client/client_helper.rb', line 149

def exist?(mask)
  ls_items = ls mask, false
  !ls_items.empty?
end

#get(from, to = nil, overwrite = false, raise = true) ⇒ String

Receive a file from the smb server to local. If to was not passed, a tempfile will be generated.

Parameters:

  • from (String)

    The remote file to be read

  • to (String) (defaults to: nil)

    local file path to be created

  • overwrite (Boolean) (defaults to: false)

    Overwrite if exist locally?

  • raise (Boolean) (defaults to: true)

    raise Error or just return false

Returns:

  • (String)

    path to local file



115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
# File 'lib/smb/client/client_helper.rb', line 115

def get(from, to = nil, overwrite = false, raise = true)
  # Create a new tempfile but delete it
  # The tempfile.path should be free to use now
  tempfile = Tempfile.new
  to ||= tempfile.path
  tempfile.unlink

  if !overwrite && File.exist?(to)
    raise Client::RuntimeError, "File [#{to}] already exist locally"
  end
  from = '"' + from + '"' if from.include? ' '
  exec 'get ' + from + ' ' + to
  to
rescue Client::RuntimeError => e
  raise e if raise
  false
end

#ls(mask = '', raise = true) ⇒ Array Also known as: dir

List contents of a remote directory false, an empty array will be returned

Parameters:

  • mask (String) (defaults to: '')

    The matching mask

  • raise (Boolean) (defaults to: true)

    If set, an error will be raised. If set to

Returns:

  • (Array)

    List of mask matching LsItems



14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/smb/client/client_helper.rb', line 14

def ls(mask = '', raise = true)
  ls_items = []
  mask = '"' + mask + '"' if mask.include? ' '
  output = exec 'ls ' + mask
  output.lines.each do |line|
    ls_item = LsItem.from_line(line)
    ls_items << ls_item if ls_item
  end
  ls_items
rescue Client::RuntimeError => e
  raise e if raise
  []
end

#mkdir(path, raise = true) ⇒ Boolean

Creates a new directory on the server

Parameters:

  • path (String)

    The path to be created

  • raise (Boolean) (defaults to: true)

    raise Error or just return false

Returns:

  • (Boolean)

    true on success



35
36
37
38
39
40
41
42
# File 'lib/smb/client/client_helper.rb', line 35

def mkdir(path, raise = true)
  path = '"' + path + '"' if path.include? ' '
  exec 'mkdir ' + path
  true
rescue Client::RuntimeError => e
  raise e if raise
  false
end

#put(from, to, overwrite = false, raise = true) ⇒ Boolean

Upload a local file

Parameters:

  • from (String)

    The source file path (on local machine)

  • to (String)

    The destination file path

  • overwrite (Boolean) (defaults to: false)

    Overwrite if exist on server?

  • raise (Boolean) (defaults to: true)

    raise Error or just return false

Returns:

  • (Boolean)

    true on success



63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/smb/client/client_helper.rb', line 63

def put(from, to, overwrite = false, raise = true)
  ls_items = ls to, false
  if !overwrite && !ls_items.empty?
    raise Client::RuntimeError, "File [#{to}] already exist"
  end
  from = '"' + from + '"' if from.include? ' '
  to = '"' + to + '"' if to.include? ' '
  exec 'put ' + from + ' ' + to
  true
rescue Client::RuntimeError => e
  raise e if raise
  false
end

#read(from, overwrite = false, raise = true) ⇒ String

Reads a remote file and return its content

Parameters:

  • from (String)

    The file to be read from server

  • overwrite (Boolean) (defaults to: false)

    Overwrite if exist locally?

  • raise (Boolean) (defaults to: true)

    raise Error or just return false

Returns:

  • (String)

    The content of the remote file



138
139
140
141
142
143
144
# File 'lib/smb/client/client_helper.rb', line 138

def read(from, overwrite = false, raise = true)
  tempfile = Tempfile.new
  to = tempfile.path
  tempfile.unlink
  get from, to, overwrite, raise
  File.read to
end

#rmdir(path, raise = true) ⇒ Boolean

Removes a directory on the server

Parameters:

  • path (String)

    The path to be removed

  • raise (TrueClass/FalseClass) (defaults to: true)

    raise Error or just return false

Returns:

  • (Boolean)

    true on success



48
49
50
51
52
53
54
55
# File 'lib/smb/client/client_helper.rb', line 48

def rmdir(path, raise = true)
  path = '"' + path + '"' if path.include? ' '
  exec 'rmdir ' + path
  true
rescue Client::RuntimeError => e
  raise e if raise
  false
end

#write(content, to, overwrite = false, raise = true) ⇒ Boolean

Writes content to remote file

Parameters:

  • content (String)

    The content to be written

  • to (String)

    The destination file path

  • overwrite (Boolean) (defaults to: false)

    Overwrite if exist on server?

  • raise (Boolean) (defaults to: true)

    raise Error or just return false

Returns:

  • (Boolean)

    true on success



83
84
85
86
87
88
89
90
# File 'lib/smb/client/client_helper.rb', line 83

def write(content, to, overwrite = false, raise = true)
  # This is just a hack around +put+
  tempfile = Tempfile.new
  tempfile.write content
  tempfile.close

  put tempfile.path, to, overwrite, raise
end