Class: JIJI::Dao::FileSystemDao

Inherits:
Object
  • Object
show all
Defined in:
lib/jiji/dao/file_system_dao.rb

Overview

ファイルシステムにデータを保存するDAO

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(base) ⇒ FileSystemDao

コンストラクタ

base

保存先の基点となるディレクトリ



13
14
15
# File 'lib/jiji/dao/file_system_dao.rb', line 13

def initialize( base )
  @base = base
end

Instance Attribute Details

#baseObject (readonly)

データ保存先の基点となるディレクトリ



105
106
107
# File 'lib/jiji/dao/file_system_dao.rb', line 105

def base
  @base
end

Instance Method Details

#add(path, body) ⇒ Object

ファイルを追加する。



38
39
40
41
42
# File 'lib/jiji/dao/file_system_dao.rb', line 38

def add( path, body )
  validate_path( path, :exist_parent, :not_exist )
  put( path, body )
  :success
end

#copy(from, to) ⇒ Object

ファイル/フォルダをコピーする



84
85
86
87
88
89
# File 'lib/jiji/dao/file_system_dao.rb', line 84

def copy( from, to )
  from = validate_path( from, :exist )
  to = validate_path( to )
  FileUtils.cp_r from, to
  :success
end

#delete(path) ⇒ Object

ファイルまたはディレクトリを破棄する



54
55
56
57
58
59
60
61
62
63
64
# File 'lib/jiji/dao/file_system_dao.rb', line 54

def delete( path )
  path = validate_path( path, :exist )
  if ( File.file? path )
    FileLock.new(path).writelock {|f|
      FileUtils.rm_rf path
    }
  else
    FileUtils.rm_rf path
  end
  :success
end

#directory?(path) ⇒ Boolean

ディレクトリかどうか評価する。

Returns:

  • (Boolean)


99
100
101
102
# File 'lib/jiji/dao/file_system_dao.rb', line 99

def directory?(path)
  path = validate_path( path, :exist )
  File.directory?(path)
end

#get(path) ⇒ Object

パスが示すファイルのデータを取得する。



18
19
20
21
22
23
# File 'lib/jiji/dao/file_system_dao.rb', line 18

def get( path )
  path = validate_path( path, :exist, :is_file )
  return FileLock.new(path).readlock {|f|
    f.read
  }
end

#list(path = "", recursive = false) ⇒ Object

パスが示すフォルダ配下の一覧を取得する。



26
27
28
29
30
31
32
33
34
35
# File 'lib/jiji/dao/file_system_dao.rb', line 26

def list( path="", recursive=false )
  path = validate_path( path, :exist, :is_directory )
  Dir.glob( "#{path}/#{recursive ? '**/*' : '*' }" ).map {|item|
    next if File.basename(item) =~ /^\..*/
    { :path  =>item.sub( /^#{@base}\//, "" ),
      :name  =>File.basename(item),
      :update=>File.mtime(item).to_i,
      :type  =>File.directory?(item) ? :directory : :file}
  }.sort_by {|item| "#{item[:type]}/#{item[:path]}" }
end

#mkcol(path) ⇒ Object

フォルダを作成する



92
93
94
95
96
# File 'lib/jiji/dao/file_system_dao.rb', line 92

def mkcol(path)
  path = validate_path( path, :exist_parent, :not_exist )
  FileUtils.mkdir_p path
  :success
end

#move(from, to) ⇒ Object

ファイル/フォルダを移動する



68
69
70
71
72
73
# File 'lib/jiji/dao/file_system_dao.rb', line 68

def move( from, to )
  from = validate_path( from, :exist )
  to = validate_path( to, :exist, :is_directory )
  FileUtils.mv from, to
  :success
end

#put(path, body) ⇒ Object

ファイルを追加/更新する。



45
46
47
48
49
50
51
# File 'lib/jiji/dao/file_system_dao.rb', line 45

def put( path, body )
  path = validate_path( path, :exist_parent, :is_file )
  FileLock.new(path).writelock {|f|
    f << body
  }
  :success
end

#rename(from, to) ⇒ Object

ファイル/フォルダをリネームする



76
77
78
79
80
81
# File 'lib/jiji/dao/file_system_dao.rb', line 76

def rename( from, to )
  from = validate_path( from, :exist )
  to = validate_path( to, :not_exist )
  FileUtils.mv from, to
  :success
end