Class: Rufio::NativeScanner

Inherits:
Object
  • Object
show all
Defined in:
lib/rufio/native_scanner.rb,
lib/rufio/native_scanner_zig.rb

Overview

NativeScanner - Rubyベースのディレクトリスキャナー(ネイティブライブラリは削除済み)

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.available_librariesObject

利用可能なライブラリをチェック(Rubyのみ)



257
258
259
260
261
# File 'lib/rufio/native_scanner.rb', line 257

def available_libraries
  {
    ruby: true
  }
end

.modeObject

現在のモード取得



252
253
254
# File 'lib/rufio/native_scanner.rb', line 252

def mode
  @mode ||= 'ruby'
end

.mode=(value) ⇒ Object

autoモードの優先順位を更新(zig > ruby)



246
247
248
249
# File 'lib/rufio/native_scanner.rb', line 246

def mode=(value)
  @mode = 'ruby'
  @current_library = nil
end

.scan_directory(path) ⇒ Object

ディレクトリをスキャン



264
265
266
# File 'lib/rufio/native_scanner.rb', line 264

def scan_directory(path)
  scan_with_ruby(path)
end

.scan_directory_fast(path, max_entries = 1000) ⇒ Object

高速スキャン(エントリ数制限付き)



269
270
271
# File 'lib/rufio/native_scanner.rb', line 269

def scan_directory_fast(path, max_entries = 1000)
  scan_fast_with_ruby(path, max_entries)
end

.scan_directory_fast_with_zig(path, max_entries) ⇒ Object

zigで高速スキャン(ポーリング方式)



251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
# File 'lib/rufio/native_scanner_zig.rb', line 251

def scan_directory_fast_with_zig(path, max_entries)
  raise StandardError, "Directory does not exist: #{path}" unless Dir.exist?(path)

  scanner = NativeScannerZigCore.new
  begin
    scanner.scan_fast_async(path, max_entries)
    entries = scanner.wait(timeout: 60)

    entries.map do |entry|
      {
        name: entry[:name],
        type: entry[:is_dir] ? 'directory' : 'file',
        size: entry[:size],
        mtime: entry[:mtime],
        mode: 0,
        executable: entry[:executable],
        hidden: entry[:hidden]
      }
    end
  ensure
    scanner.close
  end
rescue StandardError => e
  raise StandardError, "Zig fast scan failed: #{e.message}"
end

.scan_directory_with_zig(path) ⇒ Object

zigスキャン(ポーリング方式)



222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
# File 'lib/rufio/native_scanner_zig.rb', line 222

def scan_directory_with_zig(path)
  raise StandardError, "Directory does not exist: #{path}" unless Dir.exist?(path)

  # 非同期スキャナーを作成してスキャン
  scanner = NativeScannerZigCore.new
  begin
    scanner.scan_async(path)
    entries = scanner.wait(timeout: 60)

    # 結果の形式を統一(type フィールドを追加)
    entries.map do |entry|
      {
        name: entry[:name],
        type: entry[:is_dir] ? 'directory' : 'file',
        size: entry[:size],
        mtime: entry[:mtime],
        mode: 0,
        executable: entry[:executable],
        hidden: entry[:hidden]
      }
    end
  ensure
    scanner.close
  end
rescue StandardError => e
  raise StandardError, "Zig scan failed: #{e.message}"
end

.versionObject

バージョン情報取得



274
275
276
# File 'lib/rufio/native_scanner.rb', line 274

def version
  "Ruby #{RUBY_VERSION}"
end

Instance Method Details

#original_available_librariesObject

available_librariesを更新



320
# File 'lib/rufio/native_scanner_zig.rb', line 320

alias_method :original_available_libraries, :available_libraries

#original_mode=Object

zigモードを追加



204
# File 'lib/rufio/native_scanner_zig.rb', line 204

alias_method :original_mode=, :mode=

#original_scan_directoryObject

scan_directoryメソッドを拡張



278
# File 'lib/rufio/native_scanner_zig.rb', line 278

alias_method :original_scan_directory, :scan_directory

#original_scan_directory_fastObject

scan_directory_fastメソッドを拡張



292
# File 'lib/rufio/native_scanner_zig.rb', line 292

alias_method :original_scan_directory_fast, :scan_directory_fast

#original_versionObject

versionメソッドを拡張



306
# File 'lib/rufio/native_scanner_zig.rb', line 306

alias_method :original_version, :version